File: relnotes.html

package info (click to toggle)
fish 4.2.1-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 35,980 kB
  • sloc: python: 6,972; javascript: 1,407; sh: 1,009; xml: 411; ansic: 230; objc: 78; makefile: 20
file content (4980 lines) | stat: -rw-r--r-- 744,480 bytes parent folder | download
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 &#8212; 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> &#187;</li>
    
    <a href="index.html">fish-shell 4.2.1 documentation</a> &#187;
    

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

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

      </ul>
    </div>    

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

</div>
<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h4><a href="index.html">Sections</a></h4>
<ul>
<li><a class="reference internal" href="#">Release notes</a><ul>
<li><a class="reference internal" href="#fish-4-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">&quot;fish</span> <span class="pre">default&quot;</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">{echo,echo}</span></code> or <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">echo,</span> <span class="pre">echo</span> <span class="pre">}</span></code> are no longer interpreted as brace expansion tokens but as <a class="reference internal" href="cmds/begin.html"><span class="doc">compound commands</span></a>.</p></li>
<li><p>Terminfo-style key names (<code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">-k</span> <span class="pre">nul</span></code>) are no longer supported. They had been superseded by fish’s <a class="reference internal" href="cmds/bind.html"><span class="doc">own key names</span></a> since 4.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11342">#11342</a>).</p></li>
<li><p>fish no longer reads the terminfo database, so its behavior is generally no longer affected by the <span class="target" id="index-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&quot;foo</span> <span class="pre">&quot;</span> <span class="pre">&gt;/dev/null</span></code>  instead).
The raw files are still exposed via <a class="reference internal" href="cmds/status.html#status-get-file"><span class="std std-ref">status subcommands</span></a>, mainly for fish’s internal use, but you can also use them as a last resort.</p>
<p>Remaining benefits of a full installation (as currently done by CMake) are:</p>
<ul class="simple">
<li><p>man pages like <code class="docutils literal notranslate"><span class="pre">fish(1)</span></code> in standard locations, easily accessible from outside fish.</p></li>
<li><p>a local copy of the HTML documentation, typically accessed via the <a class="reference internal" href="cmds/help.html"><span class="doc">help</span></a> function.
In builds with embedded data, <code class="docutils literal notranslate"><span class="pre">help</span></code> will redirect to e.g. <a class="reference external" href="https://fishshell.com/docs/current/">https://fishshell.com/docs/current/</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> as separate files, making them easily accessible outside fish</p></li>
<li><p>an (empty) <code class="docutils literal notranslate"><span class="pre">/etc/fish/config.fish</span></code> as well as empty directories <code class="docutils literal notranslate"><span class="pre">/etc/fish/{functions,completions,conf.d}</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$PREFIX/share/pkgconfig/fish.pc</span></code>, which defines directories for configuration-snippets, like <code class="docutils literal notranslate"><span class="pre">vendor_completions.d</span></code></p></li>
</ul>
</section>
<section id="changes-to-gettext-localization">
<span id="changelog-4-1-gettext"></span><h3>Changes to gettext localization<a class="headerlink" href="#changes-to-gettext-localization" title="Link to this heading">¶</a></h3>
<p>We replaced several parts of the gettext functionality with custom implementations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11726">#11726</a>).
Most notably, message extraction, which should now work reliably, and the runtime implementation, where we no longer dynamically link to gettext, but instead use our own implementation, whose behavior is similar to GNU gettext, with some <a class="reference internal" href="cmds/_.html"><span class="doc">minor deviations</span></a>.
Our implementation now fully respects fish variables, so locale variables do not have to be exported for fish localizations to work.
They still have to be exported to inform other programs about language preferences.
The <span class="target" id="index-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">&amp;</span></code> at the end of the option spec, before a <code class="docutils literal notranslate"><span class="pre">!</span></code> if present). There is now also a corresponding <code class="docutils literal notranslate"><span class="pre">-d</span></code> / <code class="docutils literal notranslate"><span class="pre">--delete</span></code> option to <code class="docutils literal notranslate"><span class="pre">fish_opt</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span> <span class="pre">--ignore-unknown</span></code> now removes preceding known short options from groups containing unknown options (e.g. when parsing <code class="docutils literal notranslate"><span class="pre">-abc</span></code>, if <code class="docutils literal notranslate"><span class="pre">a</span></code> is known but <code class="docutils literal notranslate"><span class="pre">b</span></code> is not, then <span class="target" id="index-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">&quot;commandline</span> <span class="pre">-i</span> <span class="pre">\n&quot;</span></code> works as expected (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8186">#8186</a>).</p></li>
<li><p>Special input functions run from bindings via <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-f</span></code> are now applied immediately, instead of after the currently executing binding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3031">#3031</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10126">#10126</a>).
For example, <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">-i</span> <span class="pre">foo;</span> <span class="pre">commandline</span> <span class="pre">|</span> <span class="pre">grep</span> <span class="pre">foo</span></code> succeeds now.</p></li>
<li><p>Undo history is no longer truncated after every command, but kept for the lifetime of the shell process.</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> history search now uses glob syntax (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10131">#10131</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">r</kbd> history search now operates only on the line or command substitution at cursor, making it easier to combine commands from history (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9751">#9751</a>).</p></li>
<li><p>Abbreviations can now be restricted to specific commands. For instance:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">abbr</span><span class="w"> </span><span class="no">--add</span><span class="w"> </span><span class="no">--command</span><span class="w"> </span><span class="no">git</span><span class="w"> </span><span class="no">back</span><span class="w"> </span><span class="s1">&#39;reset --hard HEAD^&#39;</span>
</pre></div>
</div>
<p>will expand “back” to <code class="docutils literal notranslate"><span class="pre">reset</span> <span class="pre">--hard</span> <span class="pre">HEAD^</span></code>, but only when the command is <code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9411">#9411</a>).</p>
</li>
</ul>
</section>
<section id="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">&lt;?</span> <span class="pre">/path/to/file</span></code> will try opening the file as input, and if it doesn’t succeed silently uses <code class="docutils literal notranslate"><span class="pre">/dev/null</span></code> instead.
This can help with checks like <code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-f</span> <span class="pre">/path/to/file;</span> <span class="pre">and</span> <span class="pre">string</span> <span class="pre">replace</span> <span class="pre">foo</span> <span class="pre">bar</span> <span class="pre">&lt;</span> <span class="pre">/path/to/file</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10387">#10387</a>)</p></li>
<li><p>A new option <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--tokens-raw</span></code> prints a list of tokens without any unescaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10212">#10212</a>).</p></li>
<li><p>A new option <code class="docutils literal notranslate"><span class="pre">commandline</span> <span class="pre">--showing-suggestion</span></code> tests whether an autosuggestion is currently displayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10586">#10586</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> now show that a function was copied and its source, rather than solely <code class="docutils literal notranslate"><span class="pre">Defined</span> <span class="pre">interactively</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6575">#6575</a>).</p></li>
<li><p>Stack trace now shows line numbers for copied functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6575">#6575</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">foo</span> <span class="pre">&amp;</span> <span class="pre">&amp;&amp;</span> <span class="pre">bar</span></code> is now a syntax error, like in other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9911">#9911</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">-e</span> <span class="pre">foo;</span> <span class="pre">end</span></code> now prints a more accurate error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10000">#10000</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span></code> into a directory that is not readable but accessible (permissions <code class="docutils literal notranslate"><span class="pre">--x</span></code>) is now possible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10432">#10432</a>).</p></li>
<li><p>An integer overflow in <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> leading to a near-infinite loop has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9899">#9899</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">shorten</span></code> behaves better in the presence of non-printable characters, including fixing an integer overflow that shortened strings more than intended (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9854">#9854</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">pad</span></code> no longer allows non-printable characters as padding (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9854">#9854</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">repeat</span></code> now allows omission of <code class="docutils literal notranslate"><span class="pre">-n</span></code> when the first argument is an integer (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10282">#10282</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> and <code class="docutils literal notranslate"><span class="pre">replace</span></code> have a new <code class="docutils literal notranslate"><span class="pre">--max-matches</span></code> option to return as soon as the specified number of matches have been identified, which can improve performance in scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10587">#10587</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--handlers-type</span> <span class="pre">caller-exit</span></code> once again lists functions defined as <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-job-exit</span> <span class="pre">caller</span></code>, rather than them being listed by <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--handlers-type</span> <span class="pre">process-exit</span></code>.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--no-event</span></code> option sets or erases variables without triggering a variable event. This can be useful to change a variable in an event handler (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10480">#10480</a>).</p></li>
<li><p>Commas in command substitution output are no longer used as separators in brace expansion, preventing a surprising expansion in some cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5048">#5048</a>).</p></li>
<li><p>Universal variables can now store strings containing invalid UTF-8 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10313">#10313</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">path</span> <span class="pre">basename</span> <span class="pre">-E</span></code> option that causes it to return the basename (“filename” with the directory prefix removed) with the final extension (if any) also removed. This is a shorter version of <code class="docutils literal notranslate"><span class="pre">path</span> <span class="pre">change-extension</span> <span class="pre">&quot;&quot;</span> <span class="pre">(path</span> <span class="pre">basename</span> <span class="pre">$foo)</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10521">#10521</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">--scale-mode</span></code> option to select <code class="docutils literal notranslate"><span class="pre">truncate</span></code>, <code class="docutils literal notranslate"><span class="pre">round</span></code>, <code class="docutils literal notranslate"><span class="pre">floor</span></code>, <code class="docutils literal notranslate"><span class="pre">ceiling</span></code> as you wish; the default value is <code class="docutils literal notranslate"><span class="pre">truncate</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9117">#9117</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">random</span></code> is now less strict about its arguments, allowing a start larger or equal to the end. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10879">#10879</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--argument-names</span></code> now produces an error if a read-only variable name is used, rather than simply ignoring it (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10842">#10842</a>).</p></li>
<li><p>Tilde expansion in braces (that is, <code class="docutils literal notranslate"><span class="pre">{~,}</span></code>) works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10610">#10610</a>).</p></li>
</ul>
</section>
<section id="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">&gt;echo</span></code> is now highlighted as error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8877">#8877</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_vi_cursor</span></code> now works properly inside the prompt created by builtin <code class="docutils literal notranslate"><span class="pre">read</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10088">#10088</a>).</p></li>
<li><p>fish no longer fails to open a FIFO if interrupted by a terminal resize signal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10250">#10250</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--help</span></code> and friends no longer ignore redirections. This fixes a regression in version 3.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10274">#10274</a>).</p></li>
<li><p>Measuring a command with <code class="docutils literal notranslate"><span class="pre">time</span></code> now considers the time taken for command substitution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9100">#9100</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_add_path</span></code> now automatically enables verbose mode when used interactively (in the command line), in an effort to be clearer about what it does (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10532">#10532</a>).</p></li>
<li><p>fish no longer adopts TTY modes of failed commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10603">#10603</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-e</span> <span class="pre">cmd</span></code> now prevents autoloading completions for <code class="docutils literal notranslate"><span class="pre">cmd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6716">#6716</a>).</p></li>
<li><p>fish’s default color scheme no longer uses the color “blue”, as it has bad contrast against the background in a few terminal’s default palettes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10758">#10758</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10786">#10786</a>)
The color scheme will not be upgraded for existing installs. If you want, you should select it again via <code class="docutils literal notranslate"><span class="pre">fish_config</span></code>.</p></li>
<li><p>Command lines which are larger than the terminal are now displayed correctly, instead of multiple blank lines being displayed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7296">#7296</a>).</p></li>
<li><p>Prompts that use external commands will no longer produce an infinite loop if the command crashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9796">#9796</a>).</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">jobs</span></code> shows “-” for jobs that have the same process group ID as the fish process, rather than “-2” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10833">#10833</a>).</p></li>
<li><p>Job expansion (<code class="docutils literal notranslate"><span class="pre">%1</span></code> syntax) works properly for jobs that are a mixture of external commands and functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10832">#10832</a>).</p></li>
<li><p>Command lines which have more lines than the terminal can be displayed and edited correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10827">#10827</a>).</p></li>
<li><p>Functions that have been erased are no longer highlighted as valid commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10866">#10866</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">not</span></code>, <code class="docutils literal notranslate"><span class="pre">time</span></code>, and variable assignments (that is <code class="docutils literal notranslate"><span class="pre">not</span> <span class="pre">time</span> <span class="pre">a=b</span> <span class="pre">env</span></code>) is correctly recognized as valid syntax (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10890">#10890</a>).</p></li>
<li><p>The Web-based configuration removes old right-hand-side prompts again, fixing a regression in fish 3.4.0 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10675">#10675</a>).</p></li>
<li><p>Further protection against programs which crash and leave the terminal in an inconsistent state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10834">#10834</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/11038">#11038</a>).</p></li>
<li><p>A workaround for git being very slow on macOS has been applied, improving performance after a fresh boot (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10535">#10535</a>).</p></li>
</ul>
<section id="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">&quot;,</kbd>+<kbd class="kbd docutils literal notranslate">,p</kbd> and <kbd class="kbd docutils literal notranslate">&quot;,</kbd>+<kbd class="kbd docutils literal notranslate">,y,y</kbd>.</p></li>
<li><p>Deleting in visual mode now moves the cursor back, matching vi (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10394">#10394</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">;</kbd>, <kbd class="kbd docutils literal notranslate">,</kbd>, <kbd class="kbd docutils literal notranslate">v</kbd>, <kbd class="kbd docutils literal notranslate">V</kbd>, <kbd class="kbd docutils literal notranslate">I</kbd>, and <kbd class="kbd docutils literal notranslate">gU</kbd> bindings work in visual mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10601">#10601</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10648">#10648</a>).</p></li>
<li><p>Support <kbd class="kbd docutils literal notranslate">%</kbd> motion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10593">#10593</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">k</kbd> to remove the contents of the line beyond the cursor in all modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/10648">#10648</a>).</p></li>
<li><p>Support <cite>ab</cite> and <cite>ib</cite> vi text objects. New input functions are introduced <code class="docutils literal notranslate"><span class="pre">jump-{to,till}-matching-bracket</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1842">#1842</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">E</kbd> binding now correctly handles the last character of the word, by jumping to the next word (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9700">#9700</a>).</p></li>
</ul>
</li>
</ul>
</section>
<section id="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">&#39;^\.\.+$&#39;</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">multicd</span>
</pre></div>
</div>
<p>This expands <code class="docutils literal notranslate"><span class="pre">..</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../</span></code>, <code class="docutils literal notranslate"><span class="pre">...</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../../</span></code> and <code class="docutils literal notranslate"><span class="pre">....</span></code> to <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">../../../</span></code> and so on.</p>
<p>Or:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">last_history_item</span><span class="p">;</span><span class="w"> </span><span class="nf">echo</span><span class="w"> </span><span class="o">$history[</span><span class="no">1</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="nf">end</span>
<span class="nf">abbr</span><span class="w"> </span><span class="no">-a</span><span class="w"> </span><span class="no">!!</span><span class="w"> </span><span class="no">--position</span><span class="w"> </span><span class="no">anywhere</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">last_history_item</span>
</pre></div>
</div>
<p>which expands <code class="docutils literal notranslate"><span class="pre">!!</span></code> to the last history item, anywhere on the command line, mimicking other shells’ history expansion.</p>
<p>See <a class="reference internal" href="cmds/abbr.html"><span class="doc">the documentation</span></a> for more.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">path</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">mtime</span></code> subcommand to print the modification time stamp for files. For example, this can be used to handle cache file ages (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9057">#9057</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">touch</span><span class="w"> </span><span class="no">foo</span>
<span class="gp">&gt; </span><span class="nf">sleep</span><span class="w"> </span><span class="no">10</span>
<span class="gp">&gt; </span><span class="nf">path</span><span class="w"> </span><span class="no">mtime</span><span class="w"> </span><span class="no">--relative</span><span class="w"> </span><span class="no">foo</span>
<span class="go">10</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">shorten</span></code> subcommand to shorten strings to a given visible width (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9156">#9156</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">shorten</span><span class="w"> </span><span class="no">--max</span><span class="w"> </span><span class="no">10</span><span class="w"> </span><span class="s2">&quot;Hello this is a long string&quot;</span>
<span class="go">Hello thi…</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> (aka <code class="docutils literal notranslate"><span class="pre">[</span></code>) gained <code class="docutils literal notranslate"><span class="pre">-ot</span></code> (older than) and <code class="docutils literal notranslate"><span class="pre">-nt</span></code> (newer than) operators to compare file modification times, and <code class="docutils literal notranslate"><span class="pre">-ef</span></code> to compare whether the arguments are the same file (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3589">#3589</a>).</p></li>
<li><p>fish will now mark the extent of many errors with a squiggly line, instead of just a caret (<code class="docutils literal notranslate"><span class="pre">^</span></code>) at the beginning (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9130">#9130</a>). For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">checks/set.fish</span><span class="w"> </span><span class="o">(</span><span class="nf">line</span><span class="w"> </span><span class="no">471</span><span class="o">)</span><span class="no">:</span><span class="w"> </span><span class="no">for:</span><span class="w"> </span><span class="no">a,b:</span><span class="w"> </span><span class="no">invalid</span><span class="w"> </span><span class="no">variable</span><span class="w"> </span><span class="no">name.</span><span class="w"> </span><span class="no">See</span><span class="w"> </span><span class="no">`help</span><span class="w"> </span><span class="no">identifiers`</span>
<span class="nf">for</span><span class="w"> </span><span class="no">a,b</span><span class="w"> </span><span class="nf">in</span><span class="w"> </span><span class="no">y</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="no">z</span><span class="w"> </span><span class="no">3</span>
<span class="w">    </span><span class="nf">^~^</span>
</pre></div>
</div>
</li>
<li><p>A new function, <code class="docutils literal notranslate"><span class="pre">fish_delta</span></code>, shows changes that have been made in fish’s configuration from the defaults (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9255">#9255</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--erase</span></code> can now be used with multiple scopes at once, like <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-efglU</span> <span class="pre">foo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7711">#7711</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9280">#9280</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> gained a new subcommand, <code class="docutils literal notranslate"><span class="pre">current-commandline</span></code>, which retrieves the entirety of the currently-executing command line when called from a function during execution. This allows easier job introspection (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8905">#8905</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/9296">#9296</a>).</p></li>
</ul>
</section>
<section id="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">&gt; </span><span class="nf">set</span><span class="w"> </span><span class="no">--show</span><span class="w"> </span><span class="no">XDG_DATA_DIRS</span>
<span class="go">$XDG_DATA_DIRS: set in global scope, exported, a path variable with 4 elements</span>
<span class="go">$XDG_DATA_DIRS[1]: |/home/alfa/.local/share/flatpak/exports/share|</span>
<span class="go">$XDG_DATA_DIRS[2]: |/var/lib/flatpak/exports/share|</span>
<span class="go">$XDG_DATA_DIRS[3]: |/usr/local/share|</span>
<span class="go">$XDG_DATA_DIRS[4]: |/usr/share|</span>
<span class="go">$XDG_DATA_DIRS: originally inherited as |/home/alfa/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/|</span>
</pre></div>
</div>
</li>
<li><p>The read limit is now restored to the default when <span class="target" id="index-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">&#39;&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">path</span><span class="w"> </span><span class="no">extension</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">path</span><span class="w"> </span><span class="no">sort</span><span class="w"> </span><span class="no">-u</span>
</pre></div>
</div>
</li>
<li><p>Tab (or any key bound to <code class="docutils literal notranslate"><span class="pre">complete</span></code>) now expands wildcards instead of invoking completions, if there is a wildcard in the path component under the cursor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/954">#954</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8593">#8593</a>).</p></li>
<li><p>Scripts can now catch and handle the SIGINT and SIGTERM signals, either via <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-signal</span></code> or with <code class="docutils literal notranslate"><span class="pre">trap</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6649">#6649</a>).</p></li>
</ul>
</section>
<section id="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">&quot;</span><span class="o">$foo</span><span class="s2">&quot;</span><span class="w"> </span><span class="no">-gt</span><span class="w"> </span><span class="no">8</span><span class="w"> </span><span class="no">^/dev/null</span>
</pre></div>
</div>
<p>to ignore error messages. This made the <code class="docutils literal notranslate"><span class="pre">^</span></code> symbol require escaping and quoting, and was a bit of a weird shortcut considering <code class="docutils literal notranslate"><span class="pre">2&gt;</span></code> already worked, which is only one character longer.</p>
<p>So the above can simply become:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">test</span><span class="w"> </span><span class="s2">&quot;</span><span class="o">$foo</span><span class="s2">&quot;</span><span class="w"> </span><span class="no">-gt</span><span class="w"> </span><span class="no">8</span><span class="w"> </span><span class="p">2&gt;/dev/null</span>
</pre></div>
</div>
</li>
<li><p>The following feature flags have been enabled by default:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">regex-easyesc</span></code>, which makes <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-r</span></code> not do a superfluous round of unescaping in the replacement expression.
That means e.g. to escape any “a” or “b” in an argument you can use <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">replace</span> <span class="pre">-ra</span> <span class="pre">'([ab])'</span> <span class="pre">'\\\\$1'</span> <span class="pre">foobar</span></code> instead of needing 8 backslashes.</p>
<p>This only affects the <em>replacement</em> expression, not the <em>match</em> expression (the <code class="docutils literal notranslate"><span class="pre">'([ab])'</span></code> part in the example).
A survey of plugins on GitHub did not turn up any affected code, so we do not expect this to affect many users.</p>
<p>This flag was introduced in fish 3.1.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">ampersand-nobg-in-token</span></code>, which means that <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> will not create a background job if it occurs in the middle of a word. For example, <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo&amp;bar</span></code> will print “foo&amp;bar” instead of running <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo</span></code> in the background and then starting <code class="docutils literal notranslate"><span class="pre">bar</span></code> as a second job.</p>
<p>Reformatting with <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> would already introduce spaces, turning <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo&amp;bar</span></code> into <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">foo</span> <span class="pre">&amp;</span> <span class="pre">bar</span></code>.</p>
<p>This flag was introduced in fish 3.4.</p>
</li>
</ul>
<p>To turn off these flags, add <code class="docutils literal notranslate"><span class="pre">no-regex-easyesc</span></code> or <code class="docutils literal notranslate"><span class="pre">no-ampersand-nobg-in-token</span></code> to <span class="target" id="index-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 &amp; abbreviations again. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8781">#8781</a>)</p></li>
<li><p>The meaning of an empty color variable has changed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8793">#8793</a>). Previously, when a variable was set but empty, it would be interpreted as the “normal” color. Now, empty color variables cause the same effect as unset variables - the general highlighting variable for that type is used instead. For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">set</span><span class="w"> </span><span class="no">-g</span><span class="w"> </span><span class="no">fish_color_command</span><span class="w"> </span><span class="no">blue</span>
<span class="nf">set</span><span class="w"> </span><span class="no">-g</span><span class="w"> </span><span class="no">fish_color_keyword</span>
</pre></div>
</div>
<p>would previously make keywords “normal” (usually white in a dark terminal). Now it’ll make them blue. To achieve the previous behavior, use the normal color explicitly: <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-g</span> <span class="pre">fish_color_keyword</span> <span class="pre">normal</span></code>.</p>
<p>This makes it easier to make self-contained color schemes that don’t accidentally use color that was set before.
<code class="docutils literal notranslate"><span class="pre">fish_config</span></code> has been adjusted to set known color variables that a theme doesn’t explicitly set to empty.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">eval</span></code> is now a reserved keyword, so it can’t be used as a function name. This follows <code class="docutils literal notranslate"><span class="pre">set</span></code> and <code class="docutils literal notranslate"><span class="pre">read</span></code>, and is necessary because it can’t be cleanly shadowed by a function - at the very least <code class="docutils literal notranslate"><span class="pre">eval</span> <span class="pre">set</span> <span class="pre">-l</span> <span class="pre">argv</span> <span class="pre">foo</span></code> breaks. Fish will ignore autoload files for it, so left over <code class="docutils literal notranslate"><span class="pre">eval.fish</span></code> from previous fish versions won’t be loaded.</p></li>
<li><p>The git prompt in informative mode now defaults to skipping counting untracked files, as this was extremely slow. To turn it on, set <span class="target" id="index-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">&quot;$var$(echo</span> <span class="pre">x)&quot;</span></code>) no longer affect the variable expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8849">#8849</a>).</p></li>
<li><p>Fish now correctly expands command substitutions that are preceded by an escaped dollar (like <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">\$(echo)</span></code>). This regressed in version 3.4.0.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> can now handle underscores (<code class="docutils literal notranslate"><span class="pre">_</span></code>) as visual separators in numbers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8611">#8611</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8496">#8496</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">math</span><span class="w"> </span><span class="no">5</span><span class="w"> </span><span class="no">+</span><span class="w"> </span><span class="no">2_123_252</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code>’s <code class="docutils literal notranslate"><span class="pre">min</span></code> and <code class="docutils literal notranslate"><span class="pre">max</span></code> functions now take a variable number of arguments instead of always requiring 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8644">#8644</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8646">#8646</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">math</span><span class="w"> </span><span class="no">min</span><span class="w"> </span><span class="no">8,2,4</span>
<span class="go">2</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> is now faster as the last process in a pipeline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8552">#8552</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">join</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--no-empty</span></code> flag to skip empty arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8774">#8774</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8351">#8351</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> now only triggers the <code class="docutils literal notranslate"><span class="pre">fish_read</span></code> event, not the <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> event (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8797">#8797</a>). It was supposed to work this way in fish 3.2.0 and later, but both events were emitted.</p></li>
<li><p>The TTY modes are no longer restored when non-interactive shells exit. This fixes wrong tty modes in pipelines with interactive commands. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8705">#8705</a>).</p></li>
<li><p>Some functions shipped with fish printed error messages to standard output, but they now they rightly go to standard error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8855">#8855</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> now correctly reports CPU usage as a percentage, instead of as a number of clock ticks (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8919">#8919</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process-exit</span></code> events now fire when the process exits even if the job has not yet exited, fixing a regression in 3.4.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8914">#8914</a>).</p></li>
</ul>
</section>
<section id="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">&amp;&amp;</span></code>). This helps with caching - fish’s complete system stores the return value of each condition as long as the commandline doesn’t change, so this can reduce the number of conditions that need to be evaluated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8536">#8536</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8967">#8967</a>).</p></li>
</ul>
</section>
<section id="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">&quot;</span><span class="o">$(</span><span class="nf">bar</span><span class="o">)</span><span class="s2">&quot;</span>

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

<span class="nf">foo</span><span class="w"> </span><span class="o">(</span><span class="nf">bar</span><span class="o">)</span>
<span class="c"># can now be written as</span>
<span class="nf">foo</span><span class="w"> </span><span class="o">$(</span><span class="nf">bar</span><span class="o">)</span>
<span class="c"># this will still split on newlines only.</span>
</pre></div>
</div>
</li>
<li><p>Complementing the <code class="docutils literal notranslate"><span class="pre">prompt</span></code> command in 3.3.0, <code class="docutils literal notranslate"><span class="pre">fish_config</span></code> gained a <code class="docutils literal notranslate"><span class="pre">theme</span></code> subcommand to show and pick from the sample themes (meaning color schemes) directly in the terminal, instead of having to open a Web browser. For example <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">choose</span> <span class="pre">Nord</span></code> loads the Nord theme in the current session (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8132">#8132</a>). The current theme can be saved with <code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">theme</span> <span class="pre">dump</span></code>, and custom themes can be added by saving them in <code class="docutils literal notranslate"><span class="pre">~/.config/fish/themes/</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> and <code class="docutils literal notranslate"><span class="pre">read</span></code> learned a new option, <code class="docutils literal notranslate"><span class="pre">--function</span></code>, to set a variable in the function’s top scope. This should be a more familiar way of scoping variables and avoids issues with <code class="docutils literal notranslate"><span class="pre">--local</span></code>, which is actually block-scoped (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/565">#565</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8145">#8145</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">function</span><span class="w"> </span><span class="no">demonstration</span>
<span class="w">    </span><span class="nf">if</span><span class="w"> </span><span class="nf">true</span>
<span class="w">        </span><span class="nf">set</span><span class="w"> </span><span class="no">--function</span><span class="w"> </span><span class="no">foo</span><span class="w"> </span><span class="no">bar</span>
<span class="w">        </span><span class="nf">set</span><span class="w"> </span><span class="no">--local</span><span class="w"> </span><span class="no">baz</span><span class="w"> </span><span class="no">banana</span>
<span class="w">    </span><span class="nf">end</span>
<span class="w">    </span><span class="nf">echo</span><span class="w"> </span><span class="o">$foo</span><span class="w"> </span><span class="c"># prints &quot;bar&quot; because $foo is still valid</span>
<span class="w">    </span><span class="nf">echo</span><span class="w"> </span><span class="o">$baz</span><span class="w"> </span><span class="c"># prints nothing because $baz went out of scope</span>
<span class="nf">end</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">pad</span></code> now excludes escape sequences like colors that fish knows about, and a new <code class="docutils literal notranslate"><span class="pre">--visible</span></code> flag to <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">length</span></code> makes it use that kind of visible width. This is useful to get the number of terminal cells an already colored string would occupy, like in a prompt. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8182">#8182</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7784">#7784</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4012">#4012</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">length</span><span class="w"> </span><span class="no">--visible</span><span class="w"> </span><span class="o">(</span><span class="nf">set_color</span><span class="w"> </span><span class="no">red</span><span class="o">)</span><span class="no">foo</span>
<span class="go">3</span>
</pre></div>
</div>
</li>
<li><p>Performance improvements to globbing, especially on systems using glibc. In some cases (large directories with files with many numbers in the names) this almost halves the time taken to expand the glob.</p></li>
<li><p>Autosuggestions can now be turned off by setting <code class="docutils literal notranslate"><span class="pre">$fish_autosuggestion_enabled</span></code> to 0, and (almost) all highlighting can be turned off by choosing the new “None” theme. The exception is necessary colors, like those which distinguish autosuggestions from the actual command line. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8376">#8376</a>)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_git_prompt</span></code> function, which is included in the default prompts, now overrides <code class="docutils literal notranslate"><span class="pre">git</span></code> to avoid running  commands set by per-repository configuration. This avoids a potential security issue in some circumstances, and has been assigned CVE-2022-20001 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8589">#8589</a>).</p></li>
</ul>
</section>
<section id="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">&amp;</span></code> only act as background operator if followed by a separator. In combination with <code class="docutils literal notranslate"><span class="pre">qmark-noglob</span></code>, this allows entering most URLs at the command line without quoting or escaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7991">#7991</a>). For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo&amp;bar</span><span class="w"> </span><span class="c"># will print &quot;foo&amp;bar&quot;, instead of running &quot;echo foo&quot; in the background and executing &quot;bar&quot;</span>
<span class="gp">&gt; </span><span class="nf">echo</span><span class="w"> </span><span class="no">foo</span><span class="w"> </span><span class="p">&amp;</span><span class="w"> </span><span class="nf">bar</span><span class="w"> </span><span class="c"># will still run &quot;echo foo&quot; in the background and then run &quot;bar&quot;</span>
<span class="go"># with both ampersand-nobg-in-token and qmark-noglob, this argument has no special characters anymore</span>
<span class="gp">&gt; </span><span class="nf">open</span><span class="w"> </span><span class="no">https://www.youtube.com/watch?v=dQw4w9WgXcQ&amp;feature=youtu.be</span>
</pre></div>
</div>
<p>As a reminder, feature flags can be set on startup with <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--features</span> <span class="pre">ampersand-nobg-in-token,qmark-noglob</span></code> or with a universal variable called <code class="docutils literal notranslate"><span class="pre">fish_features</span></code>:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">set</span><span class="w"> </span><span class="no">-Ua</span><span class="w"> </span><span class="no">fish_features</span><span class="w"> </span><span class="no">ampersand-nobg-in-token</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">$status</span></code> is now forbidden as a command, to prevent a surprisingly common error among new users: Running <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">$status</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8171">#8171</a>). This applies <em>only</em> to <code class="docutils literal notranslate"><span class="pre">$status</span></code>, other variables are still allowed.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> now returns an exit status of 255 if given no variable names. This means <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">$foo</span></code> will not enter the if-block if <code class="docutils literal notranslate"><span class="pre">$foo</span></code> is empty or unset. To restore the previous behavior, use <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">not</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">foo;</span> <span class="pre">or</span> <span class="pre">set</span> <span class="pre">-q</span> <span class="pre">$foo</span></code> - but this is unlikely to be desirable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8214">#8214</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">_</span></code> is now a reserved keyword (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8342">#8342</a>).</p></li>
<li><p>The special input functions <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>, <code class="docutils literal notranslate"><span class="pre">nextd-or-forward-word</span></code> and <code class="docutils literal notranslate"><span class="pre">prevd-or-backward-word</span></code> replace fish functions of the same names (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8538">#8538</a>).</p></li>
<li><p>Mac OS X 10.9 is no longer supported. The minimum Mac version is now 10.10 “Yosemite.”</p></li>
</ul>
</section>
<section id="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">&quot;$(echo</span> <span class="pre">-n)&quot;</span></code> (see above).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> gained a <code class="docutils literal notranslate"><span class="pre">--groups-only</span></code> option, which makes it only output capturing groups, excluding the full match. This allows <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> to do simple transformations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6056">#6056</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">string</span><span class="w"> </span><span class="no">match</span><span class="w"> </span><span class="no">-r</span><span class="w"> </span><span class="no">--groups-only</span><span class="w"> </span><span class="s1">&#39;(.*)fish&#39;</span><span class="w"> </span><span class="s1">&#39;catfish&#39;</span><span class="w"> </span><span class="s1">&#39;twofish&#39;</span><span class="w"> </span><span class="s1">&#39;blue fish&#39;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">escape</span>
<span class="go">cat</span>
<span class="go">two</span>
<span class="go">&#39;blue &#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_user_paths</span></code> is now automatically deduplicated to fix a common user error of appending to it in config.fish when it is universal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8117">#8117</a>). <a class="reference internal" href="cmds/fish_add_path.html"><span class="doc">fish_add_path</span></a> remains the recommended way to add to $PATH.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">return</span></code> can now be used outside functions. In scripts, it does the same thing as <code class="docutils literal notranslate"><span class="pre">exit</span></code>. In interactive mode,it sets <code class="docutils literal notranslate"><span class="pre">$status</span></code> without exiting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8148">#8148</a>).</p></li>
<li><p>An oversight prevented all syntax checks from running on commands given to <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8171">#8171</a>). This includes checks such as <code class="docutils literal notranslate"><span class="pre">exec</span></code> not being allowed in a pipeline, and <code class="docutils literal notranslate"><span class="pre">$$</span></code> not being a valid variable. Generally, another error was generated anyway.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> now correctly reformats tokens that end with a backslash followed by a newline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8197">#8197</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> gained an <code class="docutils literal notranslate"><span class="pre">--is-valid</span></code> option to check if the command line is syntactically valid and complete. This allows basic implementation of transient prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8142">#8142</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> gained a <code class="docutils literal notranslate"><span class="pre">--paging-full-mode</span></code> option to check if the pager is showing all the possible lines (no “7 more rows” message) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8485">#8485</a>).</p></li>
<li><p>List expansion correctly reports an error when used with all zero indexes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8213">#8213</a>).</p></li>
<li><p>Running <code class="docutils literal notranslate"><span class="pre">fish</span></code> with a directory instead of a script as argument (eg <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">.</span></code>) no longer leads to an infinite loop. Instead it errors out immediately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8258">#8258</a>)</p></li>
<li><p>Some error messages occurring after fork, like “text file busy” have been replaced by bespoke error messages for fish (like “File is currently open for writing”). This also restores error messages with current glibc versions that removed sys_errlist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8234">#8234</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4183">#4183</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">realpath</span></code> builtin now also squashes leading slashes with the <code class="docutils literal notranslate"><span class="pre">--no-symlinks</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8281">#8281</a>).</p></li>
<li><p>When trying to <code class="docutils literal notranslate"><span class="pre">cd</span></code> to a dangling (broken) symbolic link, fish will print an error noting that the target is a broken link (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8264">#8264</a>).</p></li>
<li><p>On MacOS terminals that are not granted permissions to access a folder, <code class="docutils literal notranslate"><span class="pre">cd</span></code> would print a spurious “rotten symlink” error, which has been corrected to “permission denied” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8264">#8264</a>).</p></li>
<li><p>Since fish 3.0, <code class="docutils literal notranslate"><span class="pre">for</span></code> loops would trigger a variable handler function before the loop was entered. As the variable had not actually changed or been set, this was a spurious event and has been removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8384">#8384</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now correctly prints negative values and values larger than <code class="docutils literal notranslate"><span class="pre">2**31</span></code> when in hex or octal bases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8417">#8417</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dirs</span></code> always produces an exit status of 0, instead of sometimes returning 1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8211">#8211</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">&quot;&quot;</span></code> no longer crashes fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8147">#8147</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> can now query whether a variable is a path variable via <code class="docutils literal notranslate"><span class="pre">--path</span></code> or <code class="docutils literal notranslate"><span class="pre">--unpath</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8494">#8494</a>).</p></li>
<li><p>Tilde characters (<code class="docutils literal notranslate"><span class="pre">~</span></code>) produced by custom completions are no longer escaped when applied to the command line, making it easier to use the output of a recursive <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C</span></code> in completion scripts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4570">#4570</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--show</span></code> reports when a variable is read-only (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8179">#8179</a>).</p></li>
<li><p>Erasing <code class="docutils literal notranslate"><span class="pre">$fish_emoji_width</span></code> will reset fish to the default guessed emoji width (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8274">#8274</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">la</span></code> function no longer lists entries for “.” and “..”, matching other systems defaults (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8519">#8519</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">-q</span></code> returns the correct exit status when given multiple abbreviation names as arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8431">#8431</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">-v</span></code> returns an exit status of 127 instead of 1 if no command was found (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8547">#8547</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> with <code class="docutils literal notranslate"><span class="pre">--ignore-unknown</span></code> no longer breaks with multiple unknown options in a short option group (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8637">#8637</a>).</p></li>
<li><p>Comments inside command substitutions or brackets now correctly ignore parentheses, quotes, and brackets (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7866">#7866</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8022">#8022</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8695">#8695</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">-C</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--escape</span></code> option, which turns on escaping in returned completion strings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3469">#3469</a>).</p></li>
<li><p>Invalid byte or unicode escapes like <code class="docutils literal notranslate"><span class="pre">\Utest</span></code> or <code class="docutils literal notranslate"><span class="pre">\xNotHex</span></code> are now a tokenizer error instead of causing the token to be truncated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8545">#8545</a>).</p></li>
</ul>
</section>
<section id="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">&gt; </span><span class="nf">prompt_pwd</span><span class="w"> </span><span class="no">--full-length-dirs</span><span class="w"> </span><span class="no">2</span><span class="w"> </span><span class="no">-d</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="o">~</span><span class="no">/dev/fish-shell/share/tools/web_config</span>
<span class="go">~/d/f/s/tools/web_config</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="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 &amp; Ubuntu package linked from fishshell.com is now a single package, rather than split into <code class="docutils literal notranslate"><span class="pre">fish</span></code> and <code class="docutils literal notranslate"><span class="pre">fish-common</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7845">#7845</a>).</p></li>
<li><p>The macOS installer does not assert that Rosetta is required to install fish on machines with Apple Silicon (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8566">#8566</a>).</p></li>
<li><p>The macOS installer now cleans up previous .pkg installations when upgrading. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2963">#2963</a>).</p></li>
</ul>
</section>
<section id="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">&quot;,*,y</kbd> now uses <code class="docutils literal notranslate"><span class="pre">fish_clipboard_copy</span></code>, allowing it to support more than just <code class="docutils literal notranslate"><span class="pre">xsel</span></code>.</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">space</kbd> binding can be correctly customised (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7922">#7922</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exit</span></code> works correctly in bindings (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7967">#7967</a>).</p></li>
<li><p>The <kbd class="kbd docutils literal notranslate">f1</kbd> binding, which opens the manual page for the current command, now works around a bug in certain <code class="docutils literal notranslate"><span class="pre">less</span></code> versions that fail to clear the screen (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7863">#7863</a>).</p></li>
<li><p>The binding for <kbd class="kbd docutils literal notranslate">alt</kbd>-<kbd class="kbd docutils literal notranslate">s</kbd> now toggles whether <code class="docutils literal notranslate"><span class="pre">sudo</span></code> is prepended, even when it took the commandline from history instead of only adding it.</p></li>
<li><p>The new functions <code class="docutils literal notranslate"><span class="pre">fish_commandline_prepend</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_commandline_append</span></code> allow toggling the presence of a prefix/suffix on the current commandline. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7905">#7905</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">backward-kill-path-component</span></code> <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">w</kbd>) no longer erases parts of two tokens when the cursor is positioned immediately after <code class="docutils literal notranslate"><span class="pre">/</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6258">#6258</a>).</p></li>
</ul>
</section>
<section id="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 &quot;usb&quot;</span>
<span class="nf">dmesg</span><span class="w"> </span><span class="no">-w</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">string</span><span class="w"> </span><span class="no">match</span><span class="w"> </span><span class="s1">&#39;*usb*&#39;</span>
</pre></div>
</div>
</li>
<li><p><strong>Prompts will now be truncated</strong> instead of replaced with <code class="docutils literal notranslate"><span class="pre">&quot;&gt;</span> <span class="pre">&quot;</span></code> if they are wider than the terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/904">#904</a>).
For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="o">~</span><span class="nf">/dev/build/fish-shell-git/src/fish-shell/build</span><span class="w"> </span><span class="o">(</span><span class="nf">makepkg</span><span class="o">)</span><span class="p">&gt;</span>
</pre></div>
</div>
<p>will turn into:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">…h-shell/build</span><span class="w"> </span><span class="o">(</span><span class="nf">makepkg</span><span class="o">)</span><span class="p">&gt;</span>
</pre></div>
</div>
<p>It is still possible to react to the <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code> variable inside the prompt to implement smarter behavior.</p>
</li>
<li><p><strong>fish completes ambiguous completions</strong> after pressing <kbd class="kbd docutils literal notranslate">tab</kbd> even when they
have a common prefix, without the user having to press <kbd class="kbd docutils literal notranslate">tab</kbd> again
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6924">#6924</a>).</p></li>
<li><p>fish is less aggressive about resetting terminal modes, such as flow control, after every command.
Although flow control remains off by default, enterprising users can now enable it with
<code class="docutils literal notranslate"><span class="pre">stty</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2315">#2315</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7704">#7704</a>).</p></li>
<li><p>A new <strong>“fish_add_path” helper function to add paths to $PATH</strong> without producing duplicates,
to be used interactively or in <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6960">#6960</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7028">#7028</a>).
For example:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">fish_add_path</span><span class="w"> </span><span class="no">/opt/mycoolthing/bin</span>
</pre></div>
</div>
<p>will add /opt/mycoolthing/bin to the beginning of $fish_user_path without creating duplicates,
so it can be called safely from config.fish or interactively, and the path will just be there, once.</p>
</li>
<li><p><strong>Better errors with “test”</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6030">#6030</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt; </span><span class="nf">test</span><span class="w"> </span><span class="no">1</span><span class="w"> </span><span class="no">=</span><span class="w"> </span><span class="no">2</span><span class="w"> </span><span class="no">and</span><span class="w"> </span><span class="no">echo</span><span class="w"> </span><span class="no">true</span><span class="w"> </span><span class="no">or</span><span class="w"> </span><span class="no">false</span>
<span class="go">test: Expected a combining operator like &#39;-a&#39; at index 4</span>
<span class="go">1 = 2 and echo true or echo false</span>
<span class="go">      ^</span>
</pre></div>
</div>
<p>This includes numbering the index from 1 instead of 0, like fish lists.</p>
</li>
<li><p><strong>A new theme for the documentation and Web-based configuration</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6500">#6500</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7371">#7371</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7523">#7523</a>), matching the design on fishshell.com.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--no-execute</span></code> <strong>will no longer complain about unknown commands</strong>
or non-matching wildcards, as these could be defined differently at
runtime (especially for functions). This makes it usable as a static syntax checker (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/977">#977</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span> <span class="pre">--regex</span></code> now integrates <strong>named PCRE2 capture groups as fish variables</strong>, allowing variables to be set directly from <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7459">#7459</a>). To support this functionality, <code class="docutils literal notranslate"><span class="pre">string</span></code> is now a reserved word and can no longer be wrapped in a function.</p></li>
<li><p>Globs and other <strong>expansions are limited to 512,288 results</strong> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7226">#7226</a>). Because operating systems limit the number of arguments to commands, larger values are unlikely to work anyway, and this helps to avoid hangs.</p></li>
<li><p>A new <strong>“fish for bash users” documentation page</strong> gives a quick overview of the scripting differences between bash and fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2382">#2382</a>), and the completion tutorial has also been moved out into its own document (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6709">#6709</a>).</p></li>
</ul>
</section>
<section id="syntax-changes-and-new-commands">
<h3>Syntax changes and new commands<a class="headerlink" href="#syntax-changes-and-new-commands" title="Link to this heading">¶</a></h3>
<ul>
<li><p>Range limits in index range expansions like <code class="docutils literal notranslate"><span class="pre">$x[$start..$end]</span></code> may be omitted: <code class="docutils literal notranslate"><span class="pre">$start</span></code> and <code class="docutils literal notranslate"><span class="pre">$end</span></code> default to 1 and -1 (the last item) respectively (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6574">#6574</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">1..</span><span class="o">]</span>
<span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">..-1</span><span class="o">]</span>
<span class="nf">echo</span><span class="w"> </span><span class="o">$var[</span><span class="no">..</span><span class="o">]</span>
</pre></div>
</div>
<p>All print the full list <code class="docutils literal notranslate"><span class="pre">$var</span></code>.</p>
</li>
<li><p>When globbing, a segment which is exactly <code class="docutils literal notranslate"><span class="pre">**</span></code> may now match zero directories. For example <code class="docutils literal notranslate"><span class="pre">**/foo</span></code> may match <code class="docutils literal notranslate"><span class="pre">foo</span></code> in the current directory (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7222">#7222</a>).</p></li>
</ul>
</section>
<section id="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">&amp;&amp;</span></code> or <code class="docutils literal notranslate"><span class="pre">||</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pushd</span></code> only adds a directory to the stack if changing to it was successful (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6947">#6947</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_job_summary</span></code> function is called whenever a
background job stops or ends, or any job terminates from a signal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6959">#6959</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2727">#2727</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4319">#4319</a>).
The default behaviour can now be customized by redefining it.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span></code> gained new <code class="docutils literal notranslate"><span class="pre">dirname</span></code> and <code class="docutils literal notranslate"><span class="pre">basename</span></code> convenience subcommands
to get just the directory to the running script or the name of it,
to simplify common tasks such as running <code class="docutils literal notranslate"><span class="pre">(dirname</span> <span class="pre">(status</span> <span class="pre">filename))</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7076">#7076</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1818">#1818</a>).</p></li>
<li><p>Broken pipelines are now handled more smoothly; in particular, bad redirection mid-pipeline
results in the job continuing to run but with the broken file descriptor replaced with a closed
file descriptor. This allows better error recovery and is more in line with other shells’
behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7038">#7038</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span> <span class="pre">--quiet</span> <span class="pre">PID</span></code> no longer prints “no suitable job” if the job for PID does not exist (eg because it has finished) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6809">#6809</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6812">#6812</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> now shows continued child processes correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6818">#6818</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">disown</span></code> should no longer create zombie processes when job control is off, such as in <code class="docutils literal notranslate"><span class="pre">config.fish</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7183">#7183</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">command</span></code>, <code class="docutils literal notranslate"><span class="pre">jobs</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> builtins support <code class="docutils literal notranslate"><span class="pre">--query</span></code> as the long form of <code class="docutils literal notranslate"><span class="pre">-q</span></code>, matching other builtins.
The long form <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> is deprecated (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7276">#7276</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> no longer requires a short flag letter for long-only options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7585">#7585</a>)
and only prints a backtrace with invalid options to argparse itself (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6703">#6703</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">argparse</span></code> now passes the validation variables (e.g. <code class="docutils literal notranslate"><span class="pre">$_flag_value</span></code>) as local-exported variables,
avoiding the need for <code class="docutils literal notranslate"><span class="pre">--no-scope-shadowing</span></code> in validation functions.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> takes the first argument as the name of the command if the <code class="docutils literal notranslate"><span class="pre">--command</span></code>/<code class="docutils literal notranslate"><span class="pre">-c</span></code> option is not used,
so <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">git</span></code> is treated like <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">--command</span> <span class="pre">git</span></code>,
and it can show the loaded completions for specific commands with <code class="docutils literal notranslate"><span class="pre">complete</span> <span class="pre">COMMANDNAME</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7321">#7321</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">-b</span></code> (without an argument) no longer prints an error message, matching other invalid invocations of this command (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7154">#7154</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> no longer produces a syntax error when the command cannot be found (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6098">#6098</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--erase</span></code> and <code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> can now erase multiple things in one go, matching <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--erase</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7377">#7377</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span> <span class="pre">--erase</span></code> no longer prints errors when used with no arguments or on an unset abbreviation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7376">#7376</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7732">#7732</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span> <span class="pre">-t</span></code>, for testing whether file descriptors are connected to a terminal, works for file descriptors 0, 1, and 2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4766">#4766</a>).
It can still return incorrect results in other cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1228">#1228</a>).</p></li>
<li><p>Trying to execute scripts with Windows line endings (CRLF) produces a sensible error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2783">#2783</a>).</p></li>
<li><p>Trying to execute commands with arguments that exceed the operating system limit now produces a specific error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6800">#6800</a>).</p></li>
<li><p>An <code class="docutils literal notranslate"><span class="pre">alias</span></code> that delegates to a command with the same name no longer triggers an error about recursive completion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7389">#7389</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> now has a <code class="docutils literal notranslate"><span class="pre">--base</span></code> option to output the result in hexadecimal or octal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7496">#7496</a>) and produces more specific error messages (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7508">#7508</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> learned bitwise functions <code class="docutils literal notranslate"><span class="pre">bitand</span></code>, <code class="docutils literal notranslate"><span class="pre">bitor</span></code> and <code class="docutils literal notranslate"><span class="pre">bitxor</span></code>, used like <code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">&quot;bitand(0xFE,</span> <span class="pre">5)&quot;</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7281">#7281</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> learned tau for those who don’t like typing “2 * pi”.</p></li>
<li><p>Failed redirections will now set <code class="docutils literal notranslate"><span class="pre">$status</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7540">#7540</a>).</p></li>
<li><p>fish sets exit status in a more consistent manner after errors, including invalid expansions like <code class="docutils literal notranslate"><span class="pre">$foo[</span></code>.</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">--silent</span></code> while fish is in private mode was adding these potentially-sensitive entries to the history; this has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7230">#7230</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> can now read interactively from other files, and can be used to read from the terminal via <code class="docutils literal notranslate"><span class="pre">read</span> <span class="pre">&lt;/dev/tty</span></code> (if the operating system provides <code class="docutils literal notranslate"><span class="pre">/dev/tty</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7358">#7358</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_status_to_signal</span></code> function for transforming exit statuses to signal names has been added (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7597">#7597</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7595">#7595</a>).</p></li>
<li><p>The fallback <code class="docutils literal notranslate"><span class="pre">realpath</span></code> builtin supports the <code class="docutils literal notranslate"><span class="pre">-s</span></code>/<code class="docutils literal notranslate"><span class="pre">--no-symlinks</span></code> option, like GNU realpath (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7574">#7574</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> and <code class="docutils literal notranslate"><span class="pre">type</span></code> now explain when a function was defined via <code class="docutils literal notranslate"><span class="pre">source</span></code> instead of just saying <code class="docutils literal notranslate"><span class="pre">Defined</span> <span class="pre">in</span> <span class="pre">-</span></code>.</p></li>
<li><p>Significant performance improvements when globbing, appending to variables or in <code class="docutils literal notranslate"><span class="pre">math</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">echo</span></code> no longer interprets options at the beginning of an argument (eg <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">&quot;-n</span> <span class="pre">foo&quot;</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7614">#7614</a>).</p></li>
<li><p>fish now finds user configuration even if the <code class="docutils literal notranslate"><span class="pre">HOME</span></code> environment variable is not set (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7620">#7620</a>).</p></li>
<li><p>fish no longer crashes when started from a Windows-style working directory (eg <code class="docutils literal notranslate"><span class="pre">F:\path</span></code>) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7636">#7636</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">-c</span></code> now reads the remaining arguments into <code class="docutils literal notranslate"><span class="pre">$argv</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2314">#2314</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">pwd</span></code> command supports the long options <code class="docutils literal notranslate"><span class="pre">--logical</span></code> and <code class="docutils literal notranslate"><span class="pre">--physical</span></code>, matching other implementations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6787">#6787</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--profile</span></code> now only starts profiling after fish is ready to execute commands (all configuration is completed). There is a new <code class="docutils literal notranslate"><span class="pre">--profile-startup</span></code> option that only profiles the startup and configuration process (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7648">#7648</a>).</p></li>
<li><p>Builtins return a maximum exit status of 255, rather than potentially overflowing. In particular, this affects <code class="docutils literal notranslate"><span class="pre">exit</span></code>, <code class="docutils literal notranslate"><span class="pre">return</span></code>, <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">--query</span></code>, and <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">--query</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7698">#7698</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7702">#7702</a>).</p></li>
<li><p>It is no longer an error to run builtin with closed stdin. For example <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">&lt;&amp;-</span></code> now prints 0, instead of failing.</p></li>
<li><p>Blocks, functions, and builtins no longer permit redirecting to file descriptors other than 0 (standard input), 1 (standard output) and 2 (standard error). For example, <code class="docutils literal notranslate"><span class="pre">echo</span> <span class="pre">hello</span> <span class="pre">&gt;&amp;5</span></code> is now an error. This prevents corruption of internal state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3303">#3303</a>).</p></li>
</ul>
</section>
<section id="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">&amp;&amp;</span></code> and <code class="docutils literal notranslate"><span class="pre">||</span></code>) instead of complaining about a missing command. (This was already syntactically valid, but interactive sessions didn’t know about it yet).</p></li>
<li><p>The prompt is reprinted after a background job exits (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1018">#1018</a>).</p></li>
<li><p>fish no longer inserts a space after a completion ending in <code class="docutils literal notranslate"><span class="pre">.</span></code>, <code class="docutils literal notranslate"><span class="pre">,</span></code> or <code class="docutils literal notranslate"><span class="pre">-</span></code> is accepted, improving completions for tools that provide dynamic completions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6928">#6928</a>).</p></li>
<li><p>If a filename is invalid when first pressing <kbd class="kbd docutils literal notranslate">tab</kbd>, but becomes valid, it will be completed properly on the next attempt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6863">#6863</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span> <span class="pre">string</span> <span class="pre">match/replace/&lt;subcommand&gt;</span></code> will show the help for string subcommands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6786">#6786</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> sets the exit status to 0 when used with <code class="docutils literal notranslate"><span class="pre">--help</span></code> or <code class="docutils literal notranslate"><span class="pre">--version</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6964">#6964</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_key_reader</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code> send output from <code class="docutils literal notranslate"><span class="pre">--version</span></code> to standard output, matching other fish binaries (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6964">#6964</a>).</p></li>
<li><p>A new variable <code class="docutils literal notranslate"><span class="pre">$status_generation</span></code> is incremented only when the previous command produces an exit status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6815">#6815</a>). This can be used, for example, to check whether a failure status is a holdover due to a background job, or actually produced by the last run command.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_greeting</span></code> is now a function that reads a variable of the same name, and defaults to setting it globally.
This removes a universal variable by default and helps with updating the greeting.
However, to disable the greeting it is now necessary to explicitly specify universal scope (<code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-U</span> <span class="pre">fish_greeting</span></code>) or to disable it in config.fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7265">#7265</a>).</p></li>
<li><p>Events are properly emitted after a job is cancelled (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2356">#2356</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_preexec</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_postexec</span></code> events are no longer triggered for empty commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4829">#4829</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7085">#7085</a>).</p></li>
<li><p>Functions triggered by the <code class="docutils literal notranslate"><span class="pre">fish_exit</span></code> event are correctly run when the terminal is closed or the shell receives SIGHUP (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7014">#7014</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> event no longer fires when <code class="docutils literal notranslate"><span class="pre">read</span></code> is used. If
you need a function to run any time <code class="docutils literal notranslate"><span class="pre">read</span></code> is invoked by a script,
use the new <code class="docutils literal notranslate"><span class="pre">fish_read</span></code> event instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7039">#7039</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_posterror</span></code> event is emitted when attempting to execute a command with syntax errors (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6880">#6880</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6816">#6816</a>).</p></li>
<li><p>The debugging system has now fully switched from the old numbered level to the new named category system introduced in 3.1. A number of new debugging categories have been added, including <code class="docutils literal notranslate"><span class="pre">config</span></code>, <code class="docutils literal notranslate"><span class="pre">path</span></code>, <code class="docutils literal notranslate"><span class="pre">reader</span></code> and <code class="docutils literal notranslate"><span class="pre">screen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6511">#6511</a>). See the output of <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--print-debug-categories</span></code> for the full list.</p></li>
<li><p>The warning about read-only filesystems has been moved to a new “warning-path” debug category
and can be disabled by setting a debug category of <code class="docutils literal notranslate"><span class="pre">-warning-path</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6630">#6630</a>):</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">fish</span><span class="w"> </span><span class="no">--debug=-warning-path</span>
</pre></div>
</div>
</li>
<li><p>The enabled debug categories are now printed on shell startup (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7007">#7007</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">-o</span></code> short option to fish, for <code class="docutils literal notranslate"><span class="pre">--debug-output</span></code>, works correctly instead of producing an
invalid option error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7254">#7254</a>).</p></li>
<li><p>fish’s debugging can now also be enabled via <code class="docutils literal notranslate"><span class="pre">FISH_DEBUG</span></code> and <code class="docutils literal notranslate"><span class="pre">FISH_DEBUG_OUTPUT</span></code> environment variables.
This helps with debugging when no commandline options can be passed, like when fish is called in a shebang (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7359">#7359</a>).</p></li>
<li><p>Abbreviations are now expanded after all command terminators (eg <code class="docutils literal notranslate"><span class="pre">;</span></code> or <code class="docutils literal notranslate"><span class="pre">|</span></code>), not just space,
as in fish 2.7.1 and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6970">#6970</a>), and after closing a command substitution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6658">#6658</a>).</p></li>
<li><p>The history file is now created with user-private permissions,
matching other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6926">#6926</a>). The directory containing the history
file was already private, so there should not have been any private data
revealed.</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">time</span></code> is now properly aligned in all cases (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6726">#6726</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6714">#6714</a>) and no longer depends on locale (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6757">#6757</a>).</p></li>
<li><p>The command-not-found handling has been simplified.
When it can’t find a command, fish now just executes a function called <code class="docutils literal notranslate"><span class="pre">fish_command_not_found</span></code>
instead of firing an event, making it easier to replace and reason about.
Previously-defined <code class="docutils literal notranslate"><span class="pre">__fish_command_not_found_handler</span></code> functions with an appropriate event listener will still work (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7293">#7293</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> handling has been reimplemented in C++ and is therefore quicker (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5259">#5259</a>), no longer occasionally prints an “unknown command” error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7145">#7145</a>) or overwrites multiline prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3537">#3537</a>).</p></li>
<li><p><kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> no longer kills background jobs for which job control is
disabled, matching POSIX semantics (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6828">#6828</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6861">#6861</a>).</p></li>
<li><p>Autosuggestions work properly after <kbd class="kbd docutils literal notranslate">ctrl</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd> cancels the current command line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6937">#6937</a>).</p></li>
<li><p>History search is now case-insensitive unless the search string contains an uppercase character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7273">#7273</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_update_completions</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--keep</span></code> option, which improves speed by skipping completions that already exist (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6775">#6775</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6796">#6796</a>).</p></li>
<li><p>Aliases containing an embedded backslash appear properly in the output of <code class="docutils literal notranslate"><span class="pre">alias</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6910">#6910</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">open</span></code> no longer hangs indefinitely on certain systems, as a bug in <code class="docutils literal notranslate"><span class="pre">xdg-open</span></code> has been worked around (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7215">#7215</a>).</p></li>
<li><p>Long command lines no longer add a blank line after execution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6826">#6826</a>) and behave better with <kbd class="kbd docutils literal notranslate">backspace</kbd> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6951">#6951</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">-t</span></code> works like the long option <code class="docutils literal notranslate"><span class="pre">--handlers-type</span></code>, as documented, instead of producing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6985">#6985</a>).</p></li>
<li><p>History search now flashes when it found no more results (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7362">#7362</a>)</p></li>
<li><p>fish now creates the path in the environment variable <code class="docutils literal notranslate"><span class="pre">XDG_RUNTIME_DIR</span></code> if it does not exist, before using it for runtime data storage (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7335">#7335</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span> <span class="pre">--print-colors</span></code> now also respects the bold, dim, underline, reverse, italic and background modifiers, to better show their effect (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7314">#7314</a>).</p></li>
<li><p>The fish Web configuration tool (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>) shows prompts correctly on Termux for Android (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7298">#7298</a>) and detects Windows Services for Linux 2 properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7027">#7027</a>). It no longer shows the <code class="docutils literal notranslate"><span class="pre">history</span></code> variable as it may be too large (one can use the History tab instead). It also starts the browser in another thread, avoiding hangs in some circumstances, especially with Firefox’s Developer Edition (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7158">#7158</a>). Finally, a bug in the Source Code Pro font may cause browsers to hang, so this font is no longer chosen by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7714">#7714</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funcsave</span></code> gained a new <code class="docutils literal notranslate"><span class="pre">--directory</span></code> option to specify the location of the saved function (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7041">#7041</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> works properly on MSYS2 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7113">#7113</a>) and only uses <code class="docutils literal notranslate"><span class="pre">cmd.exe</span></code> if running on WSL (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6797">#6797</a>).</p></li>
<li><p>Resuming a piped job by its number, like <code class="docutils literal notranslate"><span class="pre">fg</span> <span class="pre">%1</span></code>, works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7406">#7406</a>). Resumed jobs show the correct title in the terminal emulator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7444">#7444</a>).</p></li>
<li><p>Commands run from key bindings now use the same TTY modes as normal commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7483">#7483</a>).</p></li>
<li><p>Autosuggestions from history are now case-sensitive (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3978">#3978</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$status</span></code> from completion scripts is no longer passed outside the completion, which keeps the status display in the prompt as the last command’s status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7555">#7555</a>).</p></li>
<li><p>Updated localisations for pt_BR (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7480">#7480</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_trace</span></code> output now starts with <code class="docutils literal notranslate"><span class="pre">-&gt;</span></code> (like <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--profile</span></code>), making the depth more visible (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7538">#7538</a>).</p></li>
<li><p>Resizing the terminal window no longer produces a corrupted prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6532">#6532</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7404">#7404</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> produces an error rather than crashing on certain invalid arguments (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7515">#7515</a>).</p></li>
<li><p>A crash in completions with inline variable assignment (eg <code class="docutils literal notranslate"><span class="pre">A=</span> <span class="pre">b</span></code>) has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7344">#7344</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_private_mode</span></code> may now be changed dynamically using <code class="docutils literal notranslate"><span class="pre">set</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7589">#7589</a>), and history is kept in memory in private mode (but not stored permanently) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7590">#7590</a>).</p></li>
<li><p>Commands with leading spaces may be retrieved from history with up-arrow until a new command is run, matching zsh’s <code class="docutils literal notranslate"><span class="pre">HIST_IGNORE_SPACE</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1383">#1383</a>).</p></li>
<li><p>Importing bash history or reporting errors with recursive globs (<code class="docutils literal notranslate"><span class="pre">**</span></code>) no longer hangs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7407">#7407</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7497">#7497</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> now shows <code class="docutils literal notranslate"><span class="pre">\x7f</span></code> for the del key instead of a literal DEL character (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7631">#7631</a>)</p></li>
<li><p>Paths containing variables or tilde expansion are only suggested when they are still valid (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7582">#7582</a>).</p></li>
<li><p>Syntax highlighting can now color a command as invalid even if executed quickly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5912">#5912</a>).</p></li>
<li><p>Redirection targets are no longer highlighted as error if they contain variables which will likely be defined by the current commandline (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6654">#6654</a>).</p></li>
<li><p>fish is now more resilient against broken terminal modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7133">#7133</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4873">#4873</a>).</p></li>
<li><p>fish handles being in control of the TTY without owning its own process group better, avoiding some hangs in special configurations (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7388">#7388</a>).</p></li>
<li><p>Keywords can now be colored differently by setting the <code class="docutils literal notranslate"><span class="pre">fish_color_keyword</span></code> variable (<code class="docutils literal notranslate"><span class="pre">fish_color_command</span></code> is used as a fallback) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7678">#7678</a>).</p></li>
<li><p>Just like <code class="docutils literal notranslate"><span class="pre">fish_indent</span></code>, the interactive reader will indent continuation lines that follow a line ending in a backslash, <code class="docutils literal notranslate"><span class="pre">|</span></code>, <code class="docutils literal notranslate"><span class="pre">&amp;&amp;</span></code> or <code class="docutils literal notranslate"><span class="pre">||</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7694">#7694</a>).</p></li>
<li><p>Commands with a trailing escaped space are saved in history correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7661">#7661</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> no longer mangles Unicode characters in the private-use range U+F600-U+F700. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7723">#7723</a>).</p></li>
<li><p>The universal variable file, <code class="docutils literal notranslate"><span class="pre">fish_variables</span></code>, can be made a symbolic link without it being overwritten (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7466">#7466</a>).</p></li>
<li><p>fish is now more resilient against <code class="docutils literal notranslate"><span class="pre">mktemp</span></code> failing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7482">#7482</a>).</p></li>
</ul>
<section id="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&lt;TAB&gt;</span></code>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> completions no longer hide variables starting with <code class="docutils literal notranslate"><span class="pre">__</span></code>, they are sorted last instead.</p></li>
</ul>
</li>
<li><p>Improvements to the manual page completion generator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7086">#7086</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6879">#6879</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7187">#7187</a>).</p></li>
<li><p>Significant performance improvements to completion of the available commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7153">#7153</a>), especially on macOS Big Sur where there was a significant regression (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7365">#7365</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7511">#7511</a>).</p></li>
<li><p>Suffix completion using <code class="docutils literal notranslate"><span class="pre">__fish_complete_suffix</span></code> uses the same fuzzy matching logic as normal file completion, and completes any file but sorts files with matching suffix first (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7040">#7040</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/7547">#7547</a>). Previously, it only completed files with matching suffix.</p></li>
</ul>
</section>
</section>
<section id="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 &amp; CentOS version 6.</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-1-2-released-april-29-2020">
<h2>fish 3.1.2 (released April 29, 2020)<a class="headerlink" href="#fish-3-1-2-released-april-29-2020" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a major issue discovered in fish 3.1.1:</p>
<ul class="simple">
<li><p>Commands such as <code class="docutils literal notranslate"><span class="pre">fzf</span></code> and <code class="docutils literal notranslate"><span class="pre">enhancd</span></code>, when used with <code class="docutils literal notranslate"><span class="pre">eval</span></code>,
would hang. <code class="docutils literal notranslate"><span class="pre">eval</span></code> buffered output too aggressively, which has been
fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6955">#6955</a>).</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1.1, 3.1.0 and 3.1b1 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-1-1-released-april-27-2020">
<h2>fish 3.1.1 (released April 27, 2020)<a class="headerlink" href="#fish-3-1-1-released-april-27-2020" title="Link to this heading">¶</a></h2>
<p>This release of fish fixes a number of major issues discovered in fish
3.1.0.</p>
<ul class="simple">
<li><p>Commands which involve <code class="docutils literal notranslate"><span class="pre">.</span> <span class="pre">(</span> <span class="pre">...</span> <span class="pre">|</span> <span class="pre">psub)</span></code> now work correctly, as a
bug in the <code class="docutils literal notranslate"><span class="pre">function</span> <span class="pre">--on-job-exit</span></code> option has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6613">#6613</a>).</p></li>
<li><p>Conflicts between upstream packages for ripgrep and bat, and the fish
packages, have been resolved (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5822">#5822</a>).</p></li>
<li><p>Starting fish in a directory without read access, such as via <code class="docutils literal notranslate"><span class="pre">su</span></code>,
no longer crashes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6597">#6597</a>).</p></li>
<li><p>Glob ordering changes which were introduced in 3.1.0 have been
reverted, returning the order of globs to the previous state (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6593">#6593</a>).</p></li>
<li><p>Redirections using the deprecated caret syntax to a file descriptor
(eg <code class="docutils literal notranslate"><span class="pre">^&amp;2</span></code>) work correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6591">#6591</a>).</p></li>
<li><p>Redirections that append to a file descriptor (eg <code class="docutils literal notranslate"><span class="pre">2&gt;&gt;&amp;1</span></code>) work
correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6614">#6614</a>).</p></li>
<li><p>Building fish on macOS (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6602">#6602</a>) or with new versions of GCC (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6604">#6604</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6609">#6609</a>) is now successful.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">time</span></code> is now correctly listed in the output of <code class="docutils literal notranslate"><span class="pre">builtin</span> <span class="pre">-n</span></code>, and
<code class="docutils literal notranslate"><span class="pre">time</span> <span class="pre">--help</span></code> works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6598">#6598</a>).</p></li>
<li><p>Exported universal variables now update properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6612">#6612</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">status</span> <span class="pre">current-command</span></code> gives the expected output when used with
an environment override - that is, <code class="docutils literal notranslate"><span class="pre">F=B</span> <span class="pre">status</span> <span class="pre">current-command</span></code>
returns <code class="docutils literal notranslate"><span class="pre">status</span></code> instead of <code class="docutils literal notranslate"><span class="pre">F=B</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6635">#6635</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> no longer crashes when used with “<code class="docutils literal notranslate"><span class="pre">nan</span></code>” or “<code class="docutils literal notranslate"><span class="pre">inf</span></code>”
arguments, erroring out instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6655">#6655</a>).</p></li>
<li><p>Copying from the end of the command line no longer crashes fish
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6680">#6680</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> no longer removes multiple separators when splitting a
variable into a list, restoring the previous behaviour from fish 3.0
and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6650">#6650</a>).</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-job-exit</span></code> and <code class="docutils literal notranslate"><span class="pre">--on-process-exit</span></code> work
reliably again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6679">#6679</a>).</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-signal</span> <span class="pre">INT</span></code> work reliably in interactive
sessions, as they did in fish 2.7 and before (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6649">#6649</a>). These handlers
have never worked in non-interactive sessions, and making them work
is an ongoing process.</p></li>
<li><p>Functions using <code class="docutils literal notranslate"><span class="pre">--on-variable</span></code> work reliably with variables which
are set implicitly (rather than with <code class="docutils literal notranslate"><span class="pre">set</span></code>), such as
“<code class="docutils literal notranslate"><span class="pre">fish_bind_mode</span></code>” and “<code class="docutils literal notranslate"><span class="pre">PWD</span></code>” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6653">#6653</a>).</p></li>
<li><p>256 colors are properly enabled under certain conditions that were
incorrectly detected in fish 3.1.0 (<code class="docutils literal notranslate"><span class="pre">$TERM</span></code> begins with xterm, does
not include “<code class="docutils literal notranslate"><span class="pre">256color</span></code>”, and <code class="docutils literal notranslate"><span class="pre">$TERM_PROGRAM</span></code> is not set)
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6701">#6701</a>).</p></li>
<li><p>The Mercurial (<code class="docutils literal notranslate"><span class="pre">hg</span></code>) prompt no longer produces an error when the
current working directory is removed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6699">#6699</a>). Also, for performance
reasons it shows only basic information by default; to restore the
detailed status, set <code class="docutils literal notranslate"><span class="pre">$fish_prompt_hg_show_informative_status</span></code>.</p></li>
<li><p>The VCS prompt, <code class="docutils literal notranslate"><span class="pre">fish_vcs_prompt</span></code>, no longer displays Subversion
(<code class="docutils literal notranslate"><span class="pre">svn</span></code>) status by default, due to the potential slowness of this
operation (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6681">#6681</a>).</p></li>
<li><p>Pasting of commands has been sped up (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6713">#6713</a>).</p></li>
<li><p>Using extended Unicode characters, such as emoji, in a non-Unicode
capable locale (such as the <code class="docutils literal notranslate"><span class="pre">C</span></code> or <code class="docutils literal notranslate"><span class="pre">POSIX</span></code> locale) no longer
renders all output blank (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6736">#6736</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">help</span></code> prefers to use <code class="docutils literal notranslate"><span class="pre">xdg-open</span></code>, avoiding the use of <code class="docutils literal notranslate"><span class="pre">open</span></code> on
Debian systems where this command is actually <code class="docutils literal notranslate"><span class="pre">openvt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6739">#6739</a>).</p></li>
<li><p>Command lines starting with a space, which are not saved in history,
now do not get autosuggestions. This fixes an issue with Midnight
Commander integration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6763">#6763</a>), but may be changed in a future
version.</p></li>
<li><p>Copying to the clipboard no longer inserts a newline at the end of
the content, matching fish 2.7 and earlier (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6927">#6927</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fzf</span></code> in complex pipes no longer hangs. More generally, code run as
part of command substitutions or <code class="docutils literal notranslate"><span class="pre">eval</span></code> will no longer have
separate process groups. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6624">#6624</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6806">#6806</a>).</p></li>
</ul>
<p>This release also includes:</p>
<ul class="simple">
<li><p>several changes to improve macOS compatibility with code signing
and notarization;</p></li>
<li><p>several improvements to completions; and</p></li>
<li><p>several content and formatting improvements to the documentation.</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1.0 and 3.1b1 (included below).</p>
<section id="errata-for-fish-3-1">
<h3>Errata for fish 3.1<a class="headerlink" href="#errata-for-fish-3-1" title="Link to this heading">¶</a></h3>
<p>A new builtin, <code class="docutils literal notranslate"><span class="pre">time</span></code>, was introduced in the fish 3.1 releases. This
builtin is a reserved word (like <code class="docutils literal notranslate"><span class="pre">test</span></code>, <code class="docutils literal notranslate"><span class="pre">function</span></code>, and others)
because of the way it is implemented, and functions can no longer be
named <code class="docutils literal notranslate"><span class="pre">time</span></code>. This was not clear in the fish 3.1b1 changelog.</p>
</section>
</section>
<hr class="docutils" />
<section id="fish-3-1-0-released-february-12-2020">
<h2>fish 3.1.0 (released February 12, 2020)<a class="headerlink" href="#fish-3-1-0-released-february-12-2020" title="Link to this heading">¶</a></h2>
<p>Compared to the beta release of fish 3.1b1, fish version 3.1.0:</p>
<ul class="simple">
<li><p>Fixes a regression where spaces after a brace were removed despite
brace expansion not occurring (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6564">#6564</a>).</p></li>
<li><p>Fixes a number of problems in compiling and testing on Cygwin
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6549">#6549</a>) and Solaris-derived systems such as Illumos (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6553">#6553</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6554">#6554</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6555">#6555</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6556">#6556</a>, and <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6558">#6558</a>).</p></li>
<li><p>Fixes the process for building macOS packages.</p></li>
<li><p>Fixes a regression where excessive error messages are printed if
Unicode characters are emitted in non-Unicode-capable locales
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6584">#6584</a>).</p></li>
<li><p>Contains some improvements to the documentation and a small number
of completions.</p></li>
</ul>
<p>If you are upgrading from version 3.0.0 or before, please also review
the release notes for 3.1b1 (included below).</p>
</section>
<hr class="docutils" />
<section id="fish-3-1b1-released-january-26-2020">
<h2>fish 3.1b1 (released January 26, 2020)<a class="headerlink" href="#fish-3-1b1-released-january-26-2020" title="Link to this heading">¶</a></h2>
<section id="notable-improvements-and-fixes-1">
<span id="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">&quot;$(cmd)&quot;</span></code> in other shells) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/159">#159</a>).</p></li>
<li><p>The fish manual, tutorial and FAQ are now available in <code class="docutils literal notranslate"><span class="pre">man</span></code> format
as <code class="docutils literal notranslate"><span class="pre">fish-doc</span></code>, <code class="docutils literal notranslate"><span class="pre">fish-tutorial</span></code> and <code class="docutils literal notranslate"><span class="pre">fish-faq</span></code> respectively
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5521">#5521</a>).</p></li>
<li><p>Like other shells, <code class="docutils literal notranslate"><span class="pre">cd</span></code> now always looks for its argument in the
current directory as a last resort, even if the <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> variable
does not include it or “.” (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4484">#4484</a>).</p></li>
<li><p>fish now correctly handles <code class="docutils literal notranslate"><span class="pre">CDPATH</span></code> entries that start with <code class="docutils literal notranslate"><span class="pre">..</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6220">#6220</a>) or contain <code class="docutils literal notranslate"><span class="pre">./</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5887">#5887</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_trace</span></code> variable may be set to trace execution (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3427">#3427</a>).
This performs a similar role as <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">-x</span></code> in other shells.</p></li>
<li><p>fish uses the temporary directory determined by the system, rather
than relying on <code class="docutils literal notranslate"><span class="pre">/tmp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3845">#3845</a>).</p></li>
<li><p>The fish Web configuration tool (<code class="docutils literal notranslate"><span class="pre">fish_config</span></code>) prints a list of
commands it is executing, to help understanding and debugging
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5584">#5584</a>).</p></li>
<li><p>Major performance improvements when pasting (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5866">#5866</a>), executing lots
of commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5905">#5905</a>), importing history from bash (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6295">#6295</a>), and when
completing variables that might match <code class="docutils literal notranslate"><span class="pre">$history</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6288">#6288</a>).</p></li>
</ul>
</section>
<section id="syntax-changes-and-new-commands-1">
<span id="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&#64;{0}</span></code> do not require escaping (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5869">#5869</a>).</p></li>
<li><p>New redirections <code class="docutils literal notranslate"><span class="pre">&amp;&gt;</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;|</span></code> may be used to redirect or pipe
stdout, and also redirect stderr to stdout (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6192">#6192</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">switch</span></code> now allows arguments that expand to nothing, like empty
variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5677">#5677</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">VAR=val</span> <span class="pre">cmd</span></code> syntax can now be used to run a command in a
modified environment (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6287">#6287</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">and</span></code> is no longer recognised as a command, so that nonsensical
constructs like <code class="docutils literal notranslate"><span class="pre">and</span> <span class="pre">and</span> <span class="pre">and</span></code> produce a syntax error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6089">#6089</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code>‘s exponent operator,’<code class="docutils literal notranslate"><span class="pre">^</span></code>‘, was previously
left-associative, but now uses the more commonly-used
right-associative behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6280">#6280</a>). This means that
<code class="docutils literal notranslate"><span class="pre">math</span> <span class="pre">'3^0.5^2'</span></code> was previously calculated as’(3<sup>0.5)</sup>2’,
but is now calculated as ‘3<sup>(0.5</sup>2)’.</p></li>
<li><p>In fish 3.0, the variable used with <code class="docutils literal notranslate"><span class="pre">for</span></code> loops inside command
substitutions could leak into enclosing scopes; this was an
inadvertent behaviour change and has been reverted (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6480">#6480</a>).</p></li>
</ul>
</section>
<section id="scripting-improvements-1">
<span id="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">&amp;&amp;</span></code> and
<code class="docutils literal notranslate"><span class="pre">||</span></code> in addition to <code class="docutils literal notranslate"><span class="pre">;</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6214">#6214</a>).</p></li>
<li><p>A bug where <code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split</span></code> would drop empty strings if the output
was only empty strings has been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5987">#5987</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eval</span></code> no long creates a new local variable scope, but affects
variables in the scope it is called from (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4443">#4443</a>). <code class="docutils literal notranslate"><span class="pre">source</span></code> still
creates a new local scope.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">abbr</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--query</span></code> option to check for the existence of
an abbreviation.</p></li>
<li><p>Local values for <code class="docutils literal notranslate"><span class="pre">fish_complete_path</span></code> and <code class="docutils literal notranslate"><span class="pre">fish_function_path</span></code>
are now ignored; only their global values are respected.</p></li>
<li><p>Syntax error reports now display a marker in the correct position
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5812">#5812</a>).</p></li>
<li><p>Empty universal variables may now be exported (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5992">#5992</a>).</p></li>
<li><p>Exported universal variables are no longer imported into the global
scope, preventing shadowing. This makes it easier to change such
variables for all fish sessions and avoids breakage when the value is
a list of multiple elements (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5258">#5258</a>).</p></li>
<li><p>A bug where <code class="docutils literal notranslate"><span class="pre">for</span></code> could use invalid variable names has been fixed
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5800">#5800</a>).</p></li>
<li><p>A bug where local variables would not be exported to functions has
been fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6153">#6153</a>).</p></li>
<li><p>The null command (<code class="docutils literal notranslate"><span class="pre">:</span></code>) now always exits successfully, rather than
passing through the previous exit status (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6022">#6022</a>).</p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">functions</span> <span class="pre">FUNCTION</span></code> matches the declaration of the
function, correctly including comments or blank lines (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5285">#5285</a>), and
correctly includes any <code class="docutils literal notranslate"><span class="pre">--wraps</span></code> flags (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1625">#1625</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code> supports a new option, <code class="docutils literal notranslate"><span class="pre">--short</span></code>, which suppress function
expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6403">#6403</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">--path</span></code> with a function argument will now output the path to
the file containing the definition of that function, if it exists.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span> <span class="pre">--force-path</span></code> with an argument that cannot be found now
correctly outputs nothing, as documented (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6411">#6411</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">$hostname</span></code> variable is no longer truncated to 32 characters
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5758">#5758</a>).</p></li>
<li><p>Line numbers in function backtraces are calculated correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6350">#6350</a>).</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">fish_cancel</span></code> event is emitted when the command line is
cancelled, which is useful for terminal integration (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5973">#5973</a>).</p></li>
</ul>
</section>
<section id="interactive-improvements-1">
<span id="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">&amp;&amp;</span></code>
or <code class="docutils literal notranslate"><span class="pre">||</span></code>.</p></li>
<li><p>The automatic generation of completions from manual pages is better
described in job and process listings, and no longer produces a
warning when exiting fish (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6269">#6269</a>).</p></li>
<li><p>In private mode, setting <code class="docutils literal notranslate"><span class="pre">$fish_greeting</span></code> to an empty string before
starting the private session will prevent the warning about history
not being saved from being printed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6299">#6299</a>).</p></li>
<li><p>In the interactive editor, a line break (Enter) inside unclosed
brackets will insert a new line, rather than executing the command
and producing an error (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6316">#6316</a>).</p></li>
<li><p>Ctrl-C always repaints the prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6394">#6394</a>).</p></li>
<li><p>When run interactively from another program (such as Python), fish
will correctly start a new process group, like other shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5909">#5909</a>).</p></li>
<li><p>Job identifiers (for example, for background jobs) are assigned more
logically (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6053">#6053</a>).</p></li>
<li><p>A bug where history would appear truncated if an empty command was
executed was fixed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6032">#6032</a>).</p></li>
</ul>
<section id="new-or-improved-bindings-1">
<span id="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
“&#64;”, because those are used to denote user and host in commands such
as <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5841">#5841</a>).</p></li>
<li><p>The NULL character can now be bound via <code class="docutils literal notranslate"><span class="pre">bind</span> <span class="pre">-k</span> <span class="pre">nul</span></code>. Terminals
often generate this character via control-space. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3189">#3189</a>).</p></li>
<li><p>A new readline command <code class="docutils literal notranslate"><span class="pre">expand-abbr</span></code> can be used to trigger
abbreviation expansion (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5762">#5762</a>).</p></li>
<li><p>A new readline command, <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>, removes a character to
the right of the cursor or exits the shell if the command line is
empty (moving this functionality out of the <code class="docutils literal notranslate"><span class="pre">delete-or-exit</span></code>
function).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">self-insert</span></code> readline command will now insert the binding
sequence, if not empty.</p></li>
<li><p>A new binding to prepend <code class="docutils literal notranslate"><span class="pre">sudo</span></code>, bound to Alt-S by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6140">#6140</a>).</p></li>
<li><p>The Alt-W binding to describe a command should now work better with
multiline prompts (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6110">#6110</a>)</p></li>
<li><p>The Alt-H binding to open a command’s man page now tries to ignore
<code class="docutils literal notranslate"><span class="pre">sudo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6122">#6122</a>).</p></li>
<li><p>A new pair of bind functions, <code class="docutils literal notranslate"><span class="pre">history-prefix-search-backward</span></code> (and
<code class="docutils literal notranslate"><span class="pre">forward</span></code>), was introduced (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6143">#6143</a>).</p></li>
<li><p>Vi mode now supports R to enter replace mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6342">#6342</a>), and <code class="docutils literal notranslate"><span class="pre">d0</span></code> to
delete the current line (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6292">#6292</a>).</p></li>
<li><p>In Vi mode, hitting Enter in replace-one mode no longer erases the
prompt (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/6298">#6298</a>).</p></li>
<li><p>Selections in Vi mode are inclusive, matching the actual behaviour of
Vi (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5770">#5770</a>).</p></li>
</ul>
</section>
<section id="improved-prompts-1">
<span id="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&gt;</span></code> to redirect stderr. This is controlled by the
<code class="docutils literal notranslate"><span class="pre">stderr-nocaret</span></code> feature flag.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">?</span></code> as a glob (wildcard) is deprecated and will be removed in the
future (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4520">#4520</a>). This is controlled by the <code class="docutils literal notranslate"><span class="pre">qmark-noglob</span></code> feature
flag.</p></li>
</ul>
</section>
<section id="notable-fixes-and-improvements">
<h3>Notable fixes and improvements<a class="headerlink" href="#notable-fixes-and-improvements" title="Link to this heading">¶</a></h3>
</section>
<section id="syntax-changes-and-new-commands-2">
<span id="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">&amp;&amp;</span></code> (like <code class="docutils literal notranslate"><span class="pre">and</span></code>), <code class="docutils literal notranslate"><span class="pre">||</span></code> (like <code class="docutils literal notranslate"><span class="pre">or</span></code>), and
<code class="docutils literal notranslate"><span class="pre">!</span></code> (like <code class="docutils literal notranslate"><span class="pre">not</span></code>), for better migration from POSIX-compliant
shells (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4620">#4620</a>).</p></li>
<li><p>Variables may be used as commands (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/154">#154</a>).</p></li>
<li><p>fish may be started in private mode via <code class="docutils literal notranslate"><span class="pre">fish</span> <span class="pre">--private</span></code>. Private
mode fish sessions do not have access to the history file and any
commands evaluated in private mode are not persisted for future
sessions. A session variable <code class="docutils literal notranslate"><span class="pre">$fish_private_mode</span></code> can be queried to
detect private mode and adjust the behavior of scripts accordingly to
respect the user’s wish for privacy.</p></li>
<li><p>A new <code class="docutils literal notranslate"><span class="pre">wait</span></code> command for waiting on backgrounded processes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4498">#4498</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">math</span></code> is now a builtin rather than a wrapper around <code class="docutils literal notranslate"><span class="pre">bc</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3157">#3157</a>). Floating point computations is now used by default, and can
be controlled with the new <code class="docutils literal notranslate"><span class="pre">--scale</span></code> option (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4478">#4478</a>).</p></li>
<li><p>Setting <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> no longer warns on non-existent directories,
allowing for a single $PATH to be shared across machines (eg via
dotfiles) (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2969">#2969</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">while</span></code> sets <code class="docutils literal notranslate"><span class="pre">$status</span></code> to a non-zero value if the loop is not
executed (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4982">#4982</a>).</p></li>
<li><p>Command substitution output is now limited to 10 MB by default,
controlled by the <code class="docutils literal notranslate"><span class="pre">fish_read_limit</span></code> variable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3822">#3822</a>). Notably, this
is larger than most operating systems’ argument size limit, so trying
to pass argument lists this size to external commands has never
worked.</p></li>
<li><p>The machine hostname, where available, is now exposed as the
<code class="docutils literal notranslate"><span class="pre">$hostname</span></code> reserved variable. This removes the dependency on the
<code class="docutils literal notranslate"><span class="pre">hostname</span></code> executable (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4422">#4422</a>).</p></li>
<li><p>Bare <code class="docutils literal notranslate"><span class="pre">bind</span></code> invocations in config.fish now work. The
<code class="docutils literal notranslate"><span class="pre">fish_user_key_bindings</span></code> function is no longer necessary, but will
still be executed if it exists (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5191">#5191</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_pid</span></code> and <code class="docutils literal notranslate"><span class="pre">$last_pid</span></code> are available as replacements for
<code class="docutils literal notranslate"><span class="pre">%self</span></code> and <code class="docutils literal notranslate"><span class="pre">%last</span></code>.</p></li>
</ul>
</section>
<section id="new-features-in-commands">
<h3>New features in commands<a class="headerlink" href="#new-features-in-commands" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">alias</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--save</span></code> option to save the generated function
immediately (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4878">#4878</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bind</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--silent</span></code> option to ignore bind requests for
named keys not available under the current terminal (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4188">#4188</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4431">#4431</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">complete</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--keep-order</span></code> option to show the provided
or dynamically-generated argument list in the same order as
specified, rather than alphabetically (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/361">#361</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exec</span></code> prompts for confirmation if background jobs are running.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">funced</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--save</span></code> option to automatically save the
edited function after successfully editing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4668">#4668</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--handlers</span></code> option to show functions
registered as event handlers (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4694">#4694</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">history</span> <span class="pre">search</span></code> supports globs for wildcard searching (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3136">#3136</a>) and
has a new <code class="docutils literal notranslate"><span class="pre">--reverse</span></code> option to show entries from oldest to newest
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4375">#4375</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jobs</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--quiet</span></code> option to silence the output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--delimiter</span></code> option for splitting input into
arrays (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4256">#4256</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> writes directly to stdout if called without arguments
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4407">#4407</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">read</span></code> can now read individual lines into separate variables
without consuming the input in its entirety via the new <code class="docutils literal notranslate"><span class="pre">/--line</span></code>
option.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set</span></code> has new <code class="docutils literal notranslate"><span class="pre">--append</span></code> and <code class="docutils literal notranslate"><span class="pre">--prepend</span></code> options (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1326">#1326</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">match</span></code> with an empty pattern and <code class="docutils literal notranslate"><span class="pre">--entire</span></code> in glob mode
now matches everything instead of nothing (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4971">#4971</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">split</span></code> supports a new <code class="docutils literal notranslate"><span class="pre">--no-empty</span></code> option to exclude
empty strings from the result (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4779">#4779</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> has new subcommands <code class="docutils literal notranslate"><span class="pre">split0</span></code> and <code class="docutils literal notranslate"><span class="pre">join0</span></code> for working
with NUL-delimited output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span></code> no longer stops processing text after NUL characters
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4605">#4605</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">string</span> <span class="pre">escape</span></code> has a new <code class="docutils literal notranslate"><span class="pre">--style</span> <span class="pre">regex</span></code> option for escaping
strings to be matched literally in <code class="docutils literal notranslate"><span class="pre">string</span></code> regex operations.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test</span></code> now supports floating point values in numeric comparisons.</p></li>
</ul>
</section>
<section id="interactive-improvements-2">
<span id="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">~/&lt;TAB&gt;</span></code> now provides file suggestions just like any other
relative or absolute path. (This includes support for other
expansions, too.)</p></li>
<li><p>Autosuggestions try to avoid arguments that are already present in
the command line.</p></li>
<li><p>Notifications about crashed processes are now always shown, even in
command substitutions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4962">#4962</a>).</p></li>
<li><p>The screen is no longer reset after a BEL, fixing graphical glitches
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3693">#3693</a>).</p></li>
<li><p>vi-mode now supports ‘;’ and ‘,’ motions. This introduces new
{forward,backward}-jump-till and repeat-jump{,-reverse} bind
functions (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5140">#5140</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">*y</span></code> vi-mode binding now works (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5100">#5100</a>).</p></li>
<li><p>True color is now enabled in neovim by default (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2792">#2792</a>).</p></li>
<li><p>Terminal size variables (<code class="docutils literal notranslate"><span class="pre">$COLUMNS</span></code>/<code class="docutils literal notranslate"><span class="pre">$LINES</span></code>) are now updated
before <code class="docutils literal notranslate"><span class="pre">fish_prompt</span></code> is called, allowing the prompt to react
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/904">#904</a>).</p></li>
<li><p>Multi-line prompts no longer repeat when the terminal is resized
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2320">#2320</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xclip</span></code> support has been added to the clipboard integration
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5020">#5020</a>).</p></li>
<li><p>The Alt-P keybinding paginates the last command if the command line
is empty.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$cmd_duration</span></code> is no longer reset when no command is executed
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5011">#5011</a>).</p></li>
<li><p>Deleting a one-character word no longer erases the next word as well
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4747">#4747</a>).</p></li>
<li><p>Token history search (Alt-Up) omits duplicate entries (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4795">#4795</a>).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">fish_escape_delay_ms</span></code> timeout, allowing the use of the escape
key both on its own and as part of a control sequence, was applied to
all control characters; this has been reduced to just the escape key.</p></li>
<li><p>Completing a function shows the description properly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5206">#5206</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">commandline</span></code> can now be used to set the commandline for the next command, restoring a behavior in 3.4.1 (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/8807">#8807</a>).</p></li>
<li><p>Added completions for</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">ansible</span></code>, including <code class="docutils literal notranslate"><span class="pre">ansible-galaxy</span></code>, <code class="docutils literal notranslate"><span class="pre">ansible-playbook</span></code>
and <code class="docutils literal notranslate"><span class="pre">ansible-vault</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4697">#4697</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bb-power</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4800">#4800</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4472">#4472</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bower</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">clang</span></code> and <code class="docutils literal notranslate"><span class="pre">clang++</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4174">#4174</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">conda</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4837">#4837</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">configure</span></code> (for autoconf-generated files only)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">curl</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">doas</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5196">#5196</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ebuild</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4911">#4911</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">emaint</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4758">#4758</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">eopkg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4600">#4600</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">exercism</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4495">#4495</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hjson</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hugo</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4529">#4529</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">j</span></code> (from autojump <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4344">#4344</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jbake</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4814">#4814</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">jhipster</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4472">#4472</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kitty</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kldload</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">kldunload</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">makensis</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5242">#5242</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">meson</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mkdocs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4906">#4906</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ngrok</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4642">#4642</a>)</p></li>
<li><p>OpenBSD’s <code class="docutils literal notranslate"><span class="pre">pkg_add</span></code>, <code class="docutils literal notranslate"><span class="pre">pkg_delete</span></code>, <code class="docutils literal notranslate"><span class="pre">pkg_info</span></code>, <code class="docutils literal notranslate"><span class="pre">pfctl</span></code>,
<code class="docutils literal notranslate"><span class="pre">rcctl</span></code>, <code class="docutils literal notranslate"><span class="pre">signify</span></code>, and <code class="docutils literal notranslate"><span class="pre">vmctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4584">#4584</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">openocd</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">optipng</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">opkg</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5168">#5168</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pandoc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2937">#2937</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">port</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4737">#4737</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">powerpill</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4800">#4800</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pstack</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5135">#5135</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">serve</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5026">#5026</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ttx</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">unzip</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">virsh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5113">#5113</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xclip</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5126">#5126</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">xsv</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">zfs</span></code> and <code class="docutils literal notranslate"><span class="pre">zpool</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4608">#4608</a>)</p></li>
</ul>
</li>
<li><p>Lots of improvements to completions (especially <code class="docutils literal notranslate"><span class="pre">darcs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5112">#5112</a>),
<code class="docutils literal notranslate"><span class="pre">git</span></code>, <code class="docutils literal notranslate"><span class="pre">hg</span></code> and <code class="docutils literal notranslate"><span class="pre">sudo</span></code>).</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">yarn</span></code> and <code class="docutils literal notranslate"><span class="pre">npm</span></code> now require the
<code class="docutils literal notranslate"><span class="pre">all-the-package-names</span></code> NPM package for full functionality.</p></li>
<li><p>Completions for <code class="docutils literal notranslate"><span class="pre">bower</span></code> and <code class="docutils literal notranslate"><span class="pre">yarn</span></code> now require the <code class="docutils literal notranslate"><span class="pre">jq</span></code> utility
for full functionality.</p></li>
<li><p>Improved French translations.</p></li>
</ul>
</section>
<section id="other-fixes-and-improvements">
<h3>Other fixes and improvements<a class="headerlink" href="#other-fixes-and-improvements" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Significant performance improvements to <code class="docutils literal notranslate"><span class="pre">abbr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4048">#4048</a>), setting
variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4200">#4200</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4341">#4341</a>), executing functions, globs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4579">#4579</a>),
<code class="docutils literal notranslate"><span class="pre">string</span></code> reading from standard input (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4610">#4610</a>), and slicing history
(in particular, <code class="docutils literal notranslate"><span class="pre">$history[1]</span></code> for the last executed command).</p></li>
<li><p>Fish’s internal wcwidth function has been updated to deal with newer
Unicode, and the width of some characters can be configured via the
<code class="docutils literal notranslate"><span class="pre">fish_ambiguous_width</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5149">#5149</a>) and <code class="docutils literal notranslate"><span class="pre">fish_emoji_width</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2652">#2652</a>)
variables. Alternatively, a new build-time option INTERNAL_WCWIDTH
can be used to use the system’s wcwidth instead (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4816">#4816</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">functions</span></code> correctly supports <code class="docutils literal notranslate"><span class="pre">-d</span></code> as the short form of
<code class="docutils literal notranslate"><span class="pre">--description</span></code>. (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5105">#5105</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> is now parsed like macOS’ bash <code class="docutils literal notranslate"><span class="pre">path_helper</span></code>, fixing
$PATH order (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4336">#4336</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4852">#4852</a>) on macOS.</p></li>
<li><p>Using a read-only variable in a <code class="docutils literal notranslate"><span class="pre">for</span></code> loop produces an error,
rather than silently producing incorrect results (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4342">#4342</a>).</p></li>
<li><p>The universal variables filename no longer contains the hostname or
MAC address. It is now at the fixed location
<code class="docutils literal notranslate"><span class="pre">.config/fish/fish_variables</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1912">#1912</a>).</p></li>
<li><p>Exported variables in the global or universal scope no longer have
their exported status affected by local variables (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2611">#2611</a>).</p></li>
<li><p>Major rework of terminal and job handling to eliminate bugs (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3805">#3805</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3952">#3952</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4178">#4178</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4235">#4235</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4238">#4238</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4540">#4540</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4929">#4929</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5210">#5210</a>).</p></li>
<li><p>Improvements to the manual page completion generator (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2937">#2937</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4313">#4313</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">suspend</span> <span class="pre">--force</span></code> now works correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/4672">#4672</a>).</p></li>
<li><p>Pressing Ctrl-C while running a script now reliably terminates fish
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/5253">#5253</a>).</p></li>
</ul>
</section>
<section id="for-distributors-and-developers-2">
<span id="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> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3788">#3788</a>) and improved German (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3834">#3834</a>) translations.</p></li>
<li><p>fish no longer depends on the <code class="docutils literal notranslate"><span class="pre">which</span></code> external command.</p></li>
</ul>
</section>
<section id="other-significant-changes-1">
<span id="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> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3841">#3841</a>), <code class="docutils literal notranslate"><span class="pre">obnam</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3924">#3924</a>), <code class="docutils literal notranslate"><span class="pre">perl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3856">#3856</a>), <code class="docutils literal notranslate"><span class="pre">portmaster</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3950">#3950</a>),
<code class="docutils literal notranslate"><span class="pre">python</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3840">#3840</a>), <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3781">#3781</a>), <code class="docutils literal notranslate"><span class="pre">scp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3781">#3781</a>), <code class="docutils literal notranslate"><span class="pre">systemctl</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3757">#3757</a>) and <code class="docutils literal notranslate"><span class="pre">udisks</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3764">#3764</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-5-0-released-february-3-2017">
<h2>fish 2.5.0 (released February 3, 2017)<a class="headerlink" href="#fish-2-5-0-released-february-3-2017" title="Link to this heading">¶</a></h2>
<p>There are no major changes between 2.5b1 and 2.5.0. If you are upgrading
from version 2.4.0 or before, please also review the release notes for
2.5b1 (included below).</p>
<section id="notable-fixes-and-improvements-2">
<span id="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 &amp; 6 for 64-bit builds</p></li>
<li><p>Ubuntu 12.04 (EoLTS April 2017)</p></li>
<li><p>Debian 7 (EoLTS May 2018)</p></li>
</ul>
<p>Installing newer version of fish on these systems will require building
from source.</p>
</section>
<section id="os-x-snowleopard">
<h4>OS X SnowLeopard<a class="headerlink" href="#os-x-snowleopard" title="Link to this heading">¶</a></h4>
<p>Starting with version 2.5, fish requires a C++11 standard library on OS
X 10.6 (“SnowLeopard”). If this library is not installed, you will see
this error: <code class="docutils literal notranslate"><span class="pre">dyld:</span> <span class="pre">Library</span> <span class="pre">not</span> <span class="pre">loaded:</span> <span class="pre">/usr/lib/libc++.1.dylib</span></code></p>
<p>MacPorts is the easiest way to obtain this library. After installing the
SnowLeopard MacPorts release from the install page, run:</p>
<div class="highlight-fish-docs-samples notranslate"><div class="highlight"><pre><span></span><span class="nf">sudo</span><span class="w"> </span><span class="no">port</span><span class="w"> </span><span class="no">-v</span><span class="w"> </span><span class="no">install</span><span class="w"> </span><span class="no">libcxx</span>
</pre></div>
</div>
<p>Now fish should launch successfully. (Please open an issue if it does
not.)</p>
<p>This is only necessary on 10.6. OS X 10.7 and later include the required
library by default.</p>
</section>
</section>
<section id="other-significant-changes-2">
<span id="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 &amp; Alt-v by
default) to edit the command buffer in an external editor (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1215">#1215</a>,
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3627">#3627</a>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_color</span></code> now supports italics (<code class="docutils literal notranslate"><span class="pre">--italics</span></code>), dim (<code class="docutils literal notranslate"><span class="pre">--dim</span></code>)
and reverse (<code class="docutils literal notranslate"><span class="pre">--reverse</span></code>) modes (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3650">#3650</a>).</p></li>
<li><p>Filesystems with very slow locking (eg incorrectly-configured NFS)
will no longer slow fish down (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/685">#685</a>).</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3695">#3695</a>), <code class="docutils literal notranslate"><span class="pre">fusermount</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3642">#3642</a>),
<code class="docutils literal notranslate"><span class="pre">make</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3628">#3628</a>), <code class="docutils literal notranslate"><span class="pre">netctl-auto</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>), <code class="docutils literal notranslate"><span class="pre">nmcli</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3648">#3648</a>),
<code class="docutils literal notranslate"><span class="pre">pygmentize</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>), and <code class="docutils literal notranslate"><span class="pre">tar</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3719">#3719</a>).</p></li>
<li><p>Added completions for:</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">VBoxHeadless</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">VBoxSDL</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">base64</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">caffeinate</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dconf</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3638">#3638</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dig</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3495">#3495</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">dpkg-reconfigure</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3521">#3521</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3522">#3522</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">feh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">launchctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3682">#3682</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lxc</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3554">#3554</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3564">#3564</a>),</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mddiagnose</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdfind</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdimport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdls</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mkvextract</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3492">#3492</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nvram</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">objdump</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sysbench</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3491">#3491</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tmutil</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3524">#3524</a>)</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-4-0-released-november-8-2016">
<h2>fish 2.4.0 (released November 8, 2016)<a class="headerlink" href="#fish-2-4-0-released-november-8-2016" title="Link to this heading">¶</a></h2>
<p>There are no major changes between 2.4b1 and 2.4.0.</p>
<section id="notable-fixes-and-improvements-4">
<span id="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 &amp; 12, Dragonfly BSD &amp; illumos prevented fish from
working correctly on these platforms under UTF-8 locales; fish now
avoids the buggy behaviour (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3050">#3050</a>).</p></li>
<li><p>Prompts which show git repository information (via
<code class="docutils literal notranslate"><span class="pre">__fish_git_prompt</span></code>) are faster in large repositories (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3294">#3294</a>) and
slow filesystems (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3083">#3083</a>).</p></li>
<li><p>fish 2.3.0 reintroduced a problem where the greeting was printed even
when using <code class="docutils literal notranslate"><span class="pre">read</span></code>; this has been corrected again (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3261">#3261</a>).</p></li>
<li><p>Vi mode changes the cursor depending on the current mode (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3215">#3215</a>).</p></li>
<li><p>Command lines with escaped space characters at the end tab-complete
correctly (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2447">#2447</a>).</p></li>
<li><p>Added completions for:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">arcanist</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3256">#3256</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">connmanctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3419">#3419</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">figlet</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">mdbook</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ninja</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3415">#3415</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">p4</span></code>, the Perforce client (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3314">#3314</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pygmentize</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ranger</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>)</p></li>
</ul>
</li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3297">#3297</a>), <code class="docutils literal notranslate"><span class="pre">abbr</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3267">#3267</a>), <code class="docutils literal notranslate"><span class="pre">brew</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3309">#3309</a>), <code class="docutils literal notranslate"><span class="pre">chown</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3380">#3380</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3383">#3383</a>),<code class="docutils literal notranslate"><span class="pre">cygport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3392">#3392</a>), <code class="docutils literal notranslate"><span class="pre">git</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3274">#3274</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3226">#3226</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3225">#3225</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3094">#3094</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3087">#3087</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3035">#3035</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3021">#3021</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2982">#2982</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3230">#3230</a>),
<code class="docutils literal notranslate"><span class="pre">kill</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">pkill</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3200">#3200</a>), <code class="docutils literal notranslate"><span class="pre">screen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3271">#3271</a>), <code class="docutils literal notranslate"><span class="pre">wget</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3470">#3470</a>),
and <code class="docutils literal notranslate"><span class="pre">xz</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3378">#3378</a>).</p></li>
<li><p>Distributors, packagers and developers will notice that the build
process produces more succinct output by default; use <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">V=1</span></code> to
get verbose output (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3248">#3248</a>).</p></li>
<li><p>Improved compatibility with minor platforms including musl (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2988">#2988</a>),
Cygwin (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2993">#2993</a>), Android (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3441">#3441</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3442">#3442</a>), Haiku (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/3322">#3322</a>) and Solaris .</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-3-1-released-july-3-2016">
<h2>fish 2.3.1 (released July 3, 2016)<a class="headerlink" href="#fish-2-3-1-released-july-3-2016" title="Link to this heading">¶</a></h2>
<p>This is a functionality and bugfix release. This release does not
contain all the changes to fish since the last release, but fixes a
number of issues directly affecting users at present and includes a
small number of new features.</p>
<section id="significant-changes-1">
<span id="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> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1693">#1693</a>).</p></li>
<li><p>Added completions for <code class="docutils literal notranslate"><span class="pre">adb</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1165">#1165</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1211">#1211</a>), <code class="docutils literal notranslate"><span class="pre">apt</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2018">#2018</a>),
<code class="docutils literal notranslate"><span class="pre">aura</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1292">#1292</a>), <code class="docutils literal notranslate"><span class="pre">composer</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1607">#1607</a>), <code class="docutils literal notranslate"><span class="pre">cygport</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1841">#1841</a>),
<code class="docutils literal notranslate"><span class="pre">dropbox</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1533">#1533</a>), <code class="docutils literal notranslate"><span class="pre">elixir</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>), <code class="docutils literal notranslate"><span class="pre">fossil</span></code>, <code class="docutils literal notranslate"><span class="pre">heroku</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1790">#1790</a>), <code class="docutils literal notranslate"><span class="pre">iex</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>), <code class="docutils literal notranslate"><span class="pre">kitchen</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/2000">#2000</a>), <code class="docutils literal notranslate"><span class="pre">nix</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1167">#1167</a>),
<code class="docutils literal notranslate"><span class="pre">node</span></code>/<code class="docutils literal notranslate"><span class="pre">npm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1566">#1566</a>), <code class="docutils literal notranslate"><span class="pre">opam</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1615">#1615</a>), <code class="docutils literal notranslate"><span class="pre">setfacl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1752">#1752</a>),
<code class="docutils literal notranslate"><span class="pre">tmuxinator</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1863">#1863</a>), and <code class="docutils literal notranslate"><span class="pre">yast2</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1739">#1739</a>).</p></li>
<li><p>Improved completions for <code class="docutils literal notranslate"><span class="pre">brew</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1090">#1090</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1810">#1810</a>), <code class="docutils literal notranslate"><span class="pre">bundler</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1779">#1779</a>), <code class="docutils literal notranslate"><span class="pre">cd</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1135">#1135</a>), <code class="docutils literal notranslate"><span class="pre">emerge</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1840">#1840</a>),<code class="docutils literal notranslate"><span class="pre">git</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1680">#1680</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1834">#1834</a> &amp;
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1951">#1951</a>), <code class="docutils literal notranslate"><span class="pre">man</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/960">#960</a>), <code class="docutils literal notranslate"><span class="pre">modprobe</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1124">#1124</a>), <code class="docutils literal notranslate"><span class="pre">pacman</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1292">#1292</a>),
<code class="docutils literal notranslate"><span class="pre">rpm</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1236">#1236</a>), <code class="docutils literal notranslate"><span class="pre">rsync</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1872">#1872</a>), <code class="docutils literal notranslate"><span class="pre">scp</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1145">#1145</a>), <code class="docutils literal notranslate"><span class="pre">ssh</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1234">#1234</a>),
<code class="docutils literal notranslate"><span class="pre">sshfs</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1268">#1268</a>), <code class="docutils literal notranslate"><span class="pre">systemctl</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1462">#1462</a>, <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1950">#1950</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1972">#1972</a>), <code class="docutils literal notranslate"><span class="pre">tmux</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1853">#1853</a>), <code class="docutils literal notranslate"><span class="pre">vagrant</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1748">#1748</a>), <code class="docutils literal notranslate"><span class="pre">yum</span></code> (<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1269">#1269</a>), and <code class="docutils literal notranslate"><span class="pre">zypper</span></code>
(<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1787">#1787</a>).</p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-1-2-released-feb-24-2015">
<h2>fish 2.1.2 (released Feb 24, 2015)<a class="headerlink" href="#fish-2-1-2-released-feb-24-2015" title="Link to this heading">¶</a></h2>
<p>fish 2.1.2 contains a workaround for a filesystem bug in Mac OS X
Yosemite. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1859">#1859</a></p>
<p>Specifically, after installing fish 2.1.1 and then rebooting, “Verify
Disk” in Disk Utility will report “Invalid number of hard links.” We
don’t have any reports of data loss or other adverse consequences. fish
2.1.2 avoids triggering the bug, but does not repair an already affected
filesystem. To repair the filesystem, you can boot into Recovery Mode
and use Repair Disk from Disk Utility. Linux and versions of OS X prior
to Yosemite are believed to be unaffected.</p>
<p>There are no other changes in this release.</p>
</section>
<hr class="docutils" />
<section id="fish-2-1-1-released-september-26-2014">
<h2>fish 2.1.1 (released September 26, 2014)<a class="headerlink" href="#fish-2-1-1-released-september-26-2014" title="Link to this heading">¶</a></h2>
<p><strong>Important:</strong> if you are upgrading, stop all running instances of
<code class="docutils literal notranslate"><span class="pre">fishd</span></code> as soon as possible after installing this release; it will be
restarted automatically. On most systems, there will be no further
action required. Note that some environments (where <code class="docutils literal notranslate"><span class="pre">XDG_RUNTIME_DIR</span></code>
is set), such as Fedora 20, will require a restart of all running fish
processes before universal variables work as intended.</p>
<p>Distributors are highly encouraged to call <code class="docutils literal notranslate"><span class="pre">killall</span> <span class="pre">fishd</span></code>,
<code class="docutils literal notranslate"><span class="pre">pkill</span> <span class="pre">fishd</span></code> or similar in installation scripts, or to warn their
users to do so.</p>
<section id="security-fixes">
<h3>Security fixes<a class="headerlink" href="#security-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The fish_config web interface now uses an authentication token to
protect requests and only responds to requests from the local machine
with this token, preventing a remote code execution attack. (closing
CVE-2014-2914). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1438">#1438</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">psub</span></code> and <code class="docutils literal notranslate"><span class="pre">funced</span></code> are no longer vulnerable to attacks which
allow local privilege escalation and data tampering (closing
CVE-2014-2906 and CVE-2014-3856). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1437">#1437</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fishd</span></code> uses a secure path for its socket, preventing a local
privilege escalation attack (closing CVE-2014-2905). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1436">#1436</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__fish_print_packages</span></code> is no longer vulnerable to attacks which
would allow local privilege escalation and data tampering (closing
CVE-2014-3219). <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1440">#1440</a></p></li>
</ul>
</section>
<section id="other-fixes">
<h3>Other fixes<a class="headerlink" href="#other-fixes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">fishd</span></code> now ignores SIGPIPE, fixing crashes using tools like GNU
Parallel and which occurred more often as a result of the other
<code class="docutils literal notranslate"><span class="pre">fishd</span></code> changes. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1084">#1084</a> &amp; <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1690">#1690</a></p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-1-0">
<h2>fish 2.1.0<a class="headerlink" href="#fish-2-1-0" title="Link to this heading">¶</a></h2>
<section id="significant-changes-5">
<span id="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">^&amp;1</span> <span class="pre">|</span> <span class="pre">tee</span> <span class="pre">log.txt</span></code>, or the more familiar
<code class="docutils literal notranslate"><span class="pre">cmd</span> <span class="pre">2&gt;&amp;1</span> <span class="pre">|</span> <span class="pre">tee</span> <span class="pre">log.txt</span></code>.</p>
</li>
<li><p><strong>A single ``%`` now expands to the last job backgrounded.</strong> <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/1008">#1008</a></p>
<p>Previously, a single <code class="docutils literal notranslate"><span class="pre">%</span></code> would pid-expand to either all
backgrounded jobs, or all jobs owned by your user. Now it expands to
the last job backgrounded. If no job is in the background, it will
fail to expand. In particular, <code class="docutils literal notranslate"><span class="pre">fg</span> <span class="pre">%</span></code> can be used to put the most
recent background job in the foreground.</p>
</li>
</ul>
</section>
<section id="other-notable-fixes">
<h3>Other Notable Fixes<a class="headerlink" href="#other-notable-fixes" title="Link to this heading">¶</a></h3>
<ul>
<li><p>alt-U and alt+C now uppercase and capitalize words, respectively.
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/995">#995</a></p></li>
<li><p>VTE based terminals should now know the working directory. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/906">#906</a></p></li>
<li><p>The autotools build now works on Mavericks. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/968">#968</a></p></li>
<li><p>The end-of-line binding (ctrl+E) now accepts autosuggestions. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/932">#932</a></p></li>
<li><p>Directories in <code class="docutils literal notranslate"><span class="pre">/etc/paths</span></code> (used on OS X) are now prepended
instead of appended, similar to other shells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/927">#927</a></p></li>
<li><p>Option-right-arrow (used for partial autosuggestion completion) now
works on iTerm2. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/920">#920</a></p></li>
<li><p>Tab completions now work properly within nested subcommands. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/913">#913</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">printf</span></code> supports <code class="docutils literal notranslate"><span class="pre">\e</span></code>, the escape character. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/910">#910</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fish_config</span> <span class="pre">history</span></code> no longer shows duplicate items. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/900">#900</a></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">$fish_user_paths</span></code> is now prepended to $PATH instead of appended.
<a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/888">#888</a></p></li>
<li><p>Jobs complete when all processes complete. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/876">#876</a></p>
<p>For example, in previous versions of fish, <code class="docutils literal notranslate"><span class="pre">sleep</span> <span class="pre">10</span> <span class="pre">|</span> <span class="pre">echo</span> <span class="pre">Done</span></code>
returns control immediately, because echo does not read from stdin.
Now it does not complete until sleep exits (presumably after 10
seconds).</p>
</li>
<li><p>Better error reporting for square brackets. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/875">#875</a></p></li>
<li><p>fish no longer tries to add <code class="docutils literal notranslate"><span class="pre">/bin</span></code> to <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> unless PATH is
totally empty. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/852">#852</a></p></li>
<li><p>History token substitution (alt-up) now works correctly inside
subshells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/833">#833</a></p></li>
<li><p>Flow control is now disabled, freeing up ctrl-S and ctrl-Q for other
uses. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/814">#814</a></p></li>
<li><p>sh-style variable setting like <code class="docutils literal notranslate"><span class="pre">foo=bar</span></code> now produces better error
messages. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/809">#809</a></p></li>
<li><p>Commands with wildcards no longer produce autosuggestions. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/785">#785</a></p></li>
<li><p>funced no longer freaks out when supplied with no arguments. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/780">#780</a></p></li>
<li><p>fish.app now works correctly in a directory containing spaces. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/774">#774</a></p></li>
<li><p>Tab completion cycling no longer occasionally fails to repaint. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/765">#765</a></p></li>
<li><p>Comments now work in eval’d strings. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/684">#684</a></p></li>
<li><p>History search (up-arrow) now shows the item matching the
autosuggestion, if that autosuggestion was truncated. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/650">#650</a></p></li>
<li><p>Ctrl-T now transposes characters, as in other shells. <a class="reference external" href="https://github.com/fish-shell/fish-shell/issues/128">#128</a></p></li>
</ul>
</section>
</section>
<hr class="docutils" />
<section id="fish-2-0-0">
<h2>fish 2.0.0<a class="headerlink" href="#fish-2-0-0" title="Link to this heading">¶</a></h2>
<section id="significant-changes-6">
<span id="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 &#64;siteshwar for implementation. Thanks &#64;siteshwar!</p>
</section>
</section>
<hr class="docutils" />
<section id="fishfish-beta-r1">
<h2>fishfish Beta r1<a class="headerlink" href="#fishfish-beta-r1" title="Link to this heading">¶</a></h2>
<section id="scripting">
<h3>Scripting<a class="headerlink" href="#scripting" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>No changes! All existing fish scripts, config files, completions,
etc. from trunk should continue to work.</p></li>
</ul>
</section>
<section id="new-features-1">
<span id="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> &#187;</li>
    
    <a href="index.html">fish-shell 4.2.1 documentation</a> &#187;
    

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

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

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

    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 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>