AnonSec Team
Server IP : 161.35.85.9  /  Your IP : 216.73.217.134
Web Server : nginx/1.30.1
System : Linux cheapdeb-ams3 7.0.9+deb14-amd64 #1 SMP PREEMPT_DYNAMIC Debian 7.0.9-1 (2026-05-22) x86_64
User : root ( 0)
PHP Version : 8.2.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/java/../python3/../python/../python/../java/../java/../doc/python2/../fish/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /usr/share/java/../python3/../python/../python/../java/../java/../doc/python2/../fish/relnotes.html
<!DOCTYPE html>

<html lang="en" data-content_root="./">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Release notes &#8212; fish-shell 4.7.1 documentation</title>
    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4da8bbd6" />
    <link rel="stylesheet" type="text/css" href="_static/pydoctheme.css?v=f89b4716" />
    <script src="_static/documentation_options.js?v=36689d04"></script>
    <script src="_static/doctools.js?v=fd6eb6e6"></script>
    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="Terminal Compatibility" href="terminal-compatibility.html" />
    <link rel="prev" title="Design" href="design.html" />
    <link rel="shortcut icon" type="image/png" href="_static/fish.png" />
     

  </head><body><div id="fmain">  
    <div class="related" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
    <li><img src="_static/fish.png" alt=""
             style="width: 80px; height: 80px; vertical-align: middle; margin-top: -1px"/></li>
    <li><a href="https://fishshell.com/">fish-shell</a> &#187;</li>
    
    <a href="index.html">fish-shell 4.7.1 documentation</a> &#187;
    

        <li class="nav-item nav-item-this"><a href="">Release notes</a></li>
    <li class="right">
        

    <div class="inline-search" role="search">
        <form class="inline-search" action="search.html" method="get">
          <input placeholder="Quick search" type="text" name="q" />
          <input type="submit" value="Go" />
          <input type="hidden" name="check_keywords" value="yes" />
          <input type="hidden" name="area" value="default" />
        </form>
    </div>
    </li>
    
    <div id="old-docs-notice" style="display: none">
        This documents an old version of fish.
        <a href="../current/">See the latest release.</a>
    </div>

      </ul>
    </div>    

    <div class="document">
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
<div>
<h3><a href="index.html">Documents</a></h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">Frequently asked questions</a></li>
<li class="toctree-l1"><a class="reference internal" href="interactive.html">Interactive use</a></li>
<li class="toctree-l1"><a class="reference internal" href="language.html">The fish language</a></li>
<li class="toctree-l1"><a class="reference internal" href="commands.html">Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="fish_for_bash_users.html">Fish for bash users</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="completions.html">Writing your own completions</a></li>
<li class="toctree-l1"><a class="reference internal" href="prompt.html">Writing your own prompt</a></li>
<li class="toctree-l1"><a class="reference internal" href="design.html">Design</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="terminal-compatibility.html">Terminal Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing To Fish</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
</ul>

</div>
<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h4><a href="index.html">Sections</a></h4>
<ul>
<li><a class="reference internal" href="#">Release notes</a><ul>
<li><a class="reference internal" href="#fish-4-7-1-released-may-08-2026">fish 4.7.1 (released May 08, 2026)</a></li>
<li><a class="reference internal" href="#fish-4-7-0-released-may-05-2026">fish 4.7.0 (released May 05, 2026)</a><ul>
<li><a class="reference internal" href="#deprecations-and-removed-features">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#interactive-improvements">Interactive improvements</a></li>
<li><a class="reference internal" href="#other-improvements">Other improvements</a></li>
<li><a class="reference internal" href="#for-distributors-and-developers">For distributors and developers</a></li>
<li><a class="reference internal" href="#regression-fixes">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-6-0-released-march-28-2026">fish 4.6.0 (released March 28, 2026)</a><ul>
<li><a class="reference internal" href="#notable-improvements-and-fixes">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id1">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id2">Interactive improvements</a></li>
<li><a class="reference internal" href="#improved-terminal-support">Improved terminal support</a></li>
<li><a class="reference internal" href="#id3">Other improvements</a></li>
<li><a class="reference internal" href="#id4">For distributors and developers</a></li>
<li><a class="reference internal" href="#id5">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-5-0-released-february-17-2026">fish 4.5.0 (released February 17, 2026)</a><ul>
<li><a class="reference internal" href="#id6">Interactive improvements</a></li>
<li><a class="reference internal" href="#id7">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id8">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-4-0-released-february-03-2026">fish 4.4.0 (released February 03, 2026)</a><ul>
<li><a class="reference internal" href="#id9">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id10">Interactive improvements</a></li>
<li><a class="reference internal" href="#new-or-improved-bindings">New or improved bindings</a></li>
<li><a class="reference internal" href="#id11">Improved terminal support</a></li>
<li><a class="reference internal" href="#id12">For distributors and developers</a></li>
<li><a class="reference internal" href="#id13">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-3-3-released-january-07-2026">fish 4.3.3 (released January 07, 2026)</a></li>
<li><a class="reference internal" href="#fish-4-3-2-released-december-30-2025">fish 4.3.2 (released December 30, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-3-1-released-december-28-2025">fish 4.3.1 (released December 28, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-3-0-released-december-28-2025">fish 4.3.0 (released December 28, 2025)</a><ul>
<li><a class="reference internal" href="#id14">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#scripting-improvements">Scripting improvements</a></li>
<li><a class="reference internal" href="#id15">Interactive improvements</a></li>
<li><a class="reference internal" href="#id16">New or improved bindings</a></li>
<li><a class="reference internal" href="#id17">Improved terminal support</a></li>
<li><a class="reference internal" href="#id18">For distributors and developers</a></li>
<li><a class="reference internal" href="#id19">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-2-1-released-november-13-2025">fish 4.2.1 (released November 13, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-2-0-released-november-10-2025">fish 4.2.0 (released November 10, 2025)</a><ul>
<li><a class="reference internal" href="#id20">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id21">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id22">Interactive improvements</a></li>
<li><a class="reference internal" href="#id23">For distributors and developers</a></li>
<li><a class="reference internal" href="#id24">Regression fixes:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-1-2-released-october-7-2025">fish 4.1.2 (released October 7, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-1-1-released-september-30-2025">fish 4.1.1 (released September 30, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-1-0-released-september-27-2025">fish 4.1.0 (released September 27, 2025)</a><ul>
<li><a class="reference internal" href="#id25">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id26">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id27">Scripting improvements</a></li>
<li><a class="reference internal" href="#id28">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id29">New or improved bindings</a></li>
<li><a class="reference internal" href="#completions">Completions</a></li>
<li><a class="reference internal" href="#id30">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id31">Other improvements</a></li>
<li><a class="reference internal" href="#for-distributors">For distributors</a></li>
<li><a class="reference internal" href="#changes-to-self-installing-builds">Changes to self-installing builds</a></li>
<li><a class="reference internal" href="#changes-to-gettext-localization">Changes to gettext localization</a></li>
<li><a class="reference internal" href="#changes-to-the-argparse-builtin">Changes to the <span class="xref std std-doc">argparse</span> builtin</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-0-9-released-september-27-2025">fish 4.0.9 (released September 27, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-0-8-released-september-18-2025">fish 4.0.8 (released September 18, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-0-6-released-september-12-2025">fish 4.0.6 (released September 12, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-0-2-released-april-20-2025">fish 4.0.2 (released April 20, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-0-1-released-march-12-2025">fish 4.0.1 (released March 12, 2025)</a></li>
<li><a class="reference internal" href="#fish-4-0-0-released-february-27-2025">fish 4.0.0 (released February 27, 2025)</a><ul>
<li><a class="reference internal" href="#notable-backwards-incompatible-changes">Notable backwards-incompatible changes</a></li>
<li><a class="reference internal" href="#id32">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id33">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id34">Scripting improvements</a></li>
<li><a class="reference internal" href="#id35">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id36">New or improved bindings</a></li>
<li><a class="reference internal" href="#id37">Completions</a></li>
<li><a class="reference internal" href="#id38">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id39">Other improvements</a></li>
<li><a class="reference internal" href="#rust-packaging">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-4-0b1-released-december-17-2024">fish 4.0b1 (released December 17, 2024)</a></li>
<li><a class="reference internal" href="#fish-3-7-1-released-march-19-2024">fish 3.7.1 (released March 19, 2024)</a></li>
<li><a class="reference internal" href="#fish-3-7-0-released-january-1-2024">fish 3.7.0 (released January 1, 2024)</a><ul>
<li><a class="reference internal" href="#id41">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id42">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id43">Scripting improvements</a></li>
<li><a class="reference internal" href="#id44">Interactive improvements</a><ul>
<li><a class="reference internal" href="#improved-prompts">Improved prompts</a></li>
<li><a class="reference internal" href="#id45">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id46">Other improvements</a></li>
<li><a class="reference internal" href="#id47">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-6-4-released-december-5-2023">fish 3.6.4 (released December 5, 2023)</a></li>
<li><a class="reference internal" href="#fish-3-6-3-released-december-4-2023">fish 3.6.3 (released December 4, 2023)</a></li>
<li><a class="reference internal" href="#fish-3-6-2-released-december-4-2023">fish 3.6.2 (released December 4, 2023)</a></li>
<li><a class="reference internal" href="#fish-3-6-1-released-march-25-2023">fish 3.6.1 (released March 25, 2023)</a><ul>
<li><a class="reference internal" href="#id48">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id49">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id50">Scripting improvements</a></li>
<li><a class="reference internal" href="#id51">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id52">Improved prompts</a></li>
<li><a class="reference internal" href="#id53">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id54">Other improvements</a></li>
<li><a class="reference internal" href="#id55">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-6-0-released-january-7-2023">fish 3.6.0 (released January 7, 2023)</a><ul>
<li><a class="reference internal" href="#id56">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id57">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id58">Scripting improvements</a></li>
<li><a class="reference internal" href="#id59">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id60">Completions</a></li>
<li><a class="reference internal" href="#id61">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id62">Other improvements</a></li>
<li><a class="reference internal" href="#fixed-bugs">Fixed bugs</a></li>
<li><a class="reference internal" href="#id63">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-5-1-released-july-20-2022">fish 3.5.1 (released July 20, 2022)</a></li>
<li><a class="reference internal" href="#fish-3-5-0-released-june-16-2022">fish 3.5.0 (released June 16, 2022)</a><ul>
<li><a class="reference internal" href="#id64">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id65">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id66">Scripting improvements</a></li>
<li><a class="reference internal" href="#id67">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id68">New or improved bindings</a></li>
<li><a class="reference internal" href="#id69">Improved prompts</a></li>
<li><a class="reference internal" href="#id70">Completions</a></li>
<li><a class="reference internal" href="#id71">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id72">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-4-1-released-march-25-2022">fish 3.4.1 (released March 25, 2022)</a></li>
<li><a class="reference internal" href="#fish-3-4-0-released-march-12-2022">fish 3.4.0 (released March 12, 2022)</a><ul>
<li><a class="reference internal" href="#id73">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id74">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id75">Scripting improvements</a></li>
<li><a class="reference internal" href="#id76">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id77">New or improved bindings</a></li>
<li><a class="reference internal" href="#id78">Improved prompts</a></li>
<li><a class="reference internal" href="#id79">Completions</a></li>
<li><a class="reference internal" href="#id80">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id81">Other improvements</a></li>
<li><a class="reference internal" href="#id82">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-3-1-released-july-6-2021">fish 3.3.1 (released July 6, 2021)</a></li>
<li><a class="reference internal" href="#fish-3-3-0-released-june-28-2021">fish 3.3.0 (released June 28, 2021)</a><ul>
<li><a class="reference internal" href="#id83">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id84">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id85">Scripting improvements</a></li>
<li><a class="reference internal" href="#id86">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id87">New or improved bindings</a></li>
<li><a class="reference internal" href="#id88">Improved prompts</a></li>
<li><a class="reference internal" href="#id89">Completions</a></li>
<li><a class="reference internal" href="#id90">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id91">For distributors</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-2-2-released-april-7-2021">fish 3.2.2 (released April 7, 2021)</a></li>
<li><a class="reference internal" href="#fish-3-2-1-released-march-18-2021">fish 3.2.1 (released March 18, 2021)</a></li>
<li><a class="reference internal" href="#fish-3-2-0-released-march-1-2021">fish 3.2.0 (released March 1, 2021)</a><ul>
<li><a class="reference internal" href="#id92">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#syntax-changes-and-new-commands">Syntax changes and new commands</a></li>
<li><a class="reference internal" href="#id93">Scripting improvements</a></li>
<li><a class="reference internal" href="#id94">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id95">New or improved bindings</a></li>
<li><a class="reference internal" href="#id96">Improved prompts</a></li>
<li><a class="reference internal" href="#id97">Improved terminal support</a></li>
<li><a class="reference internal" href="#id98">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id99">For distributors</a></li>
<li><a class="reference internal" href="#id100">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id101">For distributors and developers</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-1-2-released-april-29-2020">fish 3.1.2 (released April 29, 2020)</a></li>
<li><a class="reference internal" href="#fish-3-1-1-released-april-27-2020">fish 3.1.1 (released April 27, 2020)</a><ul>
<li><a class="reference internal" href="#errata-for-fish-3-1">Errata for fish 3.1</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-1-0-released-february-12-2020">fish 3.1.0 (released February 12, 2020)</a></li>
<li><a class="reference internal" href="#fish-3-1b1-released-january-26-2020">fish 3.1b1 (released January 26, 2020)</a><ul>
<li><a class="reference internal" href="#notable-improvements-and-fixes-1">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#syntax-changes-and-new-commands-1">Syntax changes and new commands</a></li>
<li><a class="reference internal" href="#scripting-improvements-1">Scripting improvements</a></li>
<li><a class="reference internal" href="#interactive-improvements-1">Interactive improvements</a><ul>
<li><a class="reference internal" href="#new-or-improved-bindings-1">New or improved bindings</a></li>
<li><a class="reference internal" href="#improved-prompts-1">Improved prompts</a></li>
<li><a class="reference internal" href="#improved-terminal-output">Improved terminal output</a></li>
<li><a class="reference internal" href="#completions-1">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#deprecations-and-removed-features-1">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#for-distributors-and-developers-1">For distributors and developers</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-0-2-released-february-19-2019">fish 3.0.2 (released February 19, 2019)</a><ul>
<li><a class="reference internal" href="#fixes-and-improvements">Fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-0-1-released-february-11-2019">fish 3.0.1 (released February 11, 2019)</a><ul>
<li><a class="reference internal" href="#fixes-and-improvements-1">Fixes and improvements</a></li>
<li><a class="reference internal" href="#known-issues">Known issues</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-3-0-0-released-december-28-2018">fish 3.0.0 (released December 28, 2018)</a></li>
<li><a class="reference internal" href="#fish-3-0b1-released-december-11-2018">fish 3.0b1 (released December 11, 2018)</a><ul>
<li><a class="reference internal" href="#notable-non-backward-compatible-changes">Notable non-backward compatible changes</a></li>
<li><a class="reference internal" href="#deprecations">Deprecations</a></li>
<li><a class="reference internal" href="#notable-fixes-and-improvements">Notable fixes and improvements</a></li>
<li><a class="reference internal" href="#syntax-changes-and-new-commands-2">Syntax changes and new commands</a></li>
<li><a class="reference internal" href="#new-features-in-commands">New features in commands</a></li>
<li><a class="reference internal" href="#interactive-improvements-2">Interactive improvements</a></li>
<li><a class="reference internal" href="#other-fixes-and-improvements">Other fixes and improvements</a></li>
<li><a class="reference internal" href="#for-distributors-and-developers-2">For distributors and developers</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-7-1-released-december-23-2017">fish 2.7.1 (released December 23, 2017)</a></li>
<li><a class="reference internal" href="#fish-2-7-0-released-november-23-2017">fish 2.7.0 (released November 23, 2017)</a></li>
<li><a class="reference internal" href="#fish-2-7b1-released-october-31-2017">fish 2.7b1 (released October 31, 2017)</a><ul>
<li><a class="reference internal" href="#notable-improvements">Notable improvements</a></li>
<li><a class="reference internal" href="#other-significant-changes">Other significant changes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-6-0-released-june-3-2017">fish 2.6.0 (released June 3, 2017)</a><ul>
<li><a class="reference internal" href="#known-issues-1">Known issues</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-6b1-released-may-14-2017">fish 2.6b1 (released May 14, 2017)</a><ul>
<li><a class="reference internal" href="#notable-fixes-and-improvements-1">Notable fixes and improvements</a></li>
<li><a class="reference internal" href="#other-significant-changes-1">Other significant changes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-5-0-released-february-3-2017">fish 2.5.0 (released February 3, 2017)</a><ul>
<li><a class="reference internal" href="#notable-fixes-and-improvements-2">Notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-5b1-released-january-14-2017">fish 2.5b1 (released January 14, 2017)</a><ul>
<li><a class="reference internal" href="#platform-changes">Platform Changes</a><ul>
<li><a class="reference internal" href="#linux">Linux</a></li>
<li><a class="reference internal" href="#os-x-snowleopard">OS X SnowLeopard</a></li>
</ul>
</li>
<li><a class="reference internal" href="#other-significant-changes-2">Other significant changes</a></li>
<li><a class="reference internal" href="#notable-fixes-and-improvements-3">Notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-4-0-released-november-8-2016">fish 2.4.0 (released November 8, 2016)</a><ul>
<li><a class="reference internal" href="#notable-fixes-and-improvements-4">Notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-4b1-released-october-18-2016">fish 2.4b1 (released October 18, 2016)</a><ul>
<li><a class="reference internal" href="#significant-changes">Significant changes</a></li>
<li><a class="reference internal" href="#notable-fixes-and-improvements-5">Notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-3-1-released-july-3-2016">fish 2.3.1 (released July 3, 2016)</a><ul>
<li><a class="reference internal" href="#significant-changes-1">Significant changes</a></li>
<li><a class="reference internal" href="#notable-fixes-and-improvements-6">Notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-3-0-released-may-20-2016">fish 2.3.0 (released May 20, 2016)</a><ul>
<li><a class="reference internal" href="#other-notable-fixes-and-improvements">Other notable fixes and improvements</a></li>
<li><a class="reference internal" href="#known-issues-2">Known issues</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-3b2-released-may-5-2016">fish 2.3b2 (released May 5, 2016)</a><ul>
<li><a class="reference internal" href="#significant-changes-2">Significant changes</a></li>
<li><a class="reference internal" href="#other-notable-fixes-and-improvements-1">Other notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-3b1-released-april-19-2016">fish 2.3b1 (released April 19, 2016)</a><ul>
<li><a class="reference internal" href="#significant-changes-3">Significant Changes</a></li>
<li><a class="reference internal" href="#backward-incompatible-changes">Backward-incompatible changes</a></li>
<li><a class="reference internal" href="#other-notable-fixes-and-improvements-2">Other notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-2-0-released-july-12-2015">fish 2.2.0 (released July 12, 2015)</a><ul>
<li><a class="reference internal" href="#significant-changes-4">Significant changes</a></li>
<li><a class="reference internal" href="#backward-incompatible-changes-1">Backward-incompatible changes</a></li>
<li><a class="reference internal" href="#other-notable-fixes-and-improvements-3">Other notable fixes and improvements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-1-2-released-feb-24-2015">fish 2.1.2 (released Feb 24, 2015)</a></li>
<li><a class="reference internal" href="#fish-2-1-1-released-september-26-2014">fish 2.1.1 (released September 26, 2014)</a><ul>
<li><a class="reference internal" href="#security-fixes">Security fixes</a></li>
<li><a class="reference internal" href="#other-fixes">Other fixes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-1-0">fish 2.1.0</a><ul>
<li><a class="reference internal" href="#significant-changes-5">Significant Changes</a></li>
<li><a class="reference internal" href="#other-notable-fixes">Other Notable Fixes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fish-2-0-0">fish 2.0.0</a><ul>
<li><a class="reference internal" href="#significant-changes-6">Significant Changes</a></li>
<li><a class="reference internal" href="#other-notable-fixes-1">Other Notable Fixes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fishfish-beta-r2">fishfish Beta r2</a><ul>
<li><a class="reference internal" href="#bug-fixes">Bug Fixes</a></li>
<li><a class="reference internal" href="#new-features">New Features</a></li>
</ul>
</li>
<li><a class="reference internal" href="#fishfish-beta-r1">fishfish Beta r1</a><ul>
<li><a class="reference internal" href="#scripting">Scripting</a></li>
<li><a class="reference internal" href="#new-features-1">New Features</a></li>
<li><a class="reference internal" href="#programmatic-changes">Programmatic Changes</a></li>
<li><a class="reference internal" href="#performance">Performance</a></li>
</ul>
</li>
</ul>
</li>
</ul>

</div>
        </div>
      </div>
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="release-notes">
<h1>Release notes<a class="headerlink" href="#release-notes" title="Link to this heading">¶</a></h1>
<section id="fish-4-7-1-released-may-08-2026">
<h2>fish 4.7.1 (released May 08, 2026)<a class="headerlink" href="#fish-4-7-1-released-may-08-2026" title="Link to this heading">¶</a></h2>
<p>This release fixes a regression in 4.7.0 that caused the web config (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>) to fail to start (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12717">#12717</a>).</p>
</section>
<section id="fish-4-7-0-released-may-05-2026">
<h2>fish 4.7.0 (released May 05, 2026)<a class="headerlink" href="#fish-4-7-0-released-may-05-2026" title="Link to this heading">¶</a></h2>
<section id="deprecations-and-removed-features">
<h3>Deprecations and removed features<a class="headerlink" href="#deprecations-and-removed-features" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The default theme (i.e. the <code class="docutils literal notranslate"><span class="pre">fish_color_*</span></code> variables) is no longer set in non-interactive shells.</p></li>
</ul>
</section>
<section id="interactive-improvements">
<h3>Interactive improvements<a class="headerlink" href="#interactive-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><a class="reference internal" href="cmds/prompt_pwd.html"><span class="doc">prompt_pwd</span></a> now strips control characters.</p></li>
<li><p>Repaint events (as triggered by changes to color variables or by event handlers running <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-f</span> <span class="pre">repaint</span></code>) no longer reset the completion pager and other transient UI states (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12683">#12683</a>).</p></li>
<li><p><span class="target" id="index-0"></span><a class="reference internal" href="interactive.html#envvar-fish_color_valid_path"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_color_valid_path</span></code></a> now respects background and underline colors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12622">#12622</a>).</p></li>
<li><p><a class="reference internal" href="cmds/funced.html"><span class="doc">funced</span></a> will no longer lose work if there are parse errors multiple times without new changes to the file.</p></li>
<li><p>Fixed a case where directory completions were sorted in a surprising order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12695">#12695</a>).</p></li>
<li><p>When at the command token, the <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">o</kbd> binding will now open read-only files too (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12671">#12671</a>).</p></li>
<li><p>Private mode in-memory history (<code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">fish_history</span></code>) is no longer shared with <a class="reference internal" href="cmds/read.html"><span class="doc">builtin read</span></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12662">#12662</a>).</p></li>
</ul>
</section>
<section id="other-improvements">
<h3>Other improvements<a class="headerlink" href="#other-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>History is no longer corrupted with NUL bytes when fish receives SIGTERM or SIGHUP (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10300">#10300</a>).</p></li>
<li><p><a class="reference internal" href="cmds/fish_update_completions.html"><span class="doc">fish_update_completions</span></a> now handles groff <code class="docutils literal notranslate"><span class="pre">\X'...'</span></code> device control escapes, fixing completion generation for man pages produced by help2man 1.50 and later (such as coreutils 9.10).</p></li>
<li><p>Removing history entries via the <a class="reference internal" href="cmds/fish_config.html"><span class="doc">web-based config</span></a> is more intuitive.</p></li>
<li><p>If <span class="target" id="index-1"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">XDG_DATA_DIRS</span></code> is empty, the default value is assumed, which means that fish will now also use configuration from paths like <code class="docutils literal notranslate"><span class="pre">$PREFIX/share/fish/vendor_completions.d</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11349">#11349</a>).</p></li>
<li><p>Some internal file descriptors were moved to number 10 or higher, to reduce risk of clashes with those used by the user in scripts.</p></li>
<li><p>The wording of error messages has been made consistent, especially for builtin subcommands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12556">#12556</a>).</p></li>
</ul>
</section>
<section id="for-distributors-and-developers">
<h3>For distributors and developers<a class="headerlink" href="#for-distributors-and-developers" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>When the default global config directory (<code class="docutils literal notranslate"><span class="pre">$PREFIX/etc/fish</span></code>) exists but has been overridden via <code class="docutils literal notranslate"><span class="pre">-DCMAKE_INSTALL_SYSCONFDIR</span></code>, fish will now respect that override (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10748">#10748</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">build_tools/update_translations.fish</span></code> has been replaced by <code class="docutils literal notranslate"><span class="pre">cargo</span> <span class="pre">xtask</span> <span class="pre">gettext</span> <span class="pre">{check,new,update}</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12676">#12676</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cargo</span> <span class="pre">xtask</span> <span class="pre">shellcheck</span></code> to lint shell-scripts.</p></li>
</ul>
</section>
<section id="regression-fixes">
<h3>Regression fixes:<a class="headerlink" href="#regression-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.6) Vi mode <code class="docutils literal notranslate"><span class="pre">dl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12461">#12461</a>).</p></li>
<li><p>(from 4.6) Backspace after newline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12583">#12583</a>).</p></li>
<li><p>(from 4.3.3) Long options were spuriously completed after typing short options (85e76ba3561).</p></li>
<li><p>(from 3.2) <code class="docutils literal notranslate"><span class="pre">nosuchcommand</span> <span class="pre">||</span> <span class="pre">echo</span> <span class="pre">hello</span></code> executes the right hand side again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12654">#12654</a>).</p></li>
</ul>
</section>
</section>
<section id="fish-4-6-0-released-march-28-2026">
<h2>fish 4.6.0 (released March 28, 2026)<a class="headerlink" href="#fish-4-6-0-released-march-28-2026" title="Link to this heading">¶</a></h2>
<section id="notable-improvements-and-fixes">
<h3>Notable improvements and fixes<a class="headerlink" href="#notable-improvements-and-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>New Spanish translations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12489">#12489</a>).</p></li>
<li><p>New Japanese translations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12499">#12499</a>).</p></li>
</ul>
</section>
<section id="id1">
<h3>Deprecations and removed features<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The default width for emoji is switched from 1 to 2, improving the experience for users connecting to old systems from modern desktops. Users of old desktops who notice that lines containing emoji are misaligned can set <code class="docutils literal notranslate"><span class="pre">$fish_emoji_width</span></code> back to 1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12562">#12562</a>).</p></li>
</ul>
</section>
<section id="id2">
<h3>Interactive improvements<a class="headerlink" href="#id2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The tab completion pager now left-justifies the description of each column (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12546">#12546</a>).</p></li>
<li><p>fish now supports the <code class="docutils literal notranslate"><span class="pre">SHELL_PROMPT_PREFIX</span></code>, <code class="docutils literal notranslate"><span class="pre">SHELL_PROMPT_SUFFIX</span></code>, and <code class="docutils literal notranslate"><span class="pre">SHELL_WELCOME</span></code> environment variables. The prefix and suffix are automatically prepended and appended to the left prompt, and the welcome message is displayed on startup after the greeting.
These variables are set by systemd’s <code class="docutils literal notranslate"><span class="pre">run0</span></code> for example (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10924">#10924</a>).</p></li>
</ul>
</section>
<section id="improved-terminal-support">
<h3>Improved terminal support<a class="headerlink" href="#improved-terminal-support" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> is able to turn off italics, reverse mode, strikethrough and underline individually (e.g. <code class="docutils literal notranslate"><span class="pre">--italics=off</span></code>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> learned the foreground (<code class="docutils literal notranslate"><span class="pre">--foreground</span></code> or <code class="docutils literal notranslate"><span class="pre">-f</span></code>) and reset (<code class="docutils literal notranslate"><span class="pre">--reset</span></code>) options.</p></li>
<li><p>An error caused by slow terminal responses at macOS startup has been addressed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12571">#12571</a>).</p></li>
</ul>
</section>
<section id="id3">
<h3>Other improvements<a class="headerlink" href="#id3" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Signals like <code class="docutils literal notranslate"><span class="pre">SIGWINCH</span></code> (as sent on terminal resize) no longer interrupt builtin output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12496">#12496</a>).</p></li>
<li><p>For compatibility with Bash, fish now accepts <code class="docutils literal notranslate"><span class="pre">|&amp;</span></code> as alternate spelling of <code class="docutils literal notranslate"><span class="pre">&amp;|</span></code>, for piping both standard output and standard error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11516">#11516</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now preserves comments and newlines immediately preceding a brace block (<code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">}</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12505">#12505</a>).</p></li>
<li><p>A crash when suspending certain pipelines with <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd> has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12301">#12301</a>).</p></li>
</ul>
</section>
<section id="id4">
<h3>For distributors and developers<a class="headerlink" href="#id4" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">cargo</span> <span class="pre">xtask</span></code> subcommands no longer panic on test failures.</p></li>
</ul>
</section>
<section id="id5">
<h3>Regression fixes:<a class="headerlink" href="#id5" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.5.0) Intermediate <code class="docutils literal notranslate"><span class="pre">⏎</span></code> artifact when redrawing prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12476">#12476</a>).</p></li>
<li><p>(from 4.4.0) <code class="docutils literal notranslate"><span class="pre">history</span></code> honors explicitly specified <code class="docutils literal notranslate"><span class="pre">--color=</span></code> again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12512">#12512</a>).</p></li>
<li><p>(from 4.4.0) Vi mode <code class="docutils literal notranslate"><span class="pre">dl</span></code> and <code class="docutils literal notranslate"><span class="pre">dh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12461">#12461</a>).</p></li>
<li><p>(from 4.3.0) Error completing of commands starting with <code class="docutils literal notranslate"><span class="pre">-</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12522">#12522</a>).</p></li>
</ul>
</section>
</section>
<section id="fish-4-5-0-released-february-17-2026">
<h2>fish 4.5.0 (released February 17, 2026)<a class="headerlink" href="#fish-4-5-0-released-february-17-2026" title="Link to this heading">¶</a></h2>
<p>This is mostly a patch release for Vi mode regressions in 4.4.0 but other minor behavior changes are included as well.</p>
<section id="id6">
<h3>Interactive improvements<a class="headerlink" href="#id6" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> no longer cancels history search (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12436">#12436</a>).</p></li>
<li><p>History search cursor positioning now works correctly with characters of arbitrary width.</p></li>
</ul>
</section>
<section id="id7">
<h3>Deprecations and removed features<a class="headerlink" href="#id7" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish no longer reads the terminfo database to alter behaviour based on the <span class="target" id="index-2"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">TERM</span></code> environment variable, and does not depend on ncurses or terminfo. The <code class="docutils literal notranslate"><span class="pre">ignore-terminfo</span></code> feature flag, introduced and enabled by default in fish 4.1, is now permanently enabled. fish may no longer work correctly on Data General Dasher D220 and Wyse WY-350 terminals, but should continue to work on all known terminal emulators released in the 21st century.</p></li>
</ul>
</section>
<section id="id8">
<h3>Regression fixes:<a class="headerlink" href="#id8" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.4.0) Vi mode <code class="docutils literal notranslate"><span class="pre">d,f</span></code> key binding did not work (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12417">#12417</a>).</p></li>
<li><p>(from 4.4.0) Vi mode <code class="docutils literal notranslate"><span class="pre">c,w</span></code> key binding wrongly deleted trailing spaces (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12443">#12443</a>).</p></li>
<li><p>(from 4.4.0) Vi mode crash on <code class="docutils literal notranslate"><span class="pre">c,i,w</span></code> after accepting autosuggestion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12430">#12430</a>).</p></li>
<li><p>(from 4.4.0) <code class="docutils literal notranslate"><span class="pre">fish_vi_key_bindings</span></code> called with a mode argument produced an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12413">#12413</a>).</p></li>
<li><p>(from 4.0.0) Build on Illumos (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12410">#12410</a>).</p></li>
</ul>
</section>
</section>
<section id="fish-4-4-0-released-february-03-2026">
<h2>fish 4.4.0 (released February 03, 2026)<a class="headerlink" href="#fish-4-4-0-released-february-03-2026" title="Link to this heading">¶</a></h2>
<section id="id9">
<h3>Deprecations and removed features<a class="headerlink" href="#id9" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The default fossil prompt has been disabled (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12342">#12342</a>).</p></li>
</ul>
</section>
<section id="id10">
<h3>Interactive improvements<a class="headerlink" href="#id10" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">bind</span></code> builtin lists mappings from all modes if <code class="docutils literal notranslate"><span class="pre">--mode</span></code> is not provided (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12214">#12214</a>).</p></li>
<li><p>Line-wise autosuggestions that don’t start a command are no longer shown (739b82c34db, 58e7a50de8a).</p></li>
<li><p>Builtin <code class="docutils literal notranslate"><span class="pre">history</span></code> now assumes that <span class="target" id="index-3"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PAGER</span></code> supports ANSI color sequences.</p></li>
<li><p>fish now clears the terminal’s <code class="docutils literal notranslate"><span class="pre">FLUSHO</span></code> flag when acquiring control of the terminal, to fix an issue caused by pressing <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">o</kbd> on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12304">#12304</a>).</p></li>
</ul>
</section>
<section id="new-or-improved-bindings">
<h3>New or improved bindings<a class="headerlink" href="#new-or-improved-bindings" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Vi mode word movements (<code class="docutils literal notranslate"><span class="pre">w</span></code>, <code class="docutils literal notranslate"><span class="pre">W</span></code>, <code class="docutils literal notranslate"><span class="pre">e</span></code>, and <code class="docutils literal notranslate"><span class="pre">E</span></code>) are now largely in line with Vim. The only exception is that underscores are treated as word separators (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12269">#12269</a>).</p></li>
<li><p>New special input functions to support these movements: <code class="docutils literal notranslate"><span class="pre">forward-word-vi</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-word-vi</span></code>, <code class="docutils literal notranslate"><span class="pre">forward-bigword-vi</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-bigword-vi</span></code>, <code class="docutils literal notranslate"><span class="pre">forward-word-end</span></code>, <code class="docutils literal notranslate"><span class="pre">backward-word-end</span></code>, <code class="docutils literal notranslate"><span class="pre">forward-bigword-end</span></code>, <code class="docutils literal notranslate"><span class="pre">backward-bigword-end</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-a-word</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-inner-word</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-a-bigword</span></code>, and <code class="docutils literal notranslate"><span class="pre">kill-inner-bigword</span></code>.</p></li>
<li><p>Vi mode key bindings now support counts for movement and deletion commands (e.g. <cite>d3w</cite> or <cite>3l</cite>), via a new operator mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2192">#2192</a>).</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">catppuccin-*</span></code> color themes.</p></li>
</ul>
</section>
<section id="id11">
<h3>Improved terminal support<a class="headerlink" href="#id11" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> learned the strikethrough (<code class="docutils literal notranslate"><span class="pre">--strikethrough</span></code> or <code class="docutils literal notranslate"><span class="pre">-s</span></code>) modifier.</p></li>
</ul>
</section>
<section id="id12">
<h3>For distributors and developers<a class="headerlink" href="#id12" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The CMake option <code class="docutils literal notranslate"><span class="pre">WITH_GETTEXT</span></code> has been renamed to <code class="docutils literal notranslate"><span class="pre">WITH_MESSAGE_LOCALIZATION</span></code>, to reflect that it toggles localization independently of the backend used in the implementation.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">cargo</span> <span class="pre">xtask</span></code> commands can replace some CMake workflows.</p></li>
</ul>
</section>
<section id="id13">
<h3>Regression fixes:<a class="headerlink" href="#id13" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.1.0) Crash when autosuggesting Unicode characters with nontrivial lowercase mapping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12326">#12326</a>, 78f4541116e).</p></li>
<li><p>(from 4.3.0) Glitch on <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--prompt-str</span> <span class="pre">&quot;&quot;</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12296">#12296</a>).</p></li>
</ul>
</section>
</section>
<section id="fish-4-3-3-released-january-07-2026">
<h2>fish 4.3.3 (released January 07, 2026)<a class="headerlink" href="#fish-4-3-3-released-january-07-2026" title="Link to this heading">¶</a></h2>
<p>This release fixes the following problems identified in fish 4.3.0:</p>
<ul class="simple">
<li><p>Selecting a completion could insert only part of the token (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12249">#12249</a>).</p></li>
<li><p>Glitch with soft-wrapped autosuggestions and <a class="reference internal" href="cmds/fish_right_prompt.html"><span class="doc">fish_right_prompt</span></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12255">#12255</a>).</p></li>
<li><p>Spurious echo in tmux when typing a command really fast (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12261">#12261</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tomorrow</span></code> theme always using the light variant (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12266">#12266</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span></code> sometimes not shadowing themes set by e.g. webconfig (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12278">#12278</a>).</p></li>
<li><p>The sample prompts and themes are correctly installed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12241">#12241</a>).</p></li>
<li><p>Last line of command output could be hidden when missing newline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12246">#12246</a>).</p></li>
</ul>
<p>Other improvements include:</p>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">abbr</span></code>, <code class="docutils literal notranslate"><span class="pre">bind</span></code>, <code class="docutils literal notranslate"><span class="pre">complete</span></code>, <code class="docutils literal notranslate"><span class="pre">functions</span></code>, <code class="docutils literal notranslate"><span class="pre">history</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> commands now support a <code class="docutils literal notranslate"><span class="pre">--color</span></code> option to control syntax highlighting in their output. Valid values are <code class="docutils literal notranslate"><span class="pre">auto</span></code> (default), <code class="docutils literal notranslate"><span class="pre">always</span></code>, or <code class="docutils literal notranslate"><span class="pre">never</span></code>.</p></li>
<li><p>Existing file paths in redirection targets such as <code class="docutils literal notranslate"><span class="pre">&gt;</span> <span class="pre">file.txt</span></code> are now highlighted using <span class="target" id="index-4"></span><a class="reference internal" href="interactive.html#envvar-fish_color_valid_path"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_color_valid_path</span></code></a>, indicating that <code class="docutils literal notranslate"><span class="pre">file.txt</span></code> will be clobbered (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12260">#12260</a>).</p></li>
</ul>
</section>
<section id="fish-4-3-2-released-december-30-2025">
<h2>fish 4.3.2 (released December 30, 2025)<a class="headerlink" href="#fish-4-3-2-released-december-30-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes the following problems identified in 4.3.0:</p>
<ul class="simple">
<li><p>Pre-built macOS packages failed to start due to a <code class="docutils literal notranslate"><span class="pre">Malformed</span> <span class="pre">Mach-O</span> <span class="pre">file</span></code> error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12224">#12224</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">extra_functionsdir</span></code> (usually <code class="docutils literal notranslate"><span class="pre">vendor_functions.d</span></code>) and friends were not used (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12226">#12226</a>).</p></li>
<li><p>Sample config file <code class="docutils literal notranslate"><span class="pre">~/.config/fish/config.fish/</span></code> and config directories <code class="docutils literal notranslate"><span class="pre">~/.config/fish/conf.d/</span></code>, <code class="docutils literal notranslate"><span class="pre">~/.config/fish/completions/</span></code> and <code class="docutils literal notranslate"><span class="pre">~/.config/fish/functions/</span></code> were recreated on every startup instead of only the first time fish runs on a system (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12230">#12230</a>).</p></li>
<li><p>Spurious echo of <code class="docutils literal notranslate"><span class="pre">^[[I</span></code> in some scenarios (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12232">#12232</a>).</p></li>
<li><p>Infinite prompt redraw loop on some prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12233">#12233</a>).</p></li>
<li><p>The removal of pre-built HTML docs from tarballs revealed that cross compilation is broken because we use <code class="docutils literal notranslate"><span class="pre">${CMAKE_BINARY_DIR}/fish_indent</span></code> for building HTML docs.
As a workaround, the new CMake build option <code class="docutils literal notranslate"><span class="pre">FISH_INDENT_FOR_BUILDING_DOCS</span></code> can be set to the path of a runnable <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> binary.</p></li>
</ul>
</section>
<section id="fish-4-3-1-released-december-28-2025">
<h2>fish 4.3.1 (released December 28, 2025)<a class="headerlink" href="#fish-4-3-1-released-december-28-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes the following problem identified in 4.3.0:</p>
<ul class="simple">
<li><p>Possible crash after expanding an abbreviation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12223">#12223</a>).</p></li>
</ul>
</section>
<section id="fish-4-3-0-released-december-28-2025">
<h2>fish 4.3.0 (released December 28, 2025)<a class="headerlink" href="#fish-4-3-0-released-december-28-2025" title="Link to this heading">¶</a></h2>
<section id="id14">
<h3>Deprecations and removed features<a class="headerlink" href="#id14" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish no longer sets user-facing <a class="reference internal" href="language.html#variables-universal"><span class="std std-ref">universal variables</span></a> by default, making the configuration easier to understand.
Specifically, the <code class="docutils literal notranslate"><span class="pre">fish_color_*</span></code>, <code class="docutils literal notranslate"><span class="pre">fish_pager_color_*</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_key_bindings</span></code> variables 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
<code class="docutils literal notranslate"><span class="pre">~/.config/fish/conf.d/fish_frozen_theme.fish</span></code> and
<code class="docutils literal notranslate"><span class="pre">~/.config/fish/conf.d/fish_frozen_key_bindings.fish</span></code> files.
We suggest that you delete those files and <a class="reference internal" href="interactive.html#syntax-highlighting"><span class="std std-ref">set your theme</span></a> in <code class="docutils literal notranslate"><span class="pre">~/.config/fish/config.fish</span></code>.</p>
<ul>
<li><p>You can still configure fish to propagate theme changes instantly; see <a class="reference internal" href="interactive.html#syntax-highlighting-instant-update"><span class="std std-ref">here</span></a> for an example.</p></li>
<li><p>You can still opt into storing color variables in the universal scope
via <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">save</span></code> though unlike <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span></code>,
it does not support dynamic theme switching based on the terminal’s color theme (see below).</p></li>
</ul>
</li>
<li><p>In addition to setting the variables which are explicitly defined in the given theme,
<code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span></code> now clears only color variables that were set by earlier invocations of a <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span></code> command
(which is how fish’s default theme is set).</p></li>
</ul>
</section>
<section id="scripting-improvements">
<h3>Scripting improvements<a class="headerlink" href="#scripting-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>New <a class="reference internal" href="cmds/status.html#status-language"><span class="std std-ref">status language</span></a> command allows showing and modifying language settings for fish messages without having to modify environment variables.</p></li>
<li><p>When using a noninteractive fish instance to compute completions, <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--cursor</span></code> works as expected instead of throwing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11993">#11993</a>).</p></li>
<li><p><span class="target" id="index-5"></span><a class="reference internal" href="language.html#envvar-fish_trace"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_trace</span></code></a> can now be set to <code class="docutils literal notranslate"><span class="pre">all</span></code> to also trace execution of key bindings, event handlers as well as prompt and title functions.</p></li>
</ul>
</section>
<section id="id15">
<h3>Interactive improvements<a class="headerlink" href="#id15" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>When typing immediately after starting fish, the first prompt is now rendered correctly.</p></li>
<li><p>Completion accuracy was improved for file paths containing <code class="docutils literal notranslate"><span class="pre">=</span></code> or <code class="docutils literal notranslate"><span class="pre">:</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5363">#5363</a>).</p></li>
<li><p>Prefix-matching completions are now shown even if they don’t match the case typed by the user (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7944">#7944</a>).</p></li>
<li><p>On Cygwin/MSYS, command name completion will favor the non-exe name (<code class="docutils literal notranslate"><span class="pre">foo</span></code>) unless the user started typing the extension.</p></li>
<li><p>When using the exe name (<code class="docutils literal notranslate"><span class="pre">foo.exe</span></code>), fish will use the description and completions for <code class="docutils literal notranslate"><span class="pre">foo</span></code> if there are none for <code class="docutils literal notranslate"><span class="pre">foo.exe</span></code>.</p></li>
<li><p>Autosuggestions now also show soft-wrapped portions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12045">#12045</a>).</p></li>
</ul>
</section>
<section id="id16">
<h3>New or improved bindings<a class="headerlink" href="#id16" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd> (<code class="docutils literal notranslate"><span class="pre">backward-kill-path-component</span></code>) also deletes escaped spaces (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2016">#2016</a>).</p></li>
<li><p>New special input functions <code class="docutils literal notranslate"><span class="pre">backward-path-component</span></code>, <code class="docutils literal notranslate"><span class="pre">forward-path-component</span></code> and <code class="docutils literal notranslate"><span class="pre">kill-path-component</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12127">#12127</a>).</p></li>
</ul>
</section>
<section id="id17">
<h3>Improved terminal support<a class="headerlink" href="#id17" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Themes can now be made color-theme-aware by including both <code class="docutils literal notranslate"><span class="pre">[light]</span></code> and <code class="docutils literal notranslate"><span class="pre">[dark]</span></code> sections in the <a class="reference internal" href="cmds/fish_config.html#fish-config-theme-files"><span class="std std-ref">theme file</span></a>.
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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11580">#11580</a>).</p></li>
<li><p>The working directory is now reported on every fresh prompt (via OSC 7), fixing scenarios where a child process (like <code class="docutils literal notranslate"><span class="pre">ssh</span></code>) left behind a stale working directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12191">#12191</a>).</p></li>
<li><p>OSC 133 prompt markers now also mark the prompt end, which improves shell integration with terminals like iTerm2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11837">#11837</a>).</p></li>
<li><p>Operating-system-specific key bindings are now decided based on the <a class="reference internal" href="cmds/status.html#status-terminal-os"><span class="std std-ref">terminal’s host OS</span></a>.</p></li>
<li><p>New <a class="reference internal" href="language.html#featureflags"><span class="std std-ref">feature flag</span></a> <code class="docutils literal notranslate"><span class="pre">omit-term-workarounds</span></code> can be turned on to prevent fish from trying to work around some incompatible terminals.</p></li>
</ul>
</section>
<section id="id18">
<h3>For distributors and developers<a class="headerlink" href="#id18" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Tarballs no longer contain prebuilt documentation,
so building and installing documentation requires Sphinx.
To avoid users accidentally losing docs, the <code class="docutils literal notranslate"><span class="pre">BUILD_DOCS</span></code> and <code class="docutils literal notranslate"><span class="pre">INSTALL_DOCS</span></code> configuration options have been replaced with a new <code class="docutils literal notranslate"><span class="pre">WITH_DOCS</span></code> option.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> are now installed as hardlinks to <code class="docutils literal notranslate"><span class="pre">fish</span></code>, to save some space.</p></li>
</ul>
</section>
<section id="id19">
<h3>Regression fixes:<a class="headerlink" href="#id19" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.1.0) Crash on incorrectly-set color variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12078">#12078</a>).</p></li>
<li><p>(from 4.1.0) Crash when autosuggesting Unicode characters with nontrivial lowercase mapping.</p></li>
<li><p>(from 4.2.0) Incorrect emoji width computation on macOS.</p></li>
<li><p>(from 4.2.0) Mouse clicks and <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> edge cases in multiline command lines (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12121">#12121</a>).</p></li>
<li><p>(from 4.2.0) Completions for Git remote names on some non-glibc systems.</p></li>
<li><p>(from 4.2.0) Expansion of <code class="docutils literal notranslate"><span class="pre">~$USER</span></code>.</p></li>
</ul>
</section>
</section>
<section id="fish-4-2-1-released-november-13-2025">
<h2>fish 4.2.1 (released November 13, 2025)<a class="headerlink" href="#fish-4-2-1-released-november-13-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes the following problems identified in 4.2.0:</p>
<ul class="simple">
<li><p>When building from a tarball without Sphinx (that is, with <code class="docutils literal notranslate"><span class="pre">-DBUILD_DOCS=OFF</span></code> or when <code class="docutils literal notranslate"><span class="pre">sphinx-build</span></code> is not found),
builtin man pages and help files were missing, which has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12052">#12052</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span></code>’s theme selector (the “colors” tab) was broken, which has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12053">#12053</a>).</p></li>
</ul>
</section>
<section id="fish-4-2-0-released-november-10-2025">
<h2>fish 4.2.0 (released November 10, 2025)<a class="headerlink" href="#fish-4-2-0-released-november-10-2025" title="Link to this heading">¶</a></h2>
<section id="id20">
<h3>Notable improvements and fixes<a class="headerlink" href="#id20" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>History-based autosuggestions now include multi-line commands.</p></li>
<li><p>A <a class="reference internal" href="prompt.html#transient-prompt"><span class="std std-ref">transient prompt</span></a> containing more lines than the final prompt will now be cleared properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11875">#11875</a>).</p></li>
<li><p>Taiwanese Chinese translations have been added.</p></li>
<li><p>French translations have been supplemented (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11842">#11842</a>).</p></li>
</ul>
</section>
<section id="id21">
<h3>Deprecations and removed features<a class="headerlink" href="#id21" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>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.</p></li>
<li><p>On systems where no multi-byte locale is available,
fish will no longer fall back to using ASCII replacements for <a class="reference internal" href="terminal-compatibility.html#term-compat-unicode-codepoints"><span class="std std-ref">Unicode characters</span></a> such as “…”.</p></li>
</ul>
</section>
<section id="id22">
<h3>Interactive improvements<a class="headerlink" href="#id22" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The title of the terminal tab can now be set separately from the window title by defining the <a class="reference internal" href="cmds/fish_tab_title.html"><span class="doc">fish_tab_title</span></a> function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2692">#2692</a>).</p></li>
<li><p>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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11911">#11911</a>).</p></li>
<li><p><a class="reference internal" href="cmds/fish_config.html"><span class="doc">fish_config prompt</span></a>’s <code class="docutils literal notranslate"><span class="pre">choose</span></code> and <code class="docutils literal notranslate"><span class="pre">save</span></code> subcommands have been taught to reset <a class="reference internal" href="cmds/fish_mode_prompt.html"><span class="doc">fish_mode_prompt</span></a> in addition to the other prompt functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11937">#11937</a>).</p></li>
<li><p>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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4918">#4918</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd> binding no longer adds a redundant space to the command line.</p></li>
<li><p>When run as a login shell on macOS, fish now sets <span class="target" id="index-6"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">MANPATH</span></code> correctly when that variable was already present in the environment (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10684">#10684</a>).</p></li>
<li><p>A Windows-specific case of the <a class="reference internal" href="cmds/fish_config.html"><span class="doc">web-based config</span></a> failing to launch has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11805">#11805</a>).</p></li>
<li><p>A MSYS2-specific workaround for Konsole and WezTerm has been added,
to prevent them from using the wrong working directory when opening new tabs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11981">#11981</a>).</p></li>
</ul>
</section>
<section id="id23">
<h3>For distributors and developers<a class="headerlink" href="#id23" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Release tags and source code tarballs are GPG-signed again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11996">#11996</a>).</p></li>
<li><p>Documentation in release tarballs is now built with the latest version of Sphinx,
which means that pre-built man pages include <a class="reference internal" href="terminal-compatibility.html#term-compat-osc-8"><span class="std std-ref">OSC 8 hyperlinks</span></a>.</p></li>
<li><p>The Sphinx dependency is now specified in <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code>,
which allows you to use <a class="reference external" href="https://github.com/astral-sh/uv">uv</a> to provide Sphinx for building documentation (e.g. <code class="docutils literal notranslate"><span class="pre">uv</span> <span class="pre">run</span> <span class="pre">cargo</span> <span class="pre">install</span> <span class="pre">--path</span> <span class="pre">.</span></code>).</p></li>
<li><p>The minimum supported Rust version (MSRV) has been updated to 1.85.</p></li>
<li><p>The standalone build mode has been made the default.
This means that the files in <code class="docutils literal notranslate"><span class="pre">$CMAKE_INSTALL_PREFIX/share/fish</span></code> will 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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11921">#11921</a>).
To reverse this change (which should not be necessary),
patch out the <code class="docutils literal notranslate"><span class="pre">embed-data</span></code> feature from <code class="docutils literal notranslate"><span class="pre">cmake/Rust.cmake</span></code>.
This option will be removed in future.</p></li>
<li><p>OpenBSD 7.8 revealed an issue with fish’s approach for displaying builtin man pages, which has been fixed.</p></li>
</ul>
</section>
<section id="id24">
<h3>Regression fixes:<a class="headerlink" href="#id24" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>(from 4.1.0) Fix the <a class="reference internal" href="cmds/fish_config.html"><span class="doc">web-based config</span></a> for Python 3.9 and older (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12039">#12039</a>).</p></li>
<li><p>(from 4.1.0) Correct wrong terminal modes set by <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span> <span class="pre">'read;</span> <span class="pre">cat</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/12024">#12024</a>).</p></li>
<li><p>(from 4.1.0) On VTE-based terminals, stop redrawing the prompt on resize again, to avoid glitches.</p></li>
<li><p>(from 4.1.0) On MSYS2, fix saving/loading of universal variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11948">#11948</a>).</p></li>
<li><p>(from 4.1.0) Fix error using <code class="docutils literal notranslate"><span class="pre">man</span></code> for the commands <code class="docutils literal notranslate"><span class="pre">!</span></code> <code class="docutils literal notranslate"><span class="pre">.</span></code> <code class="docutils literal notranslate"><span class="pre">:</span></code> <code class="docutils literal notranslate"><span class="pre">[</span></code> <code class="docutils literal notranslate"><span class="pre">{</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11955">#11955</a>).</p></li>
<li><p>(from 4.1.0) Fix build issues on illumos systems (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11982">#11982</a>).</p></li>
<li><p>(from 4.1.0) Fix crash on invalid <a class="reference internal" href="cmds/function.html"><span class="doc">function</span></a> command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11912">#11912</a>).</p></li>
<li><p>(from 4.0.0) Fix build on SPARC and MIPS Linux by disabling <code class="docutils literal notranslate"><span class="pre">SIGSTKFLT</span></code>.</p></li>
<li><p>(from 4.0.0) Fix crash when passing negative PIDs to builtin <a class="reference internal" href="cmds/wait.html"><span class="doc">wait</span></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11929">#11929</a>).</p></li>
<li><p>(from 4.0.0) On Linux, fix <a class="reference internal" href="cmds/status.html"><span class="doc">status fish-path</span></a> output when fish has been reinstalled since it was started.</p></li>
</ul>
</section>
</section>
<section id="fish-4-1-2-released-october-7-2025">
<h2>fish 4.1.2 (released October 7, 2025)<a class="headerlink" href="#fish-4-1-2-released-october-7-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes the following regressions identified in 4.1.0:</p>
<ul>
<li><p>Fixed spurious error output when completing remote file paths for <code class="docutils literal notranslate"><span class="pre">scp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11860">#11860</a>).</p></li>
<li><p>Fixed the <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> binding not formatting <code class="docutils literal notranslate"><span class="pre">ls</span></code> output correctly (one entry per line, no colors) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11888">#11888</a>).</p></li>
<li><p>Fixed an issue where focus events (currently only enabled in <code class="docutils literal notranslate"><span class="pre">tmux</span></code>) would cause multiline prompts to be redrawn in the wrong line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11870">#11870</a>).</p></li>
<li><p>Stopped printing output that would cause a glitch on old versions of Midnight Commander (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11869">#11869</a>).</p></li>
<li><p>Added a fix for some configurations of Zellij where <kbd class="kbd docutils literal notranslate">escape</kbd> key processing was delayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11868">#11868</a>).</p></li>
<li><p>Fixed a case where the <a class="reference internal" href="cmds/fish_config.html"><span class="doc">web-based configuration tool</span></a> would generate invalid configuration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11861">#11861</a>).</p></li>
<li><p>Fixed a case where pasting into <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span> <span class="pre">read</span></code> would fail with a noisy error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11836">#11836</a>).</p></li>
<li><p>Fixed a case where upgrading fish would break old versions of fish that were still running.</p>
<p>In general, fish still needs to be restarted after it is upgraded,
except for <a class="reference external" href="https://github.com/fish-shell/fish-shell/?tab=readme-ov-file#building-fish-with-embedded-data-experimental">standalone builds</a>.</p>
</li>
</ul>
</section>
<section id="fish-4-1-1-released-september-30-2025">
<h2>fish 4.1.1 (released September 30, 2025)<a class="headerlink" href="#fish-4-1-1-released-september-30-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes the following regressions identified in 4.1.0:</p>
<ul>
<li><p>Many of our new Chinese translations were more confusing than helpful; they have been fixed or removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11833">#11833</a>).</p>
<p>Note that you can work around this type of issue by configuring fish’s <a class="reference internal" href="cmds/_.html"><span class="doc">message localization</span></a>:
if your environment contains something like <code class="docutils literal notranslate"><span class="pre">LANG=zh_CN.UTF-8</span></code>,
you can use <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">LC_MESSAGES</span> <span class="pre">en</span></code> to use English messages inside fish.
This will not affect fish’s child processes unless <code class="docutils literal notranslate"><span class="pre">LC_MESSAGES</span></code> was already exported.</p>
</li>
<li><p>Some <a class="reference internal" href="cmds/fish_config.html"><span class="doc">fish_config</span></a> subcommands for showing prompts and themes had been broken in standalone Linux builds (those using the <code class="docutils literal notranslate"><span class="pre">embed-data</span></code> cargo feature), which has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11832">#11832</a>).</p></li>
<li><p>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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11841">#11841</a>).</p></li>
<li><p>A WezTerm <a class="reference external" href="https://github.com/wezterm/wezterm/issues/6087">issue breaking shifted key input</a> has resurfaced on some versions of WezTerm; our workaround has been extended to cover all versions for now (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11204">#11204</a>).</p></li>
<li><p>Fixed a crash in <a class="reference internal" href="cmds/fish_config.html"><span class="doc">the web-based configuration tool</span></a> when using the new underline styles (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11840">#11840</a>).</p></li>
</ul>
</section>
<section id="fish-4-1-0-released-september-27-2025">
<h2>fish 4.1.0 (released September 27, 2025)<a class="headerlink" href="#fish-4-1-0-released-september-27-2025" title="Link to this heading">¶</a></h2>
<section id="id25">
<h3>Notable improvements and fixes<a class="headerlink" href="#id25" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Compound commands (<code class="docutils literal notranslate"><span class="pre">begin;</span> <span class="pre">echo</span> <span class="pre">1;</span> <span class="pre">echo</span> <span class="pre">2;</span> <span class="pre">end</span></code>) can now be written using braces (<code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">echo1;</span> <span class="pre">echo</span> <span class="pre">2</span> <span class="pre">}</span></code>), like in other shells.</p></li>
<li><p>fish now supports transient prompts: if <span class="target" id="index-7"></span><a class="reference internal" href="language.html#envvar-fish_transient_prompt"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_transient_prompt</span></code></a> is set to 1, fish will reexecute prompt functions with the <code class="docutils literal notranslate"><span class="pre">--final-rendering</span></code> argument before running a commandline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11153">#11153</a>).</p></li>
<li><p>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” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11250">#11250</a>).</p></li>
<li><p>Self-installing builds as created by e.g. <code class="docutils literal notranslate"><span class="pre">cargo</span> <span class="pre">install</span></code> no longer install other files, see <a class="reference internal" href="#changelog-4-1-embedded"><span class="std std-ref">below</span></a>.</p></li>
<li><p>Our gettext-based message-localization has been reworked,
adding translations to self-installing builds; see <a class="reference internal" href="#changelog-4-1-gettext"><span class="std std-ref">below</span></a>.</p></li>
</ul>
</section>
<section id="id26">
<h3>Deprecations and removed features<a class="headerlink" href="#id26" title="Link to this heading">¶</a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">--background=COLOR</span></code> no 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 use <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">save</span> <span class="pre">&quot;fish</span> <span class="pre">default&quot;</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">{echo,echo}</span></code> or <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">echo,</span> <span class="pre">echo</span> <span class="pre">}</span></code> are no longer interpreted as brace expansion tokens but as <a class="reference internal" href="cmds/begin.html"><span class="doc">compound commands</span></a>.</p></li>
<li><p>Terminfo-style key names (<code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">-k</span> <span class="pre">nul</span></code>) are no longer supported. They had been superseded by fish’s <a class="reference internal" href="cmds/bind.html"><span class="doc">own key names</span></a> since 4.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11342">#11342</a>).</p></li>
<li><p>fish no longer reads the terminfo database, so its behavior is generally no longer affected by the <span class="target" id="index-8"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">TERM</span></code> environment variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11344">#11344</a>).
For the time being, this change can be reversed via the <code class="docutils literal notranslate"><span class="pre">ignore-terminfo</span></code> <a class="reference internal" href="language.html#featureflags"><span class="std std-ref">feature flag</span></a>.
To do so, run the following once and restart fish:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">no-ignore-terminfo</span>
</pre></div>
</div>
</li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">--install</span></code> option when fish is built as self-installing is removed, see <a class="reference internal" href="#changelog-4-1-embedded"><span class="std std-ref">below</span></a>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">ff0000</span></code> now outputs 24-bit RGB true-color even if <span class="target" id="index-9"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">COLORTERM</span></code> is unset.
One can override this by setting <span class="target" id="index-10"></span><a class="reference internal" href="language.html#envvar-fish_term24bit"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_term24bit</span></code></a> to 0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11372">#11372</a>).</p></li>
<li><p>fish now requires the terminal to respond to queries for the <a class="reference internal" href="terminal-compatibility.html#term-compat-primary-da"><span class="std std-ref">Primary Device Attribute</span></a>.
For now, this can be reversed via a <a class="reference internal" href="language.html#featureflags"><span class="std std-ref">feature flag</span></a>,
by running (once) <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-Ua</span> <span class="pre">fish_features</span> <span class="pre">no-query-term</span></code> and restarting fish.</p></li>
<li><p>Users of GNU screen may experience <a class="reference internal" href="terminal-compatibility.html#term-compat-dcs-gnu-screen"><span class="std std-ref">minor glitches</span></a> when starting fish.</p></li>
</ul>
</section>
<section id="id27">
<h3>Scripting improvements<a class="headerlink" href="#id27" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <a class="reference internal" href="cmds/argparse.html"><span class="doc">argparse</span></a> builtin has seen many improvements, see <a class="reference internal" href="#changelog-4-1-argparse"><span class="std std-ref">below</span></a>.</p></li>
<li><p>The <a class="reference internal" href="cmds/string-pad.html"><span class="doc">string pad</span></a> command now has a <code class="docutils literal notranslate"><span class="pre">-C/--center</span></code> option.</p></li>
<li><p>The <a class="reference internal" href="cmds/psub.html"><span class="doc">psub</span></a> command now allows combining <code class="docutils literal notranslate"><span class="pre">--suffix</span></code> with <code class="docutils literal notranslate"><span class="pre">--fifo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11729">#11729</a>).</p></li>
<li><p>The <a class="reference internal" href="cmds/read.html"><span class="doc">read</span></a> builtin has learned the <code class="docutils literal notranslate"><span class="pre">--tokenize-raw</span></code> option to tokenize without quote removal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11084">#11084</a>).</p></li>
</ul>
</section>
<section id="id28">
<h3>Interactive improvements<a class="headerlink" href="#id28" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Autosuggestions are now also provided in multi-line command lines. Like <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd>, these operate only on the current line.</p></li>
<li><p>Autosuggestions used to not suggest multi-line command-lines from history; now autosuggestions include individual lines from multi-line command-lines.</p></li>
<li><p>The history pager search now preserves ordering between <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> forward and <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> backward searches.</p></li>
<li><p>Instead of highlighting events by flashing <em>all text to the left of the cursor</em>,
failing history token search (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">.</kbd>) flashes the associated token,
failing tab-completion flashes the to-be-completed token (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11050">#11050</a>),
deleting an autosuggestion (<kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd>) flashes the suggestion,
and all other scenarios flash the full command line.</p></li>
<li><p>Pasted commands are now stripped of any <code class="code docutils literal notranslate"><span class="pre">$ </span></code> command prefixes, to help pasting code snippets.</p></li>
<li><p>Builtin help options (e.g. <code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--help</span></code>) now use <code class="docutils literal notranslate"><span class="pre">man</span></code> directly, meaning that variables like <span class="target" id="index-11"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">MANWIDTH</span></code> are respected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11786">#11786</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> will now edit copied functions directly, instead of the file where <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--copy</span></code> was invoked. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11614">#11614</a>)</p></li>
<li><p>Added a simple <code class="docutils literal notranslate"><span class="pre">fish_jj_prompt</span></code> which reduces visual noise in the prompt inside <a class="reference external" href="https://jj-vcs.github.io/jj/latest/">Jujutsu</a> repositories that are colocated with Git.</p></li>
</ul>
<section id="id29">
<h4>New or improved bindings<a class="headerlink" href="#id29" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>On non-macOS systems, <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">left</kbd>, <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">right</kbd>, <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">backspace</kbd> and <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> no longer operate on punctuation-delimited words but on whole arguments, possibly including special characters like <code class="docutils literal notranslate"><span class="pre">/</span></code> and quoted spaces.
On macOS, the corresponding <kbd class="kbd docutils literal notranslate">ctrl-</kbd> prefixed keys operate on whole arguments.
Word operations are still available via the other respective modifier, just like in most web browsers.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd> (undo) after executing a command will restore the previous cursor position instead of placing the cursor at the end of the command line.</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> binding will now also use <code class="docutils literal notranslate"><span class="pre">run0</span></code> if available.</p></li>
<li><p>Some mouse support has been added: the OSC 133 prompt marking feature has learned about kitty’s <code class="docutils literal notranslate"><span class="pre">click_events=1</span></code> flag, which allows moving fish’s cursor by clicking in the command line,
and selecting pager items (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10932">#10932</a>).</p></li>
<li><p>Before clearing the screen and redrawing, <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> now pushes all text located above the prompt to the terminal’s scrollback,
via a new special input function <a class="reference internal" href="cmds/bind.html#special-input-functions-scrollback-push"><span class="std std-ref">scrollback-push</span></a>.
For compatibility with terminals that do not implement ECMA-48’s <a class="reference internal" href="terminal-compatibility.html#term-compat-indn"><span class="std std-ref">SCROLL UP</span></a> command,
this function is only used if the terminal advertises support for that via <a class="reference internal" href="terminal-compatibility.html#term-compat-xtgettcap"><span class="std std-ref">XTGETTCAP</span></a>.</p></li>
<li><p>Vi mode has learned <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">a</kbd> (increment) and <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> (decrement) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11570">#11570</a>).</p></li>
</ul>
</section>
<section id="completions">
<h4>Completions<a class="headerlink" href="#completions" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">git</span></code> completions now show the remote URL as description when completing remotes.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">systemctl</span></code> completions no longer print escape codes if <code class="docutils literal notranslate"><span class="pre">SYSTEMD_COLORS</span></code> happens to be set (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11465">#11465</a>).</p></li>
<li><p>Added and improved many completion scripts, notably <code class="docutils literal notranslate"><span class="pre">tmux</span></code>.</p></li>
</ul>
</section>
<section id="id30">
<h4>Improved terminal support<a class="headerlink" href="#id30" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Support for double, curly, dotted and dashed underlines, for use in <code class="docutils literal notranslate"><span class="pre">fish_color_*</span></code> variables and the <a class="reference internal" href="cmds/set_color.html"><span class="doc">set_color builtin</span></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10957">#10957</a>).</p></li>
<li><p>Underlines can now be colored independent of text (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7619">#7619</a>).</p></li>
<li><p>New documentation page <a class="reference internal" href="terminal-compatibility.html"><span class="doc">Terminal Compatibility</span></a> (also accessible via <code class="docutils literal notranslate"><span class="pre">man</span> <span class="pre">fish-terminal-compatibility</span></code>) lists the terminal control sequences used by fish.</p></li>
</ul>
</section>
</section>
<section id="id31">
<h3>Other improvements<a class="headerlink" href="#id31" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Updated Chinese and German translations.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span> <span class="pre">--dump-parse-tree</span></code> now emits simple metrics about the tree including its memory consumption.</p></li>
<li><p>We added some tools to improve development workflows, for example <code class="docutils literal notranslate"><span class="pre">build_tools/{check,update_translations,release}.sh</span></code> and <code class="docutils literal notranslate"><span class="pre">tests/test_driver.py</span></code>.
In conjunction with <code class="docutils literal notranslate"><span class="pre">cargo</span></code>, these enable almost all day-to-day development tasks without using CMake.</p></li>
</ul>
</section>
<section id="for-distributors">
<h3>For distributors<a class="headerlink" href="#for-distributors" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Builtin commands that support the <code class="docutils literal notranslate"><span class="pre">--help</span></code> option now require the <code class="docutils literal notranslate"><span class="pre">man</span></code> program.
The direct dependency on <code class="docutils literal notranslate"><span class="pre">mandoc</span></code> and <code class="docutils literal notranslate"><span class="pre">nroff</span></code> has been removed.</p></li>
<li><p>fish no longer uses gettext MO files, see <a class="reference internal" href="#changelog-4-1-gettext"><span class="std std-ref">below</span></a>.
If you have use cases which are incompatible with our new approach, please let us know.</p></li>
<li><p>The <a class="reference internal" href="cmds/fish_indent.html"><span class="doc">fish_indent</span></a> and <a class="reference internal" href="cmds/fish_key_reader.html"><span class="doc">fish_key_reader</span></a> 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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10876">#10876</a>).</p></li>
<li><p>The CMake build configuration has been simplified and no longer second-guesses rustup.
It will run rustc and cargo via <span class="target" id="index-12"></span><a class="reference internal" href="language.html#envvar-PATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></a> or in ~/.cargo/bin/.
If that doesn’t match your setup, set the Rust_COMPILER and Rust_CARGO CMake variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11328">#11328</a>).</p></li>
<li><p>Cygwin support has been reintroduced, since <a class="reference external" href="https://github.com/rust-lang/rust/pull/134999">Rust gained a Cygwin target</a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11238">#11238</a>).</p></li>
<li><p>CMake 3.15 is now required.</p></li>
</ul>
</section>
<section id="changes-to-self-installing-builds">
<span id="changelog-4-1-embedded"></span><h3>Changes to self-installing builds<a class="headerlink" href="#changes-to-self-installing-builds" title="Link to this heading">¶</a></h3>
<p>The self-installing build type introduced in fish 4.0 has been changed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11143">#11143</a>).
Now fish built with embedded data will just read the data straight from its own binary or write it out to temporary files when necessary, instead of requiring an installation step on start.
That means it is now possible to build fish as a single file and copy it to any system with a compatible CPU architecture, including as a different user, without extracting any files.
As before, this is the default when building via <code class="docutils literal notranslate"><span class="pre">cargo</span></code>, and disabled when building via CMake.
For packagers we continue to recommend CMake.</p>
<p>Note: When fish is built like this, the <span class="target" id="index-13"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">__fish_data_dir</span></code> variable will be empty because that directory no longer has meaning.
You should generally not need these files.
For example, if you want to make sure that completions for “foo” are loaded, use <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C&quot;foo</span> <span class="pre">&quot;</span> <span class="pre">&gt;/dev/null</span></code>  instead).
The raw files are still exposed via <a class="reference internal" href="cmds/status.html#status-get-file"><span class="std std-ref">status subcommands</span></a>, mainly for fish’s internal use, but you can also use them as a last resort.</p>
<p>Remaining benefits of a full installation (as currently done by CMake) are:</p>
<ul class="simple">
<li><p>man pages like <code class="docutils literal notranslate"><span class="pre">fish(1)</span></code> in standard locations, easily accessible from outside fish.</p></li>
<li><p>a local copy of the HTML documentation, typically accessed via the <a class="reference internal" href="cmds/help.html"><span class="doc">help</span></a> function.
In builds with embedded data, <code class="docutils literal notranslate"><span class="pre">help</span></code> will redirect to e.g. <a class="reference external" href="https://fishshell.com/docs/current/">https://fishshell.com/docs/current/</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> as separate files, making them easily accessible outside fish</p></li>
<li><p>an (empty) <code class="docutils literal notranslate"><span class="pre">/etc/fish/config.fish</span></code> as well as empty directories <code class="docutils literal notranslate"><span class="pre">/etc/fish/{functions,completions,conf.d}</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$PREFIX/share/pkgconfig/fish.pc</span></code>, which defines directories for configuration-snippets, like <code class="docutils literal notranslate"><span class="pre">vendor_completions.d</span></code></p></li>
</ul>
</section>
<section id="changes-to-gettext-localization">
<span id="changelog-4-1-gettext"></span><h3>Changes to gettext localization<a class="headerlink" href="#changes-to-gettext-localization" title="Link to this heading">¶</a></h3>
<p>We replaced several parts of the gettext functionality with custom implementations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11726">#11726</a>).
Most notably, message extraction, which should now work reliably, and the runtime implementation, where we no longer dynamically link to gettext, but instead use our own implementation, whose behavior is similar to GNU gettext, with some <a class="reference internal" href="cmds/_.html"><span class="doc">minor deviations</span></a>.
Our implementation now fully respects fish variables, so locale variables do not have to be exported for fish localizations to work.
They still have to be exported to inform other programs about language preferences.
The <span class="target" id="index-14"></span><a class="reference internal" href="language.html#envvar-LANGUAGE"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">LANGUAGE</span></code></a> environment variable is now treated as a path variable, meaning it is an implicitly colon-separated list.
While we no longer have any runtime dependency on gettext, we still need gettext tools for building, most notably <code class="docutils literal notranslate"><span class="pre">msgfmt</span></code>.
When building without <code class="docutils literal notranslate"><span class="pre">msgfmt</span></code> available, localization will not work with the resulting executable.
Localization data is no longer sourced at runtime from MO files on the file system, but instead built into the executable.
This is always done, independently of the other data embedding, so all fish executables will have access to all message catalogs, regardless of the state of the file system.
Disabling our new <code class="docutils literal notranslate"><span class="pre">localize-messages</span></code> cargo feature will cause fish to be built without localization support.
CMake builds can continue to use the <code class="docutils literal notranslate"><span class="pre">WITH_GETTEXT</span></code> option, with the same semantics as the <code class="docutils literal notranslate"><span class="pre">localize-messages</span></code> feature.
The current implementation does not provide any configuration options for controlling which language catalogs are built into the executable (other than disabling them all).
As a workaround, you can delete files in the <code class="docutils literal notranslate"><span class="pre">po</span></code> directory before building to exclude unwanted languages.</p>
</section>
<section id="changes-to-the-argparse-builtin">
<span id="changelog-4-1-argparse"></span><h3>Changes to the <a class="reference internal" href="cmds/argparse.html"><span class="doc">argparse</span></a> builtin<a class="headerlink" href="#changes-to-the-argparse-builtin" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now saves recognised options, including option-arguments in <span class="target" id="index-15"></span><a class="reference internal" href="language.html#envvar-argv_opts"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">argv_opts</span></code></a>, allowing them to be forwarded to other commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6466">#6466</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> options can now be marked to be deleted from <span class="target" id="index-16"></span><a class="reference internal" href="language.html#envvar-argv_opts"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">argv_opts</span></code></a> (by adding a <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> at the end of the option spec, before a <code class="docutils literal notranslate"><span class="pre">!</span></code> if present). There is now also a corresponding <code class="docutils literal notranslate"><span class="pre">-d</span></code> / <code class="docutils literal notranslate"><span class="pre">--delete</span></code> option to <code class="docutils literal notranslate"><span class="pre">fish_opt</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span> <span class="pre">--ignore-unknown</span></code> now removes preceding known short options from groups containing unknown options (e.g. when parsing <code class="docutils literal notranslate"><span class="pre">-abc</span></code>, if <code class="docutils literal notranslate"><span class="pre">a</span></code> is known but <code class="docutils literal notranslate"><span class="pre">b</span></code> is not, then <span class="target" id="index-17"></span><a class="reference internal" href="language.html#envvar-argv"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">argv</span></code></a> will contain <code class="docutils literal notranslate"><span class="pre">-bc</span></code>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now has an <code class="docutils literal notranslate"><span class="pre">-u</span></code> / <code class="docutils literal notranslate"><span class="pre">--move-unknown</span></code> option that works like <code class="docutils literal notranslate"><span class="pre">--ignore-unknown</span></code> but preserves unknown options in <span class="target" id="index-18"></span><a class="reference internal" href="language.html#envvar-argv"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">argv</span></code></a>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now has an <code class="docutils literal notranslate"><span class="pre">-S</span></code> / <code class="docutils literal notranslate"><span class="pre">--strict-longopts</span></code> option that forbids abbreviating long options or passing them with a single dash (e.g. if there is a long option called <code class="docutils literal notranslate"><span class="pre">foo</span></code>, <code class="docutils literal notranslate"><span class="pre">--fo</span></code> and <code class="docutils literal notranslate"><span class="pre">--foo</span></code> won’t match it).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now has a <code class="docutils literal notranslate"><span class="pre">-U</span></code> / <code class="docutils literal notranslate"><span class="pre">--unknown-arguments</span></code> option to specify how to parse unknown option’s arguments.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now allows specifying options that take multiple optional values by using <code class="docutils literal notranslate"><span class="pre">=*</span></code> in the option spec (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8432">#8432</a>).
In addition, <code class="docutils literal notranslate"><span class="pre">fish_opt</span></code> has been modified to support such options by using the <code class="docutils literal notranslate"><span class="pre">--multiple-vals</span></code> together with <code class="docutils literal notranslate"><span class="pre">-o</span></code> / <code class="docutils literal notranslate"><span class="pre">--optional-val</span></code>; <code class="docutils literal notranslate"><span class="pre">-m</span></code> is also now acceptable as an abbreviation for <code class="docutils literal notranslate"><span class="pre">--multiple-vals</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_opt</span></code> no longer requires you give a short flag name when defining options, provided you give it a long flag name with more than one character.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> option specifiers for long-only options can now start with <code class="docutils literal notranslate"><span class="pre">/</span></code>, allowing the definition of long options with a single letter. Due to this change, the <code class="docutils literal notranslate"><span class="pre">--long-only</span></code> option to <code class="docutils literal notranslate"><span class="pre">fish_opt</span></code> is now no longer necessary and is deprecated.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_opt</span></code> now has a <code class="docutils literal notranslate"><span class="pre">-v</span></code> / <code class="docutils literal notranslate"><span class="pre">--validate</span></code> option you can use to give a fish script to validate values of the option.</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-4-0-9-released-september-27-2025">
<h2>fish 4.0.9 (released September 27, 2025)<a class="headerlink" href="#fish-4-0-9-released-september-27-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes:</p>
<ul class="simple">
<li><p>a regression in 4.0.6 causing shifted keys to not be inserted on some terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11813">#11813</a>).</p></li>
<li><p>a regression in 4.0.6 causing the build to fail on systems where <code class="docutils literal notranslate"><span class="pre">char</span></code> is unsigned (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11804">#11804</a>).</p></li>
<li><p>a regression in 4.0.0 causing a crash on an invalid <a class="reference internal" href="cmds/bg.html"><span class="doc">bg</span></a> invocation.</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-4-0-8-released-september-18-2025">
<h2>fish 4.0.8 (released September 18, 2025)<a class="headerlink" href="#fish-4-0-8-released-september-18-2025" title="Link to this heading">¶</a></h2>
<p>This release fixes a regression in 4.0.6 that caused user bindings to be shadowed by either fish’s or a plugin’s bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11803">#11803</a>).</p>
</section>
<hr class="docutils" />
<section id="fish-4-0-6-released-september-12-2025">
<h2>fish 4.0.6 (released September 12, 2025)<a class="headerlink" href="#fish-4-0-6-released-september-12-2025" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of issues identified in fish 4.0.2:</p>
<ul class="simple">
<li><p>fish now properly inherits $PATH under Windows WSL2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11354">#11354</a>).</p></li>
<li><p>Remote filesystems are detected properly again on non-Linux systems.</p></li>
<li><p>the <a class="reference internal" href="cmds/printf.html"><span class="doc">printf</span></a> builtin no longer miscalculates width of multi-byte characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11412">#11412</a>).</p></li>
<li><p>For many years, fish has been “relocatable” -- it was possible to move the entire <code class="docutils literal notranslate"><span class="pre">CMAKE_INSTALL_PREFIX</span></code> and fish would use paths relative to its binary.
Only gettext locale paths were still determined purely at compile time, which has been fixed.</p></li>
<li><p>the <a class="reference internal" href="cmds/commandline.html"><span class="doc">commandline</span></a> builtin failed to print the commandline set by a <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-C</span></code> invocation, which broke some completion scripts.
This has been corrected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11423">#11423</a>).</p></li>
<li><p>To work around terminals that fail to parse Operating System Command (OSC) sequences, a temporary feature flag has been added.
It allows you to disable prompt marking (OSC 133) by running (once) <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-Ua</span> <span class="pre">fish_features</span> <span class="pre">no-mark-prompt</span></code> and restarting fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11749">#11749</a>).</p></li>
<li><p>The routines to save history and universal variables have seen some robustness improvements.</p></li>
<li><p>builtin <a class="reference internal" href="cmds/status.html"><span class="doc">status current-command</span></a> no longer prints a trailing blank line.</p></li>
<li><p>A crash displaying multi-line quoted command substitutions has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11444">#11444</a>).</p></li>
<li><p>Commands like <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">fish_complete_path</span> <span class="pre">...</span></code> accidentally disabled completion autoloading, which has been corrected.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nmcli</span></code> completions have been fixed to query network information dynamically instead of only when completing the first time.</p></li>
<li><p>Git completions no longer print an error when no <cite>git-foo</cite> executable is in <span class="target" id="index-19"></span><a class="reference internal" href="language.html#envvar-PATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></a>.</p></li>
<li><p>Custom completions like <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">foo</span> <span class="pre">-l</span> <span class="pre">long</span> <span class="pre">-xa</span> <span class="pre">...</span></code> that use the output of <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-t</span></code>.
on a command-line like <code class="docutils literal notranslate"><span class="pre">foo</span> <span class="pre">--long=</span></code> have been invalidated by a change in 4.0; the completion scripts have been adjusted accordingly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11508">#11508</a>).</p></li>
<li><p>Some completions were misinterpreted, which caused garbage to be displayed in the completion list. This has been fixed.</p></li>
<li><p>fish no longer interprets invalid control sequences from the terminal as if they were <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">[</kbd> or <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">o</kbd> key strokes.</p></li>
<li><p><a class="reference internal" href="cmds/bind.html"><span class="doc">bind</span></a> has been taught about the <kbd class="kbd docutils literal notranslate">printscreen</kbd> and <kbd class="kbd docutils literal notranslate">menu</kbd> keys.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> now deletes the word right of the cursor.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">h</kbd> erases the last word again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11548">#11548</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">left</kbd> <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">right</kbd> were misinterpreted because they send unexpected sequences on some terminals; a workaround has been added.  (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11479">#11479</a>).</p></li>
<li><p>Key bindings like <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">shift-A</span></code> are no longer accepted; use <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">shift-a</span></code> or <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">A</span></code>.</p></li>
<li><p>Key bindings like <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">shift-a</span></code> take precedence over <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">A</span></code> when the key event included the shift modifier.</p></li>
<li><p>Bindings using shift with non-ASCII letters (such as <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">ä</kbd>) are now supported.</p></li>
<li><p>Bindings with modifiers such as <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">ctrl-w</span></code> work again on non-Latin keyboard layouts such as a Russian one.
This is implemented by allowing key events such as <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">ц</kbd> to match bindings of the corresponding Latin key, using the kitty keyboard protocol’s base layout key (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11520">#11520</a>).</p></li>
<li><p>Vi mode: The cursor position after pasting via <kbd class="kbd docutils literal notranslate">p</kbd> has been corrected.</p></li>
<li><p>Vi mode: Trying to replace the last character via <kbd class="kbd docutils literal notranslate">r</kbd> no longer replaces the last-but-one character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11484">#11484</a>).</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-4-0-2-released-april-20-2025">
<h2>fish 4.0.2 (released April 20, 2025)<a class="headerlink" href="#fish-4-0-2-released-april-20-2025" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of issues identified in fish 4.0.1:</p>
<ul class="simple">
<li><p>Completions are quoted, rather than backslash-escaped, only if the completion is unambiguous. Continuing to edit the token is therefore easier (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11271">#11271</a>). This changes the behavior introduced in 4.0.0 where all completions were quoted.</p></li>
<li><p>The warning when the terminfo database can’t be found has been downgraded to a log message. fish will act as if the terminal behaves like xterm-256color, which is correct for the vast majority of cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11277">#11277</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11290">#11290</a>).</p></li>
<li><p>Key combinations using the super (Windows/command) key can now (actually) be bound using the <kbd class="kbd docutils literal notranslate">super-</kbd> prefix (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11217">#11217</a>). This was listed in the release notes for 4.0.1 but did not work correctly.</p></li>
<li><p><a class="reference internal" href="cmds/function.html"><span class="doc">function</span></a> is stricter about argument parsing, rather than allowing additional parameters to be silently ignored (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11295">#11295</a>).</p></li>
<li><p>Using parentheses in the <a class="reference internal" href="cmds/test.html"><span class="doc">test</span></a> builtin works correctly, following a regression in 4.0.0 where they were not recognized (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11387">#11387</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">delete</kbd> in Vi mode when Num Lock is active will work correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11303">#11303</a>).</p></li>
<li><p>Abbreviations cannot alter the command-line contents, preventing a crash (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11324">#11324</a>).</p></li>
<li><p>Improvements to various completions, including new completions for <code class="docutils literal notranslate"><span class="pre">wl-randr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11301">#11301</a>), performance improvements for <code class="docutils literal notranslate"><span class="pre">cargo</span></code> completions by avoiding network requests (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11347">#11347</a>), and other improvements for  <code class="docutils literal notranslate"><span class="pre">btrfs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11320">#11320</a>), <code class="docutils literal notranslate"><span class="pre">cryptsetup</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11315">#11315</a>), <code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11319">#11319</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11322">#11322</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11323">#11323</a>), <code class="docutils literal notranslate"><span class="pre">jj</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11046">#11046</a>), and <code class="docutils literal notranslate"><span class="pre">systemd-analyze</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11314">#11314</a>).</p></li>
<li><p>The Mercurial (<code class="docutils literal notranslate"><span class="pre">hg</span></code>) prompt can handle working directories that contain an embedded newline, rather than producing errors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11348">#11348</a>).</p></li>
<li><p>A number of crashes have been fixed. Triggers include prompts containing backspace characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11280">#11280</a>), history pager search (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11355">#11355</a>), invalid UTF-8 in <a class="reference internal" href="cmds/read.html"><span class="doc">read</span></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11383">#11383</a>), and the <code class="docutils literal notranslate"><span class="pre">kill-selection</span></code> binding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11367">#11367</a>).</p></li>
<li><p>A race condition in the test suite has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11254">#11254</a>), and a test for fish versioning relaxed to support downstream distributors’ modifications (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11173">#11173</a>).</p></li>
<li><p>Small improvements to the documentation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11264">#11264</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11329">#11329</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11361">#11361</a>).</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-4-0-1-released-march-12-2025">
<h2>fish 4.0.1 (released March 12, 2025)<a class="headerlink" href="#fish-4-0-1-released-march-12-2025" title="Link to this heading">¶</a></h2>
<p>This release of fish includes the following improvements compared to fish 4.0.0:</p>
<ul class="simple">
<li><p>Key combinations using the super (Windows/command) key can be bound using the <kbd class="kbd docutils literal notranslate">super-</kbd> prefix (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11217">#11217</a>).</p></li>
<li><p>Konsole’s menu shows the “Open folder with” option again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11198">#11198</a>).</p></li>
<li><dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">$fish_color_search_match</span></code> will now only be applied to the foreground color if it has an explicit foreground. For example, this allows setting::</dt><dd><p>set -g fish_color_search_match --reverse</p>
</dd>
</dl>
</li>
<li><p>Cursor shape commands (<code class="docutils literal notranslate"><span class="pre">\e[2</span> <span class="pre">q</span></code>) are no longer sent in non-interactive shells or in redirections (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11255">#11255</a>).</p></li>
<li><p><a class="reference internal" href="cmds/status.html"><span class="doc">status</span></a> gained a <code class="docutils literal notranslate"><span class="pre">is-interactive-read</span></code> subcommand, to check whether the script is being called from an interactive <a class="reference internal" href="cmds/read.html"><span class="doc">read</span></a> invocation.</p></li>
<li><p>fish’s background tasks are now started in a way that avoids an error on macOS Terminal.app (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11181">#11181</a>).</p></li>
<li><p>Using key combinations within qemu should work correctly.</p></li>
<li><p>Prompts containing control characters no longer cause incorrect display of command lines (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11252">#11252</a>).</p></li>
<li><p>Cancelling the command-line in Vi mode displays correctly again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11261">#11261</a>).</p></li>
<li><p>The acidhub prompt properly displays the git branch again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11179">#11179</a>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">wine</span></code> correctly include files again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11202">#11202</a>).</p></li>
<li><p>On macOS, paths from <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> and <code class="docutils literal notranslate"><span class="pre">/etc/manpaths</span></code> containing colons are handled correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10684">#10684</a>). This functionality was included in the 4.0.0 release notes but was missing from the source code.</p></li>
<li><p>The XTerm <code class="docutils literal notranslate"><span class="pre">modifyOtherKeys</span></code> keyboard encoding is no longer used under WezTerm, as it does not work correctly in all layouts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11204">#11204</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">option</kbd>-<kbd class="kbd docutils literal notranslate">left</kbd> and other similar keys should now work in iTerm versions before 3.5.12; the kitty keyboard protocol is now disabled on these versions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11192">#11192</a>).</p></li>
<li><p>The kitty keyboard protocol is no longer used under Midnight Commander, as it does not work correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10640">#10640</a>).</p></li>
<li><p>fish now sends the commandline along with the OSC 133 semantic prompt command start sequence. This fixes a test in the kitty terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11203">#11203</a>).</p></li>
<li><p>Git completions for third-party commands like “git-absorb” are completed correctly again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11205">#11205</a>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">diskutil</span></code> no longer produce an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11201">#11201</a>).</p></li>
<li><p>The output of certain error messages no longer prints newlines to standard output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11248">#11248</a>).</p></li>
<li><p>A number of crashes have been fixed, including file names longer than 255 bytes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11221">#11221</a>), using fish on a btrfs filesystem (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11219">#11219</a>), history files that do not have the expected format (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11236">#11236</a>), and pasting into an empty command line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11256">#11256</a>).</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-4-0-0-released-february-27-2025">
<h2>fish 4.0.0 (released February 27, 2025)<a class="headerlink" href="#fish-4-0-0-released-february-27-2025" title="Link to this heading">¶</a></h2>
<p>fish’s core code has been ported from C++ to Rust (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9512">#9512</a>). This means a large change in dependencies and how to build fish. However, there should be no direct impact on users. Packagers should see the <a class="reference internal" href="#rust-packaging"><span class="std std-ref">For Distributors</span></a> section at the end.</p>
<section id="notable-backwards-incompatible-changes">
<h3>Notable backwards-incompatible changes<a class="headerlink" href="#notable-backwards-incompatible-changes" title="Link to this heading">¶</a></h3>
<ul>
<li><p>As part of a larger binding rework, <code class="docutils literal notranslate"><span class="pre">bind</span></code> gained a new key notation.
In most cases the old notation should keep working, but in rare cases you may have to change a <code class="docutils literal notranslate"><span class="pre">bind</span></code> invocation to use the new notation.
See <a class="reference internal" href="#changelog-4-0-new-bindings"><span class="std std-ref">below</span></a> for details.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> now calls a new bind function called <code class="docutils literal notranslate"><span class="pre">clear-commandline</span></code>. The old behavior, which leaves a “^C” marker, is available as <code class="docutils literal notranslate"><span class="pre">cancel-commandline</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10935">#10935</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">random</span></code> will produce different values from previous versions of fish when used with the same seed, and will work more sensibly with small seed numbers.
The seed was never guaranteed to give the same result across systems,
so we do not expect this to have a large impact (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9593">#9593</a>).</p></li>
<li><p>Variables in command position that expand to a subcommand keyword are now forbidden to fix a likely user error.
For example, <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">editor</span> <span class="pre">command</span> <span class="pre">emacs;</span> <span class="pre">$editor</span></code> is no longer allowed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10249">#10249</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--handlers</span></code> will now list handlers in a different order.
Now it is definition order, first to last, where before it was last to first.
This was never specifically defined, and we recommend not relying on a specific order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9944">#9944</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">qmark-noglob</span></code> feature, introduced in fish 3.0, is enabled by default. That means <code class="docutils literal notranslate"><span class="pre">?</span></code> will no longer act as a single-character glob.
You can, for the time being, turn it back on by adding <code class="docutils literal notranslate"><span class="pre">no-qmark-noglob</span></code> to <span class="target" id="index-20"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_features</span></code> and restarting fish:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">no-qmark-noglob</span>
</pre></div>
</div>
<p>The flag will eventually be made read-only, making it impossible to turn off.</p>
</li>
<li><p>Terminals that fail to ignore unrecognized OSC or CSI sequences may display garbage. We know cool-retro-term and emacs’ ansi-term are affected, but most mainstream terminals are not.</p></li>
<li><p>fish no longer searches directories from the Windows system/user <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> environment variable for Linux executables. To execute Linux binaries by name (i.e. not with a relative or absolute path) from a Windows folder, make sure the <code class="docutils literal notranslate"><span class="pre">/mnt/c/...</span></code> path is explicitly added to <code class="docutils literal notranslate"><span class="pre">$fish_user_paths</span></code> and not just automatically appended to <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> by <code class="docutils literal notranslate"><span class="pre">wsl.exe</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10506">#10506</a>).</p></li>
<li><p>Under Microsoft Windows Subsystem for Linux 1 (not WSL 2), backgrounded jobs that have not been disowned and do not terminate on their own after a <code class="docutils literal notranslate"><span class="pre">SIGHUP</span></code> + <code class="docutils literal notranslate"><span class="pre">SIGCONT</span></code> sequence will be explicitly killed by fish on exit (after the usual prompt to close or disown them) to work around a WSL 1 deficiency that sees backgrounded processes that run into <code class="docutils literal notranslate"><span class="pre">SIGTTOU</span></code> remain in a suspended state indefinitely (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5263">#5263</a>). The workaround is to explicitly <code class="docutils literal notranslate"><span class="pre">disown</span></code> processes you wish to outlive the shell session.</p></li>
</ul>
</section>
<section id="id32">
<h3>Notable improvements and fixes<a class="headerlink" href="#id32" title="Link to this heading">¶</a></h3>
<ul id="changelog-4-0-new-bindings">
<li><p>fish now requests XTerm’s <code class="docutils literal notranslate"><span class="pre">modifyOtherKeys</span></code> keyboard encoding and <a class="reference external" href="https://sw.kovidgoyal.net/kitty/keyboard-protocol/">kitty keyboard protocol’s</a> progressive enhancements (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10359">#10359</a>).
Depending on terminal support, this allows to binding more key combinations, including arbitrary combinations of modifiers <kbd class="kbd docutils literal notranslate">ctrl</kbd>, <kbd class="kbd docutils literal notranslate">alt</kbd> and <kbd class="kbd docutils literal notranslate">shift</kbd>, and distinguishing (for example) <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">i</kbd> from <kbd class="kbd docutils literal notranslate">tab</kbd>.</p>
<p>Additionally, <code class="docutils literal notranslate"><span class="pre">bind</span></code> now supports a human-readable syntax in addition to byte sequences.
This includes modifier names, and names for keys like <kbd class="kbd docutils literal notranslate">enter</kbd> and <kbd class="kbd docutils literal notranslate">backspace</kbd>.
For example</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">up</span> <span class="pre">'do</span> <span class="pre">something'</span></code> binds the up-arrow key instead of a two-key sequence (“u” and then “p”)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">ctrl-x,alt-c</span> <span class="pre">'do</span> <span class="pre">something'</span></code> binds a sequence of two keys.</p></li>
</ul>
<p>Any key argument that starts with an ASCII control character (like <code class="docutils literal notranslate"><span class="pre">\e</span></code> or <code class="docutils literal notranslate"><span class="pre">\cX</span></code>) or is up to 3 characters long, not a named key, and does not contain <code class="docutils literal notranslate"><span class="pre">,</span></code> or <code class="docutils literal notranslate"><span class="pre">-</span></code> will be interpreted in the old syntax to keep compatibility for the majority of bindings.</p>
<p>Keyboard protocols can be turned off by disabling the “keyboard-protocols” feature flag:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">no-keyboard-protocols</span>
</pre></div>
</div>
<p>This is a temporary measure to work around buggy terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11056">#11056</a>), which appear to be relatively rare.
Use this if something like “=0” or “=5u” appears in your commandline mysteriously.</p>
</li>
<li><p>fish can now be built as a self-installing binary (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10367">#10367</a>). That means it can be easily built on one system and copied to another, where it can extract supporting files.
To do this, run:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">cargo</span><span class="w"> </span><span class="no">install</span><span class="w"> </span><span class="no">--path</span><span class="w"> </span><span class="no">.</span><span class="w"> </span><span class="c"># in a clone of the fish repository</span>
<span class="c"># or `cargo build --release` and copy target/release/fish{,_indent,_key_reader} wherever you want</span>
</pre></div>
</div>
<p>The first time it runs interactively, it will extract all the data files to  <code class="docutils literal notranslate"><span class="pre">~/.local/share/fish/install/</span></code>. A specific path can be used for the data files with <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--install=PATH</span></code> To uninstall, remove the fish binaries and that directory.</p>
<p>This build system is experimental; the main build system, using <code class="docutils literal notranslate"><span class="pre">cmake</span></code>, remains the recommended approach for packaging and installation to a prefix.</p>
</li>
<li><p>A new function <code class="docutils literal notranslate"><span class="pre">fish_should_add_to_history</span></code> can be overridden to decide whether a command should be added to the history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10302">#10302</a>).</p></li>
<li><p>Bindings can now mix special input functions and shell commands, so <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">ctrl-g</span> <span class="pre">expand-abbr</span> <span class="pre">&quot;commandline</span> <span class="pre">-i</span> <span class="pre">\n&quot;</span></code> works as expected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8186">#8186</a>).</p></li>
<li><p>Special input functions run from bindings via <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-f</span></code> are now applied immediately, instead of after the currently executing binding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3031">#3031</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10126">#10126</a>).
For example, <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-i</span> <span class="pre">foo;</span> <span class="pre">commandline</span> <span class="pre">|</span> <span class="pre">grep</span> <span class="pre">foo</span></code> succeeds now.</p></li>
<li><p>Undo history is no longer truncated after every command, but kept for the lifetime of the shell process.</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> history search now uses glob syntax (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10131">#10131</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> history search now operates only on the line or command substitution at cursor, making it easier to combine commands from history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9751">#9751</a>).</p></li>
<li><p>Abbreviations can now be restricted to specific commands. For instance:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">abbr</span><span class="w"> </span><span class="no">--add</span><span class="w"> </span><span class="no">--command</span><span class="w"> </span><span class="no">git</span><span class="w"> </span><span class="no">back</span><span class="w"> </span><span class="s1">&#39;reset --hard HEAD^&#39;</span>
</pre></div>
</div>
<p>will expand “back” to <code class="docutils literal notranslate"><span class="pre">reset</span> <span class="pre">--hard</span> <span class="pre">HEAD^</span></code>, but only when the command is <code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9411">#9411</a>).</p>
</li>
</ul>
</section>
<section id="id33">
<h3>Deprecations and removed features<a class="headerlink" href="#id33" title="Link to this heading">¶</a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--tokenize</span></code> (short option <code class="docutils literal notranslate"><span class="pre">-o</span></code>) has been deprecated in favor of <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--tokens-expanded</span></code> (short option <code class="docutils literal notranslate"><span class="pre">-x</span></code>) which expands variables and other shell syntax, removing the need to use <a class="reference internal" href="cmds/eval.html"><span class="doc">eval</span></a> in completion scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10212">#10212</a>).</p></li>
<li><p>Two new feature flags:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">remove-percent-self</span></code> (see <code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">features</span></code>) disables PID expansion of <code class="docutils literal notranslate"><span class="pre">%self</span></code>, which has been supplanted by <code class="docutils literal notranslate"><span class="pre">$fish_pid</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10262">#10262</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test-require-arg</span></code> disables <code class="docutils literal notranslate"><span class="pre">test</span></code>’s one-argument mode. That means <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-n</span></code> without an additional argument will return false, <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-z</span></code> will keep returning true. Any other option without an argument, anything that is not an option and no argument will be an error. This also goes for <code class="docutils literal notranslate"><span class="pre">[</span></code>, test’s alternate name.
This is a frequent source of confusion and so we are breaking with POSIX explicitly in this regard.
In addition to the feature flag, there is a debug category “deprecated-test”. Running fish with <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-d</span> <span class="pre">deprecated-test</span></code> will show warnings whenever a <code class="docutils literal notranslate"><span class="pre">test</span></code> invocation that would change is used. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10365">#10365</a>).</p></li>
</ul>
<p>These can be enabled with:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">remove-percent-self</span><span class="w"> </span><span class="no">test-require-arg</span>
</pre></div>
</div>
<p>We intend to enable them by default in future, and after that eventually make them read-only.</p>
</li>
<li><p>Specifying key names as terminfo names (using the <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">-k</span></code> syntax) is deprecated and may be removed in a future version.</p></li>
<li><p>When a terminal pastes text into fish using bracketed paste, fish used to switch to a special <code class="docutils literal notranslate"><span class="pre">paste</span></code> bind mode.
This bind mode has been removed. The behavior on paste is no longer configurable.</p></li>
<li><p>When an interactive fish is stopped or terminated by a signal that cannot be caught (SIGSTOP or SIGKILL), it may leave the terminal in a state where keypresses with modifiers are sent as CSI u sequences, instead of traditional control characters or escape sequences that are recognized by Readline and compatible programs, such as bash and python.
If this happens, you can use the <code class="docutils literal notranslate"><span class="pre">reset</span></code> command from <code class="docutils literal notranslate"><span class="pre">ncurses</span></code> to restore the terminal state.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span> <span class="pre">--verbose</span></code> no longer shows timing information.</p></li>
<li><p>Terminal information is no longer read from hashed terminfo databases, or termcap databases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10269">#10269</a>). The vast majority of systems use a non-hashed terminfo database, which is still supported.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">source</span></code> returns an error if used without a filename or pipe/redirection (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10774">#10774</a>).</p></li>
</ul>
</section>
<section id="id34">
<h3>Scripting improvements<a class="headerlink" href="#id34" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">for</span></code> loops will no longer remember local variables from the previous iteration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10525">#10525</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">append</span></code> subcommand appends a command to the history, without executing it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4506">#4506</a>).</p></li>
<li><p>A new redirection: <code class="docutils literal notranslate"><span class="pre">&lt;?</span> <span class="pre">/path/to/file</span></code> will try opening the file as input, and if it doesn’t succeed silently uses <code class="docutils literal notranslate"><span class="pre">/dev/null</span></code> instead.
This can help with checks like <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-f</span> <span class="pre">/path/to/file;</span> <span class="pre">and</span> <span class="pre">string</span> <span class="pre">replace</span> <span class="pre">foo</span> <span class="pre">bar</span> <span class="pre">&lt;</span> <span class="pre">/path/to/file</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10387">#10387</a>)</p></li>
<li><p>A new option <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--tokens-raw</span></code> prints a list of tokens without any unescaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10212">#10212</a>).</p></li>
<li><p>A new option <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--showing-suggestion</span></code> tests whether an autosuggestion is currently displayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10586">#10586</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> now show that a function was copied and its source, rather than solely <code class="docutils literal notranslate"><span class="pre">Defined</span> <span class="pre">interactively</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6575">#6575</a>).</p></li>
<li><p>Stack trace now shows line numbers for copied functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6575">#6575</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">foo</span> <span class="pre">&amp;</span> <span class="pre">&amp;&amp;</span> <span class="pre">bar</span></code> is now a syntax error, like in other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9911">#9911</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">-e</span> <span class="pre">foo;</span> <span class="pre">end</span></code> now prints a more accurate error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10000">#10000</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> into a directory that is not readable but accessible (permissions <code class="docutils literal notranslate"><span class="pre">--x</span></code>) is now possible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10432">#10432</a>).</p></li>
<li><p>An integer overflow in <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> leading to a near-infinite loop has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9899">#9899</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">shorten</span></code> behaves better in the presence of non-printable characters, including fixing an integer overflow that shortened strings more than intended (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9854">#9854</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">pad</span></code> no longer allows non-printable characters as padding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9854">#9854</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> now allows omission of <code class="docutils literal notranslate"><span class="pre">-n</span></code> when the first argument is an integer (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10282">#10282</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> and <code class="docutils literal notranslate"><span class="pre">replace</span></code> have a new <code class="docutils literal notranslate"><span class="pre">--max-matches</span></code> option to return as soon as the specified number of matches have been identified, which can improve performance in scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10587">#10587</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--handlers-type</span> <span class="pre">caller-exit</span></code> once again lists functions defined as <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-job-exit</span> <span class="pre">caller</span></code>, rather than them being listed by <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--handlers-type</span> <span class="pre">process-exit</span></code>.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--no-event</span></code> option sets or erases variables without triggering a variable event. This can be useful to change a variable in an event handler (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10480">#10480</a>).</p></li>
<li><p>Commas in command substitution output are no longer used as separators in brace expansion, preventing a surprising expansion in some cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5048">#5048</a>).</p></li>
<li><p>Universal variables can now store strings containing invalid UTF-8 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10313">#10313</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">path</span> <span class="pre">basename</span> <span class="pre">-E</span></code> option that causes it to return the basename (“filename” with the directory prefix removed) with the final extension (if any) also removed. This is a shorter version of <code class="docutils literal notranslate"><span class="pre">path</span> <span class="pre">change-extension</span> <span class="pre">&quot;&quot;</span> <span class="pre">(path</span> <span class="pre">basename</span> <span class="pre">$foo)</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10521">#10521</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">--scale-mode</span></code> option to select <code class="docutils literal notranslate"><span class="pre">truncate</span></code>, <code class="docutils literal notranslate"><span class="pre">round</span></code>, <code class="docutils literal notranslate"><span class="pre">floor</span></code>, <code class="docutils literal notranslate"><span class="pre">ceiling</span></code> as you wish; the default value is <code class="docutils literal notranslate"><span class="pre">truncate</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9117">#9117</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">random</span></code> is now less strict about its arguments, allowing a start larger or equal to the end. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10879">#10879</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--argument-names</span></code> now produces an error if a read-only variable name is used, rather than simply ignoring it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10842">#10842</a>).</p></li>
<li><p>Tilde expansion in braces (that is, <code class="docutils literal notranslate"><span class="pre">{~,}</span></code>) works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10610">#10610</a>).</p></li>
</ul>
</section>
<section id="id35">
<h3>Interactive improvements<a class="headerlink" href="#id35" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Autosuggestions were sometimes not shown after recalling a line from history, which has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10287">#10287</a>).</p></li>
<li><p>Up-arrow search matches -- which are highlighted in reverse colors -- are no longer syntax-highlighted, to fix bad contrast with the search match highlighting.</p></li>
<li><p>Command abbreviations (those with <code class="docutils literal notranslate"><span class="pre">--position</span> <span class="pre">command</span></code> or without a <code class="docutils literal notranslate"><span class="pre">--position</span></code>) now also expand after decorators like <code class="docutils literal notranslate"><span class="pre">command</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10396">#10396</a>).</p></li>
<li><p>Abbreviations now expand after process separators like <code class="docutils literal notranslate"><span class="pre">;</span></code> and <code class="docutils literal notranslate"><span class="pre">|</span></code>. This fixes a regression in version 3.6 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9730">#9730</a>).</p></li>
<li><p>When exporting interactively defined functions (using <code class="docutils literal notranslate"><span class="pre">type</span></code>, <code class="docutils literal notranslate"><span class="pre">functions</span></code> or <code class="docutils literal notranslate"><span class="pre">funcsave</span></code>) the function body is now indented, to match the interactive command line editor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8603">#8603</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> (<code class="docutils literal notranslate"><span class="pre">fish_clipboard_copy</span></code>) on multiline commands now includes indentation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10437">#10437</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd> (<code class="docutils literal notranslate"><span class="pre">fish_clipboard_paste</span></code>) now strips ASCII control characters from the pasted text.
This is consistent with normal keyboard input (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5274">#5274</a>).</p></li>
<li><p>When a command like <code class="docutils literal notranslate"><span class="pre">fg</span> <span class="pre">%2</span></code> fails to find the given job, it no longer behaves as if no job spec was given (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9835">#9835</a>).</p></li>
<li><p>Redirection in command position like <code class="docutils literal notranslate"><span class="pre">&gt;echo</span></code> is now highlighted as error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8877">#8877</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_vi_cursor</span></code> now works properly inside the prompt created by builtin <code class="docutils literal notranslate"><span class="pre">read</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10088">#10088</a>).</p></li>
<li><p>fish no longer fails to open a FIFO if interrupted by a terminal resize signal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10250">#10250</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--help</span></code> and friends no longer ignore redirections. This fixes a regression in version 3.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10274">#10274</a>).</p></li>
<li><p>Measuring a command with <code class="docutils literal notranslate"><span class="pre">time</span></code> now considers the time taken for command substitution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9100">#9100</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_add_path</span></code> now automatically enables verbose mode when used interactively (in the command line), in an effort to be clearer about what it does (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10532">#10532</a>).</p></li>
<li><p>fish no longer adopts TTY modes of failed commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10603">#10603</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-e</span> <span class="pre">cmd</span></code> now prevents autoloading completions for <code class="docutils literal notranslate"><span class="pre">cmd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6716">#6716</a>).</p></li>
<li><p>fish’s default color scheme no longer uses the color “blue”, as it has bad contrast against the background in a few terminal’s default palettes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10758">#10758</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10786">#10786</a>)
The color scheme will not be upgraded for existing installs. If you want, you should select it again via <code class="docutils literal notranslate"><span class="pre">fish_config</span></code>.</p></li>
<li><p>Command lines which are larger than the terminal are now displayed correctly, instead of multiple blank lines being displayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7296">#7296</a>).</p></li>
<li><p>Prompts that use external commands will no longer produce an infinite loop if the command crashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9796">#9796</a>).</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">jobs</span></code> shows “-” for jobs that have the same process group ID as the fish process, rather than “-2” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10833">#10833</a>).</p></li>
<li><p>Job expansion (<code class="docutils literal notranslate"><span class="pre">%1</span></code> syntax) works properly for jobs that are a mixture of external commands and functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10832">#10832</a>).</p></li>
<li><p>Command lines which have more lines than the terminal can be displayed and edited correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10827">#10827</a>).</p></li>
<li><p>Functions that have been erased are no longer highlighted as valid commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10866">#10866</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">not</span></code>, <code class="docutils literal notranslate"><span class="pre">time</span></code>, and variable assignments (that is <code class="docutils literal notranslate"><span class="pre">not</span> <span class="pre">time</span> <span class="pre">a=b</span> <span class="pre">env</span></code>) is correctly recognized as valid syntax (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10890">#10890</a>).</p></li>
<li><p>The Web-based configuration removes old right-hand-side prompts again, fixing a regression in fish 3.4.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10675">#10675</a>).</p></li>
<li><p>Further protection against programs which crash and leave the terminal in an inconsistent state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10834">#10834</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11038">#11038</a>).</p></li>
<li><p>A workaround for git being very slow on macOS has been applied, improving performance after a fresh boot (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10535">#10535</a>).</p></li>
</ul>
<section id="id36">
<h4>New or improved bindings<a class="headerlink" href="#id36" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>When the cursor is on a command that resolves to an executable script, <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">o</kbd> will now open that script in your editor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10266">#10266</a>).</p></li>
<li><p>During up-arrow history search, <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> will delete the current search item and move to the next older item. Previously this was only supported in the history pager.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> will also remove the currently-displayed autosuggestion from history, and remove it as a suggestion.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">Z</kbd> (also known as <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd>) is now bound to redo.</p></li>
<li><p>Some improvements to the <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd> binding which edits the command line in an external editor:</p>
<ul>
<li><p>The editor’s cursor position is copied back to fish. This is currently supported for Vim and Kakoune.</p></li>
<li><p>Cursor position synchronization is only supported for a set of known editors, which are now also detected in aliases which use <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--wraps</span></code>. For example, use <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--wraps</span> <span class="pre">my-vim</span> <span class="pre">vim</span></code> to synchronize cursors when <code class="docutils literal notranslate"><span class="pre">EDITOR=my-vim</span></code>.</p></li>
<li><p>Multiline commands are indented before being sent to the editor, which matches how they are displayed in fish.</p></li>
</ul>
</li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">...-path-component</span></code> bindings, like <code class="docutils literal notranslate"><span class="pre">backward-kill-path-component</span></code>, now treat <code class="docutils literal notranslate"><span class="pre">#</span></code> as part of a path component (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10271">#10271</a>).</p></li>
<li><p>Bindings like <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> that print output in between prompts now work correctly with multiline commandlines.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> on an empty command line lists the directory history again. This restores the behavior of version 2.1.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history-prefix-search-backward</span></code> and <code class="docutils literal notranslate"><span class="pre">-forward</span></code> now maintain the cursor position, instead of moving the cursor to the end of the command line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10430">#10430</a>).</p></li>
<li><p>The following keys have refined behavior if the terminal supports <a class="reference internal" href="#changelog-4-0-new-bindings"><span class="std std-ref">the new keyboard encodings</span></a>:</p>
<ul>
<li><p><kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">enter</kbd> now inserts a newline instead of executing the command line.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">backspace</kbd> now deletes the last word instead of only one character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10741">#10741</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> deletes the next word (same as <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd>).</p></li>
</ul>
</li>
<li><p>New special input functions:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">forward-char-passive</span></code> and <code class="docutils literal notranslate"><span class="pre">backward-char-passive</span></code> are like their non-passive variants but do not accept autosuggestions or move focus in the completion pager (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10398">#10398</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">forward-token</span></code>, <code class="docutils literal notranslate"><span class="pre">backward-token</span></code>, <code class="docutils literal notranslate"><span class="pre">kill-token</span></code>, and <code class="docutils literal notranslate"><span class="pre">backward-kill-token</span></code> are similar to the <code class="docutils literal notranslate"><span class="pre">*-bigword</span></code> variants but for the whole argument token (which includes escaped spaces) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2014">#2014</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">clear-commandline</span></code>, which merely clears the command line, as an alternative to <code class="docutils literal notranslate"><span class="pre">cancel-commandline</span></code> which prints <code class="docutils literal notranslate"><span class="pre">^C</span></code> and a new prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10213">#10213</a>).</p></li>
</ul>
</li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">accept-autosuggestion</span></code> special input function now returns false when there was nothing to accept (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10608">#10608</a>).</p></li>
<li><p>Vi mode has seen some improvements but continues to suffer from the lack of people working on it.</p>
<ul>
<li><p>New default cursor shapes for insert and replace mode.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd> in insert mode accepts autosuggestions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10339">#10339</a>).</p></li>
<li><p>Outside insert mode, the cursor will no longer be placed beyond the last character on the commandline.</p></li>
<li><p>When the cursor is at the end of the commandline, a single <kbd class="kbd docutils literal notranslate">l</kbd> will accept an autosuggestion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10286">#10286</a>).</p></li>
<li><p>The cursor position after pasting (<kbd class="kbd docutils literal notranslate">p</kbd>) has been corrected.</p></li>
<li><p>Added an additional binding, <kbd class="kbd docutils literal notranslate">_</kbd>, for moving to the beginning of the line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10720">#10720</a>).</p></li>
<li><p>When the cursor is at the start of a line, escaping from insert mode no longer moves the cursor to the previous line.</p></li>
<li><p>Added bindings for clipboard interaction, like <kbd class="kbd docutils literal notranslate">&quot;,</kbd>+<kbd class="kbd docutils literal notranslate">,p</kbd> and <kbd class="kbd docutils literal notranslate">&quot;,</kbd>+<kbd class="kbd docutils literal notranslate">,y,y</kbd>.</p></li>
<li><p>Deleting in visual mode now moves the cursor back, matching vi (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10394">#10394</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">;</kbd>, <kbd class="kbd docutils literal notranslate">,</kbd>, <kbd class="kbd docutils literal notranslate">v</kbd>, <kbd class="kbd docutils literal notranslate">V</kbd>, <kbd class="kbd docutils literal notranslate">I</kbd>, and <kbd class="kbd docutils literal notranslate">gU</kbd> bindings work in visual mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10601">#10601</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10648">#10648</a>).</p></li>
<li><p>Support <kbd class="kbd docutils literal notranslate">%</kbd> motion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10593">#10593</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">k</kbd> to remove the contents of the line beyond the cursor in all modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10648">#10648</a>).</p></li>
<li><p>Support <cite>ab</cite> and <cite>ib</cite> vi text objects. New input functions are introduced <code class="docutils literal notranslate"><span class="pre">jump-{to,till}-matching-bracket</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1842">#1842</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">E</kbd> binding now correctly handles the last character of the word, by jumping to the next word (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9700">#9700</a>).</p></li>
</ul>
</li>
</ul>
</section>
<section id="id37">
<h4>Completions<a class="headerlink" href="#id37" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Command-specific tab completions may now offer results whose first character is a period. For example, it is now possible to tab-complete <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code> for files with leading periods. The default file completions hide these files, unless the token itself has a leading period (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3707">#3707</a>).</p></li>
<li><p>Option completion now uses fuzzy subsequence filtering, just like non-option completion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/830">#830</a>).
This means that <code class="docutils literal notranslate"><span class="pre">--fb</span></code> may be completed to <code class="docutils literal notranslate"><span class="pre">--foobar</span></code> if there is no better match.</p></li>
<li><p>Completions that insert an entire token now use quotes instead of backslashes to escape special characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5433">#5433</a>).</p></li>
<li><p>Normally, file name completions start after the last <code class="docutils literal notranslate"><span class="pre">:</span></code>  or <code class="docutils literal notranslate"><span class="pre">=</span></code> in a token.
This helps commands like <code class="docutils literal notranslate"><span class="pre">rsync</span> <span class="pre">--files-from=</span></code>.
This special meaning can now disabled by escaping these separators as <code class="docutils literal notranslate"><span class="pre">\:</span></code> and <code class="docutils literal notranslate"><span class="pre">\=</span></code>.
This matches Bash’s behavior.
Note that this escaping is usually not necessary since the completion engine already tries
to guess whether the separator is actually part of a file name.</p></li>
<li><p>Various new completion scripts and numerous updates to existing ones.</p></li>
<li><p>Completions could hang if the <code class="docutils literal notranslate"><span class="pre">PAGER</span></code> environment variable was sent to certain editors on macOS, FreeBSD and some other platforms. This has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10820">#10820</a>).</p></li>
<li><p>Generated completions are now stored in <code class="docutils literal notranslate"><span class="pre">$XDG_CACHE_HOME/fish</span></code> or <code class="docutils literal notranslate"><span class="pre">~/.cache/fish</span></code> by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10369">#10369</a>)</p></li>
<li><p>A regression in fish 3.1, where completing a command line could change it completely, has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10904">#10904</a>).</p></li>
</ul>
</section>
<section id="id38">
<h4>Improved terminal support<a class="headerlink" href="#id38" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>fish now marks the prompt and command-output regions (via OSC 133) to enable terminal shell integration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10352">#10352</a>).
Shell integration shortcuts can scroll to the next/previous prompt or show the last command output in a pager.</p></li>
<li><p>fish now reports the working directory (via OSC 7) unconditionally instead of only for some terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9955">#9955</a>).</p></li>
<li><p>fish now sets the terminal window title (via OSC 0) unconditionally instead of only for some terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10037">#10037</a>).</p></li>
<li><p>Focus reporting in tmux is no longer disabled on the first prompt.</p></li>
<li><p>Focus reporting is now disabled during commands run inside key bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6942">#6942</a>).</p></li>
<li><p>Cursor changes are applied to all terminals that support them, and the list of specifically-supported terminals has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10693">#10693</a>).</p></li>
<li><p>If it cannot find the terminfo entry given by <span class="target" id="index-21"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">TERM</span></code> environment variable, fish will now use an included <code class="docutils literal notranslate"><span class="pre">xterm-256color</span></code> definition to match the vast majority of current terminal emulators (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10905">#10905</a>). If you need to have a specific terminfo profile for your terminal’s <code class="docutils literal notranslate"><span class="pre">TERM</span></code> variable, install it into the terminfo database.</p></li>
<li><p>Further improvements to the correct display of prompts which fill the width of the terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8164">#8164</a>).</p></li>
</ul>
</section>
</section>
<section id="id39">
<h3>Other improvements<a class="headerlink" href="#id39" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> gained a <code class="docutils literal notranslate"><span class="pre">build-info</span></code> subcommand, to print information on how fish was built, to help with debugging (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10896">#10896</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> will now collapse multiple empty lines into one (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10325">#10325</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now preserves the modification time of files if there were no changes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10624">#10624</a>).</p></li>
<li><p>Performance in launching external processes has been improved for many cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10869">#10869</a>).</p></li>
<li><p>Performance and interactivity under Windows Subsystem for Linux has been improved, with a workaround for Windows-specific locations being appended to <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10506">#10506</a>).</p></li>
<li><p>On macOS, paths from <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> and <code class="docutils literal notranslate"><span class="pre">/etc/manpaths</span></code> containing colons are handled correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10684">#10684</a>).</p></li>
<li><p>Additional filesystems such as AFS are properly detected as remote, which avoids certain hangs due to expensive filesystem locks (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10818">#10818</a>).</p></li>
<li><p>A spurious error when launching multiple instances of fish for the first time has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10813">#10813</a>).</p></li>
</ul>
</section>
<section id="rust-packaging">
<span id="id40"></span><h3>For distributors<a class="headerlink" href="#rust-packaging" title="Link to this heading">¶</a></h3>
<p>fish has been ported to Rust. This means a significant change in dependencies, which are listed in the README. In short, Rust 1.70 or greater is required, and a C++ compiler is no longer needed (although a C compiler is still required, for some C glue code and the tests).</p>
<p>CMake remains the recommended build system, because of cargo’s limited support for installing support files. Version 3.5 remains the minimum supported version. The Xcode generator for CMake is not supported any longer (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9924">#9924</a>). CMake builds default to optimized release builds (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10799">#10799</a>).</p>
<p>fish no longer depends on the ncurses library, but still uses a terminfo database. When packaging fish, please add a dependency on the package containing your terminfo database instead of curses.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">test</span></code> target was removed as it can no longer be defined in new CMake versions. Use <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">fish_run_tests</span></code>. Any existing test target will not print output if it fails (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11116">#11116</a>).</p>
<p>The Web-based configuration has been rewritten to use Alpine.js (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9554">#9554</a>).</p>
</section>
</section>
<hr class="docutils" />
<section id="fish-4-0b1-released-december-17-2024">
<h2>fish 4.0b1 (released December 17, 2024)<a class="headerlink" href="#fish-4-0b1-released-december-17-2024" title="Link to this heading">¶</a></h2>
<p>A number of improvements were included in fish 4.0.0 following the beta release of 4.0b1. These include fixes for regressions, improvements to completions and documentation, and the removal of a small number of problematic changes.</p>
<p>The full list of fixed issues can be found on the <a class="reference external" href="https://github.com/fish-shell/fish-shell/milestone/43">GitHub milestone page for 4.0-final</a>.</p>
</section>
<hr class="docutils" />
<section id="fish-3-7-1-released-march-19-2024">
<h2>fish 3.7.1 (released March 19, 2024)<a class="headerlink" href="#fish-3-7-1-released-march-19-2024" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes the following problems identified in fish 3.7.0:</p>
<ul class="simple">
<li><p>Deleting the last history entry via <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span></code> works again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10190">#10190</a>).</p></li>
<li><p>Wildcards (<code class="docutils literal notranslate"><span class="pre">*</span></code>) will no longer sometimes generate paths that did not exist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10205">#10205</a>).</p></li>
</ul>
<p>This release also contains some improvements:</p>
<ul class="simple">
<li><p>A crash when trying to run an ELF program with a missing interpreter has been fixed. This crashed in the process after fork, so did not affect the fish process that tried to start the program (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10199">#10199</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> will now always <code class="docutils literal notranslate"><span class="pre">source</span></code> the file after it has written it, even if the contents did not change. This prevents issues if the file was otherwise modified (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10318">#10318</a>).</p></li>
<li><p>The warning for when a builtin returns a negative exit code was improved, now mentioning the original status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10187">#10187</a>).</p></li>
<li><p>Added completions for</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">cobra-cli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10293">#10293</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dmidecode</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10368">#10368</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mycli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10309">#10309</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ollama</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10327">#10327</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pstree</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10317">#10317</a>)</p></li>
</ul>
</li>
<li><p>Some improvements to documentation and completions.</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-3-7-0-released-january-1-2024">
<h2>fish 3.7.0 (released January 1, 2024)<a class="headerlink" href="#fish-3-7-0-released-january-1-2024" title="Link to this heading">¶</a></h2>
<p>This release of fish includes a number of improvements over fish 3.6.4, detailed below. Although work continues on the porting of fish internals to the Rust programming language, that work is not included in this release. fish 3.7.0 and any future releases in the 3.7 series remain C++ programs.</p>
<section id="id41">
<h3>Notable improvements and fixes<a class="headerlink" href="#id41" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Improvements to the history pager, including:</p>
<ul>
<li><p>The history pager will now also attempt subsequence matches (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9476">#9476</a>), so you can find a command line like <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">log</span> <span class="pre">3.6.1..Integration_3.7.0</span></code> by searching for <code class="docutils literal notranslate"><span class="pre">gitInt</span></code>.</p></li>
<li><p>Opening the history pager will now fill the search field with a search string if you’re already in a search (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10005">#10005</a>). This makes it nicer to search something with <kbd class="kbd docutils literal notranslate">up</kbd> and then later decide to switch to the full pager.</p></li>
<li><p>Closing the history pager with enter will now copy the search text to the commandline if there was no match, so you can continue editing the command you tried to find right away (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9934">#9934</a>).</p></li>
</ul>
</li>
<li><p>Performance improvements for command completions and globbing, where supported by the operating system, especially on slow filesystems such as NFS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9891">#9891</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9931">#9931</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10032">#10032</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10052">#10052</a>).</p></li>
<li><p>fish can now be configured to wait a specified amount of time for a multi-key sequence to be completed,  instead of waiting indefinitely. For example, this makes binding <code class="docutils literal notranslate"><span class="pre">kj</span></code> to switching modes in vi mode possible.
The timeout can be set via the new <span class="target" id="index-22"></span><a class="reference internal" href="language.html#envvar-fish_sequence_key_delay_ms"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_sequence_key_delay_ms</span></code></a> variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7401">#7401</a>), and may be set by default in future versions.</p></li>
</ul>
</section>
<section id="id42">
<h3>Deprecations and removed features<a class="headerlink" href="#id42" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">LS_COLORS</span></code> is no longer set automatically by the <code class="docutils literal notranslate"><span class="pre">ls</span></code> function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10080">#10080</a>). Users
that set <code class="docutils literal notranslate"><span class="pre">.dircolors</span></code> should manually import it using other means. Typically this would be <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-gx</span> <span class="pre">LS_COLORS</span> <span class="pre">(dircolors</span> <span class="pre">-c</span> <span class="pre">.dircolors</span> <span class="pre">|</span> <span class="pre">string</span> <span class="pre">split</span> <span class="pre">'</span> <span class="pre">')[3]</span></code></p></li>
</ul>
</section>
<section id="id43">
<h3>Scripting improvements<a class="headerlink" href="#id43" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Running <code class="docutils literal notranslate"><span class="pre">exit</span></code> with a negative number no longer crashes fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9659">#9659</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--command</span></code> will now return a non-zero status if parsing failed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9888">#9888</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">jobs</span></code> builtin will now escape the commands it prints (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9808">#9808</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> no longer overflows if the count is a multiple of the chunk size (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9900">#9900</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">builtin</span></code> builtin will now properly error out with invalid arguments instead of doing nothing and returning true (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9942">#9942</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">time</span></code> in a pipeline is allowed again, as is <code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">and</span></code> and <code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">or</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9985">#9985</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> will now also apply variable overrides, so <code class="docutils literal notranslate"><span class="pre">FOO=bar</span> <span class="pre">exec</span></code> will now set <code class="docutils literal notranslate"><span class="pre">$FOO</span></code> correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9995">#9995</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">umask</span></code> will now handle empty symbolic modes correctly, like <code class="docutils literal notranslate"><span class="pre">umask</span> <span class="pre">u=,g=rwx,o=</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10177">#10177</a>).</p></li>
<li><p>Improved error messages for errors occurring in command substitutions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10054">#10054</a>).</p></li>
</ul>
</section>
<section id="id44">
<h3>Interactive improvements<a class="headerlink" href="#id44" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> no longer enables bracketed paste so it doesn’t stay enabled in combined commandlines like <code class="docutils literal notranslate"><span class="pre">mysql</span> <span class="pre">-p(read</span> <span class="pre">--silent)</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8285">#8285</a>).</p></li>
<li><p>Vi mode now uses <span class="target" id="index-23"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_cursor_external</span></code> to set the cursor shape for external commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4656">#4656</a>).</p></li>
<li><p>Opening the history search in vi mode switches to insert mode correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10141">#10141</a>).</p></li>
<li><p>Vi mode cursor shaping is now enabled in iTerm2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9698">#9698</a>).</p></li>
<li><p>Completing commands as root includes commands not owned by root, fixing a regression introduced in fish 3.2.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9699">#9699</a>).</p></li>
<li><p>Selection uses <code class="docutils literal notranslate"><span class="pre">fish_color_selection</span></code> for the foreground and background colors, as intended, rather than just the background (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9717">#9717</a>).</p></li>
<li><p>The completion pager will no longer sometimes skip the last entry when moving through a long list (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9833">#9833</a>).</p></li>
<li><p>The interactive <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span></code> interface now allows specifying index ranges like “1..5” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9736">#9736</a>), and <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span> <span class="pre">--exact</span></code> now properly saves the history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10066">#10066</a>).</p></li>
<li><p>Command completion will now call the stock <code class="docutils literal notranslate"><span class="pre">manpath</span></code> on macOS, instead of a potential Homebrew version. This prevents awkward error messages (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9817">#9817</a>).</p></li>
<li><p>the <code class="docutils literal notranslate"><span class="pre">redo</span></code> special input function restores the pre-undo cursor position.</p></li>
<li><p>A new bind function <code class="docutils literal notranslate"><span class="pre">history-pager-delete</span></code>, bound to <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">delete</kbd> by default, will delete the currently-selected history pager item from history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9454">#9454</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> will now use printable characters as-is, so pressing “ö” no longer leads to it telling you to bind <code class="docutils literal notranslate"><span class="pre">\u00F6</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9986">#9986</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">open</span></code> can be used to launch terminal programs again, as an <code class="docutils literal notranslate"><span class="pre">xdg-open</span></code> bug has been fixed and a workaround has been removed  (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10045">#10045</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">repaint-mode</span></code> binding will now only move the cursor if there is repainting to be done. This fixes <kbd class="kbd docutils literal notranslate">alt</kbd> combination bindings in vi mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7910">#7910</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">clear-screen</span></code> bind function is used for <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> by default. This clears the screen and repaints the existing prompt at first,
so it eliminates visible flicker unless the terminal is very slow (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10044">#10044</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">alias</span></code> convenience function has better support for commands with unusual characters, like <code class="docutils literal notranslate"><span class="pre">+</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8720">#8720</a>).</p></li>
<li><p>A longstanding issue where items in the pager would sometimes display without proper formatting has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9617">#9617</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd> binding, which lists the directory of the token under the cursor, correctly expands tilde (<code class="docutils literal notranslate"><span class="pre">~</span></code>) to the home directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9954">#9954</a>).</p></li>
<li><p>Various fish utilities that use an external pager will now try a selection of common pagers if the <span class="target" id="index-24"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PAGER</span></code> environment variable is not set, or write the output to the screen without a pager if there is not one available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10074">#10074</a>).</p></li>
<li><p>Command-specific tab completions may now offer results whose first character is a period. For example, it is now possible to tab-complete <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code> for files with leading periods. The default file completions hide these files, unless the token itself has a leading period (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3707">#3707</a>).</p></li>
</ul>
<section id="improved-prompts">
<h4>Improved prompts<a class="headerlink" href="#improved-prompts" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The default theme now only uses named colors, so it will track the terminal’s palette (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9913">#9913</a>).</p></li>
<li><p>The Dracula theme has now been synced with upstream (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9807">#9807</a>); use <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> to re-apply it to pick up the changes.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_vcs_prompt</span></code> now also supports fossil (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9497">#9497</a>).</p></li>
<li><p>Prompts which display the working directory using the <code class="docutils literal notranslate"><span class="pre">prompt_pwd</span></code> function correctly display directories beginning with dashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10169">#10169</a>).</p></li>
</ul>
</section>
<section id="id45">
<h4>Completions<a class="headerlink" href="#id45" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">age</span></code> and <code class="docutils literal notranslate"><span class="pre">age-keygen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9813">#9813</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">airmon-ng</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10116">#10116</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ar</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9720">#9720</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">blender</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9905">#9905</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bws</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10165">#10165</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">calendar</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10138">#10138</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">checkinstall</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10106">#10106</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">crc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10034">#10034</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">doctl</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gimp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9904">#9904</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gojq</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9740">#9740</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">horcrux</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9922">#9922</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ibmcloud</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10004">#10004</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">iwctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6884">#6884</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">java_home</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9998">#9998</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">krita</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9903">#9903</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">oc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10034">#10034</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qjs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9723">#9723</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qjsc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9731">#9731</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rename</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10136">#10136</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rpm-ostool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9669">#9669</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">smerge</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10135">#10135</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">userdel</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10056">#10056</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">watchexec</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10027">#10027</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wpctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10043">#10043</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xxd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10137">#10137</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zabbix</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9647">#9647</a>)</p></li>
</ul>
</li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">zfs</span></code> completions no longer print errors about setting a read-only variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9705">#9705</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">kitty</span></code> completions have been removed in favor of keeping them upstream (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9750">#9750</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">git</span></code> completions now support aliases that reference other aliases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9992">#9992</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">gw</span></code> and <code class="docutils literal notranslate"><span class="pre">gradlew</span></code> completions are loaded properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10127">#10127</a>).</p></li>
<li><p>Improvements to many other completions.</p></li>
<li><p>Improvements to the manual page completion generator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9787">#9787</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9814">#9814</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9961">#9961</a>).</p></li>
</ul>
</section>
</section>
<section id="id46">
<h3>Other improvements<a class="headerlink" href="#id46" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Improvements and corrections to the documentation.</p></li>
<li><p>The Web-based configuration now uses a more readable style when printed, such as for a keybinding reference (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9828">#9828</a>).</p></li>
<li><p>Updates to the German translations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9824">#9824</a>).</p></li>
<li><p>The colors of the Nord theme better match their official style (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10168">#10168</a>).</p></li>
</ul>
</section>
<section id="id47">
<h3>For distributors<a class="headerlink" href="#id47" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The licensing information for some of the derived code distributed with fish was incomplete. Though the license information was present in the source distribution, it was not present in the documentation. This has been corrected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10162">#10162</a>).</p></li>
<li><p>The CMake configure step will now also look for libterminfo as an alternative name for libtinfo, as used in NetBSD curses (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9794">#9794</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-6-4-released-december-5-2023">
<h2>fish 3.6.4 (released December 5, 2023)<a class="headerlink" href="#fish-3-6-4-released-december-5-2023" title="Link to this heading">¶</a></h2>
<p>This release contains a complete fix for the test suite failure in fish 3.6.2 and 3.6.3.</p>
</section>
<hr class="docutils" />
<section id="fish-3-6-3-released-december-4-2023">
<h2>fish 3.6.3 (released December 4, 2023)<a class="headerlink" href="#fish-3-6-3-released-december-4-2023" title="Link to this heading">¶</a></h2>
<p>This release contains a fix for a test suite failure in fish 3.6.2.</p>
</section>
<hr class="docutils" />
<section id="fish-3-6-2-released-december-4-2023">
<h2>fish 3.6.2 (released December 4, 2023)<a class="headerlink" href="#fish-3-6-2-released-december-4-2023" title="Link to this heading">¶</a></h2>
<p>This release of fish contains a security fix for CVE-2023-49284, a minor security problem identified
in fish 3.6.1 and previous versions (thought to affect all released versions of fish).</p>
<p>fish uses certain Unicode non-characters internally for marking wildcards and expansions. It
incorrectly allowed these markers to be read on command substitution output, rather than
transforming them into a safe internal representation.</p>
<p>For example, <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">\UFDD2HOME</span></code> has the same output as <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">$HOME</span></code>.</p>
<p>While this may cause unexpected behavior with direct input, this may become a minor security problem
if the output is being fed from an external program into a command substitution where this output
may not be expected.</p>
</section>
<hr class="docutils" />
<section id="fish-3-6-1-released-march-25-2023">
<h2>fish 3.6.1 (released March 25, 2023)<a class="headerlink" href="#fish-3-6-1-released-march-25-2023" title="Link to this heading">¶</a></h2>
<p>This release of fish contains a number of fixes for problems identified in fish 3.6.1, as well as some enhancements.</p>
<section id="id48">
<h3>Notable improvements and fixes<a class="headerlink" href="#id48" title="Link to this heading">¶</a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> now also erases the universal variables used by the old abbr function. That means:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">abbr</span><span class="w"> </span><span class="no">--erase</span><span class="w"> </span><span class="o">(</span><span class="nf">abbr</span><span class="w"> </span><span class="no">--list</span><span class="o">)</span>
</pre></div>
</div>
<p>can now be used to clean out all old abbreviations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9468">#9468</a>).</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--add</span> <span class="pre">--universal</span></code> now warns about <code class="docutils literal notranslate"><span class="pre">--universal</span></code> being non-functional, to make it easier to detect old-style <code class="docutils literal notranslate"><span class="pre">abbr</span></code> calls (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9475">#9475</a>).</p></li>
</ul>
</section>
<section id="id49">
<h3>Deprecations and removed features<a class="headerlink" href="#id49" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The Web-based configuration for abbreviations has been removed, as it was not functional with the changes abbreviations introduced in 3.6.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9460">#9460</a>).</p></li>
</ul>
</section>
<section id="id50">
<h3>Scripting improvements<a class="headerlink" href="#id50" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--list</span></code> no longer escapes the abbr name, which is necessary to be able to pass it to <code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9470">#9470</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> will now print an error if told to set a read-only variable, instead of silently doing nothing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9346">#9346</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">-v</span></code> no longer crashes fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9640">#9640</a>).</p></li>
</ul>
</section>
<section id="id51">
<h3>Interactive improvements<a class="headerlink" href="#id51" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Using <code class="docutils literal notranslate"><span class="pre">fish_vi_key_bindings</span></code> in combination with fish’s <code class="docutils literal notranslate"><span class="pre">--no-config</span></code> mode works without locking up the shell (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9443">#9443</a>).</p></li>
<li><p>The history pager now uses more screen space, usually half the screen (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9458">#9458</a>)</p></li>
<li><p>Variables that were set while the locale was C (the default ASCII-only locale) will now properly be encoded if the locale is switched (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2613">#2613</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9473">#9473</a>).</p></li>
<li><p>Escape during history search restores the original command line again (fixing a regression in 3.6.0).</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">--help</span></code> on builtins now respects the <code class="docutils literal notranslate"><span class="pre">$MANPAGER</span></code> variable, in preference to <code class="docutils literal notranslate"><span class="pre">$PAGER</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9488">#9488</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">g</kbd> closes the history pager, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9484">#9484</a>).</p></li>
<li><p>The documentation for the <code class="docutils literal notranslate"><span class="pre">:</span></code>, <code class="docutils literal notranslate"><span class="pre">[</span></code> and <code class="docutils literal notranslate"><span class="pre">.</span></code> builtin commands can now be looked up with <code class="docutils literal notranslate"><span class="pre">man</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9552">#9552</a>).</p></li>
<li><p>fish no longer crashes when searching history for non-ASCII codepoints case-insensitively (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9628">#9628</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> binding will now also use <code class="docutils literal notranslate"><span class="pre">please</span></code> if available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9635">#9635</a>).</p></li>
<li><p>Themes that don’t specify every color option can be installed correctly in the Web-based configuration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9590">#9590</a>).</p></li>
<li><p>Compatibility with Midnight Commander’s prompt integration has been improved (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9540">#9540</a>).</p></li>
<li><p>A spurious error, noted when using fish in Google Drive directories under WSL 2, has been silenced (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9550">#9550</a>).</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">read</span></code> in <code class="docutils literal notranslate"><span class="pre">fish_greeting</span></code> or similar functions will not trigger an infinite loop (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9564">#9564</a>).</p></li>
<li><p>Compatibility when upgrading from old versions of fish (before 3.4.0) has been improved (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9569">#9569</a>).</p></li>
</ul>
<section id="id52">
<h4>Improved prompts<a class="headerlink" href="#id52" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The git prompt will compute the stash count to be used independently of the informative status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9572">#9572</a>).</p></li>
</ul>
</section>
<section id="id53">
<h4>Completions<a class="headerlink" href="#id53" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">apkanalyzer</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9558">#9558</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">neovim</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9543">#9543</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">otool</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pre-commit</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9521">#9521</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">proxychains</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9486">#9486</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">scrypt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9583">#9583</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">stow</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9571">#9571</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">trash</span></code> and helper utilities <code class="docutils literal notranslate"><span class="pre">trash-empty</span></code>, <code class="docutils literal notranslate"><span class="pre">trash-list</span></code>, <code class="docutils literal notranslate"><span class="pre">trash-put</span></code>, <code class="docutils literal notranslate"><span class="pre">trash-restore</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9560">#9560</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ssh-copy-id</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9675">#9675</a>)</p></li>
</ul>
</li>
<li><p>Improvements to many completions, including the speed of completing directories in WSL 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9574">#9574</a>).</p></li>
<li><p>Completions using <code class="docutils literal notranslate"><span class="pre">__fish_complete_suffix</span></code> are now offered in the correct order, fixing a regression in 3.6.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8924">#8924</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">git</span></code> completions for <code class="docutils literal notranslate"><span class="pre">git-foo</span></code>-style commands was restored, fixing a regression in 3.6.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9457">#9457</a>).</p></li>
<li><p>File completion now offers <code class="docutils literal notranslate"><span class="pre">../</span></code> and <code class="docutils literal notranslate"><span class="pre">./</span></code> again, fixing a regression in 3.6.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9477">#9477</a>).</p></li>
<li><p>The behaviour of completions using <code class="docutils literal notranslate"><span class="pre">__fish_complete_path</span></code> matches standard path completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9285">#9285</a>).</p></li>
</ul>
</section>
</section>
<section id="id54">
<h3>Other improvements<a class="headerlink" href="#id54" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Improvements and corrections to the documentation.</p></li>
</ul>
</section>
<section id="id55">
<h3>For distributors<a class="headerlink" href="#id55" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish 3.6.1 builds correctly on Cygwin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9502">#9502</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-6-0-released-january-7-2023">
<h2>fish 3.6.0 (released January 7, 2023)<a class="headerlink" href="#fish-3-6-0-released-january-7-2023" title="Link to this heading">¶</a></h2>
<section id="id56">
<h3>Notable improvements and fixes<a class="headerlink" href="#id56" title="Link to this heading">¶</a></h3>
<ul>
<li><p>By default, <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> now opens the command history in the pager (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/602">#602</a>). This is fully searchable and syntax-highlighted, as an alternative to the incremental search seen in other shells. The new special input function <code class="docutils literal notranslate"><span class="pre">history-pager</span></code> has been added for custom bindings.</p></li>
<li><p>Abbreviations are more flexible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9313">#9313</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5003">#5003</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2287">#2287</a>):</p>
<ul class="simple">
<li><p>They may optionally replace tokens anywhere on the command line, instead of only commands</p></li>
<li><p>Matching tokens may be described using a regular expression instead of a literal word</p></li>
<li><p>The replacement text may be produced by a fish function, instead of a literal word</p></li>
<li><p>They may position the cursor anywhere in the expansion, instead of at the end</p></li>
</ul>
<p>For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">multicd</span>
<span class="w">    </span><span class="nf">echo</span><span class="w"> </span><span class="no">cd</span><span class="w"> </span><span class="o">(</span><span class="nf">string</span><span class="w"> </span><span class="no">repeat</span><span class="w"> </span><span class="no">-n</span><span class="w"> </span><span class="o">(</span><span class="nf">math</span><span class="w"> </span><span class="o">(</span><span class="nf">string</span><span class="w"> </span><span class="no">length</span><span class="w"> </span><span class="no">--</span><span class="w"> </span><span class="o">$argv[</span><span class="no">1</span><span class="o">])</span><span class="w"> </span><span class="no">-</span><span class="w"> </span><span class="no">1</span><span class="o">)</span><span class="w"> </span><span class="no">../</span><span class="o">)</span>
<span class="nf">end</span>

<span class="nf">abbr</span><span class="w"> </span><span class="no">--add</span><span class="w"> </span><span class="no">dotdot</span><span class="w"> </span><span class="no">--regex</span><span class="w"> </span><span class="s1">&#39;^\.\.+$&#39;</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">multicd</span>
</pre></div>
</div>
<p>This expands <code class="docutils literal notranslate"><span class="pre">..</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../</span></code>, <code class="docutils literal notranslate"><span class="pre">...</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../../</span></code> and <code class="docutils literal notranslate"><span class="pre">....</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../../../</span></code> and so on.</p>
<p>Or:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">last_history_item</span><span class="p">;</span><span class="w"> </span><span class="nf">echo</span><span class="w"> </span><span class="o">$history[</span><span class="no">1</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="nf">end</span>
<span class="nf">abbr</span><span class="w"> </span><span class="no">-a</span><span class="w"> </span><span class="no">!!</span><span class="w"> </span><span class="no">--position</span><span class="w"> </span><span class="no">anywhere</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">last_history_item</span>
</pre></div>
</div>
<p>which expands <code class="docutils literal notranslate"><span class="pre">!!</span></code> to the last history item, anywhere on the command line, mimicking other shells’ history expansion.</p>
<p>See <a class="reference internal" href="cmds/abbr.html"><span class="doc">the documentation</span></a> for more.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">path</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">mtime</span></code> subcommand to print the modification time stamp for files. For example, this can be used to handle cache file ages (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9057">#9057</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">touch</span><span class="w"> </span><span class="no">foo</span>
<span class="gp">&gt; </span><span class="nf">sleep</span><span class="w"> </span><span class="no">10</span>
<span class="gp">&gt; </span><span class="nf">path</span><span class="w"> </span><span class="no">mtime</span><span class="w"> </span><span class="no">--relative</span><span class="w"> </span><span class="no">foo</span>
<span class="go">10</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">shorten</span></code> subcommand to shorten strings to a given visible width (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9156">#9156</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">shorten</span><span class="w"> </span><span class="no">--max</span><span class="w"> </span><span class="no">10</span><span class="w"> </span><span class="s2">&quot;Hello this is a long string&quot;</span>
<span class="go">Hello thi…</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> (aka <code class="docutils literal notranslate"><span class="pre">[</span></code>) gained <code class="docutils literal notranslate"><span class="pre">-ot</span></code> (older than) and <code class="docutils literal notranslate"><span class="pre">-nt</span></code> (newer than) operators to compare file modification times, and <code class="docutils literal notranslate"><span class="pre">-ef</span></code> to compare whether the arguments are the same file (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3589">#3589</a>).</p></li>
<li><p>fish will now mark the extent of many errors with a squiggly line, instead of just a caret (<code class="docutils literal notranslate"><span class="pre">^</span></code>) at the beginning (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9130">#9130</a>). For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">checks/set.fish</span><span class="w"> </span><span class="o">(</span><span class="nf">line</span><span class="w"> </span><span class="no">471</span><span class="o">)</span><span class="no">:</span><span class="w"> </span><span class="no">for:</span><span class="w"> </span><span class="no">a,b:</span><span class="w"> </span><span class="no">invalid</span><span class="w"> </span><span class="no">variable</span><span class="w"> </span><span class="no">name.</span><span class="w"> </span><span class="no">See</span><span class="w"> </span><span class="no">`help</span><span class="w"> </span><span class="no">identifiers`</span>
<span class="nf">for</span><span class="w"> </span><span class="no">a,b</span><span class="w"> </span><span class="nf">in</span><span class="w"> </span><span class="no">y</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="no">z</span><span class="w"> </span><span class="no">3</span>
<span class="w">    </span><span class="nf">^~^</span>
</pre></div>
</div>
</li>
<li><p>A new function, <code class="docutils literal notranslate"><span class="pre">fish_delta</span></code>, shows changes that have been made in fish’s configuration from the defaults (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9255">#9255</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--erase</span></code> can now be used with multiple scopes at once, like <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-efglU</span> <span class="pre">foo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7711">#7711</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9280">#9280</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> gained a new subcommand, <code class="docutils literal notranslate"><span class="pre">current-commandline</span></code>, which retrieves the entirety of the currently-executing command line when called from a function during execution. This allows easier job introspection (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8905">#8905</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9296">#9296</a>).</p></li>
</ul>
</section>
<section id="id57">
<h3>Deprecations and removed features<a class="headerlink" href="#id57" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">\x</span></code> and <code class="docutils literal notranslate"><span class="pre">\X</span></code> escape syntax is now equivalent. <code class="docutils literal notranslate"><span class="pre">\xAB</span></code> previously behaved the same as <code class="docutils literal notranslate"><span class="pre">\XAB</span></code>, except that it would error if the value “AB” was larger than “7f” (127 in decimal, the highest ASCII value) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9247">#9247</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9245">#9245</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1352">#1352</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> will now only turn on features if the appropriate variable has been set to a true value (of “1”, “yes” or “true”) instead of just checking if it is defined. This allows specifically turning features <em>off</em> without having to erase variables, such as via universal variables. If you have defined a variable to a different value and expect it to count as true, you need to change it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9274">#9274</a>).
For example, <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">__fish_git_prompt_show_informative_status</span> <span class="pre">0</span></code> previously would have enabled informative status (because any value would have done so), but now it turns it off.</p></li>
<li><p>Abbreviations are no longer stored in universal variables. Existing universal abbreviations are still imported, but new abbreviations should be added to <code class="docutils literal notranslate"><span class="pre">config.fish</span></code>.</p></li>
<li><p>The short option <code class="docutils literal notranslate"><span class="pre">-r</span></code> for abbreviations has changed from <code class="docutils literal notranslate"><span class="pre">rename</span></code> to <code class="docutils literal notranslate"><span class="pre">regex</span></code>, for consistency with <code class="docutils literal notranslate"><span class="pre">string</span></code>.</p></li>
</ul>
</section>
<section id="id58">
<h3>Scripting improvements<a class="headerlink" href="#id58" title="Link to this heading">¶</a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> can now be used without option specifications, to allow using <code class="docutils literal notranslate"><span class="pre">--min-args</span></code>, <code class="docutils literal notranslate"><span class="pre">--max-args</span></code> or for commands that take no options (but might in future) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9006">#9006</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">my_copy</span>
<span class="w">    </span><span class="nf">argparse</span><span class="w"> </span><span class="no">--min-args</span><span class="w"> </span><span class="no">2</span><span class="w"> </span><span class="no">--</span><span class="w"> </span><span class="o">$argv</span>
<span class="w">    </span><span class="o">or</span><span class="w"> </span><span class="nf">return</span>

<span class="w">    </span><span class="nf">cp</span><span class="w"> </span><span class="o">$argv</span>
<span class="nf">end</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--show</span></code> now shows when a variable was inherited from fish’s parent process, which should help with debugging (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9029">#9029</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">set</span><span class="w"> </span><span class="no">--show</span><span class="w"> </span><span class="no">XDG_DATA_DIRS</span>
<span class="go">$XDG_DATA_DIRS: set in global scope, exported, a path variable with 4 elements</span>
<span class="go">$XDG_DATA_DIRS[1]: |/home/alfa/.local/share/flatpak/exports/share|</span>
<span class="go">$XDG_DATA_DIRS[2]: |/var/lib/flatpak/exports/share|</span>
<span class="go">$XDG_DATA_DIRS[3]: |/usr/local/share|</span>
<span class="go">$XDG_DATA_DIRS[4]: |/usr/share|</span>
<span class="go">$XDG_DATA_DIRS: originally inherited as |/home/alfa/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/|</span>
</pre></div>
</div>
</li>
<li><p>The read limit is now restored to the default when <span class="target" id="index-25"></span><a class="reference internal" href="language.html#envvar-fish_read_limit"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_read_limit</span></code></a> is unset (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9129">#9129</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> produces an error for division-by-zero, as well as augmenting some errors with their extent (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9190">#9190</a>). This changes behavior in some limited cases, such as:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">math</span><span class="w"> </span><span class="no">min</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="no">/</span><span class="w"> </span><span class="no">0,</span><span class="w"> </span><span class="no">5</span>
</pre></div>
</div>
<p>which would previously print “5” (because in floating point division “1 / 0” yields infinite, and 5 is smaller than infinite) but will now return an error.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_clipboard_copy</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_clipboard_paste</span></code> can now be used in pipes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9271">#9271</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">git</span><span class="w"> </span><span class="no">rev-list</span><span class="w"> </span><span class="no">3.5.1</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">fish_clipboard_copy</span>

<span class="nf">fish_clipboard_paste</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">join</span><span class="w"> </span><span class="no">+</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">math</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">fish-path</span></code> returns a fully-normalised path, particularly noticeable on NetBSD (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9085">#9085</a>).</p></li>
</ul>
</section>
<section id="id59">
<h3>Interactive improvements<a class="headerlink" href="#id59" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>If the terminal definition for <span class="target" id="index-26"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">TERM</span></code> can’t be found, fish now tries using the “xterm-256color” and “xterm” definitions before “ansi” and “dumb”. As the majority of terminal emulators in common use are now more or less xterm-compatible (often even explicitly claiming the xterm-256color entry), this should often result in a fully or almost fully usable terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9026">#9026</a>).</p></li>
<li><p>A new variable, <span class="target" id="index-27"></span><a class="reference internal" href="language.html#envvar-fish_cursor_selection_mode"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_cursor_selection_mode</span></code></a>, can be used to configure whether the command line selection includes the character under the cursor (<code class="docutils literal notranslate"><span class="pre">inclusive</span></code>) or not (<code class="docutils literal notranslate"><span class="pre">exclusive</span></code>). The new default is <code class="docutils literal notranslate"><span class="pre">exclusive</span></code>; use <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">fish_cursor_selection_mode</span> <span class="pre">inclusive</span></code> to get the previous behavior back (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7762">#7762</a>).</p></li>
<li><p>fish’s completion pager now fills half the terminal on first tab press instead of only 4 rows, which should make results visible more often and save key presses, without constantly snapping fish to the top of the terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9105">#9105</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2698">#2698</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">complete-and-search</span></code> binding, used with <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">tab</kbd> by default, selects the first item in the results immediately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9080">#9080</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> output is now syntax-highlighted when used interactively.</p></li>
<li><p><kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">h</kbd> (the default <code class="docutils literal notranslate"><span class="pre">__fish_man_page</span></code> binding) does a better job of showing the manual page of the command under cursor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9020">#9020</a>).</p></li>
<li><p>If <span class="target" id="index-28"></span><a class="reference internal" href="interactive.html#envvar-fish_color_valid_path"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_color_valid_path</span></code></a> contains an actual color instead of just modifiers, those will be used for valid paths even if the underlying color isn’t “normal” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9159">#9159</a>).</p></li>
<li><p>The key combination for the QUIT terminal sequence, often <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">\</kbd> (<code class="docutils literal notranslate"><span class="pre">\x1c</span></code>), can now be used as a binding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9234">#9234</a>).</p></li>
<li><p>fish’s vi mode uses normal xterm-style sequences to signal cursor change, instead of using the iTerm’s proprietary escape sequences. This allows for a blinking cursor and makes it work in complicated scenarios with nested terminals. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3741">#3741</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9172">#9172</a>)</p></li>
<li><p>When running fish on a remote system (such as inside SSH or a container), <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">x</kbd> now copies to the local client system’s clipboard if the terminal supports OSC 52.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> gained two new options, <code class="docutils literal notranslate"><span class="pre">--selection-start</span></code> and <code class="docutils literal notranslate"><span class="pre">--selection-end</span></code>, to set the start/end of the current selection (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9197">#9197</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9215">#9215</a>).</p></li>
<li><p>fish’s builtins now handle keyboard interrupts (<kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd>) correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9266">#9266</a>).</p></li>
</ul>
<section id="id60">
<h4>Completions<a class="headerlink" href="#id60" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">ark</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">asciinema</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9257">#9257</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">clojure</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9272">#9272</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">csh</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">direnv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9268">#9268</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dive</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9082">#9082</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dolphin</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dua</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9277">#9277</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">efivar</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9318">#9318</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eg</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">es</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9388">#9388</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">firefox-developer-edition</span></code> and <code class="docutils literal notranslate"><span class="pre">firefox</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9090">#9090</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fortune</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9177">#9177</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kb</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kind</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9110">#9110</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">konsole</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ksh</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">loadkeys</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9312">#9312</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">okular</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">op</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9300">#9300</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ouch</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9405">#9405</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pix</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">readelf</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8746">#8746</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9386">#9386</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qshell</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rc</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sad</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9145">#9145</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tcsh</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">toot</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tox</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9078">#9078</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wish</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xed</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xonsh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9389">#9389</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xplayer</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xreader</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xviewer</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">yash</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9391">#9391</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zig</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9083">#9083</a>)</p></li>
</ul>
</li>
<li><p>Improvements to many completions, including making <code class="docutils literal notranslate"><span class="pre">cd</span></code> completion much faster (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9220">#9220</a>).</p></li>
<li><p>Completion of tilde (<code class="docutils literal notranslate"><span class="pre">~</span></code>) works properly even when the file name contains an escaped character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9073">#9073</a>).</p></li>
<li><p>fish no longer loads completions if the command is used via a relative path and is not in <span class="target" id="index-29"></span><a class="reference internal" href="language.html#envvar-PATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9133">#9133</a>).</p></li>
<li><p>fish no longer completes inside of comments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9320">#9320</a>).</p></li>
</ul>
</section>
<section id="id61">
<h4>Improved terminal support<a class="headerlink" href="#id61" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Opening <code class="docutils literal notranslate"><span class="pre">help</span></code> on WSL now uses PowerShell to open the browser if available, removing some awkward UNC path errors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9119">#9119</a>).</p></li>
</ul>
</section>
</section>
<section id="id62">
<h3>Other improvements<a class="headerlink" href="#id62" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The Web-based configuration tool now works on systems with IPv6 disabled (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3857">#3857</a>).</p></li>
<li><p>Aliases can ignore arguments by ending them with <code class="docutils literal notranslate"><span class="pre">#</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9199">#9199</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> is now faster when reading large strings from stdin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9139">#9139</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> uses less memory and is faster. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9124">#9124</a>)</p></li>
<li><p>Builtins are much faster when writing to a pipe or file. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9229">#9229</a>).</p></li>
<li><p>Performance improvements to highlighting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9180">#9180</a>) should make using fish more pleasant on slow systems.</p></li>
<li><p>On 32-bit systems, globs like <code class="docutils literal notranslate"><span class="pre">*</span></code> will no longer fail to return some files, as large file support has been enabled.</p></li>
</ul>
</section>
<section id="fixed-bugs">
<h3>Fixed bugs<a class="headerlink" href="#fixed-bugs" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The history search text for a token search is now highlighted correctly if the line contains multiple instances of that text (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9066">#9066</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process-exit</span></code> and <code class="docutils literal notranslate"><span class="pre">job-exit</span></code> events are now generated for all background jobs, including those launched from event handlers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9096">#9096</a>).</p></li>
<li><p>A crash when completing a token that contained both a potential glob and a quoted variable expansion was fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9137">#9137</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">prompt_pwd</span></code> no longer accidentally overwrites a global or universal <code class="docutils literal notranslate"><span class="pre">$fish_prompt_pwd_full_dirs</span></code> when called with the <code class="docutils literal notranslate"><span class="pre">-d</span></code> or <code class="docutils literal notranslate"><span class="pre">--full-length-dirs</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9123">#9123</a>).</p></li>
<li><p>A bug which caused fish to freeze or exit after running a command which does not preserve the foreground process group was fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9181">#9181</a>).</p></li>
<li><p>The “Disco” sample prompt no longer prints an error in some working directories (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9164">#9164</a>). If you saved this prompt, you should run <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">prompt</span> <span class="pre">save</span> <span class="pre">disco</span></code> again.</p></li>
<li><p>fish launches external commands via the given path again, rather than always using an absolute path. This behaviour was inadvertently changed in 3.5.0 and is visible, for example, when launching a bash script which checks <code class="docutils literal notranslate"><span class="pre">$0</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9143">#9143</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> no longer tries to interpret the first argument as an option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9132">#9132</a>).</p></li>
<li><p>Interactive <code class="docutils literal notranslate"><span class="pre">read</span></code> in scripts will now have the correct keybindings again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9227">#9227</a>).</p></li>
<li><p>A possible stack overflow when recursively evaluating substitutions has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9302">#9302</a>).</p></li>
<li><p>A crash with relative $CDPATH has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9407">#9407</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> now properly fills extra <code class="docutils literal notranslate"><span class="pre">%d</span></code> specifiers with 0 even on macOS and BSD (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9321">#9321</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> now correctly exits when receiving a SIGHUP (like after closing the terminal) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9309">#9309</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">save</span></code> now works as documented instead of erroring out (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9088">#9088</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9273">#9273</a>).</p></li>
<li><p>fish no longer triggers prompts to install command line tools when first run on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9343">#9343</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> now quietly fails on macOS if the xcrun cache is not yet populated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6625">#6625</a>), working around a potential hang.</p></li>
</ul>
</section>
<section id="id63">
<h3>For distributors<a class="headerlink" href="#id63" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The vendored PCRE2 sources have been removed. It is recommended to declare PCRE2 as a dependency when packaging fish. If the CMake variable FISH_USE_SYSTEM_PCRE2 is false, fish will now download and build PCRE2 from the official repo (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8355">#8355</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8363">#8363</a>). Note this variable defaults to true if PCRE2 is found installed on the system.</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-5-1-released-july-20-2022">
<h2>fish 3.5.1 (released July 20, 2022)<a class="headerlink" href="#fish-3-5-1-released-july-20-2022" title="Link to this heading">¶</a></h2>
<p>This release of fish introduces the following small enhancements:</p>
<ul class="simple">
<li><p>Cursor shaping for Vi mode is enabled by default in tmux, and will be used if the outer terminal is capable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8981">#8981</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> returns a better error when used with arguments interpreted as octal numbers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9035">#9035</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">merge</span></code> when in private mode is now an error, rather than wiping out other sessions’ history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9050">#9050</a>).</p></li>
<li><p>The error message when launching a command that is built for the wrong architecture on macOS is more helpful (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9052">#9052</a>).</p></li>
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">choose</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9065">#9065</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">expect</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9060">#9060</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">navi</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9064">#9064</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qdbus</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9031">#9031</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">reflector</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9027">#9027</a>)</p></li>
</ul>
</li>
<li><p>Improvements to some completions.</p></li>
</ul>
<p>This release also fixes a number of problems identified in fish 3.5.0.</p>
<ul class="simple">
<li><p>Completing <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">blame</span></code> or <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">-C</span></code> works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9053">#9053</a>).</p></li>
<li><p>On terminals that emit a <code class="docutils literal notranslate"><span class="pre">CSI</span> <span class="pre">u</span></code> sequence for <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">space</kbd>, fish inserts a space instead of printing an error. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9054">#9054</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">fish-path</span></code> on Linux-based platforms could print the path with a “ (deleted)” suffix (such as <code class="docutils literal notranslate"><span class="pre">/usr/bin/fish</span> <span class="pre">(deleted)</span></code>), which is now removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9019">#9019</a>).</p></li>
<li><p>Cancelling an initial command (from fish’s <code class="docutils literal notranslate"><span class="pre">--init-command</span></code> option) with <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> no longer prevents configuration scripts from running (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9024">#9024</a>).</p></li>
<li><p>The job summary contained extra blank lines if the prompt used multiple lines, which is now fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9044">#9044</a>).</p></li>
<li><p>Using special input functions in bindings, in combination with <code class="docutils literal notranslate"><span class="pre">and</span></code>/<code class="docutils literal notranslate"><span class="pre">or</span></code> conditionals, no longer crashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9051">#9051</a>).</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="fish-3-5-0-released-june-16-2022">
<h2>fish 3.5.0 (released June 16, 2022)<a class="headerlink" href="#fish-3-5-0-released-june-16-2022" title="Link to this heading">¶</a></h2>
<section id="id64">
<h3>Notable improvements and fixes<a class="headerlink" href="#id64" title="Link to this heading">¶</a></h3>
<ul>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">path</span></code> builtin command to filter and transform paths (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7659">#7659</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8958">#8958</a>). For example, to list all the separate extensions used on files in /usr/share/man (after removing one extension, commonly a “.gz”):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">path</span><span class="w"> </span><span class="no">filter</span><span class="w"> </span><span class="no">-f</span><span class="w"> </span><span class="no">/usr/share/man/</span><span class="o">**</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">path</span><span class="w"> </span><span class="no">change-extension</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">path</span><span class="w"> </span><span class="no">extension</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">path</span><span class="w"> </span><span class="no">sort</span><span class="w"> </span><span class="no">-u</span>
</pre></div>
</div>
</li>
<li><p>Tab (or any key bound to <code class="docutils literal notranslate"><span class="pre">complete</span></code>) now expands wildcards instead of invoking completions, if there is a wildcard in the path component under the cursor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/954">#954</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8593">#8593</a>).</p></li>
<li><p>Scripts can now catch and handle the SIGINT and SIGTERM signals, either via <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-signal</span></code> or with <code class="docutils literal notranslate"><span class="pre">trap</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6649">#6649</a>).</p></li>
</ul>
</section>
<section id="id65">
<h3>Deprecations and removed features<a class="headerlink" href="#id65" title="Link to this heading">¶</a></h3>
<ul>
<li><p>The <code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code> feature flag, introduced in fish 3.0 and enabled by default in fish 3.1, has been made read-only.
That means it is no longer possible to disable it, and code supporting the <code class="docutils literal notranslate"><span class="pre">^</span></code> redirection has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8857">#8857</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8865">#8865</a>).</p>
<p>To recap: fish used to support <code class="docutils literal notranslate"><span class="pre">^</span></code> to redirect stderr, so you could use commands like:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">test</span><span class="w"> </span><span class="s2">&quot;</span><span class="o">$foo</span><span class="s2">&quot;</span><span class="w"> </span><span class="no">-gt</span><span class="w"> </span><span class="no">8</span><span class="w"> </span><span class="no">^/dev/null</span>
</pre></div>
</div>
<p>to ignore error messages. This made the <code class="docutils literal notranslate"><span class="pre">^</span></code> symbol require escaping and quoting, and was a bit of a weird shortcut considering <code class="docutils literal notranslate"><span class="pre">2&gt;</span></code> already worked, which is only one character longer.</p>
<p>So the above can simply become:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">test</span><span class="w"> </span><span class="s2">&quot;</span><span class="o">$foo</span><span class="s2">&quot;</span><span class="w"> </span><span class="no">-gt</span><span class="w"> </span><span class="no">8</span><span class="w"> </span><span class="p">2&gt;/dev/null</span>
</pre></div>
</div>
</li>
<li><p>The following feature flags have been enabled by default:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">regex-easyesc</span></code>, which makes <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-r</span></code> not do a superfluous round of unescaping in the replacement expression.
That means e.g. to escape any “a” or “b” in an argument you can use <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-ra</span> <span class="pre">'([ab])'</span> <span class="pre">'\\\\$1'</span> <span class="pre">foobar</span></code> instead of needing 8 backslashes.</p>
<p>This only affects the <em>replacement</em> expression, not the <em>match</em> expression (the <code class="docutils literal notranslate"><span class="pre">'([ab])'</span></code> part in the example).
A survey of plugins on GitHub did not turn up any affected code, so we do not expect this to affect many users.</p>
<p>This flag was introduced in fish 3.1.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">ampersand-nobg-in-token</span></code>, which means that <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> will not create a background job if it occurs in the middle of a word. For example, <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo&amp;bar</span></code> will print “foo&amp;bar” instead of running <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo</span></code> in the background and then starting <code class="docutils literal notranslate"><span class="pre">bar</span></code> as a second job.</p>
<p>Reformatting with <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> would already introduce spaces, turning <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo&amp;bar</span></code> into <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo</span> <span class="pre">&amp;</span> <span class="pre">bar</span></code>.</p>
<p>This flag was introduced in fish 3.4.</p>
</li>
</ul>
<p>To turn off these flags, add <code class="docutils literal notranslate"><span class="pre">no-regex-easyesc</span></code> or <code class="docutils literal notranslate"><span class="pre">no-ampersand-nobg-in-token</span></code> to <span class="target" id="index-30"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">fish_features</span></code> and restart fish:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">no-regex-easyesc</span>
</pre></div>
</div>
<p>Like <code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code>, they will eventually be made read-only.</p>
</li>
<li><p>Most <code class="docutils literal notranslate"><span class="pre">string</span></code> subcommands no longer append a newline to their input if the input didn’t have one (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8473">#8473</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3847">#3847</a>)</p></li>
<li><p>Fish’s escape sequence removal (like for <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">length</span> <span class="pre">--visible</span></code> or to figure out how wide the prompt is) no longer has special support for non-standard color sequences like from Data General terminals, e.g. the Data General Dasher D220 from 1984. This removes a bunch of work in the common case, allowing <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">length</span> <span class="pre">--visible</span></code> to be much faster with unknown escape sequences. We don’t expect anyone to have ever used fish with such a terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8769">#8769</a>).</p></li>
<li><p>Code to upgrade universal variables from fish before 3.0 has been removed. Users who upgrade directly from fish versions 2.7.1 or before will have to set their universal variables &amp; abbreviations again. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8781">#8781</a>)</p></li>
<li><p>The meaning of an empty color variable has changed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8793">#8793</a>). Previously, when a variable was set but empty, it would be interpreted as the “normal” color. Now, empty color variables cause the same effect as unset variables - the general highlighting variable for that type is used instead. For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-g</span><span class="w"> </span><span class="no">fish_color_command</span><span class="w"> </span><span class="no">blue</span>
<span class="nf">set</span><span class="w"> </span><span class="no">-g</span><span class="w"> </span><span class="no">fish_color_keyword</span>
</pre></div>
</div>
<p>would previously make keywords “normal” (usually white in a dark terminal). Now it’ll make them blue. To achieve the previous behavior, use the normal color explicitly: <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">fish_color_keyword</span> <span class="pre">normal</span></code>.</p>
<p>This makes it easier to make self-contained color schemes that don’t accidentally use color that was set before.
<code class="docutils literal notranslate"><span class="pre">fish_config</span></code> has been adjusted to set known color variables that a theme doesn’t explicitly set to empty.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">eval</span></code> is now a reserved keyword, so it can’t be used as a function name. This follows <code class="docutils literal notranslate"><span class="pre">set</span></code> and <code class="docutils literal notranslate"><span class="pre">read</span></code>, and is necessary because it can’t be cleanly shadowed by a function - at the very least <code class="docutils literal notranslate"><span class="pre">eval</span> <span class="pre">set</span> <span class="pre">-l</span> <span class="pre">argv</span> <span class="pre">foo</span></code> breaks. Fish will ignore autoload files for it, so left over <code class="docutils literal notranslate"><span class="pre">eval.fish</span></code> from previous fish versions won’t be loaded.</p></li>
<li><p>The git prompt in informative mode now defaults to skipping counting untracked files, as this was extremely slow. To turn it on, set <span class="target" id="index-31"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">__fish_git_prompt_showuntrackedfiles</span></code> or set the git config value “bash.showuntrackedfiles” to <code class="docutils literal notranslate"><span class="pre">true</span></code> explicitly (which can be done for individual repositories). The “informative+vcs” sample prompt already skipped display of untracked files, but didn’t do so in a way that skipped the computation, so it should be quite a bit faster in many cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8980">#8980</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">__terlar_git_prompt</span></code> function, used by the “Terlar” sample prompt, has been rebuilt as a configuration of the normal <code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> to ease maintenance, improve performance and add features (like reading per-repo git configuration). Some slight changes remain; users who absolutely must have the same behavior are encouraged to copy the old function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9011">#9011</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7918">#7918</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8979">#8979</a>).</p></li>
</ul>
</section>
<section id="id66">
<h3>Scripting improvements<a class="headerlink" href="#id66" title="Link to this heading">¶</a></h3>
<ul>
<li><p>Quoted command substitution that directly follow a variable expansion (like <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">&quot;$var$(echo</span> <span class="pre">x)&quot;</span></code>) no longer affect the variable expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8849">#8849</a>).</p></li>
<li><p>Fish now correctly expands command substitutions that are preceded by an escaped dollar (like <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">\$(echo)</span></code>). This regressed in version 3.4.0.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> can now handle underscores (<code class="docutils literal notranslate"><span class="pre">_</span></code>) as visual separators in numbers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8611">#8611</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8496">#8496</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">math</span><span class="w"> </span><span class="no">5</span><span class="w"> </span><span class="no">+</span><span class="w"> </span><span class="no">2_123_252</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code>’s <code class="docutils literal notranslate"><span class="pre">min</span></code> and <code class="docutils literal notranslate"><span class="pre">max</span></code> functions now take a variable number of arguments instead of always requiring 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8644">#8644</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8646">#8646</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">math</span><span class="w"> </span><span class="no">min</span><span class="w"> </span><span class="no">8,2,4</span>
<span class="go">2</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> is now faster as the last process in a pipeline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8552">#8552</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">join</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--no-empty</span></code> flag to skip empty arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8774">#8774</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8351">#8351</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> now only triggers the <code class="docutils literal notranslate"><span class="pre">fish_read</span></code> event, not the <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> event (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8797">#8797</a>). It was supposed to work this way in fish 3.2.0 and later, but both events were emitted.</p></li>
<li><p>The TTY modes are no longer restored when non-interactive shells exit. This fixes wrong tty modes in pipelines with interactive commands. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8705">#8705</a>).</p></li>
<li><p>Some functions shipped with fish printed error messages to standard output, but they now they rightly go to standard error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8855">#8855</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> now correctly reports CPU usage as a percentage, instead of as a number of clock ticks (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8919">#8919</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process-exit</span></code> events now fire when the process exits even if the job has not yet exited, fixing a regression in 3.4.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8914">#8914</a>).</p></li>
</ul>
</section>
<section id="id67">
<h3>Interactive improvements<a class="headerlink" href="#id67" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Fish now reports a special error if a command wasn’t found and there is a non-executable file by that name in <span class="target" id="index-32"></span><a class="reference internal" href="language.html#envvar-PATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></a> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8804">#8804</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">less</span></code> and other interactive commands would occasionally be stopped when run in a pipeline with fish functions; this has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8699">#8699</a>).</p></li>
<li><p>Case-changing autosuggestions generated mid-token now correctly append only the suffix, instead of duplicating the token (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8820">#8820</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ulimit</span></code> learned a number of new options for the resource limits available on Linux, FreeBSD ande NetBSD, and returns a specific warning if the limit specified is not available on the active operating system (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8823">#8823</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8786">#8786</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">vared</span></code> command can now successfully edit variables named “tmp” or “prompt” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8836">#8836</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8837">#8837</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">time</span></code> now emits an error if used after the first command in a pipeline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8841">#8841</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_add_path</span></code> now prints a message for skipped non-existent paths when using the <code class="docutils literal notranslate"><span class="pre">-v</span></code> flag (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8884">#8884</a>).</p></li>
<li><p>Since fish 3.2.0, pressing <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd> while a command is running would end up inserting a space into the next commandline, which has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8871">#8871</a>).</p></li>
<li><p>A bug that caused multi-line prompts to be moved down a line when pasting or switching modes has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3481">#3481</a>).</p></li>
<li><p>The Web-based configuration system no longer strips too many quotes in the abbreviation display (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8917">#8917</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8918">#8918</a>).</p></li>
<li><p>Fish started with <code class="docutils literal notranslate"><span class="pre">--no-config</span></code> will now use the default keybindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8493">#8493</a>)</p></li>
<li><p>When fish inherits a <span class="target" id="index-33"></span><a class="reference internal" href="language.html#envvar-USER"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">USER</span></code></a> environment variable value that doesn’t correspond to the current effective user ID, it will now correct it in all cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8879">#8879</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8583">#8583</a>).</p></li>
<li><p>Fish sets a new <span class="target" id="index-34"></span><a class="reference internal" href="language.html#envvar-EUID"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">EUID</span></code></a> variable containing the current effective user id (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8866">#8866</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">search</span></code> no longer interprets the search term as an option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8853">#8853</a>)</p></li>
<li><p>The status message when a job terminates should no longer be erased by a multiline prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8817">#8817</a>)</p></li>
</ul>
<section id="id68">
<h4>New or improved bindings<a class="headerlink" href="#id68" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> binding will now insert <code class="docutils literal notranslate"><span class="pre">doas</span></code> instead of <code class="docutils literal notranslate"><span class="pre">sudo</span></code> if necessary (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8942">#8942</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">kill-whole-line</span></code> special input function now kills the newline preceding the last line. This makes <code class="docutils literal notranslate"><span class="pre">dd</span></code> in vi-mode clear the last line properly.</p></li>
<li><p>The new <code class="docutils literal notranslate"><span class="pre">kill-inner-line</span></code> special input function kills the line without any newlines, allowing <code class="docutils literal notranslate"><span class="pre">cc</span></code> in vi-mode to clear the line while preserving newlines (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8983">#8983</a>).</p></li>
<li><p>On terminals that emit special sequences for these combinations, <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">space</kbd> is bound like <kbd class="kbd docutils literal notranslate">space</kbd>, and <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">enter</kbd> is bound like <kbd class="kbd docutils literal notranslate">return</kbd> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8874">#8874</a>).</p></li>
</ul>
</section>
<section id="id69">
<h4>Improved prompts<a class="headerlink" href="#id69" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">Astronaut</span></code> prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8775">#8775</a>), a multi-line prompt using plain text reminiscent of the Starship.rs prompt.</p></li>
</ul>
</section>
<section id="id70">
<h4>Completions<a class="headerlink" href="#id70" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">archlinux-java</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8911">#8911</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">apk</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8951">#8951</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">brightnessctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8758">#8758</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">efibootmgr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9010">#9010</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fastboot</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8904">#8904</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">optimus-manager</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8913">#8913</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rclone</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8819">#8819</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sops</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8821">#8821</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tuned-adm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8760">#8760</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wg-quick</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8687">#8687</a>)</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> can now be given multiple <code class="docutils literal notranslate"><span class="pre">--condition</span></code> options. They will be attempted in the order they were given, and only if all succeed will the completion be made available (as if they were connected with <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code>). This helps with caching - fish’s complete system stores the return value of each condition as long as the commandline doesn’t change, so this can reduce the number of conditions that need to be evaluated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8536">#8536</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8967">#8967</a>).</p></li>
</ul>
</section>
<section id="id71">
<h4>Improved terminal support<a class="headerlink" href="#id71" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Working directory reporting is enabled for kitty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8806">#8806</a>).</p></li>
<li><p>Changing the cursor shape is now enabled by default in iTerm2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3696">#3696</a>).</p></li>
</ul>
</section>
</section>
<section id="id72">
<h3>For distributors<a class="headerlink" href="#id72" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>libatomic is now correctly detected as necessary when building on RISC-V (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8850">#8850</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8851">#8851</a>).</p></li>
<li><p>In some cases, the build process found the wrong libintl on macOS. This has been corrected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5244">#5244</a>).</p></li>
<li><p>The paths for completions, functions, and configuration snippets now include
subdirectories <code class="docutils literal notranslate"><span class="pre">fish/vendor_completions.d</span></code>, <code class="docutils literal notranslate"><span class="pre">fish/vendor_functions.d</span></code>, and
<code class="docutils literal notranslate"><span class="pre">fish/vendor_conf.d</span></code> (respectively) within <code class="docutils literal notranslate"><span class="pre">XDG_DATA_HOME</span></code> (or <code class="docutils literal notranslate"><span class="pre">~/.local/share</span></code>
if not defined) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8887">#8887</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7816">#7816</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-4-1-released-march-25-2022">
<h2>fish 3.4.1 (released March 25, 2022)<a class="headerlink" href="#fish-3-4-1-released-march-25-2022" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes the following problems identified in fish 3.4.0:</p>
<ul class="simple">
<li><p>An error printed after upgrading, where old instances could pick up a newer version of the <code class="docutils literal notranslate"><span class="pre">fish_title</span></code> function, has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8778">#8778</a>)</p></li>
<li><p>fish builds correctly on NetBSD (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8788">#8788</a>) and OpenIndiana (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8780">#8780</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nextd-or-forward-word</span></code>, bound to <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">right</kbd> by default, was inadvertently changed to move like <code class="docutils literal notranslate"><span class="pre">forward-bigword</span></code>. This has been corrected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8790">#8790</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funcsave</span> <span class="pre">-q</span></code> and <code class="docutils literal notranslate"><span class="pre">funcsave</span> <span class="pre">--quiet</span></code> now work correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8830">#8830</a>).</p></li>
<li><p>Issues with the <code class="docutils literal notranslate"><span class="pre">csharp</span></code> and <code class="docutils literal notranslate"><span class="pre">nmcli</span></code> completions were corrected.</p></li>
</ul>
<p>If you are upgrading from version 3.3.1 or before, please also review the release notes for 3.4.0 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-4-0-released-march-12-2022">
<h2>fish 3.4.0 (released March 12, 2022)<a class="headerlink" href="#fish-3-4-0-released-march-12-2022" title="Link to this heading">¶</a></h2>
<section id="id73">
<h3>Notable improvements and fixes<a class="headerlink" href="#id73" title="Link to this heading">¶</a></h3>
<ul>
<li><p>fish’s command substitution syntax has been extended: <code class="docutils literal notranslate"><span class="pre">$(cmd)</span></code> now has the same meaning as <code class="docutils literal notranslate"><span class="pre">(cmd)</span></code> but it can be used inside double quotes, to prevent line splitting of the results (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/159">#159</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">foo</span><span class="w"> </span><span class="o">(</span><span class="nf">bar</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">collect</span><span class="o">)</span>
<span class="c"># can now be written as</span>
<span class="nf">foo</span><span class="w"> </span><span class="s2">&quot;</span><span class="o">$(</span><span class="nf">bar</span><span class="o">)</span><span class="s2">&quot;</span>

<span class="c"># and</span>

<span class="nf">foo</span><span class="w"> </span><span class="o">(</span><span class="nf">bar</span><span class="o">)</span>
<span class="c"># can now be written as</span>
<span class="nf">foo</span><span class="w"> </span><span class="o">$(</span><span class="nf">bar</span><span class="o">)</span>
<span class="c"># this will still split on newlines only.</span>
</pre></div>
</div>
</li>
<li><p>Complementing the <code class="docutils literal notranslate"><span class="pre">prompt</span></code> command in 3.3.0, <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> gained a <code class="docutils literal notranslate"><span class="pre">theme</span></code> subcommand to show and pick from the sample themes (meaning color schemes) directly in the terminal, instead of having to open a Web browser. For example <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span> <span class="pre">Nord</span></code> loads the Nord theme in the current session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8132">#8132</a>). The current theme can be saved with <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">dump</span></code>, and custom themes can be added by saving them in <code class="docutils literal notranslate"><span class="pre">~/.config/fish/themes/</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> and <code class="docutils literal notranslate"><span class="pre">read</span></code> learned a new option, <code class="docutils literal notranslate"><span class="pre">--function</span></code>, to set a variable in the function’s top scope. This should be a more familiar way of scoping variables and avoids issues with <code class="docutils literal notranslate"><span class="pre">--local</span></code>, which is actually block-scoped (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/565">#565</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8145">#8145</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">demonstration</span>
<span class="w">    </span><span class="nf">if</span><span class="w"> </span><span class="nf">true</span>
<span class="w">        </span><span class="nf">set</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">foo</span><span class="w"> </span><span class="no">bar</span>
<span class="w">        </span><span class="nf">set</span><span class="w"> </span><span class="no">--local</span><span class="w"> </span><span class="no">baz</span><span class="w"> </span><span class="no">banana</span>
<span class="w">    </span><span class="nf">end</span>
<span class="w">    </span><span class="nf">echo</span><span class="w"> </span><span class="o">$foo</span><span class="w"> </span><span class="c"># prints &quot;bar&quot; because $foo is still valid</span>
<span class="w">    </span><span class="nf">echo</span><span class="w"> </span><span class="o">$baz</span><span class="w"> </span><span class="c"># prints nothing because $baz went out of scope</span>
<span class="nf">end</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">pad</span></code> now excludes escape sequences like colors that fish knows about, and a new <code class="docutils literal notranslate"><span class="pre">--visible</span></code> flag to <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">length</span></code> makes it use that kind of visible width. This is useful to get the number of terminal cells an already colored string would occupy, like in a prompt. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8182">#8182</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7784">#7784</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4012">#4012</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">length</span><span class="w"> </span><span class="no">--visible</span><span class="w"> </span><span class="o">(</span><span class="nf">set_color</span><span class="w"> </span><span class="no">red</span><span class="o">)</span><span class="no">foo</span>
<span class="go">3</span>
</pre></div>
</div>
</li>
<li><p>Performance improvements to globbing, especially on systems using glibc. In some cases (large directories with files with many numbers in the names) this almost halves the time taken to expand the glob.</p></li>
<li><p>Autosuggestions can now be turned off by setting <code class="docutils literal notranslate"><span class="pre">$fish_autosuggestion_enabled</span></code> to 0, and (almost) all highlighting can be turned off by choosing the new “None” theme. The exception is necessary colors, like those which distinguish autosuggestions from the actual command line. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8376">#8376</a>)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> function, which is included in the default prompts, now overrides <code class="docutils literal notranslate"><span class="pre">git</span></code> to avoid running  commands set by per-repository configuration. This avoids a potential security issue in some circumstances, and has been assigned CVE-2022-20001 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8589">#8589</a>).</p></li>
</ul>
</section>
<section id="id74">
<h3>Deprecations and removed features<a class="headerlink" href="#id74" title="Link to this heading">¶</a></h3>
<ul>
<li><p>A new feature flag, <code class="docutils literal notranslate"><span class="pre">ampersand-nobg-in-token</span></code> makes <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> only act as background operator if followed by a separator. In combination with <code class="docutils literal notranslate"><span class="pre">qmark-noglob</span></code>, this allows entering most URLs at the command line without quoting or escaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7991">#7991</a>). For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo&amp;bar</span><span class="w"> </span><span class="c"># will print &quot;foo&amp;bar&quot;, instead of running &quot;echo foo&quot; in the background and executing &quot;bar&quot;</span>
<span class="gp">&gt; </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo</span><span class="w"> </span><span class="p">&amp;</span><span class="w"> </span><span class="nf">bar</span><span class="w"> </span><span class="c"># will still run &quot;echo foo&quot; in the background and then run &quot;bar&quot;</span>
<span class="go"># with both ampersand-nobg-in-token and qmark-noglob, this argument has no special characters anymore</span>
<span class="gp">&gt; </span><span class="nf">open</span><span class="w"> </span><span class="no">https://www.youtube.com/watch?v=dQw4w9WgXcQ&amp;feature=youtu.be</span>
</pre></div>
</div>
<p>As a reminder, feature flags can be set on startup with <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--features</span> <span class="pre">ampersand-nobg-in-token,qmark-noglob</span></code> or with a universal variable called <code class="docutils literal notranslate"><span class="pre">fish_features</span></code>:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">ampersand-nobg-in-token</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">$status</span></code> is now forbidden as a command, to prevent a surprisingly common error among new users: Running <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">$status</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8171">#8171</a>). This applies <em>only</em> to <code class="docutils literal notranslate"><span class="pre">$status</span></code>, other variables are still allowed.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> now returns an exit status of 255 if given no variable names. This means <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">$foo</span></code> will not enter the if-block if <code class="docutils literal notranslate"><span class="pre">$foo</span></code> is empty or unset. To restore the previous behavior, use <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">not</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">foo;</span> <span class="pre">or</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">$foo</span></code> - but this is unlikely to be desirable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8214">#8214</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">_</span></code> is now a reserved keyword (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8342">#8342</a>).</p></li>
<li><p>The special input functions <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>, <code class="docutils literal notranslate"><span class="pre">nextd-or-forward-word</span></code> and <code class="docutils literal notranslate"><span class="pre">prevd-or-backward-word</span></code> replace fish functions of the same names (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8538">#8538</a>).</p></li>
<li><p>Mac OS X 10.9 is no longer supported. The minimum Mac version is now 10.10 “Yosemite.”</p></li>
</ul>
</section>
<section id="id75">
<h3>Scripting improvements<a class="headerlink" href="#id75" title="Link to this heading">¶</a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">collect</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--allow-empty</span></code> option, which will output one empty argument in a command substitution that has no output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8054">#8054</a>). This allows commands like <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-n</span> <span class="pre">(echo</span> <span class="pre">-n</span> <span class="pre">|</span> <span class="pre">string</span> <span class="pre">collect</span> <span class="pre">--allow-empty)</span></code> to work more reliably. Note this can also be written as <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-n</span> <span class="pre">&quot;$(echo</span> <span class="pre">-n)&quot;</span></code> (see above).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> gained a <code class="docutils literal notranslate"><span class="pre">--groups-only</span></code> option, which makes it only output capturing groups, excluding the full match. This allows <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> to do simple transformations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6056">#6056</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">match</span><span class="w"> </span><span class="no">-r</span><span class="w"> </span><span class="no">--groups-only</span><span class="w"> </span><span class="s1">&#39;(.*)fish&#39;</span><span class="w"> </span><span class="s1">&#39;catfish&#39;</span><span class="w"> </span><span class="s1">&#39;twofish&#39;</span><span class="w"> </span><span class="s1">&#39;blue fish&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">escape</span>
<span class="go">cat</span>
<span class="go">two</span>
<span class="go">&#39;blue &#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_user_paths</span></code> is now automatically deduplicated to fix a common user error of appending to it in config.fish when it is universal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8117">#8117</a>). <a class="reference internal" href="cmds/fish_add_path.html"><span class="doc">fish_add_path</span></a> remains the recommended way to add to $PATH.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">return</span></code> can now be used outside functions. In scripts, it does the same thing as <code class="docutils literal notranslate"><span class="pre">exit</span></code>. In interactive mode,it sets <code class="docutils literal notranslate"><span class="pre">$status</span></code> without exiting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8148">#8148</a>).</p></li>
<li><p>An oversight prevented all syntax checks from running on commands given to <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8171">#8171</a>). This includes checks such as <code class="docutils literal notranslate"><span class="pre">exec</span></code> not being allowed in a pipeline, and <code class="docutils literal notranslate"><span class="pre">$$</span></code> not being a valid variable. Generally, another error was generated anyway.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now correctly reformats tokens that end with a backslash followed by a newline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8197">#8197</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> gained an <code class="docutils literal notranslate"><span class="pre">--is-valid</span></code> option to check if the command line is syntactically valid and complete. This allows basic implementation of transient prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8142">#8142</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> gained a <code class="docutils literal notranslate"><span class="pre">--paging-full-mode</span></code> option to check if the pager is showing all the possible lines (no “7 more rows” message) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8485">#8485</a>).</p></li>
<li><p>List expansion correctly reports an error when used with all zero indexes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8213">#8213</a>).</p></li>
<li><p>Running <code class="docutils literal notranslate"><span class="pre">fish</span></code> with a directory instead of a script as argument (eg <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">.</span></code>) no longer leads to an infinite loop. Instead it errors out immediately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8258">#8258</a>)</p></li>
<li><p>Some error messages occurring after fork, like “text file busy” have been replaced by bespoke error messages for fish (like “File is currently open for writing”). This also restores error messages with current glibc versions that removed sys_errlist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8234">#8234</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4183">#4183</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">realpath</span></code> builtin now also squashes leading slashes with the <code class="docutils literal notranslate"><span class="pre">--no-symlinks</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8281">#8281</a>).</p></li>
<li><p>When trying to <code class="docutils literal notranslate"><span class="pre">cd</span></code> to a dangling (broken) symbolic link, fish will print an error noting that the target is a broken link (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8264">#8264</a>).</p></li>
<li><p>On MacOS terminals that are not granted permissions to access a folder, <code class="docutils literal notranslate"><span class="pre">cd</span></code> would print a spurious “rotten symlink” error, which has been corrected to “permission denied” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8264">#8264</a>).</p></li>
<li><p>Since fish 3.0, <code class="docutils literal notranslate"><span class="pre">for</span></code> loops would trigger a variable handler function before the loop was entered. As the variable had not actually changed or been set, this was a spurious event and has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8384">#8384</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now correctly prints negative values and values larger than <code class="docutils literal notranslate"><span class="pre">2**31</span></code> when in hex or octal bases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8417">#8417</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dirs</span></code> always produces an exit status of 0, instead of sometimes returning 1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8211">#8211</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">&quot;&quot;</span></code> no longer crashes fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8147">#8147</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> can now query whether a variable is a path variable via <code class="docutils literal notranslate"><span class="pre">--path</span></code> or <code class="docutils literal notranslate"><span class="pre">--unpath</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8494">#8494</a>).</p></li>
<li><p>Tilde characters (<code class="docutils literal notranslate"><span class="pre">~</span></code>) produced by custom completions are no longer escaped when applied to the command line, making it easier to use the output of a recursive <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C</span></code> in completion scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4570">#4570</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--show</span></code> reports when a variable is read-only (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8179">#8179</a>).</p></li>
<li><p>Erasing <code class="docutils literal notranslate"><span class="pre">$fish_emoji_width</span></code> will reset fish to the default guessed emoji width (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8274">#8274</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">la</span></code> function no longer lists entries for “.” and “..”, matching other systems defaults (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8519">#8519</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">-q</span></code> returns the correct exit status when given multiple abbreviation names as arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8431">#8431</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">-v</span></code> returns an exit status of 127 instead of 1 if no command was found (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8547">#8547</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> with <code class="docutils literal notranslate"><span class="pre">--ignore-unknown</span></code> no longer breaks with multiple unknown options in a short option group (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8637">#8637</a>).</p></li>
<li><p>Comments inside command substitutions or brackets now correctly ignore parentheses, quotes, and brackets (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7866">#7866</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8022">#8022</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8695">#8695</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--escape</span></code> option, which turns on escaping in returned completion strings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3469">#3469</a>).</p></li>
<li><p>Invalid byte or unicode escapes like <code class="docutils literal notranslate"><span class="pre">\Utest</span></code> or <code class="docutils literal notranslate"><span class="pre">\xNotHex</span></code> are now a tokenizer error instead of causing the token to be truncated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8545">#8545</a>).</p></li>
</ul>
</section>
<section id="id76">
<h3>Interactive improvements<a class="headerlink" href="#id76" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Vi mode cursors are now set properly after <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8125">#8125</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> will try to edit the whole file containing a function definition, if there is one (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/391">#391</a>).</p></li>
<li><p>Running a command line consisting of just spaces now deletes an ephemeral (starting with space) history item again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8232">#8232</a>).</p></li>
<li><p>Command substitutions no longer respect job control, instead running inside fish’s own process group (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8172">#8172</a>). This more closely matches other shells, and improves <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> reliability inside a command substitution.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span></code> and <code class="docutils literal notranslate"><span class="pre">__fish_print_help</span></code> now properly support <code class="docutils literal notranslate"><span class="pre">less</span></code> before version 530, including the version that ships with macOS. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8157">#8157</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> now knows which section is in which document again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8245">#8245</a>).</p></li>
<li><p>fish’s highlighter will now color options (starting with <code class="docutils literal notranslate"><span class="pre">-</span></code> or <code class="docutils literal notranslate"><span class="pre">--</span></code>) with the color given in the new $fish_color_option, up to the first <code class="docutils literal notranslate"><span class="pre">--</span></code>. It falls back on $fish_color_param, so nothing changes for existing setups (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8292">#8292</a>).</p></li>
<li><p>When executing a command, abbreviations are no longer expanded when the cursor is separated from the command by spaces, making it easier to suppress abbreviation expansion of commands without arguments. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8423">#8423</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code>’s output was simplified. By default, it now only prints a bind statement. The previous per-character timing information can be seen with a new <code class="docutils literal notranslate"><span class="pre">--verbose</span></code> switch (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8467">#8467</a>).</p></li>
<li><p>Custom completions are now also loaded for commands that contain tildes or variables like <code class="docutils literal notranslate"><span class="pre">~/bin/fish</span></code> or <code class="docutils literal notranslate"><span class="pre">$PWD/fish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8442">#8442</a>).</p></li>
<li><p>Command lines spanning multiple lines will not be overwritten by the completion pager when it fills the entire terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8509">#8509</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8405">#8405</a>).</p></li>
<li><p>When redrawing a multiline prompt, the old prompt is now properly cleared (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8163">#8163</a>).</p></li>
<li><p>Interactive completion would occasionally ignore the last word on the command line due to a race condition. This has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8175">#8175</a>).</p></li>
<li><p>Propagation of universal variables from a fish process that is closing is faster (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8209">#8209</a>).</p></li>
<li><p>The command line is drawn in the correct place if the prompt ends with a newline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8298">#8298</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span></code> learned a new subcommand <code class="docutils literal notranslate"><span class="pre">clear-session</span></code> to erase all history from the current session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5791">#5791</a>).</p></li>
<li><p>Pressing <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> in <code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> will no longer print the incorrect “Press [ctrl-C] again to exit” message (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8510">#8510</a>).</p></li>
<li><p>The default command-not-found handler for Fedora/PackageKit now passes the whole command line, allowing for functionality such as running the suggested command directly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8579">#8579</a>).</p></li>
<li><p>When looking for locale information, the Debian configuration is now used when available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8557">#8557</a>).</p></li>
<li><p>Pasting text containing quotes from the clipboard trims spaces more appropriately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8550">#8550</a>).</p></li>
<li><p>The clipboard bindings ignore X-based clipboard programs if the <code class="docutils literal notranslate"><span class="pre">DISPLAY</span></code> environment variable is not set, which helps prefer the Windows clipboard when it is available (such as on WSL).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funcsave</span></code> will remove a saved copy of a function that has been erased with <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--erase</span></code>.</p></li>
<li><p>The Web-based configuration tool gained a number of improvements, including the ability to set pager colors.</p></li>
<li><p>The default <code class="docutils literal notranslate"><span class="pre">fish_title</span></code> prints a shorter title with shortened $PWD and no more redundant “fish” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8641">#8641</a>).</p></li>
<li><p>Holding down an arrow key won’t freeze the terminal with long periods of flashing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8610">#8610</a>).</p></li>
<li><p>Multi-char bindings are no longer interrupted if a signal handler enqueues an event. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8628">#8628</a>).</p></li>
</ul>
<section id="id77">
<h4>New or improved bindings<a class="headerlink" href="#id77" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p><kbd class="kbd docutils literal notranslate">escape</kbd> can now bound without breaking arrow key bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8428">#8428</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">h</kbd> binding (to open a command’s manual page) now also ignores <code class="docutils literal notranslate"><span class="pre">command</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8447">#8447</a>).</p></li>
</ul>
</section>
<section id="id78">
<h4>Improved prompts<a class="headerlink" href="#id78" title="Link to this heading">¶</a></h4>
<ul>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_status_to_signal</span></code> helper function returns the correct signal names for the current platform, rather than Linux (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8530">#8530</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">prompt_pwd</span></code> helper function learned a <code class="docutils literal notranslate"><span class="pre">--full-length-dirs</span> <span class="pre">N</span></code> option to keep the last N directory components unshortened. In addition the number of characters to shorten each component should be shortened to can now be given as <code class="docutils literal notranslate"><span class="pre">-d</span> <span class="pre">N</span></code> or <code class="docutils literal notranslate"><span class="pre">--dir-length</span> <span class="pre">N</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8208">#8208</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">prompt_pwd</span><span class="w"> </span><span class="no">--full-length-dirs</span><span class="w"> </span><span class="no">2</span><span class="w"> </span><span class="no">-d</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="o">~</span><span class="no">/dev/fish-shell/share/tools/web_config</span>
<span class="go">~/d/f/s/tools/web_config</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id79">
<h4>Completions<a class="headerlink" href="#id79" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p>Apple’s <code class="docutils literal notranslate"><span class="pre">shortcuts</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8434">#8434</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">asd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8759">#8759</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">az</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8141">#8141</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">black</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8123">#8123</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">clasp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8373">#8373</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cpupower</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8302">#8302</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dart</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8315">#8315</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dscacheutil</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">elvish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8416">#8416</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ethtool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8283">#8283</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exif</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8246">#8246</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">findstr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8481">#8481</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">git-sizer</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8156">#8156</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gnome-extensions</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8732">#8732</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gping</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8181">#8181</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">isatty</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8609">#8609</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">istioctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8343">#8343</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kmutil</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kubectl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8734">#8734</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">matlab</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8505">#8505</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mono</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8415">#8415</a>) and related tools <code class="docutils literal notranslate"><span class="pre">csharp</span></code>, <code class="docutils literal notranslate"><span class="pre">gacutil</span></code>, <code class="docutils literal notranslate"><span class="pre">gendarme</span></code>, <code class="docutils literal notranslate"><span class="pre">ikdasm</span></code>, <code class="docutils literal notranslate"><span class="pre">ilasm</span></code>, <code class="docutils literal notranslate"><span class="pre">mkbundle</span></code>, <code class="docutils literal notranslate"><span class="pre">monodis</span></code>, <code class="docutils literal notranslate"><span class="pre">monop</span></code>, <code class="docutils literal notranslate"><span class="pre">sqlsharp</span></code> and <code class="docutils literal notranslate"><span class="pre">xsp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8452">#8452</a>)</p></li>
<li><p>Angular’s <code class="docutils literal notranslate"><span class="pre">ng</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8111">#8111</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nodeenv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8533">#8533</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">octave</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8505">#8505</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pabcnet_clear</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8421">#8421</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qmk</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8180">#8180</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rakudo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8113">#8113</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rc-status</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8757">#8757</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">roswell</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8330">#8330</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sbcl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8330">#8330</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">starship</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8520">#8520</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">topgrade</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8651">#8651</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wine</span></code>, <code class="docutils literal notranslate"><span class="pre">wineboot</span></code> and <code class="docutils literal notranslate"><span class="pre">winemaker</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8411">#8411</a>)</p></li>
<li><p>Windows Subsystem for Linux (WSL)’s <code class="docutils literal notranslate"><span class="pre">wslpath</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8364">#8364</a>)</p></li>
<li><p>Windows’ <code class="docutils literal notranslate"><span class="pre">color</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8483">#8483</a>), <code class="docutils literal notranslate"><span class="pre">attrib</span></code>, <code class="docutils literal notranslate"><span class="pre">attributes</span></code>, <code class="docutils literal notranslate"><span class="pre">choice</span></code>, <code class="docutils literal notranslate"><span class="pre">clean</span></code>, <code class="docutils literal notranslate"><span class="pre">cleanmgr</span></code>, <code class="docutils literal notranslate"><span class="pre">cmd</span></code>, <code class="docutils literal notranslate"><span class="pre">cmdkey</span></code>, <code class="docutils literal notranslate"><span class="pre">comp</span></code>, <code class="docutils literal notranslate"><span class="pre">forfiles</span></code>, <code class="docutils literal notranslate"><span class="pre">powershell</span></code>, <code class="docutils literal notranslate"><span class="pre">reg</span></code>, <code class="docutils literal notranslate"><span class="pre">schtasks</span></code>, <code class="docutils literal notranslate"><span class="pre">setx</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8486">#8486</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zef</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8114">#8114</a>)</p></li>
</ul>
</li>
<li><p>Improvements to many completions, especially for <code class="docutils literal notranslate"><span class="pre">git</span></code> aliases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8129">#8129</a>), subcommands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8134">#8134</a>) and submodules (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8716">#8716</a>).</p></li>
<li><p>Many adjustments to complete correct options for system utilities on BSD and macOS.</p></li>
<li><p>When evaluating custom completions, the command line state no longer includes variable overrides (<code class="docutils literal notranslate"><span class="pre">var=val</span></code>). This unbreaks completions that read <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-op</span></code>.</p></li>
</ul>
</section>
<section id="id80">
<h4>Improved terminal support<a class="headerlink" href="#id80" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Dynamic terminal titles are enabled on WezTerm (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8121">#8121</a>).</p></li>
<li><p>Directory history navigation works out of the box with Apple Terminal’s default key settings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2330">#2330</a>).</p></li>
<li><p>fish now assumes Unicode 9+ widths for emoji under iTerm 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8200">#8200</a>).</p></li>
<li><p>Skin-tone emoji modifiers (U+1F3FB through U+1F3FF) are now measured as width 0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8275">#8275</a>).</p></li>
<li><p>fish’s escape sequence removal now also knows Tmux’s wrapped escapes.</p></li>
<li><p>Vi mode cursors are enabled in Apple Terminal.app (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8167">#8167</a>).</p></li>
<li><p>Vi cursor shaping and $PWD reporting is now also enabled on foot (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8422">#8422</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ls</span></code> will use colors also on newer versions of Apple Terminal.app (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8309">#8309</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">delete</kbd> and <kbd class="kbd docutils literal notranslate">shift</kbd>-<kbd class="kbd docutils literal notranslate">tab</kbd> keys work more reliably under <code class="docutils literal notranslate"><span class="pre">st</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8352">#8352</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8354">#8354</a>).</p></li>
</ul>
</section>
</section>
<section id="id81">
<h3>Other improvements<a class="headerlink" href="#id81" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Fish’s test suite now uses <code class="docutils literal notranslate"><span class="pre">ctest</span></code>, and has become much faster to run. It is now also possible to run only specific tests with targets named <code class="docutils literal notranslate"><span class="pre">test_$filename</span></code> - <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test_set.fish</span></code> only runs the set.fish test. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7851">#7851</a>)</p></li>
<li><p>The HTML version of the documentation now includes copy buttons for code examples (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8218">#8218</a>).</p></li>
<li><p>The HTML version of the documentation and the web-based configuration tool now pick more modern system fonts instead of falling back to Arial and something like Courier New most of the time (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8632">#8632</a>).</p></li>
<li><p>The Debian &amp; Ubuntu package linked from fishshell.com is now a single package, rather than split into <code class="docutils literal notranslate"><span class="pre">fish</span></code> and <code class="docutils literal notranslate"><span class="pre">fish-common</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7845">#7845</a>).</p></li>
<li><p>The macOS installer does not assert that Rosetta is required to install fish on machines with Apple Silicon (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8566">#8566</a>).</p></li>
<li><p>The macOS installer now cleans up previous .pkg installations when upgrading. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2963">#2963</a>).</p></li>
</ul>
</section>
<section id="id82">
<h3>For distributors<a class="headerlink" href="#id82" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The minimum version of CMake required to build fish is now 3.5.0.</p></li>
<li><p>The CMake installation supports absolute paths for <code class="docutils literal notranslate"><span class="pre">CMAKE_INSTALL_DATADIR</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8150">#8150</a>).</p></li>
<li><p>Building using NetBSD curses works on any platform (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8087">#8087</a>).</p></li>
<li><p>The build system now uses the default linker instead of forcing use of the gold or lld linker (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8152">#8152</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-3-1-released-july-6-2021">
<h2>fish 3.3.1 (released July 6, 2021)<a class="headerlink" href="#fish-3-3-1-released-july-6-2021" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes the following problems identified in fish 3.3.0:</p>
<ul class="simple">
<li><p>The prompt and command line are redrawn correctly in response to universal variable changes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8088">#8088</a>).</p></li>
<li><p>A superfluous error that was produced when setting the <code class="docutils literal notranslate"><span class="pre">PATH</span></code> or <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> environment variables to include colon-delimited components that do not exist was removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8095">#8095</a>).</p></li>
<li><p>The Vi mode indicator in the prompt is repainted correctly after <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> cancels the current command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8103">#8103</a>).</p></li>
<li><p>fish builds correctly on platforms that do not have a <code class="docutils literal notranslate"><span class="pre">spawn.h</span></code> header, such as old versions of OS X (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8097">#8097</a>).</p></li>
</ul>
<p>A number of improvements to the documentation, and fixes for completions, are included as well.</p>
<p>If you are upgrading from version 3.2.2 or before, please also review the release notes for 3.3.0 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-3-0-released-june-28-2021">
<h2>fish 3.3.0 (released June 28, 2021)<a class="headerlink" href="#fish-3-3-0-released-june-28-2021" title="Link to this heading">¶</a></h2>
<section id="id83">
<h3>Notable improvements and fixes<a class="headerlink" href="#id83" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span></code> gained a <code class="docutils literal notranslate"><span class="pre">prompt</span></code> subcommand to show and pick from the sample prompts directly in the terminal, instead of having to open a webbrowser. For example <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">prompt</span> <span class="pre">choose</span> <span class="pre">default</span></code> loads the default prompt in the current session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7958">#7958</a>).</p></li>
<li><p>The documentation has been reorganized to be easier to understand (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7773">#7773</a>).</p></li>
</ul>
</section>
<section id="id84">
<h3>Deprecations and removed features<a class="headerlink" href="#id84" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">$fish_history</span></code> value “default” is no longer special. It used to be treated the same as “fish” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7650">#7650</a>).</p></li>
<li><p>Redirection to standard error with the <code class="docutils literal notranslate"><span class="pre">^</span></code> character has been disabled by default. It can be turned back on using the <code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code> feature flag, but will eventually be disabled completely (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7105">#7105</a>).</p></li>
<li><p>Specifying an initial tab to <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> now only works with <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">browse</span></code> (eg <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">browse</span> <span class="pre">variables</span></code>), otherwise it would interfere with the new <code class="docutils literal notranslate"><span class="pre">prompt</span></code> subcommand (see below) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7958">#7958</a>).</p></li>
</ul>
</section>
<section id="id85">
<h3>Scripting improvements<a class="headerlink" href="#id85" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> gained new functions <code class="docutils literal notranslate"><span class="pre">log2</span></code> (like the documentation claimed), <code class="docutils literal notranslate"><span class="pre">max</span></code> and <code class="docutils literal notranslate"><span class="pre">min</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7856">#7856</a>). <code class="docutils literal notranslate"><span class="pre">math</span></code> functions can be used without the parentheses (eg <code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">sin</span> <span class="pre">2</span> <span class="pre">+</span> <span class="pre">6</span></code>), and functions have the lowest precedence in the order of operations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7877">#7877</a>).</p></li>
<li><p>Shebang (<code class="docutils literal notranslate"><span class="pre">#!</span></code>) lines are no longer required within shell scripts, improving support for scripts with concatenated binary contents. If a file fails to execute and passes a (rudimentary) binary safety check, fish will re-invoke it using <code class="docutils literal notranslate"><span class="pre">/bin/sh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7802">#7802</a>).</p></li>
<li><p>Exit codes are better aligned with bash. A failed execution now reports <code class="docutils literal notranslate"><span class="pre">$status</span></code> of 127 if the file is not found, and 126 if it is not executable.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">echo</span></code> no longer writes its output one byte at a time, improving performance and allowing use with Linux’s special API files (<code class="docutils literal notranslate"><span class="pre">/proc</span></code>, <code class="docutils literal notranslate"><span class="pre">/sys</span></code> and such) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7836">#7836</a>).</p></li>
<li><p>fish should now better handle <code class="docutils literal notranslate"><span class="pre">cd</span></code> on filesystems with broken <code class="docutils literal notranslate"><span class="pre">stat(3)</span></code> responses (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7577">#7577</a>).</p></li>
<li><p>Builtins now properly report a <code class="docutils literal notranslate"><span class="pre">$status</span></code> of 1 upon unsuccessful writes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7857">#7857</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> with unmatched capture groups and without the <code class="docutils literal notranslate"><span class="pre">--all</span></code> flag now sets an empty variable instead of a variable containing the empty string. It also correctly imports the first match if multiple arguments are provided, matching the documentation. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7938">#7938</a>).</p></li>
<li><p>fish produces more specific errors when a command in a command substitution wasn’t found or is not allowed. This now prints something like “Unknown command” instead of “Unknown error while evaluating command substitution”.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> allows inline variable assignments (<code class="docutils literal notranslate"><span class="pre">FOO=BAR</span> <span class="pre">command</span></code>) to use line continuation, instead of joining them into one line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7955">#7955</a>).</p></li>
<li><p>fish gained a <code class="docutils literal notranslate"><span class="pre">--no-config</span></code> option to disable configuration files. This applies to user-specific and the systemwide <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> (typically in <code class="docutils literal notranslate"><span class="pre">/etc/fish/config.fish</span></code>), and configuration snippets (typically in <code class="docutils literal notranslate"><span class="pre">conf.d</span></code> directories). It also disables universal variables, history, and loading of functions from system or user configuration directories (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7921">#7921</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1256">#1256</a>).</p></li>
<li><p>When universal variables are unavailable for some reason, setting a universal variable now sets a global variable instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7921">#7921</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$last_pid</span></code> now contains the process ID of the last process in the pipeline, allowing it to be used in scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5036">#5036</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5832">#5832</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7721">#7721</a>). Previously, this value contained the process group ID, but in scripts this was the same as the running fish’s process ID.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process-exit</span></code> event handlers now receive the same value as <code class="docutils literal notranslate"><span class="pre">$status</span></code> in all cases, instead of receiving -1 when the exit was due to a signal.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process-exit</span></code> event handlers for PID 0 also received <code class="docutils literal notranslate"><span class="pre">JOB_EXIT</span></code> events; this has been fixed.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">job-exit</span></code> event handlers may now be created with any of the PIDs from the job. The handler is passed the last PID in the job as its second argument, instead of the process group.</p></li>
<li><p>Trying to set an empty variable name with <code class="docutils literal notranslate"><span class="pre">set</span></code> no longer works (these variables could not be used in expansions anyway).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_add_path</span></code> handles an undefined <code class="docutils literal notranslate"><span class="pre">PATH</span></code> environment variable correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8082">#8082</a>).</p></li>
</ul>
</section>
<section id="id86">
<h3>Interactive improvements<a class="headerlink" href="#id86" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Commands entered before the previous command finishes will now be properly syntax highlighted.</p></li>
<li><p>fish now automatically creates <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> and the configuration directories in <code class="docutils literal notranslate"><span class="pre">$XDG_CONFIG_HOME/fish</span></code> (by default <code class="docutils literal notranslate"><span class="pre">~/.config/fish</span></code>) if they do not already exist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7402">#7402</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$SHLVL</span></code> is no longer incremented in non-interactive shells. This means it won’t be set to values larger than 1 just because your environment happens to run some scripts in $SHELL in its startup path (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7864">#7864</a>).</p></li>
<li><p>fish no longer rings the bell when flashing the command line. The flashing should already be enough notification and the bell can be annoying (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7875">#7875</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--help</span></code> is more helpful if the documentation isn’t installed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7824">#7824</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> won’t include an entry on where a function is defined, thanks to the new <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--no-details</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7879">#7879</a>).</p></li>
<li><p>A new variable, <code class="docutils literal notranslate"><span class="pre">fish_killring</span></code>, containing entries from the killring, is now available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7445">#7445</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--private</span></code> prints a note on private mode on startup even if <code class="docutils literal notranslate"><span class="pre">$fish_greeting</span></code> is an empty list (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7974">#7974</a>).</p></li>
<li><p>fish no longer attempts to lock history or universal variable files on remote filesystems, including NFS and Samba mounts. In rare cases, updates to these files may be dropped if separate fish instances modify them simultaneously. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7968">#7968</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wait</span></code> and <code class="docutils literal notranslate"><span class="pre">on-process-exit</span></code> work correctly with jobs that have already exited (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7210">#7210</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_print_help</span></code> (used for <code class="docutils literal notranslate"><span class="pre">--help</span></code> output for fish’s builtins) now respects the <code class="docutils literal notranslate"><span class="pre">LESS</span></code> environment variable, and if not set, uses better default pager settings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7997">#7997</a>).</p></li>
<li><p>Errors from <code class="docutils literal notranslate"><span class="pre">alias</span></code> are now printed to standard error, matching other builtins and functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7925">#7925</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ls</span></code> output is colorized on OpenBSD if colorls utility is installed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8035">#8035</a>)</p></li>
<li><p>The default pager color looks better in terminals with light backgrounds (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3412">#3412</a>).</p></li>
<li><p>Further robustness improvements to the bash history import (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7874">#7874</a>).</p></li>
<li><p>fish now tries to find a Unicode-aware locale for encoding (<code class="docutils literal notranslate"><span class="pre">LC_CTYPE</span></code>) if started without any locale information, improving the display of emoji and other non-ASCII text on misconfigured systems (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8031">#8031</a>). To allow a C locale, set the variable <code class="docutils literal notranslate"><span class="pre">fish_allow_singlebyte_locale</span></code> to 1.</p></li>
<li><p>The Web-based configuration and documentation now feature a dark mode if the browser requests it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8043">#8043</a>).</p></li>
<li><p>Color variables can now also be given like <code class="docutils literal notranslate"><span class="pre">--background</span> <span class="pre">red</span></code> and <code class="docutils literal notranslate"><span class="pre">-b</span> <span class="pre">red</span></code>, not just <code class="docutils literal notranslate"><span class="pre">--background=red</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8053">#8053</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exit</span></code> run within <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> now exits properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8033">#8033</a>).</p></li>
<li><p>When attempting to execute the unsupported POSIX-style brace command group (<code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">...</span> <span class="pre">}</span></code>) fish will suggest its equivalent <code class="docutils literal notranslate"><span class="pre">begin;</span> <span class="pre">...;</span> <span class="pre">end</span></code> commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6415">#6415</a>).</p></li>
</ul>
<section id="id87">
<h4>New or improved bindings<a class="headerlink" href="#id87" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Pasting in Vi mode puts text in the right place in normal mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7847">#7847</a>).</p></li>
<li><p>Vi mode’s <kbd class="kbd docutils literal notranslate">u</kbd> is bound to <code class="docutils literal notranslate"><span class="pre">undo</span></code> instead of <code class="docutils literal notranslate"><span class="pre">history-search-backward</span></code>, following GNU readline’s behavior. Similarly, <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> is bound to <code class="docutils literal notranslate"><span class="pre">redo</span></code> instead of <code class="docutils literal notranslate"><span class="pre">history-search-backward</span></code>, following Vim (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7908">#7908</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">s</kbd> in Vi visual mode now does the same thing as <kbd class="kbd docutils literal notranslate">c</kbd> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8039">#8039</a>).</p></li>
<li><p>The binding for <kbd class="kbd docutils literal notranslate">&quot;,*,y</kbd> now uses <code class="docutils literal notranslate"><span class="pre">fish_clipboard_copy</span></code>, allowing it to support more than just <code class="docutils literal notranslate"><span class="pre">xsel</span></code>.</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">space</kbd> binding can be correctly customised (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7922">#7922</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exit</span></code> works correctly in bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7967">#7967</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">f1</kbd> binding, which opens the manual page for the current command, now works around a bug in certain <code class="docutils literal notranslate"><span class="pre">less</span></code> versions that fail to clear the screen (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7863">#7863</a>).</p></li>
<li><p>The binding for <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> now toggles whether <code class="docutils literal notranslate"><span class="pre">sudo</span></code> is prepended, even when it took the commandline from history instead of only adding it.</p></li>
<li><p>The new functions <code class="docutils literal notranslate"><span class="pre">fish_commandline_prepend</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_commandline_append</span></code> allow toggling the presence of a prefix/suffix on the current commandline. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7905">#7905</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">backward-kill-path-component</span></code> <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd>) no longer erases parts of two tokens when the cursor is positioned immediately after <code class="docutils literal notranslate"><span class="pre">/</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6258">#6258</a>).</p></li>
</ul>
</section>
<section id="id88">
<h4>Improved prompts<a class="headerlink" href="#id88" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The default Vi mode prompt now uses foreground instead of background colors, making it less obtrusive (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7880">#7880</a>).</p></li>
<li><p>Performance of the “informative” git prompt is improved somewhat (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7871">#7871</a>). This is still slower than the non-informative version by its very nature. In particular it is IO-bound, so it will be very slow on slow disks or network mounts.</p></li>
<li><p>The sample prompts were updated. Some duplicated prompts, like the various classic variants, or less useful ones, like the “justadollar” prompt were removed, some prompts were cleaned up, and in some cases renamed. A new “simple” and “disco” prompt were added (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7884">#7884</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7897">#7897</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7930">#7930</a>). The new prompts will only take effect when selected and existing installed prompts will remain unchanged.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">prompt_login</span></code> helper function to describe the kind of “login” (user, host and chroot status) for use in prompts. This replaces the old “debian chroot” prompt and has been added to the default and terlar prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7932">#7932</a>).</p></li>
<li><p>The Web-based configuration’s prompt picker now shows and installs right prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7930">#7930</a>).</p></li>
<li><p>The git prompt now has the same symbol order in normal and “informative” mode, and it’s customizable via <code class="docutils literal notranslate"><span class="pre">$__fish_git_prompt_status_order</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7926">#7926</a>).</p></li>
</ul>
</section>
<section id="id89">
<h4>Completions<a class="headerlink" href="#id89" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">firewall-cmd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7900">#7900</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8069">#8069</a>)</p></li>
</ul>
</li>
<li><p>Improvements to plenty of completions!</p></li>
<li><p>Commands that wrap <code class="docutils literal notranslate"><span class="pre">cd</span></code> (using <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--wraps</span> <span class="pre">cd</span></code>) get the same completions as <code class="docutils literal notranslate"><span class="pre">cd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4693">#4693</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">--force-files</span></code> option to <code class="docutils literal notranslate"><span class="pre">complete</span></code> works for bare arguments, not just options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7920">#7920</a>).</p></li>
<li><p>Completion descriptions for functions don’t include the function definition, making them more concise (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7911">#7911</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">kill</span></code> completions no longer error on MSYS2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8046">#8046</a>).</p></li>
<li><p>Completion scripts are now loaded when calling a command via a relative path (like <code class="docutils literal notranslate"><span class="pre">./git</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6001">#6001</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7992">#7992</a>).</p></li>
<li><p>When there are multiple completion candidates, fish inserts their shared prefix. This prefix was computed in a case-insensitive way, resulting in wrong case in the completion pager. This was fixed by only inserting prefixes with matching case (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7744">#7744</a>).</p></li>
</ul>
</section>
<section id="id90">
<h4>Improved terminal support<a class="headerlink" href="#id90" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>fish no longer tries to detect a missing new line during startup, preventing an erroneous <code class="docutils literal notranslate"><span class="pre">⏎</span></code> from appearing if the terminal is resized at the wrong time, which can happen in tiling window managers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7893">#7893</a>).</p></li>
<li><p>fish behaves better when it disagrees with the terminal on the width of characters. In particular, staircase effects with right prompts should be gone in most cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8011">#8011</a>).</p></li>
<li><p>If the prompt takes up the entire line, the last character should no longer be chopped off in certain terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8002">#8002</a>).</p></li>
<li><p>fish’s reflow handling has been disabled by default for kitty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7961">#7961</a>).</p></li>
<li><p>The default prompt no longer produces errors when used with a dumb terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7904">#7904</a>).</p></li>
<li><p>Terminal size variables are updated for window size change signal handlers (<code class="docutils literal notranslate"><span class="pre">SIGWINCH</span></code>).</p></li>
<li><p>Pasting within a multi-line command using a terminal that supports bracketed paste works correctly, instead of producing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7782">#7782</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> produces an error when used with invalid arguments, rather than empty output which interacts badly with Cartesian product expansion.</p></li>
</ul>
</section>
</section>
<section id="id91">
<h3>For distributors<a class="headerlink" href="#id91" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish runs correctly on platforms without the <code class="docutils literal notranslate"><span class="pre">O_CLOEXEC</span></code> flag for <code class="docutils literal notranslate"><span class="pre">open(2)</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8023">#8023</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-2-2-released-april-7-2021">
<h2>fish 3.2.2 (released April 7, 2021)<a class="headerlink" href="#fish-3-2-2-released-april-7-2021" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of additional issues identified in the fish 3.2 series:</p>
<ul class="simple">
<li><p>The command-not-found handler used suggestions from <code class="docutils literal notranslate"><span class="pre">pacman</span></code> on Arch Linux, but this caused major slowdowns on some systems and has been disabled (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7841">#7841</a>).</p></li>
<li><p>fish will no longer hang on exit if another process is in the foreground on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7901">#7901</a>).</p></li>
<li><p>Certain programs (such as <code class="docutils literal notranslate"><span class="pre">lazygit</span></code>) could create situations where fish would not receive keystrokes correctly, but it is now more robust in these situations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7853">#7853</a>).</p></li>
<li><p>Arguments longer than 1024 characters no longer trigger excessive CPU usage on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7837">#7837</a>).</p></li>
<li><p>fish builds correctly on macOS when using new versions of Xcode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7838">#7838</a>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7865">#7865</a>) and <code class="docutils literal notranslate"><span class="pre">tshark</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7858">#7858</a>) should no longer produce errors.</p></li>
<li><p>Background jobs no longer interfere with syntax highlighting (a regression introduced in fish 3.2.1, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7842">#7842</a>).</p></li>
</ul>
<p>If you are upgrading from version 3.1.2 or before, please also review the release notes for 3.2.1 and 3.2.0 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-2-1-released-march-18-2021">
<h2>fish 3.2.1 (released March 18, 2021)<a class="headerlink" href="#fish-3-2-1-released-march-18-2021" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes the following problems identified in fish 3.2.0:</p>
<ul class="simple">
<li><p>Commands in key bindings are run with fish’s internal terminal modes, instead of the terminal modes typically used for commands. This fixes a bug introduced in 3.2.0, where text would unexpectedly appear on the terminal, especially when pasting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7770">#7770</a>).</p></li>
<li><p>Prompts which use the internal <code class="docutils literal notranslate"><span class="pre">__fish_print_pipestatus</span></code> function will display correctly rather than carrying certain modifiers (such as bold) further than intended (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7771">#7771</a>).</p></li>
<li><p>Redirections to internal file descriptors is allowed again, reversing the changes in 3.2.0. This fixes a problem with Midnight Commander (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7769">#7769</a>).</p></li>
<li><p>Universal variables should be fully reliable regardless of operating system again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7774">#7774</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> no longer causes screen flickering in certain terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7775">#7775</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_add_path</span></code> manipulates the <code class="docutils literal notranslate"><span class="pre">fish_user_paths</span></code> variable correctly when moving multiple paths (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7776">#7776</a>).</p></li>
<li><p>Pasting with a multi-line command no longer causes a <code class="docutils literal notranslate"><span class="pre">__fish_tokenizer_state</span></code> error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7782">#7782</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">psub</span></code> inside event handlers cleans up temporary files properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7792">#7792</a>).</p></li>
<li><p>Event handlers declared with <code class="docutils literal notranslate"><span class="pre">--on-job-exit</span> <span class="pre">$fish_pid</span></code> no longer run constantly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7721">#7721</a>), although these functions should use <code class="docutils literal notranslate"><span class="pre">--on-event</span> <span class="pre">fish_exit</span></code> instead.</p></li>
<li><p>Changing terminal modes inside <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> works (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7783">#7783</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">--print-colors</span></code> no longer prints all colors in bold (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7805">#7805</a>)</p></li>
<li><p>Completing commands starting with a <code class="docutils literal notranslate"><span class="pre">-</span></code> no longer prints an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7809">#7809</a>).</p></li>
<li><p>Running <code class="docutils literal notranslate"><span class="pre">fish_command_not_found</span></code> directly no longer produces an error on macOS or other OSes which do not have a handler available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7777">#7777</a>).</p></li>
<li><p>The new <code class="docutils literal notranslate"><span class="pre">type</span></code> builtin now has the (deprecated) <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> long form of <code class="docutils literal notranslate"><span class="pre">-q</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7766">#7766</a>).</p></li>
</ul>
<p>It also includes some small enhancements:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> work correctly when fish is running in a Chrome OS Crostini Linux VM (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7789">#7789</a>).</p></li>
<li><p>The history file can be made a symbolic link without it being overwritten (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7754">#7754</a>), matching a similar improvement for the universal variable file in 3.2.0.</p></li>
<li><p>An unhelpful error (“access: No error”), seen on Cygwin, is no longer produced (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7785">#7785</a>).</p></li>
<li><p>Improvements to the <code class="docutils literal notranslate"><span class="pre">rsync</span></code> completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7763">#7763</a>), some completion descriptions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7788">#7788</a>), and completions that use IP address (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7787">#7787</a>).</p></li>
<li><p>Improvements to the appearance of <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7811">#7811</a>).</p></li>
</ul>
<p>If you are upgrading from version 3.1.2 or before, please also review
the release notes for 3.2.0 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-2-0-released-march-1-2021">
<h2>fish 3.2.0 (released March 1, 2021)<a class="headerlink" href="#fish-3-2-0-released-march-1-2021" title="Link to this heading">¶</a></h2>
<section id="id92">
<h3>Notable improvements and fixes<a class="headerlink" href="#id92" title="Link to this heading">¶</a></h3>
<ul>
<li><p><strong>Undo and redo support</strong> for the command-line editor and pager search (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1367">#1367</a>). By default, undo is bound to Control+Z, and redo to Alt+/.</p></li>
<li><p><strong>Builtins can now output before all data is read</strong>. For example, <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span></code> 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:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="c"># Show all dmesg lines related to &quot;usb&quot;</span>
<span class="nf">dmesg</span><span class="w"> </span><span class="no">-w</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">match</span><span class="w"> </span><span class="s1">&#39;*usb*&#39;</span>
</pre></div>
</div>
</li>
<li><p><strong>Prompts will now be truncated</strong> instead of replaced with <code class="docutils literal notranslate"><span class="pre">&quot;&gt;</span> <span class="pre">&quot;</span></code> if they are wider than the terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/904">#904</a>).
For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="o">~</span><span class="nf">/dev/build/fish-shell-git/src/fish-shell/build</span><span class="w"> </span><span class="o">(</span><span class="nf">makepkg</span><span class="o">)</span><span class="p">&gt;</span>
</pre></div>
</div>
<p>will turn into:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">…h-shell/build</span><span class="w"> </span><span class="o">(</span><span class="nf">makepkg</span><span class="o">)</span><span class="p">&gt;</span>
</pre></div>
</div>
<p>It is still possible to react to the <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code> variable inside the prompt to implement smarter behavior.</p>
</li>
<li><p><strong>fish completes ambiguous completions</strong> after pressing <kbd class="kbd docutils literal notranslate">tab</kbd> even when they
have a common prefix, without the user having to press <kbd class="kbd docutils literal notranslate">tab</kbd> again
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6924">#6924</a>).</p></li>
<li><p>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
<code class="docutils literal notranslate"><span class="pre">stty</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2315">#2315</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7704">#7704</a>).</p></li>
<li><p>A new <strong>“fish_add_path” helper function to add paths to $PATH</strong> without producing duplicates,
to be used interactively or in <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6960">#6960</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7028">#7028</a>).
For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">fish_add_path</span><span class="w"> </span><span class="no">/opt/mycoolthing/bin</span>
</pre></div>
</div>
<p>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.</p>
</li>
<li><p><strong>Better errors with “test”</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6030">#6030</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">test</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="no">=</span><span class="w"> </span><span class="no">2</span><span class="w"> </span><span class="no">and</span><span class="w"> </span><span class="no">echo</span><span class="w"> </span><span class="no">true</span><span class="w"> </span><span class="no">or</span><span class="w"> </span><span class="no">false</span>
<span class="go">test: Expected a combining operator like &#39;-a&#39; at index 4</span>
<span class="go">1 = 2 and echo true or echo false</span>
<span class="go">      ^</span>
</pre></div>
</div>
<p>This includes numbering the index from 1 instead of 0, like fish lists.</p>
</li>
<li><p><strong>A new theme for the documentation and Web-based configuration</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6500">#6500</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7371">#7371</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7523">#7523</a>), matching the design on fishshell.com.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--no-execute</span></code> <strong>will no longer complain about unknown commands</strong>
or non-matching wildcards, as these could be defined differently at
runtime (especially for functions). This makes it usable as a static syntax checker (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/977">#977</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span> <span class="pre">--regex</span></code> now integrates <strong>named PCRE2 capture groups as fish variables</strong>, allowing variables to be set directly from <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7459">#7459</a>). To support this functionality, <code class="docutils literal notranslate"><span class="pre">string</span></code> is now a reserved word and can no longer be wrapped in a function.</p></li>
<li><p>Globs and other <strong>expansions are limited to 512,288 results</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7226">#7226</a>). Because operating systems limit the number of arguments to commands, larger values are unlikely to work anyway, and this helps to avoid hangs.</p></li>
<li><p>A new <strong>“fish for bash users” documentation page</strong> gives a quick overview of the scripting differences between bash and fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2382">#2382</a>), and the completion tutorial has also been moved out into its own document (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6709">#6709</a>).</p></li>
</ul>
</section>
<section id="syntax-changes-and-new-commands">
<h3>Syntax changes and new commands<a class="headerlink" href="#syntax-changes-and-new-commands" title="Link to this heading">¶</a></h3>
<ul>
<li><p>Range limits in index range expansions like <code class="docutils literal notranslate"><span class="pre">$x[$start..$end]</span></code> may be omitted: <code class="docutils literal notranslate"><span class="pre">$start</span></code> and <code class="docutils literal notranslate"><span class="pre">$end</span></code> default to 1 and -1 (the last item) respectively (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6574">#6574</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">1..</span><span class="o">]</span>
<span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">..-1</span><span class="o">]</span>
<span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">..</span><span class="o">]</span>
</pre></div>
</div>
<p>All print the full list <code class="docutils literal notranslate"><span class="pre">$var</span></code>.</p>
</li>
<li><p>When globbing, a segment which is exactly <code class="docutils literal notranslate"><span class="pre">**</span></code> may now match zero directories. For example <code class="docutils literal notranslate"><span class="pre">**/foo</span></code> may match <code class="docutils literal notranslate"><span class="pre">foo</span></code> in the current directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7222">#7222</a>).</p></li>
</ul>
</section>
<section id="id93">
<h3>Scripting improvements<a class="headerlink" href="#id93" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">type</span></code>, <code class="docutils literal notranslate"><span class="pre">_</span></code> (gettext), <code class="docutils literal notranslate"><span class="pre">.</span></code> (source) and <code class="docutils literal notranslate"><span class="pre">:</span></code> (no-op) functions
are now implemented builtins for performance purposes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7342">#7342</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7036">#7036</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6854">#6854</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> and backgrounded jobs no longer overwrite <code class="docutils literal notranslate"><span class="pre">$pipestatus</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6820">#6820</a>), improving its use in command substitutions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6998">#6998</a>).</p></li>
<li><p>Computed (“electric”) variables such as <code class="docutils literal notranslate"><span class="pre">status</span></code> are now only global in scope, so <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-Uq</span> <span class="pre">status</span></code> returns false (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7032">#7032</a>).</p></li>
<li><p>The output for <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--show</span></code> has been shortened, only mentioning the scopes in which a variable exists (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6944">#6944</a>).
In addition, it now shows if a variable is a path variable.</p></li>
<li><p>A new variable, <code class="docutils literal notranslate"><span class="pre">fish_kill_signal</span></code>, is set to the signal that terminated the last foreground job, or <code class="docutils literal notranslate"><span class="pre">0</span></code> if the job exited normally (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6824">#6824</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6822">#6822</a>).</p></li>
<li><p>A new subcommand, <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">pad</span></code>, allows extending strings to a given width (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7340">#7340</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7102">#7102</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">sub</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--end</span></code> option to specify the end index of
a substring (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6765">#6765</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5974">#5974</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--fields</span></code> option to specify fields to
output, similar to <code class="docutils literal notranslate"><span class="pre">cut</span> <span class="pre">-f</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6770">#6770</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">trim</span></code> now also trims vertical tabs by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6795">#6795</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span></code> no longer prints an error if a capturing group wasn’t matched, instead treating it as empty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7343">#7343</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> subcommands now quit early when used with <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7495">#7495</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> now handles multiple arguments, repeating each one (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5988">#5988</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> no longer prints an error if not given an argument (not
even a format string).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">true</span></code> and <code class="docutils literal notranslate"><span class="pre">false</span></code> builtins ignore any arguments, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7030">#7030</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now removes unnecessary quotes in simple cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6722">#6722</a>)
and gained a <code class="docutils literal notranslate"><span class="pre">--check</span></code> option to just check if a file is indented correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7251">#7251</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> indents continuation lines that follow a line ending in a backslash, <code class="docutils literal notranslate"><span class="pre">|</span></code>, <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> or <code class="docutils literal notranslate"><span class="pre">||</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pushd</span></code> only adds a directory to the stack if changing to it was successful (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6947">#6947</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_job_summary</span></code> function is called whenever a
background job stops or ends, or any job terminates from a signal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6959">#6959</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2727">#2727</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4319">#4319</a>).
The default behaviour can now be customized by redefining it.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> gained new <code class="docutils literal notranslate"><span class="pre">dirname</span></code> and <code class="docutils literal notranslate"><span class="pre">basename</span></code> convenience subcommands
to get just the directory to the running script or the name of it,
to simplify common tasks such as running <code class="docutils literal notranslate"><span class="pre">(dirname</span> <span class="pre">(status</span> <span class="pre">filename))</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7076">#7076</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1818">#1818</a>).</p></li>
<li><p>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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7038">#7038</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span> <span class="pre">--quiet</span> <span class="pre">PID</span></code> no longer prints “no suitable job” if the job for PID does not exist (eg because it has finished) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6809">#6809</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6812">#6812</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> now shows continued child processes correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6818">#6818</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">disown</span></code> should no longer create zombie processes when job control is off, such as in <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7183">#7183</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code>, <code class="docutils literal notranslate"><span class="pre">jobs</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> builtins support <code class="docutils literal notranslate"><span class="pre">--query</span></code> as the long form of <code class="docutils literal notranslate"><span class="pre">-q</span></code>, matching other builtins.
The long form <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> is deprecated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7276">#7276</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> no longer requires a short flag letter for long-only options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7585">#7585</a>)
and only prints a backtrace with invalid options to argparse itself (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6703">#6703</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now passes the validation variables (e.g. <code class="docutils literal notranslate"><span class="pre">$_flag_value</span></code>) as local-exported variables,
avoiding the need for <code class="docutils literal notranslate"><span class="pre">--no-scope-shadowing</span></code> in validation functions.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> takes the first argument as the name of the command if the <code class="docutils literal notranslate"><span class="pre">--command</span></code>/<code class="docutils literal notranslate"><span class="pre">-c</span></code> option is not used,
so <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">git</span></code> is treated like <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--command</span> <span class="pre">git</span></code>,
and it can show the loaded completions for specific commands with <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">COMMANDNAME</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7321">#7321</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">-b</span></code> (without an argument) no longer prints an error message, matching other invalid invocations of this command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7154">#7154</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> no longer produces a syntax error when the command cannot be found (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6098">#6098</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--erase</span></code> and <code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> can now erase multiple things in one go, matching <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--erase</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7377">#7377</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> no longer prints errors when used with no arguments or on an unset abbreviation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7376">#7376</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7732">#7732</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-t</span></code>, for testing whether file descriptors are connected to a terminal, works for file descriptors 0, 1, and 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4766">#4766</a>).
It can still return incorrect results in other cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1228">#1228</a>).</p></li>
<li><p>Trying to execute scripts with Windows line endings (CRLF) produces a sensible error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2783">#2783</a>).</p></li>
<li><p>Trying to execute commands with arguments that exceed the operating system limit now produces a specific error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6800">#6800</a>).</p></li>
<li><p>An <code class="docutils literal notranslate"><span class="pre">alias</span></code> that delegates to a command with the same name no longer triggers an error about recursive completion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7389">#7389</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now has a <code class="docutils literal notranslate"><span class="pre">--base</span></code> option to output the result in hexadecimal or octal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7496">#7496</a>) and produces more specific error messages (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7508">#7508</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> learned bitwise functions <code class="docutils literal notranslate"><span class="pre">bitand</span></code>, <code class="docutils literal notranslate"><span class="pre">bitor</span></code> and <code class="docutils literal notranslate"><span class="pre">bitxor</span></code>, used like <code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">&quot;bitand(0xFE,</span> <span class="pre">5)&quot;</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7281">#7281</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> learned tau for those who don’t like typing “2 * pi”.</p></li>
<li><p>Failed redirections will now set <code class="docutils literal notranslate"><span class="pre">$status</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7540">#7540</a>).</p></li>
<li><p>fish sets exit status in a more consistent manner after errors, including invalid expansions like <code class="docutils literal notranslate"><span class="pre">$foo[</span></code>.</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--silent</span></code> while fish is in private mode was adding these potentially-sensitive entries to the history; this has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7230">#7230</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> can now read interactively from other files, and can be used to read from the terminal via <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">&lt;/dev/tty</span></code> (if the operating system provides <code class="docutils literal notranslate"><span class="pre">/dev/tty</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7358">#7358</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_status_to_signal</span></code> function for transforming exit statuses to signal names has been added (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7597">#7597</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7595">#7595</a>).</p></li>
<li><p>The fallback <code class="docutils literal notranslate"><span class="pre">realpath</span></code> builtin supports the <code class="docutils literal notranslate"><span class="pre">-s</span></code>/<code class="docutils literal notranslate"><span class="pre">--no-symlinks</span></code> option, like GNU realpath (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7574">#7574</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> now explain when a function was defined via <code class="docutils literal notranslate"><span class="pre">source</span></code> instead of just saying <code class="docutils literal notranslate"><span class="pre">Defined</span> <span class="pre">in</span> <span class="pre">-</span></code>.</p></li>
<li><p>Significant performance improvements when globbing, appending to variables or in <code class="docutils literal notranslate"><span class="pre">math</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">echo</span></code> no longer interprets options at the beginning of an argument (eg <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">&quot;-n</span> <span class="pre">foo&quot;</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7614">#7614</a>).</p></li>
<li><p>fish now finds user configuration even if the <code class="docutils literal notranslate"><span class="pre">HOME</span></code> environment variable is not set (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7620">#7620</a>).</p></li>
<li><p>fish no longer crashes when started from a Windows-style working directory (eg <code class="docutils literal notranslate"><span class="pre">F:\path</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7636">#7636</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span></code> now reads the remaining arguments into <code class="docutils literal notranslate"><span class="pre">$argv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2314">#2314</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">pwd</span></code> command supports the long options <code class="docutils literal notranslate"><span class="pre">--logical</span></code> and <code class="docutils literal notranslate"><span class="pre">--physical</span></code>, matching other implementations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6787">#6787</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--profile</span></code> now only starts profiling after fish is ready to execute commands (all configuration is completed). There is a new <code class="docutils literal notranslate"><span class="pre">--profile-startup</span></code> option that only profiles the startup and configuration process (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7648">#7648</a>).</p></li>
<li><p>Builtins return a maximum exit status of 255, rather than potentially overflowing. In particular, this affects <code class="docutils literal notranslate"><span class="pre">exit</span></code>, <code class="docutils literal notranslate"><span class="pre">return</span></code>, <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--query</span></code>, and <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7698">#7698</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7702">#7702</a>).</p></li>
<li><p>It is no longer an error to run builtin with closed stdin. For example <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">&lt;&amp;-</span></code> now prints 0, instead of failing.</p></li>
<li><p>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, <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">hello</span> <span class="pre">&gt;&amp;5</span></code> is now an error. This prevents corruption of internal state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3303">#3303</a>).</p></li>
</ul>
</section>
<section id="id94">
<h3>Interactive improvements<a class="headerlink" href="#id94" title="Link to this heading">¶</a></h3>
<ul>
<li><p>fish will now always attempt to become process group leader in interactive mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7060">#7060</a>). This helps avoid hangs in certain circumstances, and allows tmux’s current directory introspection to work (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5699">#5699</a>).</p></li>
<li><p>The interactive reader now allows ending a line in a logical operators (<code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> and <code class="docutils literal notranslate"><span class="pre">||</span></code>) instead of complaining about a missing command. (This was already syntactically valid, but interactive sessions didn’t know about it yet).</p></li>
<li><p>The prompt is reprinted after a background job exits (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1018">#1018</a>).</p></li>
<li><p>fish no longer inserts a space after a completion ending in <code class="docutils literal notranslate"><span class="pre">.</span></code>, <code class="docutils literal notranslate"><span class="pre">,</span></code> or <code class="docutils literal notranslate"><span class="pre">-</span></code> is accepted, improving completions for tools that provide dynamic completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6928">#6928</a>).</p></li>
<li><p>If a filename is invalid when first pressing <kbd class="kbd docutils literal notranslate">tab</kbd>, but becomes valid, it will be completed properly on the next attempt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6863">#6863</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span> <span class="pre">string</span> <span class="pre">match/replace/&lt;subcommand&gt;</span></code> will show the help for string subcommands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6786">#6786</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> sets the exit status to 0 when used with <code class="docutils literal notranslate"><span class="pre">--help</span></code> or <code class="docutils literal notranslate"><span class="pre">--version</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6964">#6964</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> send output from <code class="docutils literal notranslate"><span class="pre">--version</span></code> to standard output, matching other fish binaries (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6964">#6964</a>).</p></li>
<li><p>A new variable <code class="docutils literal notranslate"><span class="pre">$status_generation</span></code> is incremented only when the previous command produces an exit status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6815">#6815</a>). 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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_greeting</span></code> 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 (<code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-U</span> <span class="pre">fish_greeting</span></code>) or to disable it in config.fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7265">#7265</a>).</p></li>
<li><p>Events are properly emitted after a job is cancelled (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2356">#2356</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_preexec</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_postexec</span></code> events are no longer triggered for empty commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4829">#4829</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7085">#7085</a>).</p></li>
<li><p>Functions triggered by the <code class="docutils literal notranslate"><span class="pre">fish_exit</span></code> event are correctly run when the terminal is closed or the shell receives SIGHUP (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7014">#7014</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> event no longer fires when <code class="docutils literal notranslate"><span class="pre">read</span></code> is used. If
you need a function to run any time <code class="docutils literal notranslate"><span class="pre">read</span></code> is invoked by a script,
use the new <code class="docutils literal notranslate"><span class="pre">fish_read</span></code> event instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7039">#7039</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_posterror</span></code> event is emitted when attempting to execute a command with syntax errors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6880">#6880</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6816">#6816</a>).</p></li>
<li><p>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 <code class="docutils literal notranslate"><span class="pre">config</span></code>, <code class="docutils literal notranslate"><span class="pre">path</span></code>, <code class="docutils literal notranslate"><span class="pre">reader</span></code> and <code class="docutils literal notranslate"><span class="pre">screen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6511">#6511</a>). See the output of <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--print-debug-categories</span></code> for the full list.</p></li>
<li><p>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 <code class="docutils literal notranslate"><span class="pre">-warning-path</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6630">#6630</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">fish</span><span class="w"> </span><span class="no">--debug=-warning-path</span>
</pre></div>
</div>
</li>
<li><p>The enabled debug categories are now printed on shell startup (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7007">#7007</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">-o</span></code> short option to fish, for <code class="docutils literal notranslate"><span class="pre">--debug-output</span></code>, works correctly instead of producing an
invalid option error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7254">#7254</a>).</p></li>
<li><p>fish’s debugging can now also be enabled via <code class="docutils literal notranslate"><span class="pre">FISH_DEBUG</span></code> and <code class="docutils literal notranslate"><span class="pre">FISH_DEBUG_OUTPUT</span></code> environment variables.
This helps with debugging when no commandline options can be passed, like when fish is called in a shebang (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7359">#7359</a>).</p></li>
<li><p>Abbreviations are now expanded after all command terminators (eg <code class="docutils literal notranslate"><span class="pre">;</span></code> or <code class="docutils literal notranslate"><span class="pre">|</span></code>), not just space,
as in fish 2.7.1 and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6970">#6970</a>), and after closing a command substitution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6658">#6658</a>).</p></li>
<li><p>The history file is now created with user-private permissions,
matching other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6926">#6926</a>). The directory containing the history
file was already private, so there should not have been any private data
revealed.</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">time</span></code> is now properly aligned in all cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6726">#6726</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6714">#6714</a>) and no longer depends on locale (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6757">#6757</a>).</p></li>
<li><p>The command-not-found handling has been simplified.
When it can’t find a command, fish now just executes a function called <code class="docutils literal notranslate"><span class="pre">fish_command_not_found</span></code>
instead of firing an event, making it easier to replace and reason about.
Previously-defined <code class="docutils literal notranslate"><span class="pre">__fish_command_not_found_handler</span></code> functions with an appropriate event listener will still work (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7293">#7293</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> handling has been reimplemented in C++ and is therefore quicker (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5259">#5259</a>), no longer occasionally prints an “unknown command” error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7145">#7145</a>) or overwrites multiline prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3537">#3537</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> no longer kills background jobs for which job control is
disabled, matching POSIX semantics (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6828">#6828</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6861">#6861</a>).</p></li>
<li><p>Autosuggestions work properly after <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> cancels the current command line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6937">#6937</a>).</p></li>
<li><p>History search is now case-insensitive unless the search string contains an uppercase character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7273">#7273</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_update_completions</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--keep</span></code> option, which improves speed by skipping completions that already exist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6775">#6775</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6796">#6796</a>).</p></li>
<li><p>Aliases containing an embedded backslash appear properly in the output of <code class="docutils literal notranslate"><span class="pre">alias</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6910">#6910</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">open</span></code> no longer hangs indefinitely on certain systems, as a bug in <code class="docutils literal notranslate"><span class="pre">xdg-open</span></code> has been worked around (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7215">#7215</a>).</p></li>
<li><p>Long command lines no longer add a blank line after execution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6826">#6826</a>) and behave better with <kbd class="kbd docutils literal notranslate">backspace</kbd> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6951">#6951</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">-t</span></code> works like the long option <code class="docutils literal notranslate"><span class="pre">--handlers-type</span></code>, as documented, instead of producing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6985">#6985</a>).</p></li>
<li><p>History search now flashes when it found no more results (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7362">#7362</a>)</p></li>
<li><p>fish now creates the path in the environment variable <code class="docutils literal notranslate"><span class="pre">XDG_RUNTIME_DIR</span></code> if it does not exist, before using it for runtime data storage (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7335">#7335</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">--print-colors</span></code> now also respects the bold, dim, underline, reverse, italic and background modifiers, to better show their effect (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7314">#7314</a>).</p></li>
<li><p>The fish Web configuration tool (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>) shows prompts correctly on Termux for Android (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7298">#7298</a>) and detects Windows Services for Linux 2 properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7027">#7027</a>). It no longer shows the <code class="docutils literal notranslate"><span class="pre">history</span></code> 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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7158">#7158</a>). Finally, a bug in the Source Code Pro font may cause browsers to hang, so this font is no longer chosen by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7714">#7714</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funcsave</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--directory</span></code> option to specify the location of the saved function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7041">#7041</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> works properly on MSYS2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7113">#7113</a>) and only uses <code class="docutils literal notranslate"><span class="pre">cmd.exe</span></code> if running on WSL (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6797">#6797</a>).</p></li>
<li><p>Resuming a piped job by its number, like <code class="docutils literal notranslate"><span class="pre">fg</span> <span class="pre">%1</span></code>, works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7406">#7406</a>). Resumed jobs show the correct title in the terminal emulator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7444">#7444</a>).</p></li>
<li><p>Commands run from key bindings now use the same TTY modes as normal commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7483">#7483</a>).</p></li>
<li><p>Autosuggestions from history are now case-sensitive (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3978">#3978</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$status</span></code> from completion scripts is no longer passed outside the completion, which keeps the status display in the prompt as the last command’s status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7555">#7555</a>).</p></li>
<li><p>Updated localisations for pt_BR (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7480">#7480</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_trace</span></code> output now starts with <code class="docutils literal notranslate"><span class="pre">-&gt;</span></code> (like <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--profile</span></code>), making the depth more visible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7538">#7538</a>).</p></li>
<li><p>Resizing the terminal window no longer produces a corrupted prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6532">#6532</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7404">#7404</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> produces an error rather than crashing on certain invalid arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7515">#7515</a>).</p></li>
<li><p>A crash in completions with inline variable assignment (eg <code class="docutils literal notranslate"><span class="pre">A=</span> <span class="pre">b</span></code>) has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7344">#7344</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_private_mode</span></code> may now be changed dynamically using <code class="docutils literal notranslate"><span class="pre">set</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7589">#7589</a>), and history is kept in memory in private mode (but not stored permanently) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7590">#7590</a>).</p></li>
<li><p>Commands with leading spaces may be retrieved from history with up-arrow until a new command is run, matching zsh’s <code class="docutils literal notranslate"><span class="pre">HIST_IGNORE_SPACE</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1383">#1383</a>).</p></li>
<li><p>Importing bash history or reporting errors with recursive globs (<code class="docutils literal notranslate"><span class="pre">**</span></code>) no longer hangs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7407">#7407</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7497">#7497</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> now shows <code class="docutils literal notranslate"><span class="pre">\x7f</span></code> for the del key instead of a literal DEL character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7631">#7631</a>)</p></li>
<li><p>Paths containing variables or tilde expansion are only suggested when they are still valid (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7582">#7582</a>).</p></li>
<li><p>Syntax highlighting can now color a command as invalid even if executed quickly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5912">#5912</a>).</p></li>
<li><p>Redirection targets are no longer highlighted as error if they contain variables which will likely be defined by the current commandline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6654">#6654</a>).</p></li>
<li><p>fish is now more resilient against broken terminal modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7133">#7133</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4873">#4873</a>).</p></li>
<li><p>fish handles being in control of the TTY without owning its own process group better, avoiding some hangs in special configurations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7388">#7388</a>).</p></li>
<li><p>Keywords can now be colored differently by setting the <code class="docutils literal notranslate"><span class="pre">fish_color_keyword</span></code> variable (<code class="docutils literal notranslate"><span class="pre">fish_color_command</span></code> is used as a fallback) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7678">#7678</a>).</p></li>
<li><p>Just like <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code>, the interactive reader will indent continuation lines that follow a line ending in a backslash, <code class="docutils literal notranslate"><span class="pre">|</span></code>, <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> or <code class="docutils literal notranslate"><span class="pre">||</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7694">#7694</a>).</p></li>
<li><p>Commands with a trailing escaped space are saved in history correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7661">#7661</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> no longer mangles Unicode characters in the private-use range U+F600-U+F700. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7723">#7723</a>).</p></li>
<li><p>The universal variable file, <code class="docutils literal notranslate"><span class="pre">fish_variables</span></code>, can be made a symbolic link without it being overwritten (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7466">#7466</a>).</p></li>
<li><p>fish is now more resilient against <code class="docutils literal notranslate"><span class="pre">mktemp</span></code> failing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7482">#7482</a>).</p></li>
</ul>
<section id="id95">
<h4>New or improved bindings<a class="headerlink" href="#id95" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>As mentioned above, new special input functions <code class="docutils literal notranslate"><span class="pre">undo</span></code> (<kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">_</kbd> or <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd>) and <code class="docutils literal notranslate"><span class="pre">redo</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">/</kbd>) can be used to revert changes to the command line or the pager search field (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6570">#6570</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">z</kbd> is now available for binding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7152">#7152</a>).</p></li>
<li><p>Additionally, using the <code class="docutils literal notranslate"><span class="pre">cancel</span></code> special input function (bound to <kbd class="kbd docutils literal notranslate">escape</kbd> by default) right after fish picked an unambiguous completion will undo that (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7433">#7433</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_clipboard_paste</span></code> (<kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd>) trims indentation from multiline commands, because fish already indents (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7662">#7662</a>).</p></li>
<li><p>Vi mode bindings now support <code class="docutils literal notranslate"><span class="pre">dh</span></code>, <code class="docutils literal notranslate"><span class="pre">dl</span></code>, <code class="docutils literal notranslate"><span class="pre">c0</span></code>, <code class="docutils literal notranslate"><span class="pre">cf</span></code>, <code class="docutils literal notranslate"><span class="pre">ct</span></code>, <code class="docutils literal notranslate"><span class="pre">cF</span></code>, <code class="docutils literal notranslate"><span class="pre">cT</span></code>, <code class="docutils literal notranslate"><span class="pre">ch</span></code>, <code class="docutils literal notranslate"><span class="pre">cl</span></code>, <code class="docutils literal notranslate"><span class="pre">y0</span></code>, <code class="docutils literal notranslate"><span class="pre">ci</span></code>, <code class="docutils literal notranslate"><span class="pre">ca</span></code>, <code class="docutils literal notranslate"><span class="pre">yi</span></code>, <code class="docutils literal notranslate"><span class="pre">ya</span></code>, <code class="docutils literal notranslate"><span class="pre">di</span></code>, <code class="docutils literal notranslate"><span class="pre">da</span></code>, <code class="docutils literal notranslate"><span class="pre">d;</span></code>, <code class="docutils literal notranslate"><span class="pre">d,</span></code>, <code class="docutils literal notranslate"><span class="pre">o</span></code>, <code class="docutils literal notranslate"><span class="pre">O</span></code> and Control+left/right keys to navigate by word (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6648">#6648</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6755">#6755</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6769">#6769</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7442">#7442</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7516">#7516</a>).</p></li>
<li><p>Vi mode bindings support <kbd class="kbd docutils literal notranslate">~</kbd> (tilde) to toggle the case of the selected character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6908">#6908</a>).</p></li>
<li><p>Functions <code class="docutils literal notranslate"><span class="pre">up-or-search</span></code> and <code class="docutils literal notranslate"><span class="pre">down-or-search</span></code> (<kbd class="kbd docutils literal notranslate">up</kbd> and <kbd class="kbd docutils literal notranslate">down</kbd>) 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.</p></li>
<li><p>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.</p></li>
<li><p>The special input function <code class="docutils literal notranslate"><span class="pre">beginning-of-history</span></code> (<kbd class="kbd docutils literal notranslate">pageup</kbd>) now moves to the oldest search instead of the youngest - that’s <code class="docutils literal notranslate"><span class="pre">end-of-history</span></code> (<kbd class="kbd docutils literal notranslate">pagedown</kbd>).</p></li>
<li><p>A new special input function <code class="docutils literal notranslate"><span class="pre">forward-single-char</span></code> moves one character to the right, and if an autosuggestion is available, only take a single character from it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7217">#7217</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4984">#4984</a>).</p></li>
<li><p>Special input functions can now be joined with <code class="docutils literal notranslate"><span class="pre">or</span></code> as a modifier (adding to <code class="docutils literal notranslate"><span class="pre">and</span></code>), though only some commands set an exit status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7217">#7217</a>). This includes <code class="docutils literal notranslate"><span class="pre">suppress-autosuggestion</span></code> to reflect whether an autosuggestion was suppressed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1419">#1419</a>)</p></li>
<li><p>A new function <code class="docutils literal notranslate"><span class="pre">__fish_preview_current_file</span></code>, bound to <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">o</kbd>, opens the
current file at the cursor in a pager (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6838">#6838</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6855">#6855</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">edit_command_buffer</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd> and <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd>) passes the cursor position
to the external editor if the editor is recognized (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6138">#6138</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6954">#6954</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_prepend_sudo</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd>) now toggles a <code class="docutils literal notranslate"><span class="pre">sudo</span></code> prefix (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7012">#7012</a>) and avoids shifting the cursor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6542">#6542</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_prepend_sudo</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd>) now uses the previous commandline if the current one is empty,
to simplify rerunning the previous command with <code class="docutils literal notranslate"><span class="pre">sudo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7079">#7079</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_toggle_comment_commandline</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">#</kbd>) now uncomments and presents the last comment
from history if the commandline is empty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7137">#7137</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_whatis_current_token</span></code> (<kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd>) prints descriptions for functions and builtins (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7191">#7191</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2083">#2083</a>).</p></li>
<li><p>The definition of “word” and “bigword” for movements was refined, fixing (eg) vi mode’s behavior with <kbd class="kbd docutils literal notranslate">e</kbd> on the second-to-last char, and bigword’s behavior with single-character words and non-blank non-graphical characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7353">#7353</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7354">#7354</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4025">#4025</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7328">#7328</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7325">#7325</a>)</p></li>
<li><p>fish’s clipboard bindings now also support Windows Subsystem for Linux via PowerShell and clip.exe (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7455">#7455</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7458">#7458</a>) and will properly copy newlines in multi-line commands.</p></li>
<li><p>Using the <code class="docutils literal notranslate"><span class="pre">*-jump</span></code> special input functions before typing anything else no longer crashes fish.</p></li>
<li><p>Completing variable overrides (<code class="docutils literal notranslate"><span class="pre">foo=bar</span></code>) could replace the entire thing with just the completion in some circumstances. This has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7398">#7398</a>).</p></li>
</ul>
</section>
<section id="id96">
<h4>Improved prompts<a class="headerlink" href="#id96" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The default and example prompts print the correct exit status for
commands prefixed with <code class="docutils literal notranslate"><span class="pre">not</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6566">#6566</a>).</p></li>
<li><p>git prompts include all untracked files in the repository, not just those in the current
directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6086">#6086</a>).</p></li>
<li><p>The git prompts correctly show stash states (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6876">#6876</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7136">#7136</a>) and clean states (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7471">#7471</a>).</p></li>
<li><p>The Mercurial prompt correctly shows untracked status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6906">#6906</a>), and by default only shows the branch for performance reasons.
A new variable <code class="docutils literal notranslate"><span class="pre">$fish_prompt_hg_show_informative_status</span></code> can be set to enable more information.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_vcs_prompt</span></code> passes its arguments to the various VCS prompts that it calls (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7033">#7033</a>).</p></li>
<li><p>The Subversion prompt was broken in a number of ways in 3.1.0 and has been restored (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6715">#6715</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7278">#7278</a>).</p></li>
<li><p>A new helper function <code class="docutils literal notranslate"><span class="pre">fish_is_root_user</span></code> simplifies checking for superuser privilege (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7031">#7031</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7123">#7123</a>).</p></li>
<li><p>New colorschemes - <code class="docutils literal notranslate"><span class="pre">ayu</span> <span class="pre">Light</span></code>, <code class="docutils literal notranslate"><span class="pre">ayu</span> <span class="pre">Dark</span></code> and <code class="docutils literal notranslate"><span class="pre">ayu</span> <span class="pre">Mirage</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7596">#7596</a>).</p></li>
<li><p>Bugs related to multiline prompts, including repainting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5860">#5860</a>) or navigating directory history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3550">#3550</a>) leading to graphical glitches have been fixed.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">nim</span></code> prompt now handles vi mode better (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6802">#6802</a>)</p></li>
</ul>
</section>
<section id="id97">
<h4>Improved terminal support<a class="headerlink" href="#id97" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>A new variable, <code class="docutils literal notranslate"><span class="pre">fish_vi_force_cursor</span></code>, can be set to force <code class="docutils literal notranslate"><span class="pre">fish_vi_cursor</span></code> to attempt changing the cursor
shape in vi mode, regardless of terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6968">#6968</a>). The <code class="docutils literal notranslate"><span class="pre">fish_vi_cursor</span></code> option <code class="docutils literal notranslate"><span class="pre">--force-iterm</span></code> has been deprecated.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">diff</span></code> will now colourize output, if supported (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7308">#7308</a>).</p></li>
<li><p>Autosuggestions appear when the cursor passes the right prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6948">#6948</a>) or wraps to the next line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7213">#7213</a>).</p></li>
<li><p>The cursor shape in Vi mode changes properly in Windows Terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6999">#6999</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6478">#6478</a>).</p></li>
<li><p>The spurious warning about terminal size in small terminals has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6980">#6980</a>).</p></li>
<li><p>Dynamic titles are now enabled in Alacritty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7073">#7073</a>) and emacs’ vterm (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7122">#7122</a>).</p></li>
<li><p>Current working directory updates are enabled in foot (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7099">#7099</a>) and WezTerm (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7649">#7649</a>).</p></li>
<li><p>The width computation for certain emoji agrees better with terminals (especially flags). (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7237">#7237</a>).</p></li>
<li><p>Long command lines are wrapped in all cases, instead of sometimes being put on a new line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5118">#5118</a>).</p></li>
<li><p>The pager is properly rendered with long command lines selected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2557">#2557</a>).</p></li>
<li><p>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 <code class="docutils literal notranslate"><span class="pre">fish_handle_reflow</span></code> variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7491">#7491</a>).</p></li>
<li><p>fish now sets terminal modes sooner, which stops output from appearing before the greeting and prompt are ready (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7489">#7489</a>).</p></li>
<li><p>Better detection of new Konsole versions for true color support and cursor shape changing.</p></li>
<li><p>fish no longer attempts to modify the terminal size via <code class="docutils literal notranslate"><span class="pre">TIOCSWINSZ</span></code>, improving compatibility with Kitty (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6994">#6994</a>).</p></li>
</ul>
</section>
<section id="id98">
<h4>Completions<a class="headerlink" href="#id98" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">7z</span></code>, <code class="docutils literal notranslate"><span class="pre">7za</span></code> and <code class="docutils literal notranslate"><span class="pre">7zr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7220">#7220</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">alias</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7035">#7035</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">alternatives</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7616">#7616</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">apk</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7108">#7108</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">asciidoctor</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7000">#7000</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">avifdec</span></code> and <code class="docutils literal notranslate"><span class="pre">avifenc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7674">#7674</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bluetoothctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7438">#7438</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cjxl</span></code> and <code class="docutils literal notranslate"><span class="pre">djxl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7673">#7673</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cmark</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7000">#7000</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">create_ap</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7096">#7096</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">deno</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7138">#7138</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dhclient</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6684">#6684</a>)</p></li>
<li><p>Postgres-related commands <code class="docutils literal notranslate"><span class="pre">dropdb</span></code>, <code class="docutils literal notranslate"><span class="pre">createdb</span></code>, <code class="docutils literal notranslate"><span class="pre">pg_restore</span></code>, <code class="docutils literal notranslate"><span class="pre">pg_dump</span></code> and
<code class="docutils literal notranslate"><span class="pre">pg_dumpall</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6620">#6620</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dotnet</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7558">#7558</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">downgrade</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6751">#6751</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gapplication</span></code>, <code class="docutils literal notranslate"><span class="pre">gdbus</span></code>, <code class="docutils literal notranslate"><span class="pre">gio</span></code> and <code class="docutils literal notranslate"><span class="pre">gresource</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7300">#7300</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7112">#7112</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gitk</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">groups</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6889">#6889</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hashcat</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7746">#7746</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hikari</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7083">#7083</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">icdiff</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7503">#7503</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">imv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6675">#6675</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">john</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7746">#7746</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">julia</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7468">#7468</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">k3d</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7202">#7202</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ldapsearch</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7578">#7578</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lightdm</span></code> and <code class="docutils literal notranslate"><span class="pre">dm-tool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7624">#7624</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">losetup</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7621">#7621</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">micro</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7339">#7339</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mpc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7169">#7169</a>)</p></li>
<li><p>Metasploit’s <code class="docutils literal notranslate"><span class="pre">msfconsole</span></code>, <code class="docutils literal notranslate"><span class="pre">msfdb</span></code> and <code class="docutils literal notranslate"><span class="pre">msfvenom</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6930">#6930</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mtr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7638">#7638</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mysql</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6819">#6819</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ncat</span></code>, <code class="docutils literal notranslate"><span class="pre">nc.openbsd</span></code>, <code class="docutils literal notranslate"><span class="pre">nc.traditional</span></code> and <code class="docutils literal notranslate"><span class="pre">nmap</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6873">#6873</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">openssl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6845">#6845</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">prime-run</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7241">#7241</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ps2pdf{12,13,14,wr}</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6673">#6673</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pyenv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6551">#6551</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rst2html</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2html4</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2html5</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2latex</span></code>,
<code class="docutils literal notranslate"><span class="pre">rst2man</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2odt</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2pseudoxml</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2s5</span></code>,
<code class="docutils literal notranslate"><span class="pre">rst2xetex</span></code>, <code class="docutils literal notranslate"><span class="pre">rst2xml</span></code> and <code class="docutils literal notranslate"><span class="pre">rstpep2html</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7019">#7019</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">spago</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7381">#7381</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sphinx-apidoc</span></code>, <code class="docutils literal notranslate"><span class="pre">sphinx-autogen</span></code>, <code class="docutils literal notranslate"><span class="pre">sphinx-build</span></code> and
<code class="docutils literal notranslate"><span class="pre">sphinx-quickstart</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7000">#7000</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">strace</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6656">#6656</a>)</p></li>
<li><p>systemd’s <code class="docutils literal notranslate"><span class="pre">bootctl</span></code>, <code class="docutils literal notranslate"><span class="pre">coredumpctl</span></code>, <code class="docutils literal notranslate"><span class="pre">hostnamectl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7428">#7428</a>), <code class="docutils literal notranslate"><span class="pre">homectl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7435">#7435</a>), <code class="docutils literal notranslate"><span class="pre">networkctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7668">#7668</a>) and <code class="docutils literal notranslate"><span class="pre">userdbctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7667">#7667</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tcpdump</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6690">#6690</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tig</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">traceroute</span></code> and <code class="docutils literal notranslate"><span class="pre">tracepath</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6803">#6803</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">windscribe</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6788">#6788</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">wireshark</span></code>, <code class="docutils literal notranslate"><span class="pre">tshark</span></code>, and <code class="docutils literal notranslate"><span class="pre">dumpcap</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xbps-*</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7239">#7239</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xxhsum</span></code>, <code class="docutils literal notranslate"><span class="pre">xxh32sum</span></code>, <code class="docutils literal notranslate"><span class="pre">xxh64sum</span></code> and <code class="docutils literal notranslate"><span class="pre">xxh128sum</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7103">#7103</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">yadm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7100">#7100</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zopfli</span></code> and <code class="docutils literal notranslate"><span class="pre">zopflipng</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6872">#6872</a>)</p></li>
</ul>
</li>
<li><p>Lots of improvements to completions, including:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">git</span></code> completions can complete the right and left parts of a commit range like <code class="docutils literal notranslate"><span class="pre">from..to</span></code> or <code class="docutils literal notranslate"><span class="pre">left...right</span></code>.</p></li>
<li><p>Completion scripts for custom Git subcommands like <code class="docutils literal notranslate"><span class="pre">git-xyz</span></code> are now loaded with Git completions. The completions can now be defined directly on the subcommand (using <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">git-xyz</span></code>), and completion for <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">xyz</span></code> will work. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7075">#7075</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7652">#7652</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4358">#4358</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">make</span></code> completions no longer second-guess make’s file detection, fixing target completion in some cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7535">#7535</a>).</p></li>
<li><p>Command completions now correctly print the description even if the command was fully matched (like in <code class="docutils literal notranslate"><span class="pre">ls&lt;TAB&gt;</span></code>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> completions no longer hide variables starting with <code class="docutils literal notranslate"><span class="pre">__</span></code>, they are sorted last instead.</p></li>
</ul>
</li>
<li><p>Improvements to the manual page completion generator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7086">#7086</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6879">#6879</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7187">#7187</a>).</p></li>
<li><p>Significant performance improvements to completion of the available commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7153">#7153</a>), especially on macOS Big Sur where there was a significant regression (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7365">#7365</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7511">#7511</a>).</p></li>
<li><p>Suffix completion using <code class="docutils literal notranslate"><span class="pre">__fish_complete_suffix</span></code> uses the same fuzzy matching logic as normal file completion, and completes any file but sorts files with matching suffix first (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7040">#7040</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7547">#7547</a>). Previously, it only completed files with matching suffix.</p></li>
</ul>
</section>
</section>
<section id="id99">
<h3>For distributors<a class="headerlink" href="#id99" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish has a new interactive test driver based on pexpect, removing the optional dependency on expect (and adding an optional dependency on pexpect) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5451">#5451</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6825">#6825</a>).</p></li>
<li><p>The CHANGELOG was moved to restructured text, allowing it to be included in the documentation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7057">#7057</a>).</p></li>
<li><p>fish handles ncurses installed in a non-standard prefix better (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6600">#6600</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7219">#7219</a>), and uses variadic tparm on NetBSD curses (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6626">#6626</a>).</p></li>
<li><p>The Web-based configuration tool no longer uses an obsolete Angular version (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7147">#7147</a>).</p></li>
<li><p>The fish project has adopted the Contributor Covenant code of conduct (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7151">#7151</a>).</p></li>
</ul>
</section>
<section id="id100">
<h3>Deprecations and removed features<a class="headerlink" href="#id100" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_color_match</span></code> variable is no longer used. (Previously this controlled the color of matching quotes and parens when using <code class="docutils literal notranslate"><span class="pre">read</span></code>).</p></li>
<li><p>fish 3.2.0 will be the last release in which the redirection to standard error with the <code class="docutils literal notranslate"><span class="pre">^</span></code> character is enabled.
The <code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code> feature flag will be changed to “on” in future releases.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> is now a reserved word and cannot be used for function names (see above).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_vi_cursor</span></code>’s option <code class="docutils literal notranslate"><span class="pre">--force-iterm</span></code> has been deprecated (see above).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code>, <code class="docutils literal notranslate"><span class="pre">jobs</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> long-form option <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> is deprecated in favor of <code class="docutils literal notranslate"><span class="pre">--query</span></code> (see above).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_command_not_found</span></code> event is no longer emitted, instead there is a function of that name.
By default it will call a previously-defined <code class="docutils literal notranslate"><span class="pre">__fish_command_not_found_handler</span></code>. To emit the event manually use <code class="docutils literal notranslate"><span class="pre">emit</span> <span class="pre">fish_command_not_found</span></code>.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> event no longer fires when <code class="docutils literal notranslate"><span class="pre">read</span></code> is used. If
you need a function to run any time <code class="docutils literal notranslate"><span class="pre">read</span></code> is invoked by a script,
use the new <code class="docutils literal notranslate"><span class="pre">fish_read</span></code> event instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7039">#7039</a>).</p></li>
<li><p>To disable the greeting message permanently it is no longer enough to just run <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">fish_greeting</span></code> interactively as it is
no longer implicitly a universal variable. Use <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-U</span> <span class="pre">fish_greeting</span></code> or disable it in config.fish with <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">fish_greeting</span></code>.</p></li>
<li><p>The long-deprecated and non-functional <code class="docutils literal notranslate"><span class="pre">-m</span></code>/<code class="docutils literal notranslate"><span class="pre">--read-mode</span></code> options to <code class="docutils literal notranslate"><span class="pre">read</span></code> were removed in 3.1b1. Using the short form, or a never-implemented <code class="docutils literal notranslate"><span class="pre">-B</span></code> option, no longer crashes fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7659">#7659</a>).</p></li>
<li><p>With the addition of new categories for debug options, the old numbered debugging levels have been removed.</p></li>
</ul>
</section>
<section id="id101">
<h3>For distributors and developers<a class="headerlink" href="#id101" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish source tarballs are now distributed using the XZ compression
method (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5460">#5460</a>).</p></li>
<li><p>The fish source tarball contains an example FreeDesktop entry and icon.</p></li>
<li><p>The CMake variable <code class="docutils literal notranslate"><span class="pre">MAC_CODESIGN_ID</span></code> can now be set to “off” to disable code-signing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6952">#6952</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6792">#6792</a>).</p></li>
<li><p>Building on on macOS earlier than 10.13.6 succeeds, instead of failing on code-signing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6791">#6791</a>).</p></li>
<li><p>The pkg-config file now uses variables to ensure paths used are portable across prefixes.</p></li>
<li><p>The default values for the <code class="docutils literal notranslate"><span class="pre">extra_completionsdir</span></code>, <code class="docutils literal notranslate"><span class="pre">extra_functionsdir</span></code>
and <code class="docutils literal notranslate"><span class="pre">extra_confdir</span></code> options now use the installation prefix rather than <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6778">#6778</a>).</p></li>
<li><p>A new CMake variable <code class="docutils literal notranslate"><span class="pre">FISH_USE_SYSTEM_PCRE2</span></code> 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 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6952">#6952</a>).</p></li>
<li><p>Running the full interactive test suite now requires Python 3.5+ and the pexpect package (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6825">#6825</a>); the expect package is no longer required.</p></li>
<li><p>Support for Python 2 in fish’s tools (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code> and the manual page completion generator) is no longer guaranteed. Please use Python 3.5 or later (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6537">#6537</a>).</p></li>
<li><p>The Web-based configuration tool is compatible with Python 3.10  (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7600">#7600</a>) and no longer requires Python’s distutils package (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7514">#7514</a>).</p></li>
<li><p>fish 3.2 is the last release to support Red Hat Enterprise Linux &amp; CentOS version 6.</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-1-2-released-april-29-2020">
<h2>fish 3.1.2 (released April 29, 2020)<a class="headerlink" href="#fish-3-1-2-released-april-29-2020" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a major issue discovered in fish 3.1.1:</p>
<ul class="simple">
<li><p>Commands such as <code class="docutils literal notranslate"><span class="pre">fzf</span></code> and <code class="docutils literal notranslate"><span class="pre">enhancd</span></code>, when used with <code class="docutils literal notranslate"><span class="pre">eval</span></code>,
would hang. <code class="docutils literal notranslate"><span class="pre">eval</span></code> buffered output too aggressively, which has been
fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6955">#6955</a>).</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1.1, 3.1.0 and 3.1b1 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-1-1-released-april-27-2020">
<h2>fish 3.1.1 (released April 27, 2020)<a class="headerlink" href="#fish-3-1-1-released-april-27-2020" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of major issues discovered in fish
3.1.0.</p>
<ul class="simple">
<li><p>Commands which involve <code class="docutils literal notranslate"><span class="pre">.</span> <span class="pre">(</span> <span class="pre">...</span> <span class="pre">|</span> <span class="pre">psub)</span></code> now work correctly, as a
bug in the <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-job-exit</span></code> option has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6613">#6613</a>).</p></li>
<li><p>Conflicts between upstream packages for ripgrep and bat, and the fish
packages, have been resolved (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5822">#5822</a>).</p></li>
<li><p>Starting fish in a directory without read access, such as via <code class="docutils literal notranslate"><span class="pre">su</span></code>,
no longer crashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6597">#6597</a>).</p></li>
<li><p>Glob ordering changes which were introduced in 3.1.0 have been
reverted, returning the order of globs to the previous state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6593">#6593</a>).</p></li>
<li><p>Redirections using the deprecated caret syntax to a file descriptor
(eg <code class="docutils literal notranslate"><span class="pre">^&amp;2</span></code>) work correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6591">#6591</a>).</p></li>
<li><p>Redirections that append to a file descriptor (eg <code class="docutils literal notranslate"><span class="pre">2&gt;&gt;&amp;1</span></code>) work
correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6614">#6614</a>).</p></li>
<li><p>Building fish on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6602">#6602</a>) or with new versions of GCC (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6604">#6604</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6609">#6609</a>) is now successful.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">time</span></code> is now correctly listed in the output of <code class="docutils literal notranslate"><span class="pre">builtin</span> <span class="pre">-n</span></code>, and
<code class="docutils literal notranslate"><span class="pre">time</span> <span class="pre">--help</span></code> works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6598">#6598</a>).</p></li>
<li><p>Exported universal variables now update properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6612">#6612</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">current-command</span></code> gives the expected output when used with
an environment override - that is, <code class="docutils literal notranslate"><span class="pre">F=B</span> <span class="pre">status</span> <span class="pre">current-command</span></code>
returns <code class="docutils literal notranslate"><span class="pre">status</span></code> instead of <code class="docutils literal notranslate"><span class="pre">F=B</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6635">#6635</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> no longer crashes when used with “<code class="docutils literal notranslate"><span class="pre">nan</span></code>” or “<code class="docutils literal notranslate"><span class="pre">inf</span></code>”
arguments, erroring out instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6655">#6655</a>).</p></li>
<li><p>Copying from the end of the command line no longer crashes fish
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6680">#6680</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> no longer removes multiple separators when splitting a
variable into a list, restoring the previous behaviour from fish 3.0
and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6650">#6650</a>).</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-job-exit</span></code> and <code class="docutils literal notranslate"><span class="pre">--on-process-exit</span></code> work
reliably again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6679">#6679</a>).</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-signal</span> <span class="pre">INT</span></code> work reliably in interactive
sessions, as they did in fish 2.7 and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6649">#6649</a>). These handlers
have never worked in non-interactive sessions, and making them work
is an ongoing process.</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-variable</span></code> work reliably with variables which
are set implicitly (rather than with <code class="docutils literal notranslate"><span class="pre">set</span></code>), such as
“<code class="docutils literal notranslate"><span class="pre">fish_bind_mode</span></code>” and “<code class="docutils literal notranslate"><span class="pre">PWD</span></code>” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6653">#6653</a>).</p></li>
<li><p>256 colors are properly enabled under certain conditions that were
incorrectly detected in fish 3.1.0 (<code class="docutils literal notranslate"><span class="pre">$TERM</span></code> begins with xterm, does
not include “<code class="docutils literal notranslate"><span class="pre">256color</span></code>”, and <code class="docutils literal notranslate"><span class="pre">$TERM_PROGRAM</span></code> is not set)
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6701">#6701</a>).</p></li>
<li><p>The Mercurial (<code class="docutils literal notranslate"><span class="pre">hg</span></code>) prompt no longer produces an error when the
current working directory is removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6699">#6699</a>). Also, for performance
reasons it shows only basic information by default; to restore the
detailed status, set <code class="docutils literal notranslate"><span class="pre">$fish_prompt_hg_show_informative_status</span></code>.</p></li>
<li><p>The VCS prompt, <code class="docutils literal notranslate"><span class="pre">fish_vcs_prompt</span></code>, no longer displays Subversion
(<code class="docutils literal notranslate"><span class="pre">svn</span></code>) status by default, due to the potential slowness of this
operation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6681">#6681</a>).</p></li>
<li><p>Pasting of commands has been sped up (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6713">#6713</a>).</p></li>
<li><p>Using extended Unicode characters, such as emoji, in a non-Unicode
capable locale (such as the <code class="docutils literal notranslate"><span class="pre">C</span></code> or <code class="docutils literal notranslate"><span class="pre">POSIX</span></code> locale) no longer
renders all output blank (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6736">#6736</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> prefers to use <code class="docutils literal notranslate"><span class="pre">xdg-open</span></code>, avoiding the use of <code class="docutils literal notranslate"><span class="pre">open</span></code> on
Debian systems where this command is actually <code class="docutils literal notranslate"><span class="pre">openvt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6739">#6739</a>).</p></li>
<li><p>Command lines starting with a space, which are not saved in history,
now do not get autosuggestions. This fixes an issue with Midnight
Commander integration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6763">#6763</a>), but may be changed in a future
version.</p></li>
<li><p>Copying to the clipboard no longer inserts a newline at the end of
the content, matching fish 2.7 and earlier (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6927">#6927</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fzf</span></code> in complex pipes no longer hangs. More generally, code run as
part of command substitutions or <code class="docutils literal notranslate"><span class="pre">eval</span></code> will no longer have
separate process groups. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6624">#6624</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6806">#6806</a>).</p></li>
</ul>
<p>This release also includes:</p>
<ul class="simple">
<li><p>several changes to improve macOS compatibility with code signing
and notarization;</p></li>
<li><p>several improvements to completions; and</p></li>
<li><p>several content and formatting improvements to the documentation.</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1.0 and 3.1b1 (included below).</p>
<section id="errata-for-fish-3-1">
<h3>Errata for fish 3.1<a class="headerlink" href="#errata-for-fish-3-1" title="Link to this heading">¶</a></h3>
<p>A new builtin, <code class="docutils literal notranslate"><span class="pre">time</span></code>, was introduced in the fish 3.1 releases. This
builtin is a reserved word (like <code class="docutils literal notranslate"><span class="pre">test</span></code>, <code class="docutils literal notranslate"><span class="pre">function</span></code>, and others)
because of the way it is implemented, and functions can no longer be
named <code class="docutils literal notranslate"><span class="pre">time</span></code>. This was not clear in the fish 3.1b1 changelog.</p>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-1-0-released-february-12-2020">
<h2>fish 3.1.0 (released February 12, 2020)<a class="headerlink" href="#fish-3-1-0-released-february-12-2020" title="Link to this heading">¶</a></h2>
<p>Compared to the beta release of fish 3.1b1, fish version 3.1.0:</p>
<ul class="simple">
<li><p>Fixes a regression where spaces after a brace were removed despite
brace expansion not occurring (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6564">#6564</a>).</p></li>
<li><p>Fixes a number of problems in compiling and testing on Cygwin
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6549">#6549</a>) and Solaris-derived systems such as Illumos (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6553">#6553</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6554">#6554</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6555">#6555</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6556">#6556</a>, and <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6558">#6558</a>).</p></li>
<li><p>Fixes the process for building macOS packages.</p></li>
<li><p>Fixes a regression where excessive error messages are printed if
Unicode characters are emitted in non-Unicode-capable locales
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6584">#6584</a>).</p></li>
<li><p>Contains some improvements to the documentation and a small number
of completions.</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1b1 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-1b1-released-january-26-2020">
<h2>fish 3.1b1 (released January 26, 2020)<a class="headerlink" href="#fish-3-1b1-released-january-26-2020" title="Link to this heading">¶</a></h2>
<section id="notable-improvements-and-fixes-1">
<span id="id102"></span><h3>Notable improvements and fixes<a class="headerlink" href="#notable-improvements-and-fixes-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">$pipestatus</span></code> variable contains a list of exit statuses of
the previous job, for each of the separate commands in a pipeline
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5632">#5632</a>).</p></li>
<li><p>fish no longer buffers pipes to the last function in a pipeline,
improving many cases where pipes appeared to block or hang (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1396">#1396</a>).</p></li>
<li><p>An overhaul of error messages for builtin commands, including a
removal of the overwhelming usage summary, more readable stack traces
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3404">#3404</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5434">#5434</a>), and stack traces for <code class="docutils literal notranslate"><span class="pre">test</span></code> (aka <code class="docutils literal notranslate"><span class="pre">[</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5771">#5771</a>).</p></li>
<li><p>fish’s debugging arguments have been significantly improved. The
<code class="docutils literal notranslate"><span class="pre">--debug-level</span></code> option has been removed, and a new <code class="docutils literal notranslate"><span class="pre">--debug</span></code>
option replaces it. This option accepts various categories, which may
be listed via <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--print-debug-categories</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5879">#5879</a>). A new
<code class="docutils literal notranslate"><span class="pre">--debug-output</span></code> option allows for redirection of debug output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> has a new <code class="docutils literal notranslate"><span class="pre">collect</span></code> subcommand for use in command
substitutions, producing a single output instead of splitting on new
lines (similar to <code class="docutils literal notranslate"><span class="pre">&quot;$(cmd)&quot;</span></code> in other shells) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/159">#159</a>).</p></li>
<li><p>The fish manual, tutorial and FAQ are now available in <code class="docutils literal notranslate"><span class="pre">man</span></code> format
as <code class="docutils literal notranslate"><span class="pre">fish-doc</span></code>, <code class="docutils literal notranslate"><span class="pre">fish-tutorial</span></code> and <code class="docutils literal notranslate"><span class="pre">fish-faq</span></code> respectively
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5521">#5521</a>).</p></li>
<li><p>Like other shells, <code class="docutils literal notranslate"><span class="pre">cd</span></code> now always looks for its argument in the
current directory as a last resort, even if the <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> variable
does not include it or “.” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4484">#4484</a>).</p></li>
<li><p>fish now correctly handles <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> entries that start with <code class="docutils literal notranslate"><span class="pre">..</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6220">#6220</a>) or contain <code class="docutils literal notranslate"><span class="pre">./</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5887">#5887</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_trace</span></code> variable may be set to trace execution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3427">#3427</a>).
This performs a similar role as <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-x</span></code> in other shells.</p></li>
<li><p>fish uses the temporary directory determined by the system, rather
than relying on <code class="docutils literal notranslate"><span class="pre">/tmp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3845">#3845</a>).</p></li>
<li><p>The fish Web configuration tool (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>) prints a list of
commands it is executing, to help understanding and debugging
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5584">#5584</a>).</p></li>
<li><p>Major performance improvements when pasting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5866">#5866</a>), executing lots
of commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5905">#5905</a>), importing history from bash (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6295">#6295</a>), and when
completing variables that might match <code class="docutils literal notranslate"><span class="pre">$history</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6288">#6288</a>).</p></li>
</ul>
</section>
<section id="syntax-changes-and-new-commands-1">
<span id="id103"></span><h3>Syntax changes and new commands<a class="headerlink" href="#syntax-changes-and-new-commands-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new builtin command, <code class="docutils literal notranslate"><span class="pre">time</span></code>, which allows timing of fish
functions and builtins as well as external commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/117">#117</a>).</p></li>
<li><p>Brace expansion now only takes place if the braces include a “,” or a
variable expansion, meaning common commands such as
<code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">reset</span> <span class="pre">HEAD&#64;{0}</span></code> do not require escaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5869">#5869</a>).</p></li>
<li><p>New redirections <code class="docutils literal notranslate"><span class="pre">&amp;&gt;</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;|</span></code> may be used to redirect or pipe
stdout, and also redirect stderr to stdout (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6192">#6192</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">switch</span></code> now allows arguments that expand to nothing, like empty
variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5677">#5677</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">VAR=val</span> <span class="pre">cmd</span></code> syntax can now be used to run a command in a
modified environment (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6287">#6287</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">and</span></code> is no longer recognised as a command, so that nonsensical
constructs like <code class="docutils literal notranslate"><span class="pre">and</span> <span class="pre">and</span> <span class="pre">and</span></code> produce a syntax error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6089">#6089</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code>‘s exponent operator,’<code class="docutils literal notranslate"><span class="pre">^</span></code>‘, was previously
left-associative, but now uses the more commonly-used
right-associative behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6280">#6280</a>). This means that
<code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">'3^0.5^2'</span></code> was previously calculated as’(3<sup>0.5)</sup>2’,
but is now calculated as ‘3<sup>(0.5</sup>2)’.</p></li>
<li><p>In fish 3.0, the variable used with <code class="docutils literal notranslate"><span class="pre">for</span></code> loops inside command
substitutions could leak into enclosing scopes; this was an
inadvertent behaviour change and has been reverted (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6480">#6480</a>).</p></li>
</ul>
</section>
<section id="scripting-improvements-1">
<span id="id104"></span><h3>Scripting improvements<a class="headerlink" href="#scripting-improvements-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split0</span></code> now returns 0 if it split something (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5701">#5701</a>).</p></li>
<li><p>In the interest of consistency, <code class="docutils literal notranslate"><span class="pre">builtin</span> <span class="pre">-q</span></code> and <code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">-q</span></code> can
now be used to query if a builtin or command exists (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5631">#5631</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now accepts <code class="docutils literal notranslate"><span class="pre">--scale=max</span></code> for the maximum scale (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5579">#5579</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">builtin</span> <span class="pre">$var</span></code> now works correctly, allowing a variable as the
builtin name (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5639">#5639</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> understands the <code class="docutils literal notranslate"><span class="pre">--</span></code> argument to make it possible to change
to directories starting with a hyphen (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6071">#6071</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--do-complete</span></code> now also does fuzzy matches (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5467">#5467</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--do-complete</span></code> can be used inside completions, allowing
limited recursion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3474">#3474</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">count</span></code> now also counts lines fed on standard input (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5744">#5744</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eval</span></code> produces an exit status of 0 when given no arguments, like
other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5692">#5692</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> prints what it can when input hasn’t been fully converted
to a number, but still prints an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5532">#5532</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C</span> <span class="pre">foo</span></code> now works as expected, rather than requiring
<code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-Cfoo</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--force-files</span></code> option, to re-enable file
completions. This allows <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">-E</span></code> and <code class="docutils literal notranslate"><span class="pre">pacman</span> <span class="pre">-Qo</span></code> to complete
correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5646">#5646</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now defaults to showing the current function name
(instead of <code class="docutils literal notranslate"><span class="pre">argparse</span></code>) in its errors, making <code class="docutils literal notranslate"><span class="pre">--name</span></code> often
superfluous (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5835">#5835</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--ignore-unknown</span></code> option to keep
unrecognized options, allowing multiple argparse passes to parse
options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5367">#5367</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> correctly handles flag value validation of options that
only have short names (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5864">#5864</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">-S</span></code> (short option of <code class="docutils literal notranslate"><span class="pre">--shell</span></code>) is recognised correctly
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5660">#5660</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> understands <code class="docutils literal notranslate"><span class="pre">--list</span></code>, which acts like <code class="docutils literal notranslate"><span class="pre">--array</span></code> in
reading all arguments into a list inside a single variable, but is
better named (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5846">#5846</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> has a new option, <code class="docutils literal notranslate"><span class="pre">--tokenize</span></code>, which splits a string into
variables according to the shell’s tokenization rules, considering
quoting, escaping, and so on (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3823">#3823</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> interacts more correctly with the deprecated <code class="docutils literal notranslate"><span class="pre">$IFS</span></code>
variable, in particular removing multiple separators when splitting a
variable into a list (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6406">#6406</a>), matching other shells.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now handles semicolons better, including leaving them
in place for <code class="docutils literal notranslate"><span class="pre">;</span> <span class="pre">and</span></code> and <code class="docutils literal notranslate"><span class="pre">;</span> <span class="pre">or</span></code> instead of breaking the line
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5859">#5859</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span> <span class="pre">--write</span></code> now supports multiple file arguments,
indenting them in turn.</p></li>
<li><p>The default read limit has been increased to 100MiB (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5267">#5267</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now also understands <code class="docutils literal notranslate"><span class="pre">x</span></code> for multiplication, provided it
is followed by whitespace (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5906">#5906</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> reports the right error when incorrect syntax is used inside
parentheses (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6063">#6063</a>), and warns when unsupported logical operations
are used (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6096">#6096</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--erase</span></code> now also prevents fish from autoloading a
function for the first time (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5951">#5951</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span> <span class="pre">--last</span></code> returns 0 to indicate success when a job is found
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6104">#6104</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-p</span></code> and <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-j</span></code> now split on <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> and
<code class="docutils literal notranslate"><span class="pre">||</span></code> in addition to <code class="docutils literal notranslate"><span class="pre">;</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6214">#6214</a>).</p></li>
<li><p>A bug where <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split</span></code> would drop empty strings if the output
was only empty strings has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5987">#5987</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eval</span></code> no long creates a new local variable scope, but affects
variables in the scope it is called from (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4443">#4443</a>). <code class="docutils literal notranslate"><span class="pre">source</span></code> still
creates a new local scope.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--query</span></code> option to check for the existence of
an abbreviation.</p></li>
<li><p>Local values for <code class="docutils literal notranslate"><span class="pre">fish_complete_path</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_function_path</span></code>
are now ignored; only their global values are respected.</p></li>
<li><p>Syntax error reports now display a marker in the correct position
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5812">#5812</a>).</p></li>
<li><p>Empty universal variables may now be exported (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5992">#5992</a>).</p></li>
<li><p>Exported universal variables are no longer imported into the global
scope, preventing shadowing. This makes it easier to change such
variables for all fish sessions and avoids breakage when the value is
a list of multiple elements (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5258">#5258</a>).</p></li>
<li><p>A bug where <code class="docutils literal notranslate"><span class="pre">for</span></code> could use invalid variable names has been fixed
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5800">#5800</a>).</p></li>
<li><p>A bug where local variables would not be exported to functions has
been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6153">#6153</a>).</p></li>
<li><p>The null command (<code class="docutils literal notranslate"><span class="pre">:</span></code>) now always exits successfully, rather than
passing through the previous exit status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6022">#6022</a>).</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">FUNCTION</span></code> matches the declaration of the
function, correctly including comments or blank lines (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5285">#5285</a>), and
correctly includes any <code class="docutils literal notranslate"><span class="pre">--wraps</span></code> flags (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1625">#1625</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code> supports a new option, <code class="docutils literal notranslate"><span class="pre">--short</span></code>, which suppress function
expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6403">#6403</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">--path</span></code> with a function argument will now output the path to
the file containing the definition of that function, if it exists.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">--force-path</span></code> with an argument that cannot be found now
correctly outputs nothing, as documented (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6411">#6411</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">$hostname</span></code> variable is no longer truncated to 32 characters
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5758">#5758</a>).</p></li>
<li><p>Line numbers in function backtraces are calculated correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6350">#6350</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_cancel</span></code> event is emitted when the command line is
cancelled, which is useful for terminal integration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5973">#5973</a>).</p></li>
</ul>
</section>
<section id="interactive-improvements-1">
<span id="id105"></span><h3>Interactive improvements<a class="headerlink" href="#interactive-improvements-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>New Base16 color options are available through the Web-based
configuration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6504">#6504</a>).</p></li>
<li><p>fish only parses <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> on macOS in login shells, matching
the bash implementation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5637">#5637</a>) and avoiding changes to path ordering
in child shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5456">#5456</a>). It now ignores blank lines like the bash
implementation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5809">#5809</a>).</p></li>
<li><p>The locale is now reloaded when the <code class="docutils literal notranslate"><span class="pre">LOCPATH</span></code> variable is changed
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5815">#5815</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> no longer keeps a history, making it suitable for operations
that shouldn’t end up there, like password entry (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5904">#5904</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dirh</span></code> outputs its stack in the correct order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5477">#5477</a>), and behaves
as documented when universal variables are used for its stack
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5797">#5797</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> and the edit-commandline-in-buffer bindings did not work
in fish 3.0 when the <code class="docutils literal notranslate"><span class="pre">$EDITOR</span></code> variable contained spaces; this has
been corrected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5625">#5625</a>).</p></li>
<li><p>Builtins now pipe their help output to a pager automatically (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6227">#6227</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> now colors the <code class="docutils literal notranslate"><span class="pre">--print-colors</span></code> output in the
matching colors if it is going to a terminal.</p></li>
<li><p>fish now underlines every valid entered path instead of just the last
one (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5872">#5872</a>).</p></li>
<li><p>When syntax highlighting a string with an unclosed quote, only the
quote itself will be shown as an error, instead of the whole
argument.</p></li>
<li><p>Syntax highlighting works correctly with variables as commands
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5658">#5658</a>) and redirections to close file descriptors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6092">#6092</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> works properly on Windows Subsystem for Linux (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5759">#5759</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6338">#6338</a>).</p></li>
<li><p>A bug where <code class="docutils literal notranslate"><span class="pre">disown</span></code> could crash the shell has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5720">#5720</a>).</p></li>
<li><p>fish will not autosuggest files ending with <code class="docutils literal notranslate"><span class="pre">~</span></code> unless there are no
other candidates, as these are generally backup files (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/985">#985</a>).</p></li>
<li><p>Escape in the pager works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5818">#5818</a>).</p></li>
<li><p>Key bindings that call <code class="docutils literal notranslate"><span class="pre">fg</span></code> no longer leave the terminal in a
broken state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2114">#2114</a>).</p></li>
<li><p>Brackets (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5831">#5831</a>) and filenames containing <code class="docutils literal notranslate"><span class="pre">$</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6060">#6060</a>) are completed
with appropriate escaping.</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">complete</span></code> and <code class="docutils literal notranslate"><span class="pre">functions</span></code> is now colorized in
interactive terminals.</p></li>
<li><p>The Web-based configuration handles aliases that include single
quotes correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6120">#6120</a>), and launches correctly under Termux (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6248">#6248</a>)
and OpenBSD (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6522">#6522</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">function</span></code> now correctly validates parameters for
<code class="docutils literal notranslate"><span class="pre">--argument-names</span></code> as valid variable names (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6147">#6147</a>) and correctly
parses options following <code class="docutils literal notranslate"><span class="pre">--argument-names</span></code>, as in
“<code class="docutils literal notranslate"><span class="pre">--argument-names</span> <span class="pre">foo</span> <span class="pre">--description</span> <span class="pre">bar</span></code>” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6186">#6186</a>).</p></li>
<li><p>History newly imported from bash includes command lines using <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code>
or <code class="docutils literal notranslate"><span class="pre">||</span></code>.</p></li>
<li><p>The automatic generation of completions from manual pages is better
described in job and process listings, and no longer produces a
warning when exiting fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6269">#6269</a>).</p></li>
<li><p>In private mode, setting <code class="docutils literal notranslate"><span class="pre">$fish_greeting</span></code> to an empty string before
starting the private session will prevent the warning about history
not being saved from being printed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6299">#6299</a>).</p></li>
<li><p>In the interactive editor, a line break (Enter) inside unclosed
brackets will insert a new line, rather than executing the command
and producing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6316">#6316</a>).</p></li>
<li><p>Ctrl-C always repaints the prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6394">#6394</a>).</p></li>
<li><p>When run interactively from another program (such as Python), fish
will correctly start a new process group, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5909">#5909</a>).</p></li>
<li><p>Job identifiers (for example, for background jobs) are assigned more
logically (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6053">#6053</a>).</p></li>
<li><p>A bug where history would appear truncated if an empty command was
executed was fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6032">#6032</a>).</p></li>
</ul>
<section id="new-or-improved-bindings-1">
<span id="id106"></span><h4>New or improved bindings<a class="headerlink" href="#new-or-improved-bindings-1" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Pasting strips leading spaces to avoid pasted commands being omitted
from the history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4327">#4327</a>).</p></li>
<li><p>Shift-Left and Shift-Right now default to moving backwards and
forwards by one bigword (words separated by whitespace) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1505">#1505</a>).</p></li>
<li><p>The default escape delay (to differentiate between the escape key and
an alt-combination) has been reduced to 30ms, down from 300ms for the
default mode and 100ms for Vi mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3904">#3904</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">forward-bigword</span></code> binding now interacts correctly with
autosuggestions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5336">#5336</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_clipboard_*</span></code> functions support Wayland by using
<a class="reference external" href="https://github.com/bugaevc/wl-clipboard">wl-clipboard</a>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5450">#5450</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">nextd</span></code> and <code class="docutils literal notranslate"><span class="pre">prevd</span></code> functions no longer print “Hit end of
history”, instead using a bell. They correctly store working
directories containing symbolic links (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6395">#6395</a>).</p></li>
<li><p>If a <code class="docutils literal notranslate"><span class="pre">fish_mode_prompt</span></code> function exists, Vi mode will only execute
it on mode-switch instead of the entire prompt. This should make it
much more responsive with slow prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5783">#5783</a>).</p></li>
<li><p>The path-component bindings (like Ctrl-w) now also stop at “:” and
“&#64;”, because those are used to denote user and host in commands such
as <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5841">#5841</a>).</p></li>
<li><p>The NULL character can now be bound via <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">-k</span> <span class="pre">nul</span></code>. Terminals
often generate this character via control-space. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3189">#3189</a>).</p></li>
<li><p>A new readline command <code class="docutils literal notranslate"><span class="pre">expand-abbr</span></code> can be used to trigger
abbreviation expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5762">#5762</a>).</p></li>
<li><p>A new readline command, <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>, removes a character to
the right of the cursor or exits the shell if the command line is
empty (moving this functionality out of the <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>
function).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">self-insert</span></code> readline command will now insert the binding
sequence, if not empty.</p></li>
<li><p>A new binding to prepend <code class="docutils literal notranslate"><span class="pre">sudo</span></code>, bound to Alt-S by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6140">#6140</a>).</p></li>
<li><p>The Alt-W binding to describe a command should now work better with
multiline prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6110">#6110</a>)</p></li>
<li><p>The Alt-H binding to open a command’s man page now tries to ignore
<code class="docutils literal notranslate"><span class="pre">sudo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6122">#6122</a>).</p></li>
<li><p>A new pair of bind functions, <code class="docutils literal notranslate"><span class="pre">history-prefix-search-backward</span></code> (and
<code class="docutils literal notranslate"><span class="pre">forward</span></code>), was introduced (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6143">#6143</a>).</p></li>
<li><p>Vi mode now supports R to enter replace mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6342">#6342</a>), and <code class="docutils literal notranslate"><span class="pre">d0</span></code> to
delete the current line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6292">#6292</a>).</p></li>
<li><p>In Vi mode, hitting Enter in replace-one mode no longer erases the
prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6298">#6298</a>).</p></li>
<li><p>Selections in Vi mode are inclusive, matching the actual behaviour of
Vi (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5770">#5770</a>).</p></li>
</ul>
</section>
<section id="improved-prompts-1">
<span id="id107"></span><h4>Improved prompts<a class="headerlink" href="#improved-prompts-1" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>The Git prompt in informative mode now shows the number of stashes if
enabled.</p></li>
<li><p>The Git prompt now has an option
(<code class="docutils literal notranslate"><span class="pre">$__fish_git_prompt_use_informative_chars</span></code>) to use the (more
modern) informative characters without enabling informative mode.</p></li>
<li><p>The default prompt now also features VCS integration and will color
the host if running via SSH (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6375">#6375</a>).</p></li>
<li><p>The default and example prompts print the pipe status if an earlier
command in the pipe fails.</p></li>
<li><p>The default and example prompts try to resolve exit statuses to
signal names when appropriate.</p></li>
</ul>
</section>
<section id="improved-terminal-output">
<span id="improved-terminal-output-1"></span><h4>Improved terminal output<a class="headerlink" href="#improved-terminal-output" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>New <code class="docutils literal notranslate"><span class="pre">fish_pager_color_</span></code> options have been added to control more
elements of the pager’s colors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5524">#5524</a>).</p></li>
<li><p>Better detection and support for using fish from various system
consoles, where limited colors and special characters are supported
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5552">#5552</a>).</p></li>
<li><p>fish now tries to guess if the system supports Unicode 9 (and
displays emoji as wide), eliminating the need to set
<code class="docutils literal notranslate"><span class="pre">$fish_emoji_width</span></code> in most cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5722">#5722</a>).</p></li>
<li><p>Improvements to the display of wide characters, particularly Korean
characters and emoji (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5583">#5583</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5729">#5729</a>).</p></li>
<li><p>The Vi mode cursor is correctly redrawn when regaining focus under
terminals that report focus (eg tmux) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4788">#4788</a>).</p></li>
<li><p>Variables that control background colors (such as
<code class="docutils literal notranslate"><span class="pre">fish_pager_color_search_match</span></code>) can now use <code class="docutils literal notranslate"><span class="pre">--reverse</span></code>.</p></li>
</ul>
</section>
<section id="completions-1">
<span id="id108"></span><h4>Completions<a class="headerlink" href="#completions-1" title="Link to this heading">¶</a></h4>
<ul class="simple">
<li><p>Added completions for</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">aws</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bat</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6052">#6052</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bosh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5700">#5700</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">btrfs</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">camcontrol</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cf</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5700">#5700</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">chronyc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6496">#6496</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">code</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6205">#6205</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cryptsetup</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6488">#6488</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">csc</span></code> and <code class="docutils literal notranslate"><span class="pre">csi</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6016">#6016</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cwebp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6034">#6034</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cygpath</span></code> and <code class="docutils literal notranslate"><span class="pre">cygstart</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6239">#6239</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">epkginfo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5829">#5829</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ffmpeg</span></code>, <code class="docutils literal notranslate"><span class="pre">ffplay</span></code>, and <code class="docutils literal notranslate"><span class="pre">ffprobe</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5922">#5922</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fsharpc</span></code> and <code class="docutils literal notranslate"><span class="pre">fsharpi</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6016">#6016</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fzf</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6178">#6178</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">g++</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6217">#6217</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gpg1</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6139">#6139</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gpg2</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6062">#6062</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">grub-mkrescue</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6182">#6182</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hledger</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6043">#6043</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hwinfo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6496">#6496</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">irb</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6260">#6260</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">iw</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6232">#6232</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kak</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">keepassxc-cli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6505">#6505</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">keybase</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6410">#6410</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">loginctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6501">#6501</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lz4</span></code>, <code class="docutils literal notranslate"><span class="pre">lz4c</span></code> and <code class="docutils literal notranslate"><span class="pre">lz4cat</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6364">#6364</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mariner</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5718">#5718</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nethack</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6240">#6240</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">patool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6083">#6083</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">phpunit</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6197">#6197</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">plutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6301">#6301</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pzstd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6364">#6364</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">qubes-gpg-client</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6067">#6067</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">resolvectl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6501">#6501</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rg</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rustup</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sfdx</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6149">#6149</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">speedtest</span></code> and <code class="docutils literal notranslate"><span class="pre">speedtest-cli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5840">#5840</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">src</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6026">#6026</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tokei</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6085">#6085</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tsc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6016">#6016</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">unlz4</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6364">#6364</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">unzstd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6364">#6364</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">vbc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6016">#6016</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zpaq</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6245">#6245</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zstd</span></code>, <code class="docutils literal notranslate"><span class="pre">zstdcat</span></code>, <code class="docutils literal notranslate"><span class="pre">zstdgrep</span></code>, <code class="docutils literal notranslate"><span class="pre">zstdless</span></code> and <code class="docutils literal notranslate"><span class="pre">zstdmt</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6364">#6364</a>)</p></li>
</ul>
</li>
<li><p>Lots of improvements to completions.</p></li>
<li><p>Selecting short options which also have a long name from the
completion pager is possible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5634">#5634</a>).</p></li>
<li><p>Tab completion will no longer add trailing spaces if they already
exist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6107">#6107</a>).</p></li>
<li><p>Completion of subcommands to builtins like <code class="docutils literal notranslate"><span class="pre">and</span></code> or <code class="docutils literal notranslate"><span class="pre">not</span></code> now
works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6249">#6249</a>).</p></li>
<li><p>Completion of arguments to short options works correctly when
multiple short options are used together (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/332">#332</a>).</p></li>
<li><p>Activating completion in the middle of an invalid completion does not
move the cursor any more, making it easier to fix a mistake (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4124">#4124</a>).</p></li>
<li><p>Completion in empty commandlines now lists all available commands.</p></li>
<li><p>Functions listed as completions could previously leak parts of the
function as other completions; this has been fixed.</p></li>
</ul>
</section>
</section>
<section id="deprecations-and-removed-features-1">
<span id="id109"></span><h3>Deprecations and removed features<a class="headerlink" href="#deprecations-and-removed-features-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The vcs-prompt functions have been promoted to names without
double-underscore, so __fish_git_prompt is now fish_git_prompt,
__fish_vcs_prompt is now fish_vcs_prompt, __fish_hg_prompt is now
fish_hg_prompt and __fish_svn_prompt is now fish_svn_prompt. Shims
at the old names have been added, and the variables have kept their
old names (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5586">#5586</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span></code> has an additional round of escaping in the
replacement expression, so escaping backslashes requires many escapes
(eg <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-ra</span> <span class="pre">'([ab])'</span> <span class="pre">'\\\\\\\$1'</span> <span class="pre">a</span></code>). The new feature
flag <code class="docutils literal notranslate"><span class="pre">regex-easyesc</span></code> can be used to disable this, so that the same
effect can be achieved with
<code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-ra</span> <span class="pre">'([ab])'</span> <span class="pre">'\\\\$1'</span> <span class="pre">a</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5556">#5556</a>). As a reminder,
the intention behind feature flags is that this will eventually
become the default and then only option, so scripts should be
updated.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_vi_mode</span></code> function, deprecated in fish 2.3, has been
removed. Use <code class="docutils literal notranslate"><span class="pre">fish_vi_key_bindings</span></code> instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6372">#6372</a>).</p></li>
</ul>
</section>
<section id="for-distributors-and-developers-1">
<span id="id110"></span><h3>For distributors and developers<a class="headerlink" href="#for-distributors-and-developers-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish 3.0 introduced a CMake-based build system. In fish 3.1, both the
Autotools-based build and legacy Xcode build system have been
removed, leaving only the CMake build system. All distributors and
developers must install CMake.</p></li>
<li><p>fish now depends on the common <code class="docutils literal notranslate"><span class="pre">tee</span></code> external command, for the
<code class="docutils literal notranslate"><span class="pre">psub</span></code> process substitution function.</p></li>
<li><p>The documentation is now built with Sphinx. The old Doxygen-based
documentation system has been removed. Developers, and distributors
who wish to rebuild the documentation, must install Sphinx.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">INTERNAL_WCWIDTH</span></code> build option has been removed, as fish now
always uses an internal <code class="docutils literal notranslate"><span class="pre">wcwidth</span></code> function. It has a number of
configuration options that make it more suitable for general use
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5777">#5777</a>).</p></li>
<li><p>mandoc can now be used to format the output from <code class="docutils literal notranslate"><span class="pre">--help</span></code> if
<code class="docutils literal notranslate"><span class="pre">nroff</span></code> is not installed, reducing the number of external
dependencies on systems with <code class="docutils literal notranslate"><span class="pre">mandoc</span></code> installed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5489">#5489</a>).</p></li>
<li><p>Some bugs preventing building on Solaris-derived systems such as
Illumos were fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5458">#5458</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5461">#5461</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5611">#5611</a>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">npm</span></code>, <code class="docutils literal notranslate"><span class="pre">bower</span></code> and <code class="docutils literal notranslate"><span class="pre">yarn</span></code> no longer require the
<code class="docutils literal notranslate"><span class="pre">jq</span></code> utility for full functionality, but will use Python instead if
it is available.</p></li>
<li><p>The paths for completions, functions and configuration snippets have
been extended. On systems that define <code class="docutils literal notranslate"><span class="pre">XDG_DATA_DIRS</span></code>, each of the
directories in this variable are searched in the subdirectories
<code class="docutils literal notranslate"><span class="pre">fish/vendor_completions.d</span></code>, <code class="docutils literal notranslate"><span class="pre">fish/vendor_functions.d</span></code>, and
<code class="docutils literal notranslate"><span class="pre">fish/vendor_conf.d</span></code> respectively. On systems that do not define
this variable in the environment, the vendor directories are searched
for in both the installation prefix and the default “extra”
directory, which now defaults to <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5029">#5029</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-0-2-released-february-19-2019">
<h2>fish 3.0.2 (released February 19, 2019)<a class="headerlink" href="#fish-3-0-2-released-february-19-2019" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes an issue discovered in fish 3.0.1.</p>
<section id="fixes-and-improvements">
<h3>Fixes and improvements<a class="headerlink" href="#fixes-and-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The PWD environment variable is now ignored if it does not resolve to
the true working directory, fixing strange behaviour in terminals
started by editors and IDEs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5647">#5647</a>).</p></li>
</ul>
<p>If you are upgrading from version 2.7.1 or before, please also review
the release notes for 3.0.1, 3.0.0 and 3.0b1 (included below).</p>
</section>
</section>
<section id="fish-3-0-1-released-february-11-2019">
<h2>fish 3.0.1 (released February 11, 2019)<a class="headerlink" href="#fish-3-0-1-released-february-11-2019" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of major issues discovered in fish
3.0.0.</p>
<section id="fixes-and-improvements-1">
<span id="id111"></span><h3>Fixes and improvements<a class="headerlink" href="#fixes-and-improvements-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> does not complain about running foreground jobs when called
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5449">#5449</a>).</p></li>
<li><p>while loops now evaluate to the last executed command in the loop
body (or zero if the body was empty), matching POSIX semantics
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4982">#4982</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--silent</span></code> no longer echoes to the tty when run from a
non-interactive script (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5519">#5519</a>).</p></li>
<li><p>On macOS, path entries with spaces in <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> and
<code class="docutils literal notranslate"><span class="pre">/etc/paths.d</span></code> now correctly set path entries with spaces.
Likewise, <code class="docutils literal notranslate"><span class="pre">MANPATH</span></code> is correctly set from <code class="docutils literal notranslate"><span class="pre">/etc/manpaths</span></code> and
<code class="docutils literal notranslate"><span class="pre">/etc/manpaths.d</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5481">#5481</a>).</p></li>
<li><p>fish starts correctly under Cygwin/MSYS2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5426">#5426</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">pager-toggle-search</span></code> binding (Ctrl-S by default) will now
activate the search field, even when the pager is not focused.</p></li>
<li><p>The error when a command is not found is now printed a single time,
instead of once per argument (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5588">#5588</a>).</p></li>
<li><p>Fixes and improvements to the git completions, including printing
correct paths with older git versions, fuzzy matching again, reducing
unnecessary offers of root paths (starting with <code class="docutils literal notranslate"><span class="pre">:/</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5578">#5578</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5574">#5574</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5476">#5476</a>), and ignoring shell aliases, so enterprising users can
set up the wrapping command (via
<code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">__fish_git_alias_$command</span> <span class="pre">$whatitwraps</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5412">#5412</a>).</p></li>
<li><p>Significant performance improvements to core shell functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5447">#5447</a>)
and to the <code class="docutils literal notranslate"><span class="pre">kill</span></code> completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5541">#5541</a>).</p></li>
<li><p>Starting in symbolically-linked working directories works correctly
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5525">#5525</a>).</p></li>
<li><p>The default <code class="docutils literal notranslate"><span class="pre">fish_title</span></code> function no longer contains extra spaces
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5517">#5517</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">nim</span></code> prompt now works correctly when chosen in the Web-based
configuration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5490">#5490</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> now prints help to stdout, like other builtins (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5495">#5495</a>).</p></li>
<li><p>Killing the terminal while fish is in vi normal mode will no longer
send it spinning and eating CPU. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5528">#5528</a>)</p></li>
<li><p>A number of crashes have been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5550">#5550</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5548">#5548</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5479">#5479</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5453">#5453</a>).</p></li>
<li><p>Improvements to the documentation and certain completions.</p></li>
</ul>
</section>
<section id="known-issues">
<h3>Known issues<a class="headerlink" href="#known-issues" title="Link to this heading">¶</a></h3>
<p>There is one significant known issue that was not corrected before the
release:</p>
<ul class="simple">
<li><p>fish does not run correctly under Windows Services for Linux before
Windows 10 version 1809/17763, and the message warning of this may
not be displayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5619">#5619</a>).</p></li>
</ul>
<p>If you are upgrading from version 2.7.1 or before, please also review
the release notes for 3.0.0 and 3.0b1 (included below).</p>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-0-0-released-december-28-2018">
<h2>fish 3.0.0 (released December 28, 2018)<a class="headerlink" href="#fish-3-0-0-released-december-28-2018" title="Link to this heading">¶</a></h2>
<p>fish 3 is a major release, which introduces some breaking changes
alongside improved functionality. Although most existing scripts will
continue to work, they should be reviewed against the list contained in
the 3.0b1 release notes below.</p>
<p>Compared to the beta release of fish 3.0b1, fish version 3.0.0:</p>
<ul class="simple">
<li><p>builds correctly against musl libc (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5407">#5407</a>)</p></li>
<li><p>handles huge numeric arguments to <code class="docutils literal notranslate"><span class="pre">test</span></code> correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5414">#5414</a>)</p></li>
<li><p>removes the history colouring introduced in 3.0b1, which did not
always work correctly</p></li>
</ul>
<p>There is one significant known issue which was not able to be corrected
before the release:</p>
<ul class="simple">
<li><p>fish 3.0.0 builds on Cygwin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5423">#5423</a>), but does not run correctly
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5426">#5426</a>) and will result in a hanging terminal when started. Cygwin
users are encouraged to continue using 2.7.1 until a release which
corrects this is available.</p></li>
</ul>
<p>If you are upgrading from version 2.7.1 or before, please also review
the release notes for 3.0b1 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-0b1-released-december-11-2018">
<h2>fish 3.0b1 (released December 11, 2018)<a class="headerlink" href="#fish-3-0b1-released-december-11-2018" title="Link to this heading">¶</a></h2>
<p>fish 3 is a major release, which introduces some breaking changes
alongside improved functionality. Although most existing scripts will
continue to work, they should be reviewed against the list below.</p>
<section id="notable-non-backward-compatible-changes">
<h3>Notable non-backward compatible changes<a class="headerlink" href="#notable-non-backward-compatible-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Process and job expansion has largely been removed. <code class="docutils literal notranslate"><span class="pre">%</span></code> will no
longer perform these expansions, except for <code class="docutils literal notranslate"><span class="pre">%self</span></code> for the PID of
the current shell. Additionally, job management commands (<code class="docutils literal notranslate"><span class="pre">disown</span></code>,
<code class="docutils literal notranslate"><span class="pre">wait</span></code>, <code class="docutils literal notranslate"><span class="pre">bg</span></code>, <code class="docutils literal notranslate"><span class="pre">fg</span></code> and <code class="docutils literal notranslate"><span class="pre">kill</span></code>) will expand job specifiers
starting with <code class="docutils literal notranslate"><span class="pre">%</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4230">#4230</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1202">#1202</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">x[1]</span> <span class="pre">x[2]</span> <span class="pre">a</span> <span class="pre">b</span></code>, to set multiple elements of an array at once,
is no longer valid syntax (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4236">#4236</a>).</p></li>
<li><p>A literal <code class="docutils literal notranslate"><span class="pre">{}</span></code> now expands to itself, rather than nothing. This
makes working with <code class="docutils literal notranslate"><span class="pre">find</span> <span class="pre">-exec</span></code> easier (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1109">#1109</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4632">#4632</a>).</p></li>
<li><p>Literally accessing a zero-index is now illegal syntax and is caught
by the parser (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4862">#4862</a>). (fish indices start at 1)</p></li>
<li><p>Successive commas in brace expansions are handled in less surprising
manner. For example, <code class="docutils literal notranslate"><span class="pre">{,,,}</span></code> expands to four empty strings rather
than an empty string, a comma and an empty string again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3002">#3002</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4632">#4632</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">for</span></code> loop control variables are no longer local to the <code class="docutils literal notranslate"><span class="pre">for</span></code>
block (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1935">#1935</a>).</p></li>
<li><p>Variables set in <code class="docutils literal notranslate"><span class="pre">if</span></code> and <code class="docutils literal notranslate"><span class="pre">while</span></code> conditions are available
outside the block (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4820">#4820</a>).</p></li>
<li><p>Local exported (<code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-lx</span></code>) vars are now visible to functions
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1091">#1091</a>).</p></li>
<li><p>The new <code class="docutils literal notranslate"><span class="pre">math</span></code> builtin (see below) does not support logical
expressions; <code class="docutils literal notranslate"><span class="pre">test</span></code> should be used instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4777">#4777</a>).</p></li>
<li><p>Range expansion will now behave sensibly when given a single positive
and negative index (<code class="docutils literal notranslate"><span class="pre">$foo[5..-1]</span></code> or <code class="docutils literal notranslate"><span class="pre">$foo[-1..5]</span></code>), clamping to
the last valid index without changing direction if the list has fewer
elements than expected.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> now uses <code class="docutils literal notranslate"><span class="pre">-s</span></code> as short for <code class="docutils literal notranslate"><span class="pre">--silent</span></code> (à la <code class="docutils literal notranslate"><span class="pre">bash</span></code>);
<code class="docutils literal notranslate"><span class="pre">--shell</span></code>’s abbreviation (formerly <code class="docutils literal notranslate"><span class="pre">-s</span></code>) is now <code class="docutils literal notranslate"><span class="pre">-S</span></code> instead
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4490">#4490</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> no longer resolves symlinks. fish now maintains a virtual
path, matching other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3350">#3350</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">source</span></code> now requires an explicit <code class="docutils literal notranslate"><span class="pre">-</span></code> as the filename to read
from the terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2633">#2633</a>).</p></li>
<li><p>Arguments to <code class="docutils literal notranslate"><span class="pre">end</span></code> are now errors, instead of being silently
ignored.</p></li>
<li><p>The names <code class="docutils literal notranslate"><span class="pre">argparse</span></code>, <code class="docutils literal notranslate"><span class="pre">read</span></code>, <code class="docutils literal notranslate"><span class="pre">set</span></code>, <code class="docutils literal notranslate"><span class="pre">status</span></code>, <code class="docutils literal notranslate"><span class="pre">test</span></code> and
<code class="docutils literal notranslate"><span class="pre">[</span></code> are now reserved and not allowed as function names. This
prevents users unintentionally breaking stuff (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3000">#3000</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_user_abbreviations</span></code> variable is no longer used;
abbreviations will be migrated to the new storage format
automatically.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">FISH_READ_BYTE_LIMIT</span></code> variable is now called
<code class="docutils literal notranslate"><span class="pre">fish_byte_limit</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4414">#4414</a>).</p></li>
<li><p>Environment variables are no longer split into arrays based on the
record separator character on startup. Instead, variables are not
split, unless their name ends in PATH, in which case they are split
on colons (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/436">#436</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">history</span></code> builtin’s <code class="docutils literal notranslate"><span class="pre">--with-time</span></code> option has been removed;
this has been deprecated in favor of <code class="docutils literal notranslate"><span class="pre">--show-time</span></code> since 2.7.0
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4403">#4403</a>).</p></li>
<li><p>The internal variables <code class="docutils literal notranslate"><span class="pre">__fish_datadir</span></code> and <code class="docutils literal notranslate"><span class="pre">__fish_sysconfdir</span></code>
are now known as <code class="docutils literal notranslate"><span class="pre">__fish_data_dir</span></code> and <code class="docutils literal notranslate"><span class="pre">__fish_sysconf_dir</span></code>
respectively.</p></li>
</ul>
</section>
<section id="deprecations">
<h3>Deprecations<a class="headerlink" href="#deprecations" title="Link to this heading">¶</a></h3>
<p>With the release of fish 3, a number of features have been marked for
removal in the future. All users are encouraged to explore alternatives.
A small number of these features are currently behind feature flags,
which are turned on at present but may be turned off by default in the
future.</p>
<p>A new feature flags mechanism is added for staging deprecations and
breaking changes. Feature flags may be specified at launch with
<code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--features</span> <span class="pre">...</span></code> or by setting the universal <code class="docutils literal notranslate"><span class="pre">fish_features</span></code>
variable. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4940">#4940</a>)</p>
<ul class="simple">
<li><p>The use of the <code class="docutils literal notranslate"><span class="pre">IFS</span></code> variable for <code class="docutils literal notranslate"><span class="pre">read</span></code> is deprecated; <code class="docutils literal notranslate"><span class="pre">IFS</span></code>
will be ignored in the future (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4156">#4156</a>). Use the <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--delimiter</span></code>
option instead.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-process-exit</span></code> switch will be removed in future
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4700">#4700</a>). Use the <code class="docutils literal notranslate"><span class="pre">fish_exit</span></code> event instead:
<code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-event</span> <span class="pre">fish_exit</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$_</span></code> is deprecated and will removed in the future (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/813">#813</a>). Use
<code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">current-command</span></code> in a command substitution instead.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">^</span></code> as a redirection deprecated and will be removed in the future.
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4394">#4394</a>). Use <code class="docutils literal notranslate"><span class="pre">2&gt;</span></code> to redirect stderr. This is controlled by the
<code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code> feature flag.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">?</span></code> as a glob (wildcard) is deprecated and will be removed in the
future (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4520">#4520</a>). This is controlled by the <code class="docutils literal notranslate"><span class="pre">qmark-noglob</span></code> feature
flag.</p></li>
</ul>
</section>
<section id="notable-fixes-and-improvements">
<h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements" title="Link to this heading">¶</a></h3>
</section>
<section id="syntax-changes-and-new-commands-2">
<span id="id112"></span><h3>Syntax changes and new commands<a class="headerlink" href="#syntax-changes-and-new-commands-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish now supports <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> (like <code class="docutils literal notranslate"><span class="pre">and</span></code>), <code class="docutils literal notranslate"><span class="pre">||</span></code> (like <code class="docutils literal notranslate"><span class="pre">or</span></code>), and
<code class="docutils literal notranslate"><span class="pre">!</span></code> (like <code class="docutils literal notranslate"><span class="pre">not</span></code>), for better migration from POSIX-compliant
shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4620">#4620</a>).</p></li>
<li><p>Variables may be used as commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/154">#154</a>).</p></li>
<li><p>fish may be started in private mode via <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--private</span></code>. Private
mode fish sessions do not have access to the history file and any
commands evaluated in private mode are not persisted for future
sessions. A session variable <code class="docutils literal notranslate"><span class="pre">$fish_private_mode</span></code> can be queried to
detect private mode and adjust the behavior of scripts accordingly to
respect the user’s wish for privacy.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">wait</span></code> command for waiting on backgrounded processes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4498">#4498</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> is now a builtin rather than a wrapper around <code class="docutils literal notranslate"><span class="pre">bc</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3157">#3157</a>). Floating point computations is now used by default, and can
be controlled with the new <code class="docutils literal notranslate"><span class="pre">--scale</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4478">#4478</a>).</p></li>
<li><p>Setting <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> no longer warns on non-existent directories,
allowing for a single $PATH to be shared across machines (eg via
dotfiles) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2969">#2969</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">while</span></code> sets <code class="docutils literal notranslate"><span class="pre">$status</span></code> to a non-zero value if the loop is not
executed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4982">#4982</a>).</p></li>
<li><p>Command substitution output is now limited to 10 MB by default,
controlled by the <code class="docutils literal notranslate"><span class="pre">fish_read_limit</span></code> variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3822">#3822</a>). Notably, this
is larger than most operating systems’ argument size limit, so trying
to pass argument lists this size to external commands has never
worked.</p></li>
<li><p>The machine hostname, where available, is now exposed as the
<code class="docutils literal notranslate"><span class="pre">$hostname</span></code> reserved variable. This removes the dependency on the
<code class="docutils literal notranslate"><span class="pre">hostname</span></code> executable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4422">#4422</a>).</p></li>
<li><p>Bare <code class="docutils literal notranslate"><span class="pre">bind</span></code> invocations in config.fish now work. The
<code class="docutils literal notranslate"><span class="pre">fish_user_key_bindings</span></code> function is no longer necessary, but will
still be executed if it exists (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5191">#5191</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_pid</span></code> and <code class="docutils literal notranslate"><span class="pre">$last_pid</span></code> are available as replacements for
<code class="docutils literal notranslate"><span class="pre">%self</span></code> and <code class="docutils literal notranslate"><span class="pre">%last</span></code>.</p></li>
</ul>
</section>
<section id="new-features-in-commands">
<h3>New features in commands<a class="headerlink" href="#new-features-in-commands" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">alias</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--save</span></code> option to save the generated function
immediately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4878">#4878</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--silent</span></code> option to ignore bind requests for
named keys not available under the current terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4188">#4188</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4431">#4431</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--keep-order</span></code> option to show the provided
or dynamically-generated argument list in the same order as
specified, rather than alphabetically (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/361">#361</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> prompts for confirmation if background jobs are running.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--save</span></code> option to automatically save the
edited function after successfully editing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4668">#4668</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--handlers</span></code> option to show functions
registered as event handlers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4694">#4694</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">search</span></code> supports globs for wildcard searching (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3136">#3136</a>) and
has a new <code class="docutils literal notranslate"><span class="pre">--reverse</span></code> option to show entries from oldest to newest
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4375">#4375</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> option to silence the output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--delimiter</span></code> option for splitting input into
arrays (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4256">#4256</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> writes directly to stdout if called without arguments
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4407">#4407</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> can now read individual lines into separate variables
without consuming the input in its entirety via the new <code class="docutils literal notranslate"><span class="pre">/--line</span></code>
option.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> has new <code class="docutils literal notranslate"><span class="pre">--append</span></code> and <code class="docutils literal notranslate"><span class="pre">--prepend</span></code> options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1326">#1326</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> with an empty pattern and <code class="docutils literal notranslate"><span class="pre">--entire</span></code> in glob mode
now matches everything instead of nothing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4971">#4971</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--no-empty</span></code> option to exclude
empty strings from the result (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4779">#4779</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> has new subcommands <code class="docutils literal notranslate"><span class="pre">split0</span></code> and <code class="docutils literal notranslate"><span class="pre">join0</span></code> for working
with NUL-delimited output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> no longer stops processing text after NUL characters
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4605">#4605</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">escape</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--style</span> <span class="pre">regex</span></code> option for escaping
strings to be matched literally in <code class="docutils literal notranslate"><span class="pre">string</span></code> regex operations.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> now supports floating point values in numeric comparisons.</p></li>
</ul>
</section>
<section id="interactive-improvements-2">
<span id="id113"></span><h3>Interactive improvements<a class="headerlink" href="#interactive-improvements-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A pipe at the end of a line now allows the job to continue on the
next line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1285">#1285</a>).</p></li>
<li><p>Italics and dim support out of the box on macOS for Terminal.app and
iTerm (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4436">#4436</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> tab completions no longer descend into the deepest unambiguous
path (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4649">#4649</a>).</p></li>
<li><p>Pager navigation has been improved. Most notably, moving down now
wraps around, moving up from the commandline now jumps to the last
element and moving right and left now reverse each other even when
wrapping around (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4680">#4680</a>).</p></li>
<li><p>Typing normal characters while the completion pager is active no
longer shows the search field. Instead it enters them into the
command line, and ends paging (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2249">#2249</a>).</p></li>
<li><p>A new input binding <code class="docutils literal notranslate"><span class="pre">pager-toggle-search</span></code> toggles the search field
in the completions pager on and off. By default, this is bound to
Ctrl-S.</p></li>
<li><p>Searching in the pager now does a full fuzzy search (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5213">#5213</a>).</p></li>
<li><p>The pager will now show the full command instead of just its last
line if the number of completions is large (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4702">#4702</a>).</p></li>
<li><p>Abbreviations can be tab-completed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3233">#3233</a>).</p></li>
<li><p>Tildes in file names are now properly escaped in completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2274">#2274</a>).</p></li>
<li><p>Wrapping completions (from <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--wraps</span></code> or
<code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--wraps</span></code>) can now inject arguments. For example,
<code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">gco</span> <span class="pre">--wraps</span> <span class="pre">'git</span> <span class="pre">checkout'</span></code> now works properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1976">#1976</a>).
The <code class="docutils literal notranslate"><span class="pre">alias</span></code> function has been updated to respect this behavior.</p></li>
<li><p>Path completions now support expansions, meaning expressions like
<code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">~/&lt;TAB&gt;</span></code> now provides file suggestions just like any other
relative or absolute path. (This includes support for other
expansions, too.)</p></li>
<li><p>Autosuggestions try to avoid arguments that are already present in
the command line.</p></li>
<li><p>Notifications about crashed processes are now always shown, even in
command substitutions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4962">#4962</a>).</p></li>
<li><p>The screen is no longer reset after a BEL, fixing graphical glitches
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3693">#3693</a>).</p></li>
<li><p>vi-mode now supports ‘;’ and ‘,’ motions. This introduces new
{forward,backward}-jump-till and repeat-jump{,-reverse} bind
functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5140">#5140</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">*y</span></code> vi-mode binding now works (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5100">#5100</a>).</p></li>
<li><p>True color is now enabled in neovim by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2792">#2792</a>).</p></li>
<li><p>Terminal size variables (<code class="docutils literal notranslate"><span class="pre">$COLUMNS</span></code>/<code class="docutils literal notranslate"><span class="pre">$LINES</span></code>) are now updated
before <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> is called, allowing the prompt to react
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/904">#904</a>).</p></li>
<li><p>Multi-line prompts no longer repeat when the terminal is resized
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2320">#2320</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xclip</span></code> support has been added to the clipboard integration
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5020">#5020</a>).</p></li>
<li><p>The Alt-P keybinding paginates the last command if the command line
is empty.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$cmd_duration</span></code> is no longer reset when no command is executed
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5011">#5011</a>).</p></li>
<li><p>Deleting a one-character word no longer erases the next word as well
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4747">#4747</a>).</p></li>
<li><p>Token history search (Alt-Up) omits duplicate entries (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4795">#4795</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_escape_delay_ms</span></code> timeout, allowing the use of the escape
key both on its own and as part of a control sequence, was applied to
all control characters; this has been reduced to just the escape key.</p></li>
<li><p>Completing a function shows the description properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5206">#5206</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> can now be used to set the commandline for the next command, restoring a behavior in 3.4.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8807">#8807</a>).</p></li>
<li><p>Added completions for</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">ansible</span></code>, including <code class="docutils literal notranslate"><span class="pre">ansible-galaxy</span></code>, <code class="docutils literal notranslate"><span class="pre">ansible-playbook</span></code>
and <code class="docutils literal notranslate"><span class="pre">ansible-vault</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4697">#4697</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bb-power</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4800">#4800</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4472">#4472</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bower</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">clang</span></code> and <code class="docutils literal notranslate"><span class="pre">clang++</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4174">#4174</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">conda</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4837">#4837</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">configure</span></code> (for autoconf-generated files only)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">curl</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">doas</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5196">#5196</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ebuild</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4911">#4911</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">emaint</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4758">#4758</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eopkg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4600">#4600</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exercism</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4495">#4495</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hjson</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hugo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4529">#4529</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">j</span></code> (from autojump <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4344">#4344</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jbake</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4814">#4814</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jhipster</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4472">#4472</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kitty</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kldload</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kldunload</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">makensis</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5242">#5242</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">meson</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mkdocs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4906">#4906</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ngrok</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4642">#4642</a>)</p></li>
<li><p>OpenBSD’s <code class="docutils literal notranslate"><span class="pre">pkg_add</span></code>, <code class="docutils literal notranslate"><span class="pre">pkg_delete</span></code>, <code class="docutils literal notranslate"><span class="pre">pkg_info</span></code>, <code class="docutils literal notranslate"><span class="pre">pfctl</span></code>,
<code class="docutils literal notranslate"><span class="pre">rcctl</span></code>, <code class="docutils literal notranslate"><span class="pre">signify</span></code>, and <code class="docutils literal notranslate"><span class="pre">vmctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4584">#4584</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">openocd</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">optipng</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">opkg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5168">#5168</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pandoc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2937">#2937</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">port</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4737">#4737</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">powerpill</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4800">#4800</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pstack</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5135">#5135</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">serve</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5026">#5026</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ttx</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">unzip</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">virsh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5113">#5113</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xclip</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5126">#5126</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xsv</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zfs</span></code> and <code class="docutils literal notranslate"><span class="pre">zpool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4608">#4608</a>)</p></li>
</ul>
</li>
<li><p>Lots of improvements to completions (especially <code class="docutils literal notranslate"><span class="pre">darcs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5112">#5112</a>),
<code class="docutils literal notranslate"><span class="pre">git</span></code>, <code class="docutils literal notranslate"><span class="pre">hg</span></code> and <code class="docutils literal notranslate"><span class="pre">sudo</span></code>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">yarn</span></code> and <code class="docutils literal notranslate"><span class="pre">npm</span></code> now require the
<code class="docutils literal notranslate"><span class="pre">all-the-package-names</span></code> NPM package for full functionality.</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">bower</span></code> and <code class="docutils literal notranslate"><span class="pre">yarn</span></code> now require the <code class="docutils literal notranslate"><span class="pre">jq</span></code> utility
for full functionality.</p></li>
<li><p>Improved French translations.</p></li>
</ul>
</section>
<section id="other-fixes-and-improvements">
<h3>Other fixes and improvements<a class="headerlink" href="#other-fixes-and-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Significant performance improvements to <code class="docutils literal notranslate"><span class="pre">abbr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4048">#4048</a>), setting
variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4200">#4200</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4341">#4341</a>), executing functions, globs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4579">#4579</a>),
<code class="docutils literal notranslate"><span class="pre">string</span></code> reading from standard input (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4610">#4610</a>), and slicing history
(in particular, <code class="docutils literal notranslate"><span class="pre">$history[1]</span></code> for the last executed command).</p></li>
<li><p>Fish’s internal wcwidth function has been updated to deal with newer
Unicode, and the width of some characters can be configured via the
<code class="docutils literal notranslate"><span class="pre">fish_ambiguous_width</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5149">#5149</a>) and <code class="docutils literal notranslate"><span class="pre">fish_emoji_width</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2652">#2652</a>)
variables. Alternatively, a new build-time option INTERNAL_WCWIDTH
can be used to use the system’s wcwidth instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4816">#4816</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> correctly supports <code class="docutils literal notranslate"><span class="pre">-d</span></code> as the short form of
<code class="docutils literal notranslate"><span class="pre">--description</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5105">#5105</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> is now parsed like macOS’ bash <code class="docutils literal notranslate"><span class="pre">path_helper</span></code>, fixing
$PATH order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4336">#4336</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4852">#4852</a>) on macOS.</p></li>
<li><p>Using a read-only variable in a <code class="docutils literal notranslate"><span class="pre">for</span></code> loop produces an error,
rather than silently producing incorrect results (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4342">#4342</a>).</p></li>
<li><p>The universal variables filename no longer contains the hostname or
MAC address. It is now at the fixed location
<code class="docutils literal notranslate"><span class="pre">.config/fish/fish_variables</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1912">#1912</a>).</p></li>
<li><p>Exported variables in the global or universal scope no longer have
their exported status affected by local variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2611">#2611</a>).</p></li>
<li><p>Major rework of terminal and job handling to eliminate bugs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3805">#3805</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3952">#3952</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4178">#4178</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4235">#4235</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4238">#4238</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4540">#4540</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4929">#4929</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5210">#5210</a>).</p></li>
<li><p>Improvements to the manual page completion generator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2937">#2937</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4313">#4313</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">suspend</span> <span class="pre">--force</span></code> now works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4672">#4672</a>).</p></li>
<li><p>Pressing Ctrl-C while running a script now reliably terminates fish
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5253">#5253</a>).</p></li>
</ul>
</section>
<section id="for-distributors-and-developers-2">
<span id="id114"></span><h3>For distributors and developers<a class="headerlink" href="#for-distributors-and-developers-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish ships with a new build system based on CMake. CMake 3.2 is the
minimum required version. Although the autotools-based Makefile and
the Xcode project are still shipped with this release, they will be
removed in the near future. All distributors and developers are
encouraged to migrate to the CMake build.</p></li>
<li><p>Build scripts for most platforms no longer require bash, using the
standard sh instead.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">hostname</span></code> command is no longer required for fish to operate.</p></li>
</ul>
<p>–</p>
</section>
</section>
<section id="fish-2-7-1-released-december-23-2017">
<h2>fish 2.7.1 (released December 23, 2017)<a class="headerlink" href="#fish-2-7-1-released-december-23-2017" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes an issue where iTerm 2 on macOS would display
a warning about paste bracketing being left on when starting a new fish
session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4521">#4521</a>).</p>
<p>If you are upgrading from version 2.6.0 or before, please also review
the release notes for 2.7.0 and 2.7b1 (included below).</p>
<p>–</p>
</section>
<section id="fish-2-7-0-released-november-23-2017">
<h2>fish 2.7.0 (released November 23, 2017)<a class="headerlink" href="#fish-2-7-0-released-november-23-2017" title="Link to this heading">¶</a></h2>
<p>There are no major changes between 2.7b1 and 2.7.0. If you are upgrading
from version 2.6.0 or before, please also review the release notes for
2.7b1 (included below).</p>
<p>Xcode builds and macOS packages could not be produced with 2.7b1, but
this is fixed in 2.7.0.</p>
<p>–</p>
</section>
<section id="fish-2-7b1-released-october-31-2017">
<h2>fish 2.7b1 (released October 31, 2017)<a class="headerlink" href="#fish-2-7b1-released-october-31-2017" title="Link to this heading">¶</a></h2>
<section id="notable-improvements">
<h3>Notable improvements<a class="headerlink" href="#notable-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">cdh</span></code> (change directory using recent history) command
provides a more friendly alternative to prevd/nextd and pushd/popd
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2847">#2847</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">argparse</span></code> command is available to allow fish script to parse
arguments with the same behavior as builtin commands. This also
includes the <code class="docutils literal notranslate"><span class="pre">fish_opt</span></code> helper command. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4190">#4190</a>).</p></li>
<li><p>Invalid array indexes are now silently ignored (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/826">#826</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4127">#4127</a>).</p></li>
<li><p>Improvements to the debugging facility, including a prompt specific
to the debugger (<code class="docutils literal notranslate"><span class="pre">fish_breakpoint_prompt</span></code>) and a
<code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">is-breakpoint</span></code> subcommand (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1310">#1310</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> supports new <code class="docutils literal notranslate"><span class="pre">lower</span></code> and <code class="docutils literal notranslate"><span class="pre">upper</span></code> subcommands, for
altering the case of strings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4080">#4080</a>). The case changing is not
locale-aware yet.- <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">escape</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--style=xxx</span></code> flag
where <code class="docutils literal notranslate"><span class="pre">xxx</span></code> can be <code class="docutils literal notranslate"><span class="pre">script</span></code>, <code class="docutils literal notranslate"><span class="pre">var</span></code>, or <code class="docutils literal notranslate"><span class="pre">url</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4150">#4150</a>), and can
be reversed with <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">unescape</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3543">#3543</a>).</p></li>
<li><p>History can now be split into sessions with the <code class="docutils literal notranslate"><span class="pre">fish_history</span></code>
variable, or not saved to disk at all (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/102">#102</a>).</p></li>
<li><p>Read history is now controlled by the <code class="docutils literal notranslate"><span class="pre">fish_history</span></code> variable
rather than the <code class="docutils literal notranslate"><span class="pre">--mode-name</span></code> flag (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1504">#1504</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code> now supports an <code class="docutils literal notranslate"><span class="pre">--all</span></code> flag to report all directories
with the command. <code class="docutils literal notranslate"><span class="pre">which</span></code> is no longer a runtime dependency
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2778">#2778</a>).</p></li>
<li><p>fish can run commands before starting an interactive session using
the new <code class="docutils literal notranslate"><span class="pre">--init-command</span></code>/<code class="docutils literal notranslate"><span class="pre">-C</span></code> options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4164">#4164</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--show</span></code> option to show lots of information about
variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4265">#4265</a>).</p></li>
</ul>
</section>
<section id="other-significant-changes">
<h3>Other significant changes<a class="headerlink" href="#other-significant-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code> and <code class="docutils literal notranslate"><span class="pre">LINES</span></code> environment variables are now correctly
set the first time <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> is run (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4141">#4141</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code>’s <code class="docutils literal notranslate"><span class="pre">--no-files</span></code> option works as intended (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/112">#112</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">-h</span></code> now correctly echoes <code class="docutils literal notranslate"><span class="pre">-h</span></code> in line with other shells
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4120">#4120</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">export</span></code> compatibility function now returns zero on success,
rather than always returning 1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4435">#4435</a>).</p></li>
<li><p>Stop converting empty elements in MANPATH to “.” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4158">#4158</a>). The
behavior being changed was introduced in fish 2.6.0.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">-h</span></code> and <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">--help</span></code> now return 1 rather than produce
command help output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4189">#4189</a>).</p></li>
<li><p>An attempt to <code class="docutils literal notranslate"><span class="pre">read</span></code> which stops because too much data is available
still defines the variables given as parameters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4180">#4180</a>).</p></li>
<li><p>A regression in fish 2.4.0 which prevented <code class="docutils literal notranslate"><span class="pre">pushd</span> <span class="pre">+1</span></code> from working
has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4091">#4091</a>).</p></li>
<li><p>A regression in fish 2.6.0 where multiple <code class="docutils literal notranslate"><span class="pre">read</span></code> commands in
non-interactive scripts were broken has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4206">#4206</a>).</p></li>
<li><p>A regression in fish 2.6.0 involving universal variables with
side-effects at startup such as <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-U</span> <span class="pre">fish_escape_delay_ms</span> <span class="pre">10</span></code>
has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4196">#4196</a>).</p></li>
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">as</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4130">#4130</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cdh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2847">#2847</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dhcpd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4115">#4115</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ezjail-admin</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4324">#4324</a>)</p></li>
<li><p>Fabric’s <code class="docutils literal notranslate"><span class="pre">fab</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4153">#4153</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">grub-file</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4119">#4119</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">grub-install</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4119">#4119</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jest</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4142">#4142</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kdeconnect-cli</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">magneto</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4043">#4043</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4108">#4108</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdadm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4198">#4198</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">passwd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4209">#4209</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pip</span></code> and <code class="docutils literal notranslate"><span class="pre">pipenv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4448">#4448</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">s3cmd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4332">#4332</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sbt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4347">#4347</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">snap</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4215">#4215</a>)</p></li>
<li><p>Sublime Text 3’s <code class="docutils literal notranslate"><span class="pre">subl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4277">#4277</a>)</p></li>
</ul>
</li>
<li><p>Lots of improvements to completions.</p></li>
<li><p>Updated Chinese and French translations.</p></li>
<li><p>Improved completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">apt</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4061">#4061</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">composer</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4295">#4295</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eopkg</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">flatpak</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4456">#4456</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4117">#4117</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4147">#4147</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4329">#4329</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4368">#4368</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gphoto2</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">killall</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4052">#4052</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ln</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">npm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4241">#4241</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4377">#4377</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tail</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xdg-mime</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4333">#4333</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zypper</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4325">#4325</a>)</p></li>
</ul>
</li>
</ul>
</section>
</section>
<section id="fish-2-6-0-released-june-3-2017">
<h2>fish 2.6.0 (released June 3, 2017)<a class="headerlink" href="#fish-2-6-0-released-june-3-2017" title="Link to this heading">¶</a></h2>
<p>Since the beta release of fish 2.6b1, fish version 2.6.0 contains a
number of minor fixes, new completions for <code class="docutils literal notranslate"><span class="pre">magneto</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4043">#4043</a>), and
improvements to the documentation.</p>
<section id="known-issues-1">
<span id="id115"></span><h3>Known issues<a class="headerlink" href="#known-issues-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Apple macOS Sierra 10.12.5 introduced a problem with launching web
browsers from other programs using AppleScript. This affects the fish
Web configuration (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>); users on these platforms will
need to manually open the address displayed in the terminal, such as
by copying and pasting it into a browser. This problem will be fixed
with macOS 10.12.6.</p></li>
</ul>
<p>If you are upgrading from version 2.5.0 or before, please also review
the release notes for 2.6b1 (included below).</p>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-6b1-released-may-14-2017">
<h2>fish 2.6b1 (released May 14, 2017)<a class="headerlink" href="#fish-2-6b1-released-may-14-2017" title="Link to this heading">¶</a></h2>
<section id="notable-fixes-and-improvements-1">
<span id="id116"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Jobs running in the background can now be removed from the list of
jobs with the new <code class="docutils literal notranslate"><span class="pre">disown</span></code> builtin, which behaves like the same
command in other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2810">#2810</a>).</p></li>
<li><p>Command substitutions now have access to the terminal, like in other
shells. This allows tools like <code class="docutils literal notranslate"><span class="pre">fzf</span></code> to work properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1362">#1362</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3922">#3922</a>).</p></li>
<li><p>In cases where the operating system does not report the size of the
terminal, the <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code> and <code class="docutils literal notranslate"><span class="pre">LINES</span></code> environment variables are
used; if they are unset, a default of 80x24 is assumed.</p></li>
<li><p>New French (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3772">#3772</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3788">#3788</a>) and improved German (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3834">#3834</a>) translations.</p></li>
<li><p>fish no longer depends on the <code class="docutils literal notranslate"><span class="pre">which</span></code> external command.</p></li>
</ul>
</section>
<section id="other-significant-changes-1">
<span id="id117"></span><h3>Other significant changes<a class="headerlink" href="#other-significant-changes-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Performance improvements in launching processes, including major
reductions in signal blocking. Although this has been heavily tested,
it may cause problems in some circumstances; set the
<code class="docutils literal notranslate"><span class="pre">FISH_NO_SIGNAL_BLOCK</span></code> variable to 0 in your fish configuration
file to return to the old behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2007">#2007</a>).</p></li>
<li><p>Performance improvements in prompts and functions that set lots of
colours (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3793">#3793</a>).</p></li>
<li><p>The Delete key no longer deletes backwards (a regression in 2.5.0).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--details</span></code> option, which identifies
where the function was loaded from (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3295">#3295</a>), and a
<code class="docutils literal notranslate"><span class="pre">--details</span> <span class="pre">--verbose</span></code> option which includes the function
description (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/597">#597</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> will read up to 10 MiB by default, leaving the target
variable empty and exiting with status 122 if the line is too long.
You can set a different limit with the <code class="docutils literal notranslate"><span class="pre">FISH_READ_BYTE_LIMIT</span></code>
variable.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--silent</span></code> option to hide the characters
typed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/838">#838</a>), for when reading sensitive data from the terminal.
<code class="docutils literal notranslate"><span class="pre">read</span></code> also now accepts simple strings for the prompt (rather than
scripts) with the new <code class="docutils literal notranslate"><span class="pre">-P</span></code> and <code class="docutils literal notranslate"><span class="pre">--prompt-str</span></code> options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/802">#802</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">export</span></code> and <code class="docutils literal notranslate"><span class="pre">setenv</span></code> now understand colon-separated <code class="docutils literal notranslate"><span class="pre">PATH</span></code>,
<code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> and <code class="docutils literal notranslate"><span class="pre">MANPATH</span></code> variables.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">setenv</span></code> is no longer a simple alias for <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-gx</span></code> and will
complain, just like the csh version, if given more than one value
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4103">#4103</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--list-modes</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3872">#3872</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bg</span></code> will check all of its arguments before backgrounding any jobs;
any invalid arguments will cause a failure, but non-existent (eg
recently exited) jobs are ignored (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3909">#3909</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> warns if the function being edited has not been modified
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3961">#3961</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> correctly outputs “long long” integers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3352">#3352</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">current-function</span></code> subcommand to print
the current function name (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1743">#1743</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">repeat</span></code> subcommand (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3864">#3864</a>).
<code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--entire</span></code> option to emit the
entire line matched by a pattern (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3957">#3957</a>). <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span></code> supports
a new <code class="docutils literal notranslate"><span class="pre">--filter</span></code> option to only emit lines which underwent a
replacement (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3348">#3348</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> supports the <code class="docutils literal notranslate"><span class="pre">-k</span></code> option to test for sticky bits (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/733">#733</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">umask</span></code> understands symbolic modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/738">#738</a>).</p></li>
<li><p>Empty components in the <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code>, <code class="docutils literal notranslate"><span class="pre">MANPATH</span></code> and <code class="docutils literal notranslate"><span class="pre">PATH</span></code>
variables are now converted to “.” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2106">#2106</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3914">#3914</a>).</p></li>
<li><p>New versions of ncurses (6.0 and up) wipe terminal scrollback buffers
with certain commands; the <code class="docutils literal notranslate"><span class="pre">C-l</span></code> binding tries to avoid this
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2855">#2855</a>).</p></li>
<li><p>Some systems’ <code class="docutils literal notranslate"><span class="pre">su</span></code> implementations do not set the <code class="docutils literal notranslate"><span class="pre">USER</span></code>
environment variable; it is now reset for root users (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3916">#3916</a>).</p></li>
<li><p>Under terminals which support it, bracketed paste is enabled,
escaping problematic characters for security and convenience (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3871">#3871</a>).
Inside single quotes (<code class="docutils literal notranslate"><span class="pre">'</span></code>), single quotes and backslashes in pasted
text are escaped (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/967">#967</a>). The <code class="docutils literal notranslate"><span class="pre">fish_clipboard_paste</span></code> function (bound
to <code class="docutils literal notranslate"><span class="pre">C-v</span></code> by default) is still the recommended pasting method where
possible as it includes this functionality and more.</p></li>
<li><p>Processes in pipelines are no longer signalled as soon as one command
in the pipeline has completed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1926">#1926</a>). This behaviour matches other
shells mre closely.</p></li>
<li><p>All functions requiring Python work with whichever version of Python
is installed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3970">#3970</a>). Python 3 is preferred, but Python 2.6 remains
the minimum version required.</p></li>
<li><p>The color of the cancellation character can be controlled by the
<code class="docutils literal notranslate"><span class="pre">fish_color_cancel</span></code> variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3963">#3963</a>).</p></li>
<li><p>Added completions for:</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">caddy</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4008">#4008</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">castnow</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3744">#3744</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">climate</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3760">#3760</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">flatpak</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gradle</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3859">#3859</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">gsettings</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4001">#4001</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">helm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3829">#3829</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">i3-msg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3787">#3787</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ipset</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3924">#3924</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jq</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3804">#3804</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">light</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3752">#3752</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">minikube</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3778">#3778</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mocha</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3828">#3828</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mkdosfs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4017">#4017</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3773">#3773</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">setsid</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3791">#3791</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">terraform</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3960">#3960</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">usermod</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3775">#3775</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xinput</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">yarn</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3816">#3816</a>)</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">adb</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3853">#3853</a>), <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3771">#3771</a>), <code class="docutils literal notranslate"><span class="pre">bzr</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3769">#3769</a>), <code class="docutils literal notranslate"><span class="pre">dconf</span></code>, <code class="docutils literal notranslate"><span class="pre">git</span></code> (including <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3743">#3743</a>), <code class="docutils literal notranslate"><span class="pre">grep</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3789">#3789</a>),
<code class="docutils literal notranslate"><span class="pre">go</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3789">#3789</a>), <code class="docutils literal notranslate"><span class="pre">help</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3789">#3789</a>), <code class="docutils literal notranslate"><span class="pre">hg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3975">#3975</a>), <code class="docutils literal notranslate"><span class="pre">htop</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3789">#3789</a>),
<code class="docutils literal notranslate"><span class="pre">killall</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3996">#3996</a>), <code class="docutils literal notranslate"><span class="pre">lua</span></code>, <code class="docutils literal notranslate"><span class="pre">man</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3762">#3762</a>), <code class="docutils literal notranslate"><span class="pre">mount</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3764">#3764</a> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3841">#3841</a>), <code class="docutils literal notranslate"><span class="pre">obnam</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3924">#3924</a>), <code class="docutils literal notranslate"><span class="pre">perl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3856">#3856</a>), <code class="docutils literal notranslate"><span class="pre">portmaster</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3950">#3950</a>),
<code class="docutils literal notranslate"><span class="pre">python</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3840">#3840</a>), <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3781">#3781</a>), <code class="docutils literal notranslate"><span class="pre">scp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3781">#3781</a>), <code class="docutils literal notranslate"><span class="pre">systemctl</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3757">#3757</a>) and <code class="docutils literal notranslate"><span class="pre">udisks</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3764">#3764</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-5-0-released-february-3-2017">
<h2>fish 2.5.0 (released February 3, 2017)<a class="headerlink" href="#fish-2-5-0-released-february-3-2017" title="Link to this heading">¶</a></h2>
<p>There are no major changes between 2.5b1 and 2.5.0. If you are upgrading
from version 2.4.0 or before, please also review the release notes for
2.5b1 (included below).</p>
<section id="notable-fixes-and-improvements-2">
<span id="id118"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The Home, End, Insert, Delete, Page Up and Page Down keys work in
Vi-style key bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3731">#3731</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-5b1-released-january-14-2017">
<h2>fish 2.5b1 (released January 14, 2017)<a class="headerlink" href="#fish-2-5b1-released-january-14-2017" title="Link to this heading">¶</a></h2>
<section id="platform-changes">
<h3>Platform Changes<a class="headerlink" href="#platform-changes" title="Link to this heading">¶</a></h3>
<p>Starting with version 2.5, fish requires a more up-to-date version of
C++, specifically C++11 (from 2011). This affects some older platforms:</p>
<section id="linux">
<h4>Linux<a class="headerlink" href="#linux" title="Link to this heading">¶</a></h4>
<p>For users building from source, GCC’s g++ 4.8 or later, or LLVM’s clang
3.3 or later, are known to work. Older platforms may require a newer
compiler installed.</p>
<p>Unfortunately, because of the complexity of the toolchain, binary
packages are no longer published by the fish-shell developers for the
following platforms:</p>
<ul class="simple">
<li><p>Red Hat Enterprise Linux and CentOS 5 &amp; 6 for 64-bit builds</p></li>
<li><p>Ubuntu 12.04 (EoLTS April 2017)</p></li>
<li><p>Debian 7 (EoLTS May 2018)</p></li>
</ul>
<p>Installing newer version of fish on these systems will require building
from source.</p>
</section>
<section id="os-x-snowleopard">
<h4>OS X SnowLeopard<a class="headerlink" href="#os-x-snowleopard" title="Link to this heading">¶</a></h4>
<p>Starting with version 2.5, fish requires a C++11 standard library on OS
X 10.6 (“SnowLeopard”). If this library is not installed, you will see
this error: <code class="docutils literal notranslate"><span class="pre">dyld:</span> <span class="pre">Library</span> <span class="pre">not</span> <span class="pre">loaded:</span> <span class="pre">/usr/lib/libc++.1.dylib</span></code></p>
<p>MacPorts is the easiest way to obtain this library. After installing the
SnowLeopard MacPorts release from the install page, run:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">sudo</span><span class="w"> </span><span class="no">port</span><span class="w"> </span><span class="no">-v</span><span class="w"> </span><span class="no">install</span><span class="w"> </span><span class="no">libcxx</span>
</pre></div>
</div>
<p>Now fish should launch successfully. (Please open an issue if it does
not.)</p>
<p>This is only necessary on 10.6. OS X 10.7 and later include the required
library by default.</p>
</section>
</section>
<section id="other-significant-changes-2">
<span id="id119"></span><h3>Other significant changes<a class="headerlink" href="#other-significant-changes-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Attempting to exit with running processes in the background produces
a warning, then signals them to terminate if a second attempt to exit
is made. This brings the behaviour for running background processes
into line with stopped processes. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3497">#3497</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">random</span></code> can now have start, stop and step values specified, or the
new <code class="docutils literal notranslate"><span class="pre">choice</span></code> subcommand can be used to pick an argument from a list
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3619">#3619</a>).</p></li>
<li><p>A new key bindings preset, <code class="docutils literal notranslate"><span class="pre">fish_hybrid_key_bindings</span></code>, including
all the Emacs-style and Vi-style bindings, which behaves like
<code class="docutils literal notranslate"><span class="pre">fish_vi_key_bindings</span></code> in fish 2.3.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3556">#3556</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">function</span></code> now returns an error when called with invalid options,
rather than defining the function anyway (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3574">#3574</a>). This was a
regression present in fish 2.3 and 2.4.0.</p></li>
<li><p>fish no longer prints a warning when it identifies a running instance
of an old version (2.1.0 and earlier). Changes to universal variables
may not propagate between these old versions and 2.5b1.</p></li>
<li><p>Improved compatibility with Android (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3585">#3585</a>), MSYS/mingw (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2360">#2360</a>), and
Solaris (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3456">#3456</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3340">#3340</a>).</p></li>
<li><p>Like other shells, the <code class="docutils literal notranslate"><span class="pre">test</span></code> built-in now returns an error for
numeric operations on invalid integers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3346">#3346</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3581">#3581</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> no longer recognises <code class="docutils literal notranslate"><span class="pre">--authoritative</span></code> and
<code class="docutils literal notranslate"><span class="pre">--unauthoritative</span></code> options, and they are marked as obsolete.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> accepts subcommands, and should be used like
<code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">is-interactive</span></code>. The old options continue to be supported
for the foreseeable future (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3526">#3526</a>), although only one subcommand or
option can be specified at a time.</p></li>
<li><p>Selection mode (used with “begin-selection”) no longer selects a
character the cursor does not move over (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3684">#3684</a>).</p></li>
<li><p>List indexes are handled better, and a bit more liberally in some
cases (<code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">$PATH[1</span> <span class="pre">..</span> <span class="pre">3]</span></code> is now valid) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3579">#3579</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_mode_prompt</span></code> function is now simply a stub around
<code class="docutils literal notranslate"><span class="pre">fish_default_mode_prompt</span></code>, which allows the mode prompt to be
included more easily in customised prompt functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3641">#3641</a>).</p></li>
</ul>
</section>
<section id="notable-fixes-and-improvements-3">
<span id="id120"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-3" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">alias</span></code>, run without options or arguments, lists all defined
aliases, and aliases now include a description in the function
signature that identifies them.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> accepts empty strings as descriptions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3557">#3557</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code> accepts <code class="docutils literal notranslate"><span class="pre">-q</span></code>/<code class="docutils literal notranslate"><span class="pre">--quiet</span></code> in combination with
<code class="docutils literal notranslate"><span class="pre">--search</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3591">#3591</a>), providing a simple way of checking whether a
command exists in scripts.</p></li>
<li><p>Abbreviations can now be renamed with
<code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--rename</span> <span class="pre">OLD_KEY</span> <span class="pre">NEW_KEY</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3610">#3610</a>).</p></li>
<li><p>The command synopses printed by <code class="docutils literal notranslate"><span class="pre">--help</span></code> options work better with
copying and pasting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2673">#2673</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> launches the browser specified by the
<code class="docutils literal notranslate"><span class="pre">$fish_help_browser</span> <span class="pre">variable</span></code> if it is set (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3131">#3131</a>).</p></li>
<li><p>History merging could lose items under certain circumstances and is
now fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3496">#3496</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">$status</span></code> variable is now set to 123 when a syntactically
invalid command is entered (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3616">#3616</a>).</p></li>
<li><p>Exiting fish now signals all background processes to terminate, not
just stopped jobs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3497">#3497</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">prompt_hostname</span></code> function which prints a hostname suitable
for use in prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3482">#3482</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">__fish_man_page</span></code> function (bound to Alt-h by default) now
tries to recognize subcommands (e.g. <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code> will now open the
“git-add” man page) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3678">#3678</a>).</p></li>
<li><p>A new function <code class="docutils literal notranslate"><span class="pre">edit_command_buffer</span></code> (bound to Alt-e &amp; Alt-v by
default) to edit the command buffer in an external editor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1215">#1215</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3627">#3627</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> now supports italics (<code class="docutils literal notranslate"><span class="pre">--italics</span></code>), dim (<code class="docutils literal notranslate"><span class="pre">--dim</span></code>)
and reverse (<code class="docutils literal notranslate"><span class="pre">--reverse</span></code>) modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3650">#3650</a>).</p></li>
<li><p>Filesystems with very slow locking (eg incorrectly-configured NFS)
will no longer slow fish down (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/685">#685</a>).</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3695">#3695</a>), <code class="docutils literal notranslate"><span class="pre">fusermount</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3642">#3642</a>),
<code class="docutils literal notranslate"><span class="pre">make</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3628">#3628</a>), <code class="docutils literal notranslate"><span class="pre">netctl-auto</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>), <code class="docutils literal notranslate"><span class="pre">nmcli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3648">#3648</a>),
<code class="docutils literal notranslate"><span class="pre">pygmentize</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>), and <code class="docutils literal notranslate"><span class="pre">tar</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3719">#3719</a>).</p></li>
<li><p>Added completions for:</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">VBoxHeadless</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">VBoxSDL</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">base64</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">caffeinate</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dconf</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3638">#3638</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dig</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3495">#3495</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dpkg-reconfigure</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3521">#3521</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3522">#3522</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">feh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">launchctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3682">#3682</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lxc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3554">#3554</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3564">#3564</a>),</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mddiagnose</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdfind</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdimport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdls</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mkvextract</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3492">#3492</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nvram</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">objdump</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sysbench</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3491">#3491</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tmutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-4-0-released-november-8-2016">
<h2>fish 2.4.0 (released November 8, 2016)<a class="headerlink" href="#fish-2-4-0-released-november-8-2016" title="Link to this heading">¶</a></h2>
<p>There are no major changes between 2.4b1 and 2.4.0.</p>
<section id="notable-fixes-and-improvements-4">
<span id="id121"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-4" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The documentation is now generated properly and with the correct
version identifier.</p></li>
<li><p>Automatic cursor changes are now only enabled on the subset of XTerm
versions known to support them, resolving a problem where older
versions printed garbage to the terminal before and after every
prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3499">#3499</a>).</p></li>
<li><p>Improved the title set in Apple Terminal.app.</p></li>
<li><p>Added completions for <code class="docutils literal notranslate"><span class="pre">defaults</span></code> and improved completions for
<code class="docutils literal notranslate"><span class="pre">diskutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3478">#3478</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-4b1-released-october-18-2016">
<h2>fish 2.4b1 (released October 18, 2016)<a class="headerlink" href="#fish-2-4b1-released-october-18-2016" title="Link to this heading">¶</a></h2>
<section id="significant-changes">
<h3>Significant changes<a class="headerlink" href="#significant-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The clipboard integration has been revamped with explicit bindings.
The killring commands no longer copy from, or paste to, the X11
clipboard - use the new copy (<code class="docutils literal notranslate"><span class="pre">C-x</span></code>) and paste (<code class="docutils literal notranslate"><span class="pre">C-v</span></code>) bindings
instead. The clipboard is now available on OS X as well as systems
using X11 (e.g. Linux). (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3061">#3061</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span></code> uses subcommands (<code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span></code>) rather than options
(<code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--delete</span></code>) for its actions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3367">#3367</a>). You can no longer
specify multiple actions via flags (e.g.,
<code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--delete</span> <span class="pre">--save</span> <span class="pre">something</span></code>).</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">history</span></code> options have been added, including <code class="docutils literal notranslate"><span class="pre">--max=n</span></code> to
limit the number of history entries, <code class="docutils literal notranslate"><span class="pre">--show-time</span></code> option to show
timestamps (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3175">#3175</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3244">#3244</a>), and <code class="docutils literal notranslate"><span class="pre">--null</span></code> to null terminate history
entries in the search output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">search</span></code> is now case-insensitive by default (which also
affects <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3236">#3236</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">delete</span></code> now correctly handles multiline commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/31">#31</a>).</p></li>
<li><p>Vi-style bindings no longer include all of the default emacs-style
bindings; instead, they share some definitions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3068">#3068</a>).</p></li>
<li><p>If there is no locale set in the environment, various known system
configuration files will be checked for a default. If no locale can
be found, <code class="docutils literal notranslate"><span class="pre">en_US-UTF.8</span></code> will be used (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/277">#277</a>).</p></li>
<li><p>A number followed by a caret (e.g. <code class="docutils literal notranslate"><span class="pre">5^</span></code>) is no longer treated as a
redirection (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1873">#1873</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">$version</span></code> special variable can be overwritten, so that it can
be used for other purposes if required.</p></li>
</ul>
</section>
<section id="notable-fixes-and-improvements-5">
<span id="id122"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-5" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_realpath</span></code> builtin has been renamed to <code class="docutils literal notranslate"><span class="pre">realpath</span></code> and
made compatible with GNU <code class="docutils literal notranslate"><span class="pre">realpath</span></code> when run without arguments
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3400">#3400</a>). It is used only for systems without a <code class="docutils literal notranslate"><span class="pre">realpath</span></code> or
<code class="docutils literal notranslate"><span class="pre">grealpath</span></code> utility (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3374">#3374</a>).</p></li>
<li><p>Improved color handling on terminals/consoles with 8-16 colors,
particularly the use of bright named color (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3176">#3176</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3260">#3260</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> can now read from files given as arguments, rather
than just standard input (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3037">#3037</a>).</p></li>
<li><p>Fuzzy tab completions behave in a less surprising manner (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3090">#3090</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3211">#3211</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> should only print its header line once (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3127">#3127</a>).</p></li>
<li><p>Wildcards in redirections are highlighted appropriately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2789">#2789</a>).</p></li>
<li><p>Suggestions will be offered more often, like after removing
characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3069">#3069</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--merge</span></code> now correctly interleaves items in chronological
order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2312">#2312</a>).</p></li>
<li><p>Options for <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> have been aligned with the other binaries
- in particular, <code class="docutils literal notranslate"><span class="pre">-d</span></code> now means <code class="docutils literal notranslate"><span class="pre">--debug</span></code>. The <code class="docutils literal notranslate"><span class="pre">--dump</span></code> option
has been renamed to <code class="docutils literal notranslate"><span class="pre">--dump-parse-tree</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3191">#3191</a>).</p></li>
<li><p>The display of bindings in the Web-based configuration has been
greatly improved (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3325">#3325</a>), as has the rendering of prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2924">#2924</a>).</p></li>
<li><p>fish should no longer hang using 100% CPU in the C locale (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3214">#3214</a>).</p></li>
<li><p>A bug in FreeBSD 11 &amp; 12, Dragonfly BSD &amp; illumos prevented fish from
working correctly on these platforms under UTF-8 locales; fish now
avoids the buggy behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3050">#3050</a>).</p></li>
<li><p>Prompts which show git repository information (via
<code class="docutils literal notranslate"><span class="pre">__fish_git_prompt</span></code>) are faster in large repositories (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3294">#3294</a>) and
slow filesystems (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3083">#3083</a>).</p></li>
<li><p>fish 2.3.0 reintroduced a problem where the greeting was printed even
when using <code class="docutils literal notranslate"><span class="pre">read</span></code>; this has been corrected again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3261">#3261</a>).</p></li>
<li><p>Vi mode changes the cursor depending on the current mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3215">#3215</a>).</p></li>
<li><p>Command lines with escaped space characters at the end tab-complete
correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2447">#2447</a>).</p></li>
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">arcanist</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3256">#3256</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">connmanctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3419">#3419</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">figlet</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdbook</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ninja</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3415">#3415</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">p4</span></code>, the Perforce client (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3314">#3314</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pygmentize</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ranger</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
</ul>
</li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3297">#3297</a>), <code class="docutils literal notranslate"><span class="pre">abbr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3267">#3267</a>), <code class="docutils literal notranslate"><span class="pre">brew</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3309">#3309</a>), <code class="docutils literal notranslate"><span class="pre">chown</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3380">#3380</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3383">#3383</a>),<code class="docutils literal notranslate"><span class="pre">cygport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3392">#3392</a>), <code class="docutils literal notranslate"><span class="pre">git</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3274">#3274</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3226">#3226</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3225">#3225</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3094">#3094</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3087">#3087</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3035">#3035</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3021">#3021</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2982">#2982</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3230">#3230</a>),
<code class="docutils literal notranslate"><span class="pre">kill</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">pkill</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3200">#3200</a>), <code class="docutils literal notranslate"><span class="pre">screen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3271">#3271</a>), <code class="docutils literal notranslate"><span class="pre">wget</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3470">#3470</a>),
and <code class="docutils literal notranslate"><span class="pre">xz</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>).</p></li>
<li><p>Distributors, packagers and developers will notice that the build
process produces more succinct output by default; use <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">V=1</span></code> to
get verbose output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3248">#3248</a>).</p></li>
<li><p>Improved compatibility with minor platforms including musl (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2988">#2988</a>),
Cygwin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2993">#2993</a>), Android (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3441">#3441</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3442">#3442</a>), Haiku (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3322">#3322</a>) and Solaris .</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-3-1-released-july-3-2016">
<h2>fish 2.3.1 (released July 3, 2016)<a class="headerlink" href="#fish-2-3-1-released-july-3-2016" title="Link to this heading">¶</a></h2>
<p>This is a functionality and bugfix release. This release does not
contain all the changes to fish since the last release, but fixes a
number of issues directly affecting users at present and includes a
small number of new features.</p>
<section id="significant-changes-1">
<span id="id123"></span><h3>Significant changes<a class="headerlink" href="#significant-changes-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> binary for decoding interactive keypresses
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2991">#2991</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_mode_prompt</span></code> has been updated to reflect the changes in the
way the Vi input mode is set up (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3067">#3067</a>), making this more reliable.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span></code> can now properly be launched from the OS X app bundle
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3140">#3140</a>).</p></li>
</ul>
</section>
<section id="notable-fixes-and-improvements-6">
<span id="id124"></span><h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements-6" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Extra lines were sometimes inserted into the output under Windows
(Cygwin and Microsoft Windows Subsystem for Linux) due to TTY
timestamps not being updated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2859">#2859</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">string</span></code> builtin’s <code class="docutils literal notranslate"><span class="pre">match</span></code> mode now handles the combination
of <code class="docutils literal notranslate"><span class="pre">-rnv</span></code> (match, invert and count) correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3098">#3098</a>).</p></li>
<li><p>Improvements to TTY special character handling (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3064">#3064</a>), locale
handling (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3124">#3124</a>) and terminal environment variable handling (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3060">#3060</a>).</p></li>
<li><p>Work towards handling the terminal modes for external commands
launched from initialisation files (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2980">#2980</a>).</p></li>
<li><p>Ease the upgrade path from fish 2.2.0 and before by warning users to
restart fish if the <code class="docutils literal notranslate"><span class="pre">string</span></code> builtin is not available (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3057">#3057</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">-a</span></code> now syntax-colorizes function source output.</p></li>
<li><p>Added completions for <code class="docutils literal notranslate"><span class="pre">alsamixer</span></code>, <code class="docutils literal notranslate"><span class="pre">godoc</span></code>, <code class="docutils literal notranslate"><span class="pre">gofmt</span></code>,
<code class="docutils literal notranslate"><span class="pre">goimports</span></code>, <code class="docutils literal notranslate"><span class="pre">gorename</span></code>, <code class="docutils literal notranslate"><span class="pre">lscpu</span></code>, <code class="docutils literal notranslate"><span class="pre">mkdir</span></code>, <code class="docutils literal notranslate"><span class="pre">modinfo</span></code>,
<code class="docutils literal notranslate"><span class="pre">netctl-auto</span></code>, <code class="docutils literal notranslate"><span class="pre">poweroff</span></code>, <code class="docutils literal notranslate"><span class="pre">termite</span></code>, <code class="docutils literal notranslate"><span class="pre">udisksctl</span></code> and <code class="docutils literal notranslate"><span class="pre">xz</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3123">#3123</a>).</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3097">#3097</a>), <code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3102">#3102</a>),<code class="docutils literal notranslate"><span class="pre">git</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3114">#3114</a>), <code class="docutils literal notranslate"><span class="pre">npm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3158">#3158</a>), <code class="docutils literal notranslate"><span class="pre">string</span></code> and <code class="docutils literal notranslate"><span class="pre">suspend</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3154">#3154</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-3-0-released-may-20-2016">
<h2>fish 2.3.0 (released May 20, 2016)<a class="headerlink" href="#fish-2-3-0-released-may-20-2016" title="Link to this heading">¶</a></h2>
<p>There are no significant changes between 2.3.0 and 2.3b2.</p>
<section id="other-notable-fixes-and-improvements">
<h3>Other notable fixes and improvements<a class="headerlink" href="#other-notable-fixes-and-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span></code> now allows non-letter keys (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2996">#2996</a>).</p></li>
<li><p>Define a few extra colours on first start (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2987">#2987</a>).</p></li>
<li><p>Multiple documentation updates.</p></li>
<li><p>Added completions for rmmod (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3007">#3007</a>).</p></li>
<li><p>Improved completions for git (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2998">#2998</a>).</p></li>
</ul>
</section>
<section id="known-issues-2">
<span id="id125"></span><h3>Known issues<a class="headerlink" href="#known-issues-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Interactive commands started from fish configuration files or from
the <code class="docutils literal notranslate"><span class="pre">-c</span></code> option may, under certain circumstances, be started with
incorrect terminal modes and fail to behave as expected. A fix is
planned but requires further testing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2619">#2619</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-3b2-released-may-5-2016">
<h2>fish 2.3b2 (released May 5, 2016)<a class="headerlink" href="#fish-2-3b2-released-may-5-2016" title="Link to this heading">¶</a></h2>
<section id="significant-changes-2">
<span id="id126"></span><h3>Significant changes<a class="headerlink" href="#significant-changes-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_realpath</span></code> builtin and associated function to allow the
use of <code class="docutils literal notranslate"><span class="pre">realpath</span></code> even on those platforms that don’t ship an
appropriate command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2932">#2932</a>).</p></li>
<li><p>Alt-# toggles the current command line between commented and
uncommented states, making it easy to save a command in history
without executing it.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_vi_mode</span></code> function is now deprecated in favour of
<code class="docutils literal notranslate"><span class="pre">fish_vi_key_bindings</span></code>.</p></li>
</ul>
</section>
<section id="other-notable-fixes-and-improvements-1">
<span id="id127"></span><h3>Other notable fixes and improvements<a class="headerlink" href="#other-notable-fixes-and-improvements-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Fix the build on Cygwin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2952">#2952</a>) and RedHat Enterprise Linux/CentOS 5
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2955">#2955</a>).</p></li>
<li><p>Avoid confusing the terminal line driver with non-printing characters
in <code class="docutils literal notranslate"><span class="pre">fish_title</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2453">#2453</a>).</p></li>
<li><p>Improved completions for busctl, git (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2585">#2585</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2879">#2879</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2984">#2984</a>), and
netctl.</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-3b1-released-april-19-2016">
<h2>fish 2.3b1 (released April 19, 2016)<a class="headerlink" href="#fish-2-3b1-released-april-19-2016" title="Link to this heading">¶</a></h2>
<section id="significant-changes-3">
<span id="id128"></span><h3>Significant Changes<a class="headerlink" href="#significant-changes-3" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>A new <code class="docutils literal notranslate"><span class="pre">string</span></code> builtin to handle… strings! This builtin will
measure, split, search and replace text strings, including using
regular expressions. It can also be used to turn lists into plain
strings using <code class="docutils literal notranslate"><span class="pre">join</span></code>. <code class="docutils literal notranslate"><span class="pre">string</span></code> can be used in place of <code class="docutils literal notranslate"><span class="pre">sed</span></code>,
<code class="docutils literal notranslate"><span class="pre">grep</span></code>, <code class="docutils literal notranslate"><span class="pre">tr</span></code>, <code class="docutils literal notranslate"><span class="pre">cut</span></code>, and <code class="docutils literal notranslate"><span class="pre">awk</span></code> in many situations. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2296">#2296</a>)</p></li>
<li><p>Allow using escape as the Meta modifier key, by waiting after seeing
an escape character wait up to 300ms for an additional character.
This is consistent with readline (e.g. bash) and can be configured
via the <code class="docutils literal notranslate"><span class="pre">fish_escape_delay_ms</span> <span class="pre">variable</span></code>. This allows using escape
as the Meta modifier. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1356">#1356</a>)</p></li>
<li><p>Add new directories for vendor functions and configuration snippets
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2500">#2500</a>)</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_realpath</span></code> builtin and associated <code class="docutils literal notranslate"><span class="pre">realpath</span></code> function
should allow scripts to resolve path names via <code class="docutils literal notranslate"><span class="pre">realpath</span></code>
regardless of whether there is an external command of that name;
albeit with some limitations. See the associated documentation.</p></li>
</ul>
</section>
<section id="backward-incompatible-changes">
<h3>Backward-incompatible changes<a class="headerlink" href="#backward-incompatible-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Unmatched globs will now cause an error, except when used with
<code class="docutils literal notranslate"><span class="pre">for</span></code>, <code class="docutils literal notranslate"><span class="pre">set</span></code> or <code class="docutils literal notranslate"><span class="pre">count</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2719">#2719</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">and</span></code> and <code class="docutils literal notranslate"><span class="pre">or</span></code> will now bind to the closest <code class="docutils literal notranslate"><span class="pre">if</span></code> or <code class="docutils literal notranslate"><span class="pre">while</span></code>,
allowing compound conditions without <code class="docutils literal notranslate"><span class="pre">begin</span></code> and <code class="docutils literal notranslate"><span class="pre">end</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1428">#1428</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-ql</span></code> now searches up to function scope for variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2502">#2502</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">-f</span></code> will now behave the same when run as the main script or
using <code class="docutils literal notranslate"><span class="pre">source</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2643">#2643</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">source</span></code> no longer puts the file name in <code class="docutils literal notranslate"><span class="pre">$argv</span></code> if no arguments
are given (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/139">#139</a>)</p></li>
<li><p>History files are stored under the <code class="docutils literal notranslate"><span class="pre">XDG_DATA_HOME</span></code> hierarchy (by
default, in <code class="docutils literal notranslate"><span class="pre">~/.local/share</span></code>), and existing history will be moved
on first use (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/744">#744</a>)</p></li>
</ul>
</section>
<section id="other-notable-fixes-and-improvements-2">
<span id="id129"></span><h3>Other notable fixes and improvements<a class="headerlink" href="#other-notable-fixes-and-improvements-2" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Fish no longer silences errors in config.fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2702">#2702</a>)</p></li>
<li><p>Directory autosuggestions will now descend as far as possible if
there is only one child directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2531">#2531</a>)</p></li>
<li><p>Add support for bright colors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1464">#1464</a>)</p></li>
<li><p>Allow Ctrl-J (<code class="docutils literal notranslate"><span class="pre">\cj</span></code>) to be bound separately from Ctrl-M
(<code class="docutils literal notranslate"><span class="pre">\cm</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/217">#217</a>)</p></li>
<li><p>psub now has a “-s”/“–suffix” option to name the temporary file with
that suffix</p></li>
<li><p>Enable 24-bit colors on select terminals (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2495">#2495</a>)</p></li>
<li><p>Support for SVN status in the prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2582">#2582</a>)</p></li>
<li><p>Mercurial and SVN support have been added to the Classic + Git (now
Classic + VCS) prompt (via the new __fish_vcs_prompt function)
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2592">#2592</a>)</p></li>
<li><p>export now handles variables with a “=” in the value (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2403">#2403</a>)</p></li>
<li><p>New completions for:</p>
<ul>
<li><p>alsactl</p></li>
<li><p>Archlinux’s asp, makepkg</p></li>
<li><p>Atom’s apm (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2390">#2390</a>)</p></li>
<li><p>entr - the “Event Notify Test Runner” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2265">#2265</a>)</p></li>
<li><p>Fedora’s dnf (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2638">#2638</a>)</p></li>
<li><p>OSX diskutil (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2738">#2738</a>)</p></li>
<li><p>pkgng (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2395">#2395</a>)</p></li>
<li><p>pulseaudio’s pacmd and pactl</p></li>
<li><p>rust’s rustc and cargo (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2409">#2409</a>)</p></li>
<li><p>sysctl (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2214">#2214</a>)</p></li>
<li><p>systemd’s machinectl (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2158">#2158</a>), busctl (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2144">#2144</a>), systemd-nspawn,
systemd-analyze, localectl, timedatectl</p></li>
<li><p>and more</p></li>
</ul>
</li>
<li><p>Fish no longer has a function called sgrep, freeing it for user
customization (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2245">#2245</a>)</p></li>
<li><p>A rewrite of the completions for cd, fixing a few bugs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2299">#2299</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2300">#2300</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/562">#562</a>)</p></li>
<li><p>Linux VTs now run in a simplified mode to avoid issues (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2311">#2311</a>)</p></li>
<li><p>The vi-bindings now inherit from the emacs bindings</p></li>
<li><p>Fish will also execute <code class="docutils literal notranslate"><span class="pre">fish_user_key_bindings</span></code> when in vi-mode</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> will now also check $VISUAL (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2268">#2268</a>)</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">suspend</span></code> function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2269">#2269</a>)</p></li>
<li><p>Subcommand completion now works better with split /usr (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2141">#2141</a>)</p></li>
<li><p>The command-not-found-handler can now be overridden by defining a
function called <code class="docutils literal notranslate"><span class="pre">__fish_command_not_found_handler</span></code> in config.fish
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2332">#2332</a>)</p></li>
<li><p>A few fixes to the Sorin theme</p></li>
<li><p>PWD shortening in the prompt can now be configured via the
<code class="docutils literal notranslate"><span class="pre">fish_prompt_pwd_dir_length</span></code> variable, set to the length per path
component (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2473">#2473</a>)</p></li>
<li><p>fish no longer requires <code class="docutils literal notranslate"><span class="pre">/etc/fish/config.fish</span></code> to correctly start,
and now ships a skeleton file that only contains some documentation
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2799">#2799</a>)</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-2-0-released-july-12-2015">
<h2>fish 2.2.0 (released July 12, 2015)<a class="headerlink" href="#fish-2-2-0-released-july-12-2015" title="Link to this heading">¶</a></h2>
<section id="significant-changes-4">
<span id="id130"></span><h3>Significant changes<a class="headerlink" href="#significant-changes-4" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Abbreviations: the new <code class="docutils literal notranslate"><span class="pre">abbr</span></code> command allows for
interactively-expanded abbreviations, allowing quick access to
frequently-used commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/731">#731</a>).</p></li>
<li><p>Vi mode: run <code class="docutils literal notranslate"><span class="pre">fish_vi_mode</span></code> to switch fish into the key bindings
and prompt familiar to users of the Vi editor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/65">#65</a>).</p></li>
<li><p>New inline and interactive pager, which will be familiar to users of
zsh (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/291">#291</a>).</p></li>
<li><p>Underlying architectural changes: the <code class="docutils literal notranslate"><span class="pre">fishd</span></code> universal variable
server has been removed as it was a source of many bugs and security
problems. Notably, old fish sessions will not be able to communicate
universal variable changes with new fish sessions. For best results,
restart all running instances of <code class="docutils literal notranslate"><span class="pre">fish</span></code>.</p></li>
<li><p>The web-based configuration tool has been redesigned, featuring a
prompt theme chooser and other improvements.</p></li>
<li><p>New German, Brazilian Portuguese, and Chinese translations.</p></li>
</ul>
</section>
<section id="backward-incompatible-changes-1">
<span id="id131"></span><h3>Backward-incompatible changes<a class="headerlink" href="#backward-incompatible-changes-1" title="Link to this heading">¶</a></h3>
<p>These are kept to a minimum, but either change undocumented features or
are too hard to use in their existing forms. These changes may break
existing scripts.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> no longer interprets functions “in reverse”, instead
behaving as expected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1567">#1567</a>).</p></li>
<li><p>The previously-undocumented <code class="docutils literal notranslate"><span class="pre">CMD_DURATION</span></code> variable is now set for
all commands and contains the execution time of the last command in
milliseconds (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1585">#1585</a>). It is no longer exported to other commands
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1896">#1896</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">if</span></code> / <code class="docutils literal notranslate"><span class="pre">else</span></code> conditional statements now return values consistent
with the Single Unix Specification, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1443">#1443</a>).</p></li>
<li><p>A new “top-level” local scope has been added, allowing local
variables declared on the commandline to be visible to subsequent
commands. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1908">#1908</a>)</p></li>
</ul>
</section>
<section id="other-notable-fixes-and-improvements-3">
<span id="id132"></span><h3>Other notable fixes and improvements<a class="headerlink" href="#other-notable-fixes-and-improvements-3" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>New documentation design (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1662">#1662</a>), which requires a Doxygen version
1.8.7 or newer to build.</p></li>
<li><p>Fish now defines a default directory for other packages to provide
completions. By default this is
<code class="docutils literal notranslate"><span class="pre">/usr/share/fish/vendor-completions.d</span></code>; on systems with
<code class="docutils literal notranslate"><span class="pre">pkgconfig</span></code> installed this path is discoverable with
<code class="docutils literal notranslate"><span class="pre">pkg-config</span> <span class="pre">--variable</span> <span class="pre">completionsdir</span> <span class="pre">fish</span></code>.</p></li>
<li><p>A new parser removes many bugs; all existing syntax should keep
working.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">fish_preexec</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_postexec</span></code> events are fired before
and after job execution respectively (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1549">#1549</a>).</p></li>
<li><p>Unmatched wildcards no longer prevent a job from running. Wildcards
used interactively will still print an error, but the job will
proceed and the wildcard will expand to zero arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1482">#1482</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">.</span></code> command is deprecated and the <code class="docutils literal notranslate"><span class="pre">source</span></code> command is
preferred (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/310">#310</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> supports “bind modes”, which allows bindings to be set for a
particular named mode, to support the implementation of Vi mode.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">export</span></code> alias, which behaves like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1833">#1833</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--search</span></code> option to print the name of the
disk file that would be executed, like other shells’ <code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">-v</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1540">#1540</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--paging-mode</span></code> option to support the new
pager.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--wraps</span></code> option, which allows a command to
(recursively) inherit the completions of a wrapped command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/393">#393</a>),
and <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-e</span></code> now correctly erases completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/380">#380</a>).</p></li>
<li><p>Completions are now generated from manual pages by default on the
first run of fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/997">#997</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> can now produce colorized (<code class="docutils literal notranslate"><span class="pre">--ansi</span></code>) and HTML
(<code class="docutils literal notranslate"><span class="pre">--html</span></code>) output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1827">#1827</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--erase</span></code> now prevents autoloaded functions from being
reloaded in the current session.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--merge</span></code> option, to incorporate history from
other sessions into the current session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/825">#825</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> returns 1 if there are no active jobs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1484">#1484</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> has several new options:</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">--array</span></code> to break input into an array (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1540">#1540</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">--null</span></code> to break lines on NUL characters rather than newlines
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1694">#1694</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">--nchars</span></code> to read a specific number of characters (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1616">#1616</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">--right-prompt</span></code> to display a right-hand-side prompt during
interactive read (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1698">#1698</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code> has a new <code class="docutils literal notranslate"><span class="pre">-q</span></code> option to suppress output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1540">#1540</a> and, like
other shells, <code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">-a</span></code> now prints all matches for a command
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/261">#261</a>).</p></li>
<li><p>Pressing <kbd class="kbd docutils literal notranslate">f1</kbd> now shows the manual page for the current command
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1063">#1063</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_title</span></code> functions have access to the arguments of the
currently running argument as <code class="docutils literal notranslate"><span class="pre">$argv[1]</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1542">#1542</a>).</p></li>
<li><p>The OS command-not-found handler is used on Arch Linux (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1925">#1925</a>), nixOS
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1852">#1852</a>), openSUSE and Fedora (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1280">#1280</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Alt</span></code>+<code class="docutils literal notranslate"><span class="pre">.</span></code> searches backwards in the token history, mapping to
the same behavior as inserting the last argument of the previous
command, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/89">#89</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">SHLVL</span></code> environment variable is incremented correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1634">#1634</a> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1693">#1693</a>).</p></li>
<li><p>Added completions for <code class="docutils literal notranslate"><span class="pre">adb</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1165">#1165</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1211">#1211</a>), <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2018">#2018</a>),
<code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1292">#1292</a>), <code class="docutils literal notranslate"><span class="pre">composer</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1607">#1607</a>), <code class="docutils literal notranslate"><span class="pre">cygport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1841">#1841</a>),
<code class="docutils literal notranslate"><span class="pre">dropbox</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1533">#1533</a>), <code class="docutils literal notranslate"><span class="pre">elixir</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>), <code class="docutils literal notranslate"><span class="pre">fossil</span></code>, <code class="docutils literal notranslate"><span class="pre">heroku</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1790">#1790</a>), <code class="docutils literal notranslate"><span class="pre">iex</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>), <code class="docutils literal notranslate"><span class="pre">kitchen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2000">#2000</a>), <code class="docutils literal notranslate"><span class="pre">nix</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>),
<code class="docutils literal notranslate"><span class="pre">node</span></code>/<code class="docutils literal notranslate"><span class="pre">npm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1566">#1566</a>), <code class="docutils literal notranslate"><span class="pre">opam</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1615">#1615</a>), <code class="docutils literal notranslate"><span class="pre">setfacl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1752">#1752</a>),
<code class="docutils literal notranslate"><span class="pre">tmuxinator</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1863">#1863</a>), and <code class="docutils literal notranslate"><span class="pre">yast2</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1739">#1739</a>).</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">brew</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1090">#1090</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1810">#1810</a>), <code class="docutils literal notranslate"><span class="pre">bundler</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1779">#1779</a>), <code class="docutils literal notranslate"><span class="pre">cd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1135">#1135</a>), <code class="docutils literal notranslate"><span class="pre">emerge</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1840">#1840</a>),<code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1680">#1680</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1834">#1834</a> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1951">#1951</a>), <code class="docutils literal notranslate"><span class="pre">man</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/960">#960</a>), <code class="docutils literal notranslate"><span class="pre">modprobe</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1124">#1124</a>), <code class="docutils literal notranslate"><span class="pre">pacman</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1292">#1292</a>),
<code class="docutils literal notranslate"><span class="pre">rpm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1236">#1236</a>), <code class="docutils literal notranslate"><span class="pre">rsync</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1872">#1872</a>), <code class="docutils literal notranslate"><span class="pre">scp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1145">#1145</a>), <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1234">#1234</a>),
<code class="docutils literal notranslate"><span class="pre">sshfs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1268">#1268</a>), <code class="docutils literal notranslate"><span class="pre">systemctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1462">#1462</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1950">#1950</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1972">#1972</a>), <code class="docutils literal notranslate"><span class="pre">tmux</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1853">#1853</a>), <code class="docutils literal notranslate"><span class="pre">vagrant</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1748">#1748</a>), <code class="docutils literal notranslate"><span class="pre">yum</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1269">#1269</a>), and <code class="docutils literal notranslate"><span class="pre">zypper</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1787">#1787</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-1-2-released-feb-24-2015">
<h2>fish 2.1.2 (released Feb 24, 2015)<a class="headerlink" href="#fish-2-1-2-released-feb-24-2015" title="Link to this heading">¶</a></h2>
<p>fish 2.1.2 contains a workaround for a filesystem bug in Mac OS X
Yosemite. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1859">#1859</a></p>
<p>Specifically, after installing fish 2.1.1 and then rebooting, “Verify
Disk” in Disk Utility will report “Invalid number of hard links.” We
don’t have any reports of data loss or other adverse consequences. fish
2.1.2 avoids triggering the bug, but does not repair an already affected
filesystem. To repair the filesystem, you can boot into Recovery Mode
and use Repair Disk from Disk Utility. Linux and versions of OS X prior
to Yosemite are believed to be unaffected.</p>
<p>There are no other changes in this release.</p>
</section>
<hr class="docutils" />
<section id="fish-2-1-1-released-september-26-2014">
<h2>fish 2.1.1 (released September 26, 2014)<a class="headerlink" href="#fish-2-1-1-released-september-26-2014" title="Link to this heading">¶</a></h2>
<p><strong>Important:</strong> if you are upgrading, stop all running instances of
<code class="docutils literal notranslate"><span class="pre">fishd</span></code> as soon as possible after installing this release; it will be
restarted automatically. On most systems, there will be no further
action required. Note that some environments (where <code class="docutils literal notranslate"><span class="pre">XDG_RUNTIME_DIR</span></code>
is set), such as Fedora 20, will require a restart of all running fish
processes before universal variables work as intended.</p>
<p>Distributors are highly encouraged to call <code class="docutils literal notranslate"><span class="pre">killall</span> <span class="pre">fishd</span></code>,
<code class="docutils literal notranslate"><span class="pre">pkill</span> <span class="pre">fishd</span></code> or similar in installation scripts, or to warn their
users to do so.</p>
<section id="security-fixes">
<h3>Security fixes<a class="headerlink" href="#security-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The fish_config web interface now uses an authentication token to
protect requests and only responds to requests from the local machine
with this token, preventing a remote code execution attack. (closing
CVE-2014-2914). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1438">#1438</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">psub</span></code> and <code class="docutils literal notranslate"><span class="pre">funced</span></code> are no longer vulnerable to attacks which
allow local privilege escalation and data tampering (closing
CVE-2014-2906 and CVE-2014-3856). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1437">#1437</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fishd</span></code> uses a secure path for its socket, preventing a local
privilege escalation attack (closing CVE-2014-2905). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1436">#1436</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_print_packages</span></code> is no longer vulnerable to attacks which
would allow local privilege escalation and data tampering (closing
CVE-2014-3219). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1440">#1440</a></p></li>
</ul>
</section>
<section id="other-fixes">
<h3>Other fixes<a class="headerlink" href="#other-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">fishd</span></code> now ignores SIGPIPE, fixing crashes using tools like GNU
Parallel and which occurred more often as a result of the other
<code class="docutils literal notranslate"><span class="pre">fishd</span></code> changes. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1084">#1084</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1690">#1690</a></p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-1-0">
<h2>fish 2.1.0<a class="headerlink" href="#fish-2-1-0" title="Link to this heading">¶</a></h2>
<section id="significant-changes-5">
<span id="id133"></span><h3>Significant Changes<a class="headerlink" href="#significant-changes-5" title="Link to this heading">¶</a></h3>
<ul>
<li><p><strong>Tab completions will fuzzy-match files.</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/568">#568</a></p>
<p>When tab-completing a file, fish will first attempt prefix matches
(<code class="docutils literal notranslate"><span class="pre">foo</span></code> matches <code class="docutils literal notranslate"><span class="pre">foobar</span></code>), then substring matches (<code class="docutils literal notranslate"><span class="pre">ooba</span></code>
matches <code class="docutils literal notranslate"><span class="pre">foobar</span></code>), and lastly subsequence matches (<code class="docutils literal notranslate"><span class="pre">fbr</span></code> matches
<code class="docutils literal notranslate"><span class="pre">foobar</span></code>). For example, in a directory with files foo1.txt,
foo2.txt, foo3.txt…, you can type only the numeric part and hit tab
to fill in the rest.</p>
<p>This feature is implemented for files and executables. It is not yet
implemented for options (like <code class="docutils literal notranslate"><span class="pre">--foobar</span></code>), and not yet implemented
across path components (like <code class="docutils literal notranslate"><span class="pre">/u/l/b</span></code> to match <code class="docutils literal notranslate"><span class="pre">/usr/local/bin</span></code>).</p>
</li>
<li><p><strong>Redirections now work better across pipelines.</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/110">#110</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/877">#877</a></p>
<p>In particular, you can pipe stderr and stdout together, for example,
with <code class="docutils literal notranslate"><span class="pre">cmd</span> <span class="pre">^&amp;1</span> <span class="pre">|</span> <span class="pre">tee</span> <span class="pre">log.txt</span></code>, or the more familiar
<code class="docutils literal notranslate"><span class="pre">cmd</span> <span class="pre">2&gt;&amp;1</span> <span class="pre">|</span> <span class="pre">tee</span> <span class="pre">log.txt</span></code>.</p>
</li>
<li><p><strong>A single ``%`` now expands to the last job backgrounded.</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1008">#1008</a></p>
<p>Previously, a single <code class="docutils literal notranslate"><span class="pre">%</span></code> would pid-expand to either all
backgrounded jobs, or all jobs owned by your user. Now it expands to
the last job backgrounded. If no job is in the background, it will
fail to expand. In particular, <code class="docutils literal notranslate"><span class="pre">fg</span> <span class="pre">%</span></code> can be used to put the most
recent background job in the foreground.</p>
</li>
</ul>
</section>
<section id="other-notable-fixes">
<h3>Other Notable Fixes<a class="headerlink" href="#other-notable-fixes" title="Link to this heading">¶</a></h3>
<ul>
<li><p>alt-U and alt+C now uppercase and capitalize words, respectively.
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/995">#995</a></p></li>
<li><p>VTE based terminals should now know the working directory. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/906">#906</a></p></li>
<li><p>The autotools build now works on Mavericks. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/968">#968</a></p></li>
<li><p>The end-of-line binding (ctrl+E) now accepts autosuggestions. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/932">#932</a></p></li>
<li><p>Directories in <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> (used on OS X) are now prepended
instead of appended, similar to other shells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/927">#927</a></p></li>
<li><p>Option-right-arrow (used for partial autosuggestion completion) now
works on iTerm2. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/920">#920</a></p></li>
<li><p>Tab completions now work properly within nested subcommands. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/913">#913</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> supports <code class="docutils literal notranslate"><span class="pre">\e</span></code>, the escape character. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/910">#910</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">history</span></code> no longer shows duplicate items. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/900">#900</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_user_paths</span></code> is now prepended to $PATH instead of appended.
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/888">#888</a></p></li>
<li><p>Jobs complete when all processes complete. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/876">#876</a></p>
<p>For example, in previous versions of fish, <code class="docutils literal notranslate"><span class="pre">sleep</span> <span class="pre">10</span> <span class="pre">|</span> <span class="pre">echo</span> <span class="pre">Done</span></code>
returns control immediately, because echo does not read from stdin.
Now it does not complete until sleep exits (presumably after 10
seconds).</p>
</li>
<li><p>Better error reporting for square brackets. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/875">#875</a></p></li>
<li><p>fish no longer tries to add <code class="docutils literal notranslate"><span class="pre">/bin</span></code> to <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> unless PATH is
totally empty. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/852">#852</a></p></li>
<li><p>History token substitution (alt-up) now works correctly inside
subshells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/833">#833</a></p></li>
<li><p>Flow control is now disabled, freeing up ctrl-S and ctrl-Q for other
uses. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/814">#814</a></p></li>
<li><p>sh-style variable setting like <code class="docutils literal notranslate"><span class="pre">foo=bar</span></code> now produces better error
messages. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/809">#809</a></p></li>
<li><p>Commands with wildcards no longer produce autosuggestions. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/785">#785</a></p></li>
<li><p>funced no longer freaks out when supplied with no arguments. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/780">#780</a></p></li>
<li><p>fish.app now works correctly in a directory containing spaces. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/774">#774</a></p></li>
<li><p>Tab completion cycling no longer occasionally fails to repaint. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/765">#765</a></p></li>
<li><p>Comments now work in eval’d strings. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/684">#684</a></p></li>
<li><p>History search (up-arrow) now shows the item matching the
autosuggestion, if that autosuggestion was truncated. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/650">#650</a></p></li>
<li><p>Ctrl-T now transposes characters, as in other shells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/128">#128</a></p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-0-0">
<h2>fish 2.0.0<a class="headerlink" href="#fish-2-0-0" title="Link to this heading">¶</a></h2>
<section id="significant-changes-6">
<span id="id134"></span><h3>Significant Changes<a class="headerlink" href="#significant-changes-6" title="Link to this heading">¶</a></h3>
<ul>
<li><p><strong>Command substitutions now modify ``$status`` :issue:`547`.</strong> Previously the
exit status of command substitutions (like <code class="docutils literal notranslate"><span class="pre">(pwd)</span></code>) was ignored;
however now it modifies $status. Furthermore, the <code class="docutils literal notranslate"><span class="pre">set</span></code> command now
only sets $status on failure; it is untouched on success. This allows
for the following pattern:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="nb">set</span><span class="w"> </span>python_path<span class="w"> </span><span class="o">(</span>which<span class="w"> </span>python<span class="o">)</span>
<span class="w">   </span>...
end
</pre></div>
</div>
<p>Because set does not modify $status on success, the if branch
effectively tests whether <code class="docutils literal notranslate"><span class="pre">which</span></code> succeeded, and if so, whether the
<code class="docutils literal notranslate"><span class="pre">set</span></code> also succeeded.</p>
</li>
<li><p>Improvements to PATH handling. There is a new variable, fish_user_paths,
which can be set universally, and whose contents are appended to
$PATH <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/527">#527</a></p>
<ul class="simple">
<li><p>/etc/paths and /etc/paths.d are now respected on OS X</p></li>
<li><p>fish no longer modifies $PATH to find its own binaries</p></li>
</ul>
</li>
<li><p><strong>Long lines no longer use ellipsis for line breaks</strong>, and copy and
paste should no longer include a newline even if the line was broken
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/300">#300</a></p></li>
<li><p><strong>New syntax for index ranges</strong> (sometimes known as “slices”) <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/212">#212</a></p></li>
<li><p><strong>fish now supports an ``else if`` statement</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/134">#134</a></p></li>
<li><p><strong>Process and pid completion now works on OS X</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/129">#129</a></p></li>
<li><p><strong>fish is now relocatable</strong>, and no longer depends on compiled-in
paths <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/125">#125</a></p></li>
<li><p><strong>fish now supports a right prompt (RPROMPT)</strong> through the
fish_right_prompt function <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/80">#80</a></p></li>
<li><p><strong>fish now uses posix_spawn instead of fork when possible</strong>, which is
much faster on BSD and OS X <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11">#11</a></p></li>
</ul>
</section>
<section id="other-notable-fixes-1">
<span id="id135"></span><h3>Other Notable Fixes<a class="headerlink" href="#other-notable-fixes-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Updated VCS completions (darcs, cvs, svn, etc.)</p></li>
<li><p>Avoid calling getcwd on the main thread, as it can hang <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/696">#696</a></p></li>
<li><p>Control-D (forward delete) no longer stops at a period <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/667">#667</a></p></li>
<li><p>Completions for many new commands</p></li>
<li><p>fish now respects rxvt’s unique keybindings <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/657">#657</a></p></li>
<li><p>xsel is no longer built as part of fish. It will still be invoked if
installed separately <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/633">#633</a></p></li>
<li><p>__fish_filter_mime no longer spews <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/628">#628</a></p></li>
<li><p>The –no-execute option to fish no longer falls over when reaching the
end of a block <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/624">#624</a></p></li>
<li><p>fish_config knows how to find fish even if it’s not in the $PATH <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/621">#621</a></p></li>
<li><p>A leading space now prevents writing to history, as is done in bash
and zsh <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/615">#615</a></p></li>
<li><p>Hitting enter after a backslash only goes to a new line if it is
followed by whitespace or the end of the line <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/613">#613</a></p></li>
<li><p>printf is now a builtin <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/611">#611</a></p></li>
<li><p>Event handlers should no longer fire if signals are blocked <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/608">#608</a></p></li>
<li><p>set_color is now a builtin <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/578">#578</a></p></li>
<li><p>man page completions are now located in a new generated_completions
directory, instead of your completions directory <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/576">#576</a></p></li>
<li><p>tab now clears autosuggestions <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/561">#561</a></p></li>
<li><p>tab completion from within a pair of quotes now attempts to
“appropriate” the closing quote <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/552">#552</a></p></li>
<li><p>$EDITOR can now be a list: for example, <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">EDITOR</span> <span class="pre">gvim</span> <span class="pre">-f</span></code>) <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/541">#541</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">case</span></code> bodies are now indented <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/530">#530</a></p></li>
<li><p>The profile switch <code class="docutils literal notranslate"><span class="pre">-p</span></code> no longer crashes <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/517">#517</a></p></li>
<li><p>You can now control-C out of <code class="docutils literal notranslate"><span class="pre">read</span></code> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/516">#516</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">umask</span></code> is now functional on OS X <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/515">#515</a></p></li>
<li><p>Avoid calling getpwnam on the main thread, as it can hang <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/512">#512</a></p></li>
<li><p>Alt-F or Alt-right-arrow (Option-F or option-right-arrow) now accepts
one word of an autosuggestion <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/435">#435</a></p></li>
<li><p>Setting fish as your login shell no longer kills OpenSUSE <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/367">#367</a></p></li>
<li><p>Backslashes now join lines, instead of creating multiple commands
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/347">#347</a></p></li>
<li><p>echo now implements the -e flag to interpret escapes <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/337">#337</a></p></li>
<li><p>When the last token in the user’s input contains capital letters, use
its case in preference to that of the autosuggestion <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/335">#335</a></p></li>
<li><p>Descriptions now have their own muted color <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/279">#279</a></p></li>
<li><p>Wildcards beginning with a . (for example, <code class="docutils literal notranslate"><span class="pre">ls</span> <span class="pre">.*</span></code>) no longer match
. and .. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/270">#270</a></p></li>
<li><p>Recursive wildcards now handle symlink loops <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/268">#268</a></p></li>
<li><p>You can now delete history items from the fish_config web interface
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/250">#250</a></p></li>
<li><p>The OS X build now weak links <code class="docutils literal notranslate"><span class="pre">wcsdup</span></code> and <code class="docutils literal notranslate"><span class="pre">wcscasecmp</span></code> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/240">#240</a></p></li>
<li><p>fish now saves and restores the process group, which prevents certain
processes from being erroneously reported as stopped <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/197">#197</a></p></li>
<li><p>funced now takes an editor option <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/187">#187</a></p></li>
<li><p>Alternating row colors are available in fish pager through
<code class="docutils literal notranslate"><span class="pre">fish_pager_color_secondary</span></code> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/186">#186</a></p></li>
<li><p>Universal variable values are now stored based on your MAC address,
not your hostname <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/183">#183</a></p></li>
<li><p>The caret ^ now only does a stderr redirection if it is the first
character of a token, making git users happy <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/168">#168</a></p></li>
<li><p>Autosuggestions will no longer cause line wrapping <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/167">#167</a></p></li>
<li><p>Better handling of Unicode combining characters <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/155">#155</a></p></li>
<li><p>fish SIGHUPs processes more often <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/138">#138</a></p></li>
<li><p>fish no longer causes <code class="docutils literal notranslate"><span class="pre">sudo</span></code> to ask for a password every time</p></li>
<li><p>fish behaves better under Midnight Commander <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/121">#121</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-e</span></code> no longer crashes <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/100">#100</a></p></li>
<li><p>fish now will automatically import history from bash, if there is no
fish history <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/66">#66</a></p></li>
<li><p>Backslashed-newlines inside quoted strings now behave more
intuitively <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/52">#52</a></p></li>
<li><p>Tab titles should be shown correctly in iTerm2 <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/47">#47</a></p></li>
<li><p>scp remote path completion now sometimes works <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/42">#42</a></p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">read</span></code> builtin no longer shows autosuggestions <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/29">#29</a></p></li>
<li><p>Custom key bindings can now be set via the <code class="docutils literal notranslate"><span class="pre">fish_user_key_bindings</span></code>
function <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/21">#21</a></p></li>
<li><p>All Python scripts now run correctly under both Python 2 and Python 3
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/14">#14</a></p></li>
<li><p>The “accept autosuggestion” key can now be configured <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/19">#19</a></p></li>
<li><p>Autosuggestions will no longer suggest invalid commands <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6">#6</a></p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fishfish-beta-r2">
<h2>fishfish Beta r2<a class="headerlink" href="#fishfish-beta-r2" title="Link to this heading">¶</a></h2>
<section id="bug-fixes">
<h3>Bug Fixes<a class="headerlink" href="#bug-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><strong>Implicit cd</strong> is back, for paths that start with one or two dots, a
slash, or a tilde.</p></li>
<li><p><strong>Overrides of default functions should be fixed.</strong> The “internalized
scripts” feature is disabled for now.</p></li>
<li><p><strong>Disabled delayed suspend.</strong> This is a strange job-control feature
of BSD systems, including OS X. Disabling it frees up Control Y for
other purposes; in particular, for yank, which now works on OS X.</p></li>
<li><p><strong>fish_indent is fixed.</strong> In particular, the <code class="docutils literal notranslate"><span class="pre">funced</span></code> and
<code class="docutils literal notranslate"><span class="pre">funcsave</span></code> functions work again.</p></li>
<li><p>A SIGTERM now ends the whole execution stack again (resolving <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/13">#13</a>).</p></li>
<li><p>Bumped the __fish_config_interactive version number so the default
fish_color_autosuggestion kicks in.</p></li>
<li><p>fish_config better handles combined term256 and classic colors like
“555 yellow”.</p></li>
</ul>
</section>
<section id="new-features">
<h3>New Features<a class="headerlink" href="#new-features" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><strong>A history builtin</strong>, and associated interactive function that
enables deleting history items. Example usage: * Print all history
items beginning with echo: <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--prefix</span> <span class="pre">echo</span></code> * Print all
history items containing foo: <code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--contains</span> <span class="pre">foo</span></code> *
Interactively delete some items containing foo:
<code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">--delete</span> <span class="pre">--contains</span> <span class="pre">foo</span></code></p></li>
</ul>
<p>Credit to &#64;siteshwar for implementation. Thanks &#64;siteshwar!</p>
</section>
</section>
<hr class="docutils" />
<section id="fishfish-beta-r1">
<h2>fishfish Beta r1<a class="headerlink" href="#fishfish-beta-r1" title="Link to this heading">¶</a></h2>
<section id="scripting">
<h3>Scripting<a class="headerlink" href="#scripting" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>No changes! All existing fish scripts, config files, completions,
etc. from trunk should continue to work.</p></li>
</ul>
</section>
<section id="new-features-1">
<span id="id136"></span><h3>New Features<a class="headerlink" href="#new-features-1" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><strong>Autosuggestions</strong>. Think URL fields in browsers. When you type a
command, fish will suggest the rest of the command after the cursor,
in a muted gray when possible. You can accept the suggestion with the
right arrow key or Ctrl-F. Suggestions come from command history,
completions, and some custom code for cd; there’s a lot of potential
for improvement here. The suggestions are computed on a background
pthread, so they never slow down your typing. The autosuggestion
feature is incredible. I miss it dearly every time I use anything
else.</p></li>
<li><p><strong>term256 support</strong> where available, specifically modern xterms and
OS X Lion. You can specify colors the old way (‘set_color cyan’) or
by specifying RGB hex values (‘set_color FF3333’); fish will pick the
closest supported color. Some xterms do not advertise term256 support
either in the $TERM or terminfo max_colors field, but nevertheless
support it. For that reason, fish will default into using it on any
xterm (but it can be disabled with an environment variable).</p></li>
<li><p><strong>Web-based configuration</strong> page. There is a new function
‘fish_config’. This spins up a simple Python web server and opens a
browser window to it. From this web page, you can set your shell
colors and view your functions, variables, and history; all changes
apply immediately to all running shells. Eventually all configuration
ought to be supported via this mechanism (but in addition to, not
instead of, command line mechanisms).</p></li>
<li><p><strong>Man page completions</strong>. There is a new function
‘fish_update_completions’. This function reads all the man1 files
from your manpath, removes the roff formatting, parses them to find
the commands and options, and outputs fish completions into
~/.config/fish/completions. It won’t overwrite existing completion
files (except ones that it generated itself).</p></li>
</ul>
</section>
<section id="programmatic-changes">
<h3>Programmatic Changes<a class="headerlink" href="#programmatic-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish is now entirely in C++. I have no particular love for C++, but
it provides a ready memory-model to replace halloc. We’ve made an
effort to keep it to a sane and portable subset (no C++11, no boost,
no going crazy with templates or smart pointers), but we do use the
STL and a little tr1.</p></li>
<li><p>halloc is entirely gone, replaced by normal C++ ownership semantics.
If you don’t know what halloc is, well, now you have two reasons to
be happy.</p></li>
<li><p>All the crufty C data structures are entirely gone. array_list_t,
priority_queue_t, hash_table_t, string_buffer_t have been removed and
replaced by STL equivalents like std::vector, std::map, and
std::wstring. A lot of the string handling now uses std::wstring
instead of wchar_t *</p></li>
<li><p>fish now spawns pthreads for tasks like syntax highlighting that
require blocking I/O.</p></li>
<li><p>History has been completely rewritten. History files now use an
extensible YAML-style syntax. History “merging” (multiple shells
writing to the same history file) now works better. There is now a
maximum history length of about 250k items (256 * 1024).</p></li>
<li><p>The parser has been “instanced,” so you can now create more than one.</p></li>
<li><p>Total #LoC has shrunk slightly even with the new features.</p></li>
</ul>
</section>
<section id="performance">
<h3>Performance<a class="headerlink" href="#performance" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>fish now runs syntax highlighting in a background thread, so typing
commands is always responsive even on slow filesystems.</p></li>
<li><p>echo, test, and pwd are now builtins, which eliminates many forks.</p></li>
<li><p>The files in share/functions and share/completions now get
‘internalized’ into C strings that get compiled in with fish. This
substantially reduces the number of files touched at startup. A
consequence is that you cannot change these functions without
recompiling, but often other functions depend on these “standard”
functions, so changing them is perhaps not a good idea anyways.</p></li>
</ul>
<p>Here are some system call counts for launching and then exiting fish
with the default configuration, on OS X. The first column is fish trunk,
the next column is with our changes, and the last column is bash for
comparison. This data was collected via dtrace.</p>
<table><tr><th><th><p>before</p>
<th><p>after</p>
<th><p>bash</p>
<tr><th><p>open</p>
<td><p>9</p>
<td><p>4</p>
<td><p>5</p>
<tr><th><p>fork</p>
<td><p>28</p>
<td><p>14</p>
<td><p>0</p>
<tr><th><p>stat</p>
<td><p>131</p>
<td><p>85</p>
<td><p>11</p>
<tr><th><p>lstat</p>
<td><p>670</p>
<td><p>0</p>
<td><p>0</p>
<tr><th><p>read</p>
<td><p>332</p>
<td><p>80</p>
<td><p>4</p>
<tr><th><p>write</p>
<td><p>172</p>
<td><p>149</p>
<td><p>0</p>
</table><p>The large number of forks relative to bash are due to fish’s insanely
expensive default prompt, which is unchanged in my version. If we switch
to a prompt comparable to bash’s (lame) default, the forks drop to 16
with trunk, 4 after our changes.</p>
<p>The large reduction in lstat() numbers is due to fish no longer needing
to call ttyname() on OS X.</p>
<p>We’ve got some work to do to be as lean as bash, but we’re on the right
track.</p>
</section>
</section>
</section>


            <div class="clearer"></div>
          </div>
        </div>
      </div> 
      <div class="clearer"></div>
    </div>  
    <div class="related" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
    <li><img src="_static/fish.png" alt=""
             style="width: 80px; height: 80px; vertical-align: middle; margin-top: -1px"/></li>
    <li><a href="https://fishshell.com/">fish-shell</a> &#187;</li>
    
    <a href="index.html">fish-shell 4.7.1 documentation</a> &#187;
    

        <li class="nav-item nav-item-this"><a href="">Release notes</a></li>
    <li class="right">
        

    <div class="inline-search" role="search">
        <form class="inline-search" action="search.html" method="get">
          <input placeholder="Quick search" type="text" name="q" />
          <input type="submit" value="Go" />
          <input type="hidden" name="check_keywords" value="yes" />
          <input type="hidden" name="area" value="default" />
        </form>
    </div>
    </li>
    
    <div id="old-docs-notice" style="display: none">
        This documents an old version of fish.
        <a href="../current/">See the latest release.</a>
    </div>

      </ul>
    </div>  
    <div class="footer">
    &copy; Copyright fish-shell developers.
    <br />
    <a href="https://github.com/fish-shell/fish-shell/issues">Found a bug</a>?
    <br />

    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
    </div>
</div>

<script type="text/javascript">
 FISH_DOCS_VERSION = "4.7";

 function copy_to_clipboard(it) {
     // Find the pre tag we're interested in.
     var pre = it.target;
     while (pre.tagName != "PRE") pre = pre.parentNode;
     var txt = "";
     // Cheesy: If we have a prompt,
     // we only copy prompted lines,
     // by splitting and matching and stuff
     if (pre.querySelector('span.gp')) {
         var texts= [];
         for (var line of pre.innerText.split('\n')) {
             if (line.match(/^>_?.*/)) {
                 texts.push(line.replace(/^>_?/, ""));
             }
         }
         txt = texts.join("\n");
     } else {
         // Even cheesier: If we don't have a prompt, we remove the button text from the end.
         var txt = pre.innerText.substring(0, pre.innerText.length - it.target.innerText.length).trim();
     }

     navigator.clipboard.writeText(txt).then(function() {
         // Success - set the text to indicate it,
         // then set it back after 2 seconds.
         var span = pre.querySelector("button span");
         if (span) {
             var oldText = span.innerText;
             span.innerText = "COPIED!";
             setTimeout(function() {
                 span.innerText = oldText;
             }, 2000);
         }
     }, function() {
     });
 }

  (function () {
      // Add copy buttons to all the codeblocks.
      var codeblocks = document.querySelectorAll('div > pre');

      var button = document.createElement('button');
      var span = document.createElement('span');
      span.innerText = "COPY";
      button.appendChild(span);

      for (var i of codeblocks) {
          var newButton = button.cloneNode(true);
          newButton.addEventListener('click', copy_to_clipboard);
          i.appendChild(newButton);
      }
  })();
</script>

  </body>
</html>

AnonSec - 2021