1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980
|
<!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 — fish-shell 4.2.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=6fb65176"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></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> »</li>
<a href="index.html">fish-shell 4.2.1 documentation</a> »
<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-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="#notable-improvements-and-fixes">Notable improvements and fixes</a></li>
<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="#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-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="#id1">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id2">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#scripting-improvements">Scripting improvements</a></li>
<li><a class="reference internal" href="#id3">Interactive improvements</a><ul>
<li><a class="reference internal" href="#new-or-improved-bindings">New or improved bindings</a></li>
<li><a class="reference internal" href="#completions">Completions</a></li>
<li><a class="reference internal" href="#improved-terminal-support">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#other-improvements">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="#id4">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id5">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id6">Scripting improvements</a></li>
<li><a class="reference internal" href="#id7">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id8">New or improved bindings</a></li>
<li><a class="reference internal" href="#id9">Completions</a></li>
<li><a class="reference internal" href="#id10">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id11">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="#id13">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id14">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id15">Scripting improvements</a></li>
<li><a class="reference internal" href="#id16">Interactive improvements</a><ul>
<li><a class="reference internal" href="#improved-prompts">Improved prompts</a></li>
<li><a class="reference internal" href="#id17">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id18">Other improvements</a></li>
<li><a class="reference internal" href="#id19">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="#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">Scripting improvements</a></li>
<li><a class="reference internal" href="#id23">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id24">Improved prompts</a></li>
<li><a class="reference internal" href="#id25">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id26">Other improvements</a></li>
<li><a class="reference internal" href="#id27">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="#id28">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id29">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id30">Scripting improvements</a></li>
<li><a class="reference internal" href="#id31">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id32">Completions</a></li>
<li><a class="reference internal" href="#id33">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id34">Other improvements</a></li>
<li><a class="reference internal" href="#fixed-bugs">Fixed bugs</a></li>
<li><a class="reference internal" href="#id35">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="#id36">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id37">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id38">Scripting improvements</a></li>
<li><a class="reference internal" href="#id39">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id40">New or improved bindings</a></li>
<li><a class="reference internal" href="#id41">Improved prompts</a></li>
<li><a class="reference internal" href="#id42">Completions</a></li>
<li><a class="reference internal" href="#id43">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id44">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="#id45">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id46">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id47">Scripting improvements</a></li>
<li><a class="reference internal" href="#id48">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id49">New or improved bindings</a></li>
<li><a class="reference internal" href="#id50">Improved prompts</a></li>
<li><a class="reference internal" href="#id51">Completions</a></li>
<li><a class="reference internal" href="#id52">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id53">Other improvements</a></li>
<li><a class="reference internal" href="#id54">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="#id55">Notable improvements and fixes</a></li>
<li><a class="reference internal" href="#id56">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id57">Scripting improvements</a></li>
<li><a class="reference internal" href="#id58">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id59">New or improved bindings</a></li>
<li><a class="reference internal" href="#id60">Improved prompts</a></li>
<li><a class="reference internal" href="#id61">Completions</a></li>
<li><a class="reference internal" href="#id62">Improved terminal support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id63">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="#id64">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="#id65">Scripting improvements</a></li>
<li><a class="reference internal" href="#id66">Interactive improvements</a><ul>
<li><a class="reference internal" href="#id67">New or improved bindings</a></li>
<li><a class="reference internal" href="#id68">Improved prompts</a></li>
<li><a class="reference internal" href="#id69">Improved terminal support</a></li>
<li><a class="reference internal" href="#id70">Completions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id71">For distributors</a></li>
<li><a class="reference internal" href="#id72">Deprecations and removed features</a></li>
<li><a class="reference internal" href="#id73">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-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="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>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="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>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="interactive-improvements">
<h3>Interactive improvements<a class="headerlink" href="#interactive-improvements" 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-0"></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="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>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="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.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="id1">
<h3>Notable improvements and fixes<a class="headerlink" href="#id1" 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-1"></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="id2">
<h3>Deprecations and removed features<a class="headerlink" href="#id2" 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">"fish</span> <span class="pre">default"</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-2"></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-3"></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-4"></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="scripting-improvements">
<h3>Scripting improvements<a class="headerlink" href="#scripting-improvements" 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="id3">
<h3>Interactive improvements<a class="headerlink" href="#id3" 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-5"></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="new-or-improved-bindings">
<h4>New or improved bindings<a class="headerlink" href="#new-or-improved-bindings" 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="improved-terminal-support">
<h4>Improved terminal support<a class="headerlink" href="#improved-terminal-support" 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="other-improvements">
<h3>Other improvements<a class="headerlink" href="#other-improvements" 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-6"></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-7"></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"foo</span> <span class="pre">"</span> <span class="pre">>/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-8"></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-9"></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-10"></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">&</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-11"></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-12"></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-13"></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-14"></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="id4">
<h3>Notable improvements and fixes<a class="headerlink" href="#id4" 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">"commandline</span> <span class="pre">-i</span> <span class="pre">\n"</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">'reset --hard HEAD^'</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="id5">
<h3>Deprecations and removed features<a class="headerlink" href="#id5" 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="id6">
<h3>Scripting improvements<a class="headerlink" href="#id6" 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"><?</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"><</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">&</span> <span class="pre">&&</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">""</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="id7">
<h3>Interactive improvements<a class="headerlink" href="#id7" 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">>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="id8">
<h4>New or improved bindings<a class="headerlink" href="#id8" 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">",</kbd>+<kbd class="kbd docutils literal notranslate">,p</kbd> and <kbd class="kbd docutils literal notranslate">",</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="id9">
<h4>Completions<a class="headerlink" href="#id9" 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="id10">
<h4>Improved terminal support<a class="headerlink" href="#id10" 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-15"></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="id11">
<h3>Other improvements<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">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="id12"></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="id13">
<h3>Notable improvements and fixes<a class="headerlink" href="#id13" 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-16"></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="id14">
<h3>Deprecations and removed features<a class="headerlink" href="#id14" 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="id15">
<h3>Scripting improvements<a class="headerlink" href="#id15" 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="id16">
<h3>Interactive improvements<a class="headerlink" href="#id16" 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-17"></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-18"></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="id17">
<h4>Completions<a class="headerlink" href="#id17" 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="id18">
<h3>Other improvements<a class="headerlink" href="#id18" 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="id19">
<h3>For distributors<a class="headerlink" href="#id19" 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="id20">
<h3>Notable improvements and fixes<a class="headerlink" href="#id20" 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="id21">
<h3>Deprecations and removed features<a class="headerlink" href="#id21" 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="id22">
<h3>Scripting improvements<a class="headerlink" href="#id22" 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="id23">
<h3>Interactive improvements<a class="headerlink" href="#id23" 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="id24">
<h4>Improved prompts<a class="headerlink" href="#id24" 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="id25">
<h4>Completions<a class="headerlink" href="#id25" 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="id26">
<h3>Other improvements<a class="headerlink" href="#id26" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Improvements and corrections to the documentation.</p></li>
</ul>
</section>
<section id="id27">
<h3>For distributors<a class="headerlink" href="#id27" 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="id28">
<h3>Notable improvements and fixes<a class="headerlink" href="#id28" 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">'^\.\.+$'</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">> </span><span class="nf">touch</span><span class="w"> </span><span class="no">foo</span>
<span class="gp">> </span><span class="nf">sleep</span><span class="w"> </span><span class="no">10</span>
<span class="gp">> </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">> </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">"Hello this is a long string"</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="id29">
<h3>Deprecations and removed features<a class="headerlink" href="#id29" 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="id30">
<h3>Scripting improvements<a class="headerlink" href="#id30" 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">> </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-19"></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="id31">
<h3>Interactive improvements<a class="headerlink" href="#id31" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>If the terminal definition for <span class="target" id="index-20"></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-21"></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-22"></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="id32">
<h4>Completions<a class="headerlink" href="#id32" 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-23"></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="id33">
<h4>Improved terminal support<a class="headerlink" href="#id33" 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="id34">
<h3>Other improvements<a class="headerlink" href="#id34" 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="id35">
<h3>For distributors<a class="headerlink" href="#id35" 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="id36">
<h3>Notable improvements and fixes<a class="headerlink" href="#id36" 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">''</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="id37">
<h3>Deprecations and removed features<a class="headerlink" href="#id37" 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">"</span><span class="o">$foo</span><span class="s2">"</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></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">"</span><span class="o">$foo</span><span class="s2">"</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>/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">&</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&bar</span></code> will print “foo&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&bar</span></code> into <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo</span> <span class="pre">&</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-24"></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 & 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-25"></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="id38">
<h3>Scripting improvements<a class="headerlink" href="#id38" 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">"$var$(echo</span> <span class="pre">x)"</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">> </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="id39">
<h3>Interactive improvements<a class="headerlink" href="#id39" 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-26"></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-27"></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-28"></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="id40">
<h4>New or improved bindings<a class="headerlink" href="#id40" 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="id41">
<h4>Improved prompts<a class="headerlink" href="#id41" 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="id42">
<h4>Completions<a class="headerlink" href="#id42" 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">&&</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="id43">
<h4>Improved terminal support<a class="headerlink" href="#id43" 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="id44">
<h3>For distributors<a class="headerlink" href="#id44" 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="id45">
<h3>Notable improvements and fixes<a class="headerlink" href="#id45" 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">"</span><span class="o">$(</span><span class="nf">bar</span><span class="o">)</span><span class="s2">"</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 "bar" 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">> </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="id46">
<h3>Deprecations and removed features<a class="headerlink" href="#id46" 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">&</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">> </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo&bar</span><span class="w"> </span><span class="c"># will print "foo&bar", instead of running "echo foo" in the background and executing "bar"</span>
<span class="gp">> </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo</span><span class="w"> </span><span class="p">&</span><span class="w"> </span><span class="nf">bar</span><span class="w"> </span><span class="c"># will still run "echo foo" in the background and then run "bar"</span>
<span class="go"># with both ampersand-nobg-in-token and qmark-noglob, this argument has no special characters anymore</span>
<span class="gp">> </span><span class="nf">open</span><span class="w"> </span><span class="no">https://www.youtube.com/watch?v=dQw4w9WgXcQ&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">> </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="id47">
<h3>Scripting improvements<a class="headerlink" href="#id47" 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">"$(echo</span> <span class="pre">-n)"</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">> </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">'(.*)fish'</span><span class="w"> </span><span class="s1">'catfish'</span><span class="w"> </span><span class="s1">'twofish'</span><span class="w"> </span><span class="s1">'blue fish'</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">'blue '</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">""</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="id48">
<h3>Interactive improvements<a class="headerlink" href="#id48" 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="id49">
<h4>New or improved bindings<a class="headerlink" href="#id49" 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="id50">
<h4>Improved prompts<a class="headerlink" href="#id50" 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">> </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="id51">
<h4>Completions<a class="headerlink" href="#id51" 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="id52">
<h4>Improved terminal support<a class="headerlink" href="#id52" 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="id53">
<h3>Other improvements<a class="headerlink" href="#id53" 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 & 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="id54">
<h3>For distributors<a class="headerlink" href="#id54" 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="id55">
<h3>Notable improvements and fixes<a class="headerlink" href="#id55" 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="id56">
<h3>Deprecations and removed features<a class="headerlink" href="#id56" 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="id57">
<h3>Scripting improvements<a class="headerlink" href="#id57" 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="id58">
<h3>Interactive improvements<a class="headerlink" href="#id58" 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="id59">
<h4>New or improved bindings<a class="headerlink" href="#id59" 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">",*,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="id60">
<h4>Improved prompts<a class="headerlink" href="#id60" 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="id61">
<h4>Completions<a class="headerlink" href="#id61" 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="id62">
<h4>Improved terminal support<a class="headerlink" href="#id62" 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="id63">
<h3>For distributors<a class="headerlink" href="#id63" 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="id64">
<h3>Notable improvements and fixes<a class="headerlink" href="#id64" 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 "usb"</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">'*usb*'</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">"></span> <span class="pre">"</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">></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">></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">> </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 '-a' 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="id65">
<h3>Scripting improvements<a class="headerlink" href="#id65" 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">&&</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">"bitand(0xFE,</span> <span class="pre">5)"</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"></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">"-n</span> <span class="pre">foo"</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"><&-</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">>&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="id66">
<h3>Interactive improvements<a class="headerlink" href="#id66" 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">&&</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/<subcommand></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">-></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">&&</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="id67">
<h4>New or improved bindings<a class="headerlink" href="#id67" 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="id68">
<h4>Improved prompts<a class="headerlink" href="#id68" 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="id69">
<h4>Improved terminal support<a class="headerlink" href="#id69" 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="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">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<TAB></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="id71">
<h3>For distributors<a class="headerlink" href="#id71" 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="id72">
<h3>Deprecations and removed features<a class="headerlink" href="#id72" 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="id73">
<h3>For distributors and developers<a class="headerlink" href="#id73" 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 & 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">^&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>>&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="id74"></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">"$(cmd)"</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="id75"></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@{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">&></span></code> and <code class="docutils literal notranslate"><span class="pre">&|</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="id76"></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">&&</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">&</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="id77"></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">&&</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="id78"></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
“@”, 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="id79"></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="id80"></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="id81"></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="id82"></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="id83"></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></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="id84"></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">&&</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="id85"></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">~/<TAB></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="id86"></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="id87"></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="id88"></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> & <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="id89"></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> &
<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="id90"></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 & 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="id91"></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="id92"></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 & 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> & <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> & <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="id93"></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="id94"></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 & 12, Dragonfly BSD & 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> & <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="id95"></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="id96"></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="id97"></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="id98"></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="id99"></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="id100"></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="id101"></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="id102"></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="id103"></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="id104"></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> &
<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> & <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> & <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> &
<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> & <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> & <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="id105"></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">^&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>&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="id106"></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="id107"></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 @siteshwar for implementation. Thanks @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="id108"></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> »</li>
<a href="index.html">fish-shell 4.2.1 documentation</a> »
<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">
© 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> 8.2.3.
</div>
</div>
<script type="text/javascript">
FISH_DOCS_VERSION = "4.2";
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>
|