summaryrefslogtreecommitdiff
path: root/doc/changelog.asciidoc
blob: b94e1d66d3c076a1c3ce38c264f61bc617ac07d9 (plain)
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
Change Log
===========

// https://keepachangelog.com/

All notable changes to this project will be documented in this file.
This project adheres to https://semver.org/[Semantic Versioning], though minor
breaking changes (such as renamed commands) can happen in minor releases.

// tags:
// `Added` for new features.
// `Changed` for changes in existing functionality.
// `Deprecated` for once-stable features removed in upcoming releases.
// `Removed` for deprecated features removed in this release.
// `Fixed` for any bug fixes.
// `Security` to invite users to upgrade in case of vulnerabilities.

[[v3.0.0]]
v3.0.0 (unreleased)
-------------------

Major changes
~~~~~~~~~~~~~

- qutebrowser now supports Qt 6 and uses it by default. Qt 5.15 is used as a
  fallback if Qt 6 is unavailable. This behavior can be customized in three ways
  (in order of precedence):
  * Via `--qt-wrapper PyQt5` or `--qt-wrapper PyQt6` command-line arguments.
  * Via the `QUTE_QT_WRAPPER` environment variable, set to `PyQt6` or `PyQt5`.
  * For packagers wanting to provide packages specific to a Qt version,
    patch `qutebrowser/qt/machinery.py` and set `_WRAPPER_OVERRIDE`.

Added
~~~~~

- On invalid commands/settings with a similarly spelled match, qutebrowser now
  suggests the correct name in its error messages.
- New `:prompt-fileselect-external` command which can be used to spawn an
  external file selector (`fileselect.folder.command`) from download filename
  prompts (bound to `<Alt+e>` by default).
- New `clock` value for `statusbar.widgets`, displaying the current time.
- New `qute://start` built-in start page (not set as the default start page yet).
- New `content.javascript.log_message.levels` setting, allowing to surface JS log
  messages as qutebrowser messages (rather than only logging them). By default,
  errors in internal `qute:` pages and userscripts are shown to the user.
- New `content.javascript.log_message.excludes` setting, which allows to exclude
  certain messages from the `content.javascript.log_message.levels` setting
  described above.
- New `tabs.title.elide` setting to configure where text should be elided
  (replaced by `…`) in tab titles when space runs out.
- New `--quiet` switch for `:back` and `:forward`, to suppress the error message
  about already being at beginning/end of history.
- New `qute-1pass` userscript using the 1password commandline to fill
  passwords.
- On macOS when running with Qt < 6.3, `pyobjc-core` and
  `pyobjc-framework-Cocoa` are now required dependencies.
  They are *not* required on other systems or when running with Qt 6.3+, but
  still listed in the `requirements.txt` because it's impossible to tell the
  two cases apart there.
- New features in userscripts:
    * `qutedmenu` gained new `window` and `private` options.
    * `qute-keepassxc` now supports unlock-on-demand, multiple account
      selection via rofi, and inserting TOTP-codes (experimental).
- New `qt.chromium.experimental_web_platform_features` setting, which is enabled
  on Qt 5 by default, to maximize compatibility with websites despite an aging
  Chromium backend.
- New `colors.webpage.darkmode.increase_text_contrast` setting for Qt 6.3+
- New `fonts.tooltip`, `colors.tooltip.bg` and `colors.tooltip.fg` settings.
- New `log-qt-events` debug flag for `-D`

Removed
~~~~~~~

- Python 3.8.0 or newer is now required.
  - Support for Python 3.6 and 3.7 is dropped, as they both reached
    their [end of life] in December 2021 and June 2023, respectively.
- Support for Qt/PyQt before 5.15.0 and QtWebEngine before 5.15.2 are now
  dropped, as older Qt versions are
  https://endoflife.date/qt[end-of-life upstream] since mid/late 2020
  (5.13/5.14) and late 2021 (5.12 LTS).
- The `--enable-webengine-inspector` flag is now dropped. It used to be ignored
  but still accepted, to allow doing a `:restart` from versions older than v2.0.0.
  Thus, switching from v1.x.x directly to v3.0.0 via `:restart` will not be possible.
- Support for macOS 10.14 and 10.15 is now dropped, raising the minimum
  required macOS version to macOS 11 Big Sur.
  * Qt 6.4 was the latest version to support macOS 10.14 and 10.15.
  * It should be possible to build a custom .dmg with Qt 6.4, but this is
    unsupported and not recommended.
- Support for Windows 8 and for Windows 10 before 1809 is now dropped.
  * Support for older Windows 10 versions might still be present in Qt 6.0/6.1/6.2
  * Support for Windows 8.1 is still present in Qt 5.15
  * It should be possible to build a custom .exe with those versions, but this
    is unsupported and not recommended.
- Support for 32-bit Windows is now dropped.

Changed
~~~~~~~

- The qutebrowser icons got moved from `icons/` to `qutebrowser/icons` in the
  repository, so that it's possible for qutebrowser to load them using Python's
  resource system (rather than compiling them into a Qt resource file).
  Packagers are advised to use `misc/Makefile` if possible, which has been
  updated with the new paths.
- The `content.javascript.can_access_clipboard` setting got renamed to
  `content.javascript.clipboard` and now understands three different values
  rather than being a boolean: `none` (formerly `false`), `access` (formerly
  `true`) and `access-paste` (additionally allows pasting content, needed for
  websites like Photopea or GitHub Codespaces).
- The default `hints.selectors` now also match the `treeitem` ARIA roles.
- The `:click-element` command now can also click elements based on its ID
  (`id`), a CSS selector (`css`), a position (`position`), or click the
  currently focused element (`focused`).
- The `:click-element` command now can select the first found element via
  `--select-first`.
- New `search.wrap_messages` setting, making it possible to disable search
  wrapping messages.
- The `:session-save` command now has a new `--no-history` flag, to exclude tab
  history.
- New widgets for `statusbar.widgets`:
  *  `clock`, showing the current time
  * `search_match`, showing the current match and total count when finding text
    on a page
- Messages shown by qutebrowser now don't automatically get interpreted as rich
  text anymore. Thus, e.g. `:message-info <h1>test` now shows the given text.
  To show rich text with `:message-*` commands, use their new `--rich` flag.
  Note this is NOT a security issue, as only a small subset of HTML is
  interpreted as rich text by Qt, independently from the website.
- Improved output when loading Greasemonkey scripts.
- The macOS `.app` now is registered as a handler for `.mhtml` files, such as
  the ones produced by `:download --mhtml`.
- The "... called unimplemented GM_..." messages are now logged as info JS
  messages instead of errors.
- JS errors in internal qutebrowser scripts are now shown as errors in the UI.
- For QtNetwork downloads (e.g. `:adblock-update`), various changes were done
  for how redirects work:
  - Insecure redirects (HTTPS -> HTTP) now fail the download.
  - 20 redirects are now allowed before the download fails rather than only 10
  - A redirect to the same URL will now fail the download with too many
    redirects instead of being ignored.
- When a download fails in a way it'd leave an empty file around, the empty
  file is now deleted.
- With Qt 6, setting `content.headers.referer` to `always` will act as if it
  was set to `same-domain`. The documentation is now updated to point that out.
- With QtWebEngine 5.15.5+, the load finished workaround was dropped, which
  should make certain operations happen when the page has started loading rather
  when it fully finished.
- `mkvenv.py` has a new `--pyqt-snapshot` flag, allowing to install certain packages
  from the https://www.riverbankcomputing.com/pypi/[Riverbank development snapshots server]
- When `QUTE_QTWEBENGINE_VERSION_OVERRIDE` is set, it now always wins, no matter how
  the version would otherwise have been determined. Note setting this value can break
  things (if set to a wrong value), and usually isn't needed.
- When qutebrowser is run with an older QtWebEngine version as on the previous
  launch, it now prints an error before starting (which causes the underlying
  Chromium to remove all browsing data such as cookies).
- The keys "<To Do List>" and "<Contrast adjust>" are now named "<To-do list>"
  and "<Adjust contrast>", respeectively.
- The `tox.ini` now requires at least tox 3.20 (was tox 3.15 previously)
- `:config-diff` now has an `--include-hidden` flag, which also shows
  internally-set settings.
- Improved error messages when `:spawn` can't find an executable.
- When a process fails, the error message now suggests using `:process PID` with
  the correct PID (rather than always showing the latest process, which might not
  be the failing one)
- When a process got killed with `SIGTERM`, no error message is now displayed
  anymore (unless started with `:spawn --verbose`).
- When a process got killed by a signal, the signal name is now displayed in
  the message.
- The qute-pass will now try looking up candidate pass entries based on the
  calling tab's verbatim netloc (hostname including port and username) if it
  can't find a match with an earlier candidate (FQDN, IPv4 etc).
- The `js-string-replaceall` quirk is now removed from the default
  `content.site_specific_quirks.skip`, so that `String.replaceAll` is now
  polyfilled on QtWebEngine < 5.15.3, hopefully improving website
  compaitibility.
- Hints are now displayed for elements setting an `aria-haspopup` attribute.

Fixed
~~~~~

- When the devtools are clicked but `input.insert_mode.auto_enter` is set to
  `false`, insert mode now isn't entered anymore.
- The search wrapping messages are now correctly displayed in (hopefully) all
  cases with QtWebEngine.
- When a message with the same text as a currently already displayed one gets
  shown, qutebrowser used to only show one message. This is now only done when the
  two messages are completely equivalent (text, level, etc.) instead of doing so
  when only the text matches.
- The `progress` and `backforward` statusbar widgets now stay removed if you
  choose to remove them. Previously they would appear again on navigation.
- Rare crash when running userscripts with crashed renderer processes.
- Multiple rare crashes when quitting qutebrowser.
- The `asciidoc2html.py` script now correctly uses the virtualenv-installed
  asciidoc rather than requiring a system-wide installation.
- "Package would be ignored" deprecation warnings when running `setup.py`.
- Crash when shutting down before fully initialized.
- Crash with some notification servers when the server is quitting.
- Crash when using QtWebKit with PAC and the file has an invalid encoding.
- Crash with the "tiramisu" notification server.
- Crash when the "herbe" notification presenter doesn't start correctly.
- Crash when using `:print --pdf` with a directory where its parent directory
  did not exist.

[[v2.5.4]]
v2.5.4 (2023-03-13)
-------------------

Fixed
~~~~~

- Support SQLite with DQS (double quoted string) compile time option turned
  off.

[[v2.5.3]]
v2.5.3 (2023-02-17)
-------------------

Added
~~~~~

- New `array_at` quirk, polyfilling the
  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/at[`Array.at` method],
  which is needed by various websites, but only natively available with Qt 6.2.

Fixed
~~~~~

- Crash when the adblock filter file can't be read.
- Inconsistent behavior when using `:config-{dict,list}-*` commands with an
  invalid value. Before the fix, using the same command again would complain that
  the value was already present, despite the error and the value not being
  actually changed.
- Incomplete error handling when mutating a dict/list in `config.py` and setting
  an invalid value. Before the fix, this would result in either a message in the
  terminal rather than GUI (startup), or in a crash (`:config-source`).
- Wrong type handling when using `:config-{dict,list}-*` commands with a config
  option with non-string values. The only affected option is `bindings.commands`,
  which is probably rarely used with those commands.
- The `readability` userscript now correctly passes the source URL to
  Breadability, to make relative links work.
- Update `dictcli.py` to use the `main` branch, fixing a 404 error.
- Crash with some notification servers when the server did quit.
- Minor documentation fixes

[[v2.5.2]]
v2.5.2 (2022-06-22)
-------------------

Fixed
~~~~~

- Packaging-related fixes:
    * The `install` and `stacktrace` help pages are now included in the docs
      shipped with qutebrowser when using the recommended packaging workflow.
    * The Windows installer now more consistently uses the configured Windows
      colors.
    * The Windows installer now bases the desktop/start menu icon choices on
      the existing install, if upgrading.
    * The macOS release hopefully doesn't cause macOS to (falsely) claim that it
      "is damaged and can't be opened" anymore.
- The notification fixes in v2.5.1 caused new notification crashes (probably
  more common than the ones being fixed...). Those are now fixed, along with a
  (rather involved) test case to prevent similar issues in the future.
- When a text was not found on a page, the associated message would be shown as
  rich text (e.g. after `/<h1>`). With this release, this is fixed for search
  messages, while the 3.0.0 release will change the default for all messages to be
  plain-text. Note this is NOT a security issue, as only a small subset of HTML
  is interpreted as rich text by Qt, independently from the website.
- When a Greasemonkey script couldn't be loaded (e.g. due to an unreadable file),
  qutebrowser would crash. It now shows an error instead.
- Ever since the v1.2.0 release in 2018, the `content.default_encoding` setting
  was not applied on start properly (only when it was changed afterwards). This
  is now fixed.

[[v2.5.1]]
v2.5.1 (2022-05-26)
-------------------

Fixed
~~~~~

- The `qute-pass` userscript is marked as executable again.
- PDF.js now works properly again with the macOS and Windows releases.
- The MathML workaround for darkmode (e.g. black on black Wikipedia formula)
  now also works for display (rather than inline) math.
- The `content.proxy` setting can now correctly be set to arbitrary values via
  the `qute://settings` page again.
- Fixed issues with Chromium version detection on Archlinux with
  qt5-webengine 5.15.9-3.
- Fixed a rare possible crash with invalid `Content-Disposition` headers.
- Fixes for various notification-related crashes:
  * With the `tiramisu` notification server (due to invalid behavior of the server, now a non-fatal error)
  * With the `budgie` notification server when closing a notification (due to invalid behavior of the server, now worked around)
  * When a server exits with an unsuccessful exit status (now a non-fatal error)
  * When a server couldn't be started successfully (now a non-fatal error)
  * With the `herbe` notification presenter, when the website tries to close
    the notification after the user accepting (right-clicking) it.
- Fixes in userscripts:
  * The `qute-bitwarden` userscript now correctly searches for entries for
    sites on a subdomain of an unrecognized TLD. subdomain names. Previously
    `my.site.local` would have searched in bitwarden for `my.sitelocal`,
    losing the rightmost dot.

[[v2.5.0]]
v2.5.0 (2022-04-01)
-------------------

Deprecated
~~~~~~~~~~

- v2.5.x will be the last release of qutebrowser 2.
  **For the upcoming 3.0.0 release**, it's planned to drop support for various
  legacy platforms and libraries which are unsupported upstream, such as:
  * Qt before 5.15 LTS (plus adding support for Qt 6.2+)
  * Python 3.6
  * The QtWebKit backend
  * macOS 10.14 (via Homebrew)
  * 32-bit Windows (via Qt)
  * Windows 8 (via Qt)
  * Windows 10 before 1809 (via Qt)
  * Possibly other more minor dependency changes
- The `:rl-unix-word-rubout` command (`<Ctrl-W>` in command/prompt modes) has
  been deprecated. Use `:rl-rubout " "` instead.
- The `:rl-unix-filename-rubout` command has been deprecated. Use either
  `:rl-rubout "/ "` (classic readline behavior) or `:rl-filename-rubout` (using
  OS path separator and ignoring spaces) instead.

Changed
~~~~~~~

- Improved message if a spawned process wasn't found and a Flatpak container is
  in use.
- The `:tab-move` command now takes `start` and `end` as `index` to move a tab
  to the first/last position.
- Tests now automatically pick the backend (QtWebKit/QtWebEngine) based on
  what's available. The `QUTE_BDD_WEBENGINE` environment variable and
  `--qute-bdd-webengine` argument got replaced by `QUTE_TESTS_BACKEND` and
  `--qute-backend` respectively, which can be set to either `webengine` or
  `webkit`.
- Using `:tab-give` or `:tab-take` on the last tab in a window now always
  closes that window, no matter what `tabs.last_close` is set to.
- Redesigned `qute://settings` (`:set`) page with buttons for options with
  fixed values.
- The default `hint.selectors` now match more ARIA roles (`tab`, `checkbox`,
  `menuitem`, `menuitemcheckbox` and `menuitemradio`).
- Using e.g. `:bind --mode=passthrough` now scrolls to the passthrough section
  on the `qute://bindings` page.
- Clicking on a notification now tries to focus the tab where the notification
  is coming from. Note this might not work properly if there is more than one
  tab from the same host open.
- Improvements to userscripts:
  * `qute-bitwarden` understands a new `--password-prompt-invocation`, which can
    be used to specify a tool other than `rofi` to ask for a password.
  * `cast` now uses `yt-dlp` if available (falling back to `youtube-dl` if not).
    It also lets users override the tool to use via a `QUTE_CAST_YTDL_PROGRAM`
    environment variable.
  * `qute-pass` now understands a new `--prefix` argument if used in gopass
    mode, which gets passed as subfolder prefix to `gopass`.
  * `open_download` now supports Flatpak by using its XDG Desktop Portal.
  * `open_download` now waits for the exit status of `xdg-open`, causing
    qutebrowser to report any issues with it.
- The `content.headers.custom` setting now accepts empty strings as values,
  resulting in an empty header being sent.
- Renamed settings:
  * `qt.low_end_device_mode` -> `qt.chromium.low_end_device_mode`
  * `qt.process_model` -> `qt.chromium.process_model`
- System-wide userscripts are now discovered from the correct location when
  running via Flatpak (`/app/share` rather than `/usr/share`).
- Filename prompts now don't display a `..` entry in the list of files anymore.
  To get back to the parent directory, either type `../` manually, or use the new
  `:rl-filename-rubout` command, bound to `<Ctrl-Shift-W>` by default.

Added
~~~~~

- New `input.match_counts` option which allows to turn off count matching for
  more emacs-like bindings.
- New `{relative_index}` field for `tabs.title.format` (and `.pinned_format`)
  which shows relative tab numbers.
- New `input.mode_override` option which allows overriding the current mode
  based on the new URL when navigating or switching tabs.
- New `qt.chromium.sandboxing` setting which allows to disable Chromium's
  sandboxing (mainly intended for development and testing).
- New `QUTE_TAB_INDEX` variable for userscripts, containing the index of the
  current tab.
- New `editor.remove_file` setting which can be set to `False` to keep all
  temporary editor files after closing the external editor.
- New `:rl-rubout` command replacing `:rl-unix-word-rubout` (and optionally
  `:rl-unix-filename-rubout`), taking a delimiter as argument.
- New `:rl-filename-rubout` command, using the OS path separator and ignoring
  spaces. The command also gets shown in the suggested commands for a download
  filename prompt now.

Fixed
~~~~~

- When `search.incremental` is disabled, searching using `/text` followed by a
  backwards search via `?text` (or vice-versa) now correctly changes the search
  direction.
- Elements getting a hint due to a `tabindex` now are skipped if it's set to
  `-1`, reducing some false-positives.
- The audible indicator (`[A]`) now uses a 2s cooldown when the audio goes
  silent, equivalent with the behavior of older QtWebEngine versions.
- With `confirm_quit` set to `downloads`, the confirmation dialog is now only
  shown when closing the last window (rather than closing any window, which
  would continue running that window's downloads). Unfortunately, more issues
  with `confirm_quit` and multiple windows remain.
- Crash when a previous crash-log file contains non-ASCII characters (which
  should never happen unless it was edited manually)
- Due to changes in Debian, an old workaround (for broken QtWebEngine patching
  on Debian) caused the inferior qutebrowser error page to be displayed, when
  Chromium's would have worked fine. The workaround was now dropped.
- Crash when using `<Ctrl-D>` (`:completion-item-del`) in the `:tab-focus`
  list, rather than `:tab-select`.
- Work around a Qt issue causing `:spawn` to run executables from the current
  directory if no system-wide executable was found. The underlying Qt bug is
  tracked as https://lists.qt-project.org/pipermail/announce/2022-February/000333.html[CVE-2022-25255],
  though the impact with typical qutebrowser usage is low: Normally,
  qutebrowser is run from a fixed location (usually the users home directory),
  and `:spawn` is not typically used with executables that don't exist. The main
  security impact of this bug is in tools like text editors, which are often
  executed in untrusted directories and might attempt to run auxiliary tools
  automatically.
- When `:rl-rubout` or `:rl-filename-rubout` (formerly `:rl-unix-word-rubout`
  and `:rl-unix-filename-rubout`) were used on a string not starting with the
  given delimiter, they failed to delete the first character, which is now fixed.
- Fixes in userscripts:
  * `ripbang` now works again (it got blocked due to a missing user agent and
    used outdated qutebrowser commands before)
  * `keepassxc` now has a properly working `--insecure` flag
- Speculative fix for an immediate crash at start with the macOS/Windows
  binaries (in certain rare environments).
- Speculative fix for a qutebrowser crash when the notification daemon crashes
  while showing the notification.
- Fix crash when using `:screenshot` with an invalid `--rect` argument.
- Added a site-specific quirk to make cookie dialogs on StackExchange pages
  (such as Stack Overflow) work on Qt 5.12.

[[v2.4.0]]
v2.4.0 (2021-10-21)
-------------------

Security
~~~~~~~~

- **CVE-2021-41146**: Fix arbitrary command execution on Windows via URL handler
  argument injection. See the
  https://github.com/qutebrowser/qutebrowser/security/advisories/GHSA-vw27-fwjf-5qxm[security advisory]
  for details.

Added
~~~~~

- New `content.blocking.hosts.block_subdomains` setting which can be used to
  disable the subdomain blocking for the hosts-based adblocker introduced in
  v2.3.0.
- New `downloads.prevent_mixed_content` setting to prevent insecure
  mixed-content downloads (true by default).
- New `--private` flag for `:tab-clone`, which clones a tab into a new private
  window, mirroring the same flags for `:open` and `:tab-give`.

Fixed
~~~~~

- Switching tabs via mouse wheel scrolling now works properly on macOS. Set
  `tabs.mousewheel_switching` to false if you prefer the previous behavior.
- Speculative fix for a crash when closing qutebrowser while a systray
  notification is shown.

Changed
~~~~~~~

- Typing in the filename prompt now filters matching directories.
- When opening a file qutebrowser can't handle from a `file:///` directory
  listing, qutebrowser now opens it with the default application rather than
  displaying a download prompt.
- In Greasemonkey scripts, using "overrideMimeType" with GM_xmlhttpRequest is
  now supported.
- `:hint --rapid` is now supported for the `tab` hinting target no matter what
  `tabs.background` is set to, as there are various scenarios where tabs can
  open in the background.
- New flags for the `qute-pass` userscript:
  * `--unfiltered` to show all secrets, not just the one matching the current
    URL.
  * `--always-show-selection` to confirm the password to be entered even if
    there's only a single match.
- In insert mode, `<Shift-Escape>` is now bound to `fake-key <Escape>` by
  default, i.e., sends an Escape keypress to the website.
- Using `GM_setClipboard` in Greasemonkey scripts is now supported.

[[v2.3.1]]
v2.3.1 (2021-07-28)
-------------------

Fixed
~~~~~

- Updated the workaround for Google Account log in claiming that this browser
  isn't secure. For an equivalent workaround on older versions, run:
  `:set -u https://accounts.google.com/* content.headers.user_agent "Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"`
- Corrupt cache file exceptions with `adblock` 0.5.0+ are now handled properly.
- Crash when entering unicode surrogates into the filename prompt.
- `UnboundLocalError` in `qute-keepass` when the database couldn't be opened.

[[v2.3.0]]
v2.3.0 (2021-06-28)
-------------------

Added
~~~~~

- New `content.prefers_reduced_motion` setting to request websites to reduce
  non-essential motion/animations.
- New `colors.prompts.selected.fg` setting to customize the text color for
  selected items in filename prompts.

Changed
~~~~~~~

- The hosts-based adblocker (using `content.blocking.hosts.lists`) now also
  blocks all requests to any subdomains of blocked hosts.
- The `fonts.web.*` settings now support URL patterns.
- The `:greasemonkey-reload` command now shows a list of loaded scripts and has
  a new `--quiet` switch to suppress that message.
- When launching a userscript via hints, a new `QUTE_CURRENT_URL` environment
  variable now points to the current page (rather than the URL of the selected
  element, where `QUTE_URL` points to).

Fixed
~~~~~

- Crash on macOS 10.14+ when logging into Google accounts -- the previous fix
  was incomplete due wrong information in Apple's documentation.
- Crash when two Greasemonkey scripts have the same name (usually happening
  because the same file is in both the data and the config directory).
- Deprecation warnings when using the `link_pyqt.py` script on Python 3.10
  (e.g. via `tox` or `mkvenv.py`).

[[v2.2.3]]
v2.2.3 (2021-06-01)
-------------------

Fixed
~~~~~

- Logging into Google accounts or sharing the camera on macOS 10.14+ crashed,
  which is now fixed.
- The Windows installer now correctly aborts the installation on Windows 7
  (rather than attempting an install which won't work, since Windows 7 is
  unsupported since the v2.0.0 release).
- Using `--json-logging` without `--debug` caused qutebrowser to crash since the
  v1.13.0 release. It now works correctly again.
- Mixing Qt 5.14+ with QtWebEngine 5.12 caused a crash related to qutebrowser's
  notification support, which is now fixed.
- The documentation now points to the new IRC channels on irc.libera.chat
  instead of the defunct Freenode channels (due to a hostile takeover by
  Freenode staff).
- Setting `content.headers.user_agent` or `.accept_language` to a value
  containing non-ascii characters was permitted by qutebrowser, but resulted in
  a crash when loading a page. Such values are now rejected properly.
- When quitting qutebrowser on the `qute://settings` page, a crash could happen, which is now fixed.
- When `:edit-text` is used, but the existing text in the input isn't
  representable in the configured encoding (`editor.encoding`), qutebrowser would
  crash. It now shows a proper error instead.
- The testsuite should now work properly on aarch64.
- When QtWebEngine is in a "stuck" state while `:selection-follow` was used,
  this could cause a crash in qutebrowser. This is now fixed (speculatively, due
  to lack of a reproducer).
- When the brave adblock data (`adblock-cache.dat`) got corrupted, qutebrowser
  would crash when trying to load it. It now displays an error instead.
- Combining `/S` (silent) and `/allusers` when uninstalling via the Windows
  installer now works properly.

[[v2.2.2]]
v2.2.2 (2021-05-20)
-------------------

Fixed
~~~~~

- When awesomewm's "naughty" notification daemon was used with a development
  version of AwesomeWM and an unknown version number, qutebrowser would crash
  when trying to parse the version string. This is now fixed.
- Due to a bug with QtWebEngine 5.15.4, old Service Worker data could cause
  renderer process crashes. This is now worked around by qutebrowser.
- When an (broken) binding to `set-cmd-text` without any argument existed,
  using `:` would crash, which is now fixed.
- New site-specific quirk (again) working around not being able to type
  accented/composed characters on Google Docs.
- When running with `python -OO` (which is not recommended), a notification
  being shown would result in a crash, which is now fixed.

[[v2.2.1]]
v2.2.1 (2021-04-29)
-------------------

Changed
~~~~~~~

- When an error occurs in a notification presenter, qutebrowser now shows that
  error in the statusbar instead of just logging it.
- New site-specific-quirk for Discord logging users out when using vertical
  tabs (yes, really)

Fixed
~~~~~

- Certain errors from notification daemons are now displayed as non-fatal
  errors instead of qutebrowser crashing:
  * With the legacy GNOME Flashback notification daemon (not GNOME Shell), when
    more than 20 notifications are currently shown.
  * With the KDE Plasma notification daemon, when the same notification is
    shown twice (with <1s delay).
- The `mkvenv.py` script now works when `ldconfig -p` is failing.
- Running `:spawn -u -o` broke in v2.2.0 and now works properly again.
- Fixes in userscripts:
  * The `qute-bitwarden` userscript now still consumes returned data if the
    Bitwarden CLI showed a warning but exited with a 0 (successful) exit code.
  * The `qute-pass` userscript now doesn't try to match a username with
    `--password-only`, and error messages with invalid patterns are improved.
  * The `qute-pass` userscript now avoids running `pass` twice when `--otp-only`
    is used.

[[v2.2.0]]
v2.2.0 (2021-04-13)
-------------------

Deprecated
~~~~~~~~~~

- Running qutebrowser with Qt 5.12.0 is now unsupported and logs a warning. It
  should still work - however, a workaround for issues with the Nvidia graphic
  driver was dropped. Newer Qt 5.12.x versions are still fully supported.
- The `--force` argument for `:tab-only` is deprecated, use `--pinned close`
  instead.
- Using `:tab-focus` without an argument or count is now deprecated, use
  `:tab-next` instead.

Added
~~~~~

- New dependency on the `QtDBus` module. If this requirement is an issue for you
  or your distribution, please open an issue! Note that a DBus connection at
  runtime is still optional.
- New `input.media_keys` setting which can be used to disable Chromium's
  handling of media keys.
- New `:process` command (and associated `qute://process` pages) which can be
  used to view and terminate/kill external processes spawned by qutebrowser.
- New `content.site_specific_quirks.skip` setting which can be used to disable
  individual site-specific quirks.
- New `--pinned` argument for `:tab-only`, which replaces `--force` (with
  `--pinned close`), but also can take `--pinned keep` to keep pinned tabs
  without prompting.
- New `fileselect.folder.command` which can be used with
  `fileselect.handler = external` to customize the command to use to upload
  directories (`<input type="file" webkitdirectory />` elements, which are
  non-standard but in wide use).
- New `content.notifications.presenter` setting with various new ways to show
  web notifications:
     * `auto` (default): Automatically detect the best available option
     * `qt`: Use Qt's built-in mechanism (like before this release)
     * `libnotify`: Use a libnotify-compatible notification server (i.e. native
       notifications on Linux)
     * `systray`: Use a systray icon (very similar to `qt` but without some of
       its drawbacks)
     * `messages`: Use qutebrowser messages
     * `herbe`: Use https://github.com/dudik/herbe[herbe]
- New `content.notifications.show_origin` setting, which can be used to decide
  for which notifications to show the origin (the URL the notification was sent
  from).

Changed
~~~~~~~

- The `content.ssl_strict` setting got renamed to
  `content.tls.certificate_errors`, with new values:
  * `ask`: Prompt on overridable certificate errors (`ssl_strict = 'ask'`)
  * `ask-block-thirdparty`: See below
  * `block`: Block the page load (`ssl_strict = True`)
  * `load-insecurely`: Load the page despite the error (`ssl_strict = False`)
- The new `content.tls.certificate_errors` setting now also understands the
  value `ask-block-thirdparty`, which asks for page loads but automatically blocks
  resource loads on TLS errors. This behavior is consistent with what other
  browsers do.
- The prompt text shown on certificate errors has been improved to make it
  clearer what kind of error occurred exactly.
- The `content.site_specific_quirks` setting got renamed to
  `content.site_specific_quirks.enabled`.
- The `content.notifications` option got renamed to
  `content.notifications.enabled`.
- The completion now also shows bindings starting with `set-cmd-text` in its
  third column, such as `o` for `:open`.
- When `:spawn` is used with the `-m` / `--output-messages` flag, the output now
  appears live, while the process is running.
- When a shown message replaces an existing related one (e.g. for zoom levels),
  the replacing now also works even if a different message was shown in between.
- The `.redirect(...)` method on interceptors now supports an
  `ignore_unsupported=True` argument which suppresses exceptions if a request could
  not be redirected. Note, however, that it is still not public API.
- When the `--config-py` argument is used, no warning about a missing
  `config.load_autoconfig` is shown anymore, as the argument is typically used
  for temporarily testing a config.
- The internal `_autosave` session used for crash recovery is now only saved
  once per minute, since saving it for every page load is a noticeable performance
  issue.
- The `readability-js` userscript now displays a small header with page
  information.
- When an external file selector is used, some additional validation is done on
  the picked files now, so that errors are shown if e.g. a directory is selected
  when a file was expected.
- The default binding for `T` (`:tab-focus`) got changed so that it fills the
  command line with `:tab-focus` if used without a count (instead of being
  equivalent to `:tab-next` in that case).
- The `:config-unset` command now understands the `--pattern` (`-u`) flag to
  unset options customized for a given URL pattern (such as after answering a
  prompt with "always"/"never").
- The `:config-unset` command now shows an error when used on an option which is
  valid, but was never customized.
- The `statusbar.widgets` setting now understands `text:...` entries which
  allows adding a hard-coded text to the statusbar.
- The polyfill for `String.replaceAll` (required for Nextcloud Calendar < 2.2.0
  with QtWebEngine < 5.15.3) is now disabled by default, as it's not fully
  compliant to the ECMAScript spec and might cause issues on other websites.
  If you still need it (e.g. if you're still on an old Nextcloud Calendar
  version), remove `js-string-replaceall` from
  `content.site_specific_quirks.skip`.

Fixed
~~~~~

- When an editor exits with a != 0 exit status, the temporary editor file is now
  persisted. This already was the case when the editor crashed.
- When a nonexistent file gets passed to `--config-py`, qutebrowser now
  complains instead of silently not loading it.
- With some (rare) setups, opening the report dialog or using a PAC proxy with
  QtWebKit could result in qutebrowser hanging due to a PyQt bug. There's now a
  workaround which prevents the hang.
- QtWebEngine version detection (influencing things like dark mode settings or
  certain workarounds) now works correctly on OpenBSD.
- Certain version number formats in `/etc/os-release` caused qutebrowser to
  crash. Those are now handled correctly.
- The macOS releases now properly support Dark Mode for UI elements by setting
  `NSRequiresAquaSystemAppearance` to false.

Removed
~~~~~~~

- The `qute://spawn-output` page used by `:spawn -o` is now removed, as it's
  replaced by the new `qute://process` pages.

[[v2.1.1]]
v2.1.1 (2021-04-01)
-------------------

Added
~~~~~

- Site-specific quirk for krunker.io, which shows a "Socket Error" with
  qutebrowser's default Accept-Language header. The workaround is equivalent to
  doing `:set -u matchmaker.krunker.io content.headers.accept_language ""`.

Changed
~~~~~~~

- Clicking the 'x' in the devtools window to hide it now also leaves insert
  mode.

Fixed
~~~~~

- The workaround for black on (almost) black formula images in dark mode now
  also works with Qt 5.12 and 5.13.
- When running in Flatpak or with the Windows/macOS releases, the QtWebEngine
  version is now detected properly. Before, a wrong version was assumed, breaking
  dark mode and certain workarounds (resulting in crashes on websites like
  LinkedIn or TradingView).
- When the metainfo in the completion database doesn't have the expected
  structure, qutebrowser now tries to gracefully recover from the situation
  instead of crashing.
- When qutebrowser displays an error during initialization, opening a second
  instance would lead to a crash. Instead, qutebrowser now ignores the attempt
  to open a new page as long as it's not fully initialized yet.
- When the Brave adblock cache folder was unreadable, qutebrowser crashed. It
  now displays an error instead.
- Fixes in the `qute-pass` userscript for `gopass`:
  * Generating OTP tokens now works correctly.
  * Storing the username as part of the secret broke in v2.0.0 and now works
    again.
- When using `bindings.key_mappings` to map a key to multiple other keys,
  qutebrowser would crash. This is now handled correctly - however, note that
  it's usually better to map keys to commands instead.
- When a minimized window is selected via `:tab-select`, it's now un-minimized
  properly.
- When a format string in the config (e.g. `tabs.title_format`) used a value
  like `{current_url.host}` (instead of `{current_url:host}`), qutebrowser
  would crash. It now correctly reports an invalid config value instead.
- In rare circumstances, sending URLs/commands to existing instances would
  result in a crash, which is now fixed.
- Running the testsuite should now fully work without internet access again.
- The `--asciidoc` script for `mkvenv.py` broke with v1.14.0. It now works
  correctly again.
- Various other fixes for running in Flatpak (backported in the Flatpak release
  even before this qutebrowser release).
- We are the Knights Who Say... ':Ni!'

[[v2.1.0]]
v2.1.0 (2021-03-12)
-------------------

Removed
~~~~~~~

- The following command aliases were deprecated in v2.0.0 and are now removed:
  * `run-macro` -> `macro-run`
  * `record-macro` -> `macro-record`
  * `buffer` -> `tab-select`
  * `open-editor` -> `edit-text`
  * `toggle-selection` -> `selection-toggle`
  * `drop-selection` -> `selection-drop`
  * `reverse-selection` -> `selection-reverse`
  * `follow-selected` -> `selection-follow`
  * `follow-hint` -> `hint-follow`
  * `enter-mode` -> `mode-enter`
  * `leave-mode` -> `mode-leave`

Added
~~~~~

- New `:screenshot` command which can be used to screenshot the visible part of
  the page.
- New optional dependency on the `importlib_metadata` project on Python 3.7 and
  below. This is only relevant when PyQtWebEngine is installed via pip - thus,
  this dependency usually isn't relevant for packagers.
- New `qute-keepassxc` userscript integrating with the KeePassXC browser API.

Changed
~~~~~~~

- Initial support for QtWebEngine 5.15.3 and PyQt 5.15.3/.4
- The `colors.webpage.prefers_color_scheme_dark` setting got renamed to
  `colors.webpage.preferred_color_scheme` and now takes the values `auto`, `light`
  and `dark` (instead of being `True` for dark and `False` for auto).
  Note that the `light` value is only supported with Qt 5.15.2+, falling back to
  the same behavior as `auto` on older versions.
- On Linux, qutebrowser now tries harder to find details about the installed
  QtWebEngine version by inspecting the QtWebEngine binary. This should reduce
  issues with dark mode (and some workarounds) not working when using differing
  versions of QtWebEngine/PyQtWebEngine/Qt.
  This change also prepares qutebrowser for QtWebEngine 5.15.3, which will get
  released without an updated Qt.
- When PyQtWebEngine >= 5.15.3 is installed via `pip` (as is e.g. the case with
  `mkvenv.py`), qutebrowser now queries the associated metadata to find out the
  QtWebEngine version.
- When doing `:hint links yank --rapid`, the messages shown now replace each
  other, thus being less noisy.
- Newlines in JavaScript messages (`confirm`, `prompt` and `alert`) are now
  preserved.
- Messages in prompts are now word-wrapped rather than displaying them in one
  long line.
- If a command stats with space (e.g. `: open ...`, it's now not saved to
  command history anymore (similar to how some shells work).
- When a tab is pinned, running `:open` will now open a new tab instead of
  displaying an error.
- The `fileselect.*.command` settings now support file selectors writing the
  selected paths to stdout, which is used if no `{}` placeholder is contained in
  the configured command.
- The `--debug-flag` argument now understands a new `log-sensitive-keys` value
  which logs all keypresses (including those in insert/passthrough/prompt/...
  mode) for debugging.
- The `readability` and `readability-js` userscripts now add a
  `qute-readability` CSS class to the page, so that it can be styled easily via
  a user stylesheet.

Fixed
~~~~~

- With QtWebEngine 5.15.3 and some locales, Chromium can't start its
  subprocesses. As a result, qutebrowser only shows a blank page and logs
  "Network service crashed, restarting service.".  This release adds a
  `qt.workarounds.locale` setting working around the issue. It is disabled by
  default since distributions shipping 5.15.3 will probably have a proper patch
  for it backported very soon.
- The `colors.webpage.preferred_color_scheme` and `colors.webpage.darkmode.*`
  settings now work correctly with QtWebEngine 5.15.3 (and Gentoo, which at the
  time of writing packages 5.15.3 disguised as 5.15.2).
- When dark mode settings were set, existing `blink-features` arguments in
  `qt.args` (or `--qt-flag`) were overridden. They are now combined properly.
- On QtWebEngine 5.15.2, auto detection for the `prefers-color-scheme` media
  query is broken and always returns `no-preference`, which was removed from the
  CSS WG Specification. This release contains a workaround to always return
  `light` instead (as per the spec).
- When an external file selector deletes the temporary file (like `nnn` does
  when quitting the terminal), qutebrowser would crash. It now displays an
  error instead. The same applies if the temporary file is unreadable for any
  other reason.
- On macOS, a change in v2.0.x caused certain shortcuts to not work with Cmd
  anymore, using Ctrl instead. They now work correctly using Cmd (like usual on
  macOS) again.
- On macOS, using `F` (`hint all tab`) sometimes would open a context menu
  instead of following a link. This is now fixed.
- The quirk added for a missing `String.replaceAll` did not handle special
  regexp characters correctly, thus breaking some sites. It now handles them
  properly.
- The "try again" button on error pages now works correctly with JavaScript
  disabled.
- If a GreaseMonkey script doesn't have a "@run-at" comment, qutebrowser
  accidentally treated that as "@run-at document-idle". However, other
  GreaseMonkey implementations default to "@run-at document-end" instead, which
  is what qutebrowser now does, too.
- The `hist_importer.py` script didn't work correctly after qutebrowser v2.0.0
  and resulted in a history database qutebrowser couldn't read properly. It now
  works properly again.
- With certain QtWebEngine versions (5.15.0 based on Chromium 80 and 5.15.3
  based on Chromium 87), Chromium's dark mode doesn't invert certain SVG images,
  even with `colors.wegpage.darkmode.policy.images` set to `smart`.
  Most notably, this causes formulae on Wikipedia to display black on (almost)
  black. If `content.site_specific_quirks` is enabled, qutebrowser now injects
  some CSS as a workaround, which inverts all math formula images on Wikipedia
  (and potentially other sites, if they use the same CSS class).
- When a hint label text started with an apostrophe, it would show an escaped
  text until the hints first character has been pressed. It now shows up
  correctly.

[[v2.0.2]]
v2.0.2 (2021-02-04)
-------------------

Fixed
~~~~~

- When right-clicking an empty part of the downloads bar, qutebrowser v2.0.x
  would crash. This is now fixed.
- Setting `content.cookies.store` to `false` only worked properly when this was
  done after qutebrowser was already started due to a regression in v2.0.0. It now
  works as expected again.
- If qutebrowser was installed as a Python egg with Python 3.8 or 3.9,
  requesting unavailable resource files (such as PDF.js not being bundled, or a
  missing changelog file) caused in a crash due to an inconsistent behavior in
  those versions of Python. This is now handled properly by qutebrowser.
- In v2.0.0, support for importing the `sip` dependency as `sip` rather than
  `PyQt5.sip` was dropped, since upstream claims it should be used as `PyQt5.sip`
  ever since PyQt 5.11. However, some distributions still package sip as a global
  `sip` package. Thus, support for a global `sip` package is now reintroduced.
- The changelog for v2.0.0 claimed that `hints.leave_on_load` was set to `true`
  by default. However, the `input.insert_mode.leave_on_load` setting was instead
  set to `true` accidentally. This is now fixed by actually setting
  `hints.leave_on_load` to `true`, and reversing the change to
  `input.insert_mode.leave_on_load` so it is set to `false` by default again.
- When the `importlib_resources` package is required but was missing, users
  would get a Python stacktrace rather than a proper error message. This is now
  fixed.
- Site-specific quirk JavaScript files were loaded lazily rather than preloaded
  at the start of qutebrowser, causing a crash when e.g. switching between
  versions while qutebrowser is open. Now they are preloaded at the start of
  qutebrowser again.
- The link to the keybinding cheatsheet on the internal `:help` page wasn't
  displayed correctly. This is now fixed.
- When the completion rebuilding process was interrupted, qutebrowser did not
  detect this condition on the next start, thus resulting in a completion with
  inconsistent data. This is now fixed, with another rebuild being forced with
  this update, to ensure the data is consistent for all users.
- In certain scenarios, qutebrowser v2.0.x warned about
  `config.load_autoconfig(...)` being missing when loading a secondary config
  (e.g. via `config.source(...)`). It now only shows those warnings for the main
  `config.py` file.
- The `--enable-webengine-inspector` flag is now accepted again, however it's
  unused and undocumented. It purely exists to make it possible to use `:restart`
  between pre-v2.0.x and v2.0.2+ versions.
- When `hints.dictionary` pointed to a file not encoded as UTF-8, this resulted
  in a crash (also in versions before v2.0.0). It now properly displays an error
  instead.
- When running qutebrowser with a single empty commandline argument, such as
  done by `open_url_in_instance.sh`, this would result in a partially initialized
  window. Interacting with that window results in a crash (also in versions before
  v2.0.0). Instead, the startpage is now shown properly.

[[v2.0.1]]
v2.0.1 (2021-01-28)
-------------------

Fixed
~~~~~

- If qutebrowser was installed as a Python egg (similar to a .zip file, via
  `setup.py install` under certain conditions), a change in v2.0.0 caused it to
  not start properly. This is now fixed.
- If qutebrowser was set up (or packaged) in an unclean environment, this could
  result in a stale `qutebrowser/components/adblock.py` file being picked up. That
  file is not part of the release anymore, but if an old version is still around,
  causes qutebrowser to crash. It's now explicitly blocked inside qutebrowser so
  it gets ignored even if it still exists.
- When the adblocking method was switched using `:set`, and the `adblock`
  dependency was unavailable when qutebrowser started (but was installed while
  qutebrowser was open), this resulted in a crash. Now a warning prompting for a
  restart of qutebrowser is shown instead.

Changed
~~~~~~~

- The `format_json` userscript now uses sh instead of bash again.
- The `add-nextcloud-bookmarks`, `add-nextcloud-cookbook`, `readability` and
  `ripbang` userscripts now use a `python3` rather than plain `python` shebang.
- When `QTWEBENGINE_CHROMIUM_FLAGS` is set in the environment, this causes flag
  handling (including workarounds for QtWebEngine crashes) inside qutebrowser to
  break. This will be handled properly in a future version, but this release now
  shows a warning on standard output if this is the case.
- The config completion for `fileselect.*.command` now also includes the "nnn"
  terminal file manager.

[[v2.0.0]]
v2.0.0 (2021-01-28)
-------------------

Major changes
~~~~~~~~~~~~~

- If the Python `adblock` library is available, it is now used to
  integrate Brave's Rust adblocker library for improved adblocking based on
  ABP-like filter lists (such as EasyList).
  If it is unavailable, qutebrowser falls back to host-blocking, i.e. the same
  blocking technique it used before this release. As part of this, various
  settings got renamed, see "Changed" below.
  **Note: If the `adblock` dependency is available, qutebrowser will ignore
  custom host blocking** via the `blocked-hosts` config file or `file:///` URLs
  supplied as host blocking lists. You will need to either migrate those to
  ABP-like lists, or set `content.blocking.method` to `both`.
- Various dependency upgrades - a quick checklist for packagers (see "Changed"
  below for details):
  * Ensure you're providing at least Python 3.6.1.
  * Ensure you're providing at least Qt 5.12 and PyQt 5.12.
  * Add a new optional dependency on the Python `adblock` library (if packaged -
    if not, consider packaging it, albeit optional it's very useful for users).
  * Remove the `cssutils` optional dependency (if present).
  * Remove the `attrs` (`attr`) dependency.
  * Remove the `pypeg2` dependency (and perhaps consider dropping the package
    if not used elsewhere - it's https://fdik.org/pyPEG2/[inactive upstream]
    and the repository was removed by Bitbucket).
  * Move the `pygments` dependency from required to optional.
  * Move the `setuptools` dependency from runtime (for `pkg_resources`) to
    build-time.
  * For Python 3.6, 3.7 or 3.8, add a dependency on the `importlib_resources`
    backport.
  * For Python 3.6 only, add a dependency on the `dataclasses` backport.
- Dropped support for old OS versions in binary releases:
  * Support for Windows 7 is dropped in the Windows binaries, the minimum
    required Windows version is now Windows 8.1.
  * Support for macOS 10.13 High Sierra is dropped in the macOS binaries, the
    minimum required macOS version is now macOS 10.14 Mojave.
- Various renamed settings and commands, see "Deprecated" and "Changed" below.

Removed
~~~~~~~

- The `--enable-webengine-inspector` flag (which was only needed for Qt 5.10 and
  below) is now dropped. With Qt 5.11 and newer, the inspector/devtools are
  enabled unconditionally.
- Support for moving qutebrowser data from versions before v1.0.0 has been
  removed.
- The `--old` flag for `:config-diff` has been removed. It used to show
  customized options for the old pre-v1.0 config files (in order to aid
  migration to v1.0).
- The `:inspector` command which was deprecated in v1.13.0 (in favor of
  `:devtools`) is now removed.

Deprecated
~~~~~~~~~~

- Several commands have been renamed for consistency and/or easier grouping of
  related commands. Their old names are still available, but deprecated and will
  be removed in qutebrowser v2.1.0.
  * `run-macro` -> `macro-run`
  * `record-macro` -> `macro-record`
  * `buffer` -> `tab-select`
  * `open-editor` -> `edit-text`
  * `toggle-selection` -> `selection-toggle`
  * `drop-selection` -> `selection-drop`
  * `reverse-selection` -> `selection-reverse`
  * `follow-selected` -> `selection-follow`
  * `follow-hint` -> `hint-follow`
  * `enter-mode` -> `mode-enter`
  * `leave-mode` -> `mode-leave`

Added
~~~~~

- New settings for the ABP-based adblocker:
   * `content.blocking.method` to decide which blocker(s) should be used.
   * `content.blocking.adblock.lists` to configure ABP-like lists to use.
- New `qt.environ` setting which makes it easier to set/unset environment
  variables for qutebrowser.
- New settings to use an external file picker (such as ranger or vifm):
  * `fileselect.handler` (`default` or `external`)
  * `fileselect.multiple_files.command`
  * `fileselect.single_file.command`
- When QtWebEngine has been updated but PyQtWebEngine hasn't yet, the dark mode
  settings might stop working. As a (currently undocumented) escape hatch, this
  version adds a `QUTE_DARKMODE_VARIANT=qt_515_2` environment variable which can
  be set to get the correct behavior in (transitive) situations like this.
- New `--desktop-file-name` commandline argument, which can be used to customize
  the desktop filename passed to Qt (which is used to set the `app_id` on
  Wayland).
- The `:open` completion now also completes local file paths and `file://` URLs,
  via a new `filesystem` entry in `completion.open_categories`. Also, a new
  `completion.favorite_paths` setting was added which can be used to add paths to
  show when `:open` is used without any input.
- New `QUTE_VERSION` variable for userscripts, which can be used to read
  qutebrowser's version.
- New "Copy URL" entry in the context menu for downloads.
- New `:bookmark-list` command which lists all bookmarks/quickmarks. The
  corresponding `qute://bookmarks` URL already existed since v0.8.0, but it was
  never exposed as a command.
- New `qt.workarounds.remove_service_workers` setting which can be used to
  remove the "Service Workers" directory on every start. Usage of this option is
  generally discouraged, except in situations where the underlying QtWebEngine bug
  is a known cause for crashes.
- Changelogs are now shown after qutebrowser was upgraded. By default, the
  changelog is only shown after minor upgrades (feature releases) but not patch
  releases. This can be adjusted (or disabled entirely) via a new
  `changelog_after_upgrade` setting.
- New userscripts:
  * `kodi` to play videos in Kodi
  * `qr` to generate a QR code of the current URL
  * `add-nextcloud-bookmarks` to create bookmarks in Nextcloud's Bookmarks app
  * `add-nextcloud-cookbook` to add recipes to Nextcloud's Cookbook app

Changed
~~~~~~~

- `config.py` files now are required to have either
  `config.load_autoconfig(False)` (don't load `autoconfig.yml`) or
  `config.load_autoconfig()` (do load `autoconfig.yml`) in them.
- Various host-blocking settings have been renamed to accommodate the new ABP-like
  adblocker:
  * `content.host_blocking.enabled` -> `content.blocking.enabled` (controlling both blockers)
  * `content.host_blocking.whitelist` -> `content.blocking.whitelist` (controlling both blockers)
  * `content.host_blocking.lists` -> `content.blocking.hosts.lists`
- Changes to default settings:
  * `tabs.background` is now `true` by default, so that new tabs get opened in the
    background.
  * `input.partial_timeout` is now set to 0 by default, so that partially typed
    key strings are never cleared.
  * `hints.leave_on_load` is now `false` by default, so that hint mode doesn't get
    left when a page finishes loading. This can lead to stale hints persisting in
    rare circumstances, but is better than leaving hint mode when the user entered
    it before loading was completed.
  * The default for `tabs.width` (tab bar width if vertical) is now 15% of the
    window width rather than 20%.
  * The default bindings for moving tabs (`tab-move -` and `tab-move +`) were
    changed from `gl` and `gr` to `gK` and `gJ`, to be consistent with the tab
    switching bindings.
  * The text color for warning messages is now black instead of white, for increased contrast and thus readability.
  * The default timeout for messages is now raised from 2s to 3s.
- On the first start, the history completion database is regenerated to remove
  a few problematic entries (such as long `qute://pdfjs` URLs). This might take
  a couple of minutes, but is a one-time operation. This should result in a
  performance improvement for the completion for affected users.
- qutebrowser now shows an error if its history database version is newer than
  expected. This currently should never happen, but allows for potentially
  backwards-incompatible changes in future versions.
- At least Python 3.6.1 is now required to run qutebrowser, support for Python
  3.5 (and 3.6.0) is dropped. Note that Python 3.5 is
  https://www.python.org/downloads/release/python-3510/[no longer supported
  upstream] since September 2020.
- At least Qt/PyQt 5.12 is now required to run qutebrowser, support for 5.7 to
  5.11 (inclusive) is dropped. While Debian Buster ships Qt 5.11, it's based on a
  Chromium version from 2018 with
  https://www.debian.org/releases/buster/amd64/release-notes/ch-information.en.html#browser-security[no Debian security support]
  and unsupported upstream since May 2019.
  It also has compatibility issues with various websites (GitHub, Twitch, Android
  Developer documentation, YouTube, ...). Since no newer Debian Stable is released
  at the time of writing, it's recommended to
  https://github.com/qutebrowser/qutebrowser/blob/master/doc/install.asciidoc#installing-qutebrowser-with-virtualenv[install qutebrowser in a virtualenv]
  with a newer version of Qt/PyQt.
- New optional dependency on the Python `adblock` library (see above for details).
- The (formerly optional) `cssutils` dependency is now removed. It was only
  needed for improved behavior in corner cases when using `:download --mhtml`
  with the (non-default) QtWebKit backend, and as such it's unlikely anyone is
  still relying on it. The `cssutils` project is also dead upstream, with its
  repository being gone after Bitbucket
  https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket[removed Mercurial support].
- The (formerly required) `pygments` dependency is now optional. It is only
  used when using `:view-source` with QtWebKit, or when forcing it via
  `:view-source --pygments` on QtWebEngine. If it is unavailable, an
  unhighlighted fallback version of the page's source is shown.
- The former runtime dependency on the `pkg_resources` module (part of the
  `setuptools` project) got dropped. Note that `setuptools` is still required
  to run `setup.py`.
- A new dependency on the `importlib_resources` module got introduced for
  Python versions up to and including 3.8. Note that the stdlib
  `importlib.resources` module for Python 3.7 and 3.8 is missing the needed APIs,
  thus requiring the backports for those versions as well.
- The former dependency on the `attrs`/`attr` package is now dropped in favour
  of `dataclasses` in the Python standard library. On Python 3.6, a new
  dependency on the `dataclasses` backport is now required.
- The former dependency on the `pypeg2` package is now dropped. This might cause
  some changes for certain corner-cases for suggested filenames when downloading
  files with the QtWebKit backend.
- Windows and macOS releases now ship Python 3.9 rather than 3.7.
- The `colors.webpage.darkmode.*` settings are now also supported with older Qt
  versions (Qt 5.12 and 5.13) rather than just with Qt 5.14 and above.
- For regexes in the config (`hints.{prev,next}_regexes`), certain patterns
  which will change meanings in future Python versions are now disallowed. This is
  the case for character sets starting with a literal `[` or containing literal
  character sequences `--`, `&&`, `~~`, or `||`. To avoid a warning, remove the
  duplicate characters or escape them with a backslash.
- If `prompt(..., "default")` is used via JS, the default text is now
  pre-selected in the prompt shown by qutebrowser.
- URLs such as `::1/foo` are now handled as a search term or local file rather
  than IPv6. Use `[::1]/foo` to force parsing as IPv6 instead.
- The `mkvenv.py` script now runs a "smoke test" after setting up the virtual
  environment to ensure it's working as expected. If necessary, the test can be
  skipped via a new `--skip-smoke-test` flag.
- Both qutebrowser userscripts and Greasemonkey scripts are now additionally
  picked up from qutebrowser's config directory (the `userscripts` and
  `greasemonkey` subdirectories of e.g. `~/.config/qutebrowser/`) rather than only
  the data directory (the same subdirectories of e.g.
  `~/.local/share/qutebrowser/`).
- The `:later` command now understands a time specification like `5m` or
  `1h5m2s`, rather than just taking milliseconds.
- The `importer.py` script doesn't use a browser argument anymore; instead its
  `--input-format` switch can be used to configure the input format. The help also
  was expanded to explain how to use it properly.
- If `tabs.tabs_are_windows` is set, the `tabs.last_close` setting is now
  ignored and the window is always closed when using `:close` (`d`).
- With the (default) QtWebEngine backend, if a custom `accept` header is set via
  `content.headers.custom`, the custom value is now ignored for XHR
  (`XMLHttpRequest`) requests. Instead, the sent value is now `*/*` or the header
  set from JavaScript, as it would be if `content.headers.custom` wasn't set.
- The `:tab-select` completion now shows the underlying renderer process PID if
  doing so is supported (on QtWebEngine 5.15).
- If `tabs.favicons.show` is set to `never`, favicons aren't unnecessarily
  downloaded anymore. Thus, disabling favicons can help with a possible
  https://www.ghacks.net/2021/01/22/favicons-may-be-used-to-track-users/[fingerprinting vector].
- "Super" is now understood as a modifier (i.e. as alias to "Meta").
- Initial support for Python 3.10 (currently in Alpha stage).
- Various performance improvements, including for the startup time.

Fixed
~~~~~

- With interpolated color settings (`colors.tabs.indicator.*` and
  `colors.downloads.*`), the alpha channel is now handled correctly.
- Fixes to userscripts:
    * `format_json` now uses `env` in its shebang, making it work
      correctly on systems where `bash` isn't located in `/bin`.
    * `qute-pass` now handles the MIME output format introduced in gopass 1.10.0.
    * `qute-lastpass` now types multiple `<` or `>` characters correctly.
- The `:undo` completion now sorts its entries correctly (by the numerical index
  rather than lexicographically).
- The `completion.web_history.ignore` setting now works properly when set in
  `config.py` (rather than via `:set`). Additionally, a `:config-source` will not
  result in a history rebuild if the value wasn't actually changed.
- When downloading a `data:` URL, the suggested filename is now improved and
  contains a proper extension. Before this fix, qutebrowser would use the URL's
  data contents as filename with QtWebEngine; or "binary blob" with the Qt network
  stack.
- When `:tab-only` is run before a tab is available, an error is now shown
  instead of crashing.
- A couple of long URLs (such as `qute://pdfjs` URLs) are now not added to the
  history database anymore.
- A bug in QtWebEngine 5.15.2 causes "renderer process killed" errors on
  websites like LinkedIn and TradingView. There is now a workaround in qutebrowser
  to prevent this from happening.
- Nextcloud Calendars started using `String.replaceAll` which was only added to
  Chromium recently (Chrome 85), so won't work with current QtWebEngine
  versions. This release includes a workaround (a polyfill as a
  site-specific-quirk).

[[v1.14.1]]
v1.14.1 (2020-12-04)
--------------------

Added
~~~~~

- With v1.14.0, qutebrowser configures the main window to be transparent, so
  that it's possible to configure a translucent tab- or statusbar. However, that
  change introduced various issues, such as performance degradation on some
  systems or breaking dmenu window embedding with its `-w` option. To avoid those
  issues for people who are not using transparency, the default behavior is
  reverted to versions before v1.14.0 in this release. A new `window.transparent`
  setting can be set to `true` to restore the behavior of v1.14.0.

Changed
~~~~~~~

- Windows and macOS releases now ship Qt 5.15.2, which is based on
  Chromium 83.0.4103.122 with security fixes up to 86.0.4240.183. This includes
  CVE-2020-15999 in the bundled freetype library, which is known to be exploited
  in the wild. It also includes various other bugfixes/features compared to
  Qt 5.15.0 included in qutebrowser v1.14.0, such as:
    * Correct handling of AltGr on Windows
    * Fix for `content.cookies.accept` not working properly
    * Fixes for screen sharing (some websites are still broken until an upcoming Qt
      5.15.3)
    * Support for FIDO U2F / WebAuth
    * Fix for the unwanted creation of directories such as `databases-incognito` in
      the home directory
    * Proper autocompletion in the devtools console
    * Proper signalisation of a tab's audible status (`[A]`)
    * Fix for a hang when opening the context menu on macOS Big Sur (11.0)
    * Hardware accelerated graphics on macOS

Fixed
~~~~~

- Setting the `content.headers.referer` setting to `same-domain` (the default)
  was supposed to truncate referrers to only the host with QtWebEngine.
  Unfortunately, this functionality broke in Qt 5.14. It works properly again
  with this release, including a test so this won't happen again.
- With QtWebEngine 5.15, setting the `content.headers.referer` setting to
  `never` did still send referrers. This is now fixed as well.
- In v1.14.0, a regression was introduced, causing a crash when qutebrowser was
  closed after opening a download with PDF.js. This is now fixed.
- With Qt 5.12, the `Object.fromEntries` JavaScript API is unavailable (it was
  introduced in Chromium 73, while Qt 5.12 is based on 69). This caused
  https://www.vr.fi/en and possibly other websites to break when accessed with Qt
  5.12. A suitable polyfill is now included with qutebrowser if
  `content.site_specific_quirks` is enabled (which is the default).
- While XDG startup notifications (e.g. launch feedback via the bouncy cursor
  in KDE Plasma) were supported ever since Qt 5.1, qutebrowser's desktop file
  accidentally declared that it wasn't supported. This is now fixed.
- The `dmenu_qutebrowser` and `qutedmenu` userscripts now correctly read the
  qutebrowser sqlite history which has been in use since v1.0.0.
- With Python 3.8+ and vertical tabs, a deprecation warning for an implicit int
  conversion was shown. This is now fixed.
- Ever since Qt 5.11, fetching more completion data when that data is loaded
  lazily (such as with history) and the last visible item is selected was broken.
  The exact reason is currently unknown, but this release adds a tentative fix.
- When PgUp/PgDown were used to go beyond the last visible item, the above issue
  caused a crash, which is now also fixed.
- As a workaround for an overzealous Microsoft Defender false-positive detecting
  a "trojan" in the (unprocessed) adblock list, `:adblock-update` now doesn't
  cache the HTTP response anymore.
- With the QtWebKit backend and `content.headers` set to `same-domain` (the
  default), origins with the same domain but different schemes or ports were
  treated as the same domain. They now are correctly treated as different domains.
- When a URL path uses percent escapes (such as
  `https://example.com/embedded%2Fpath`), using `:navigate up` would treat the
  `%2F` as a path separator and replace any remaining percent escapes by their
  unescaped equivalents. Those are now handled correctly.
- On macOS 11.0 (Big Sur), the default monospace font name caused a parsing error, thus
  resulting in broken styling for the completion, hints, and other UI components.
  They now look properly again.
- Due to a Qt bug, installing Qt/PyQt from prebuilt binaries on systems with a
  very old `libxcb-utils` version (notably, Debian Stable, but not Ubuntu since
  16.04 LTS) results in a setup which fails to start. This also affects the
  `mkvenv.py` script, which now includes a workaround for this case.
- The `open_url_instance.sh` userscript now complains when `socat` is not
  installed, rather than silencing the error.
- The example AppArmor profile in `misc/` was outdated and written for the
  older QtWebKit backend. It is now updated to serve as an useful starting
  point with QtWebEngine.
- When running `:devtools` on Fedora without the needed (optional) dependency
  installed, it was suggested to install `qt5-webengine-devtools`, which does
  not, in fact, exist. It's now correctly suggested to install
  `qt5-qtwebengine-devtools` instead.
- With Qt 5.15.2, lines/borders coming from the  `readability-js` userscript
  were invisible. This is now fixed by changing the border color to grey (with all
  Qt versions).
- Due to changes in the underlying Chromium, the
  `colors.webpage.prefers_color_scheme_dark` setting broke with Qt 5.15.2. It now
  works properly again.
- A bug in the `pkg_resources` module used by qutebrowser caused deprecation
  warnings to appear on start with Python 3.9 on some setups. Those are now
  hidden.
- Minor performance improvements.
- Fix for various functionality breaking in private windows with v1.14.0,
  after the last private window is closed. This includes:
    * Ad blocking
    * Downloads
    * Site-specific quirks (e.g. for Google login)
    * Certain settings such as `content.javascript.enabled`

[[v1.14.0]]
v1.14.0 (2020-10-15)
--------------------

Note: The QtWebEngine version bundled with the Windows/macOS
releases is still based on Qt 5.15.0 (like with qutebrowser v1.12.0 and
v1.13.0) rather than Qt 5.15.1 because of a
https://bugreports.qt.io/browse/QTBUG-86752[Qt bug] causing
frequent renderer process crashes. When Qt 5.15.2 is released
(planned for November 3rd, 2020), a qutebrowser v1.14.x patch
release with an updated QtWebEngine will be released.

Furthermore, this release still only contains partial session support for QtWebEngine
5.15. It's still recommended to run against Qt 5.15 due to the security patches
contained in it -- for most users, the added workarounds seem to work out fine. A
rewritten session support will be part of qutebrowser v2.0.0, tentatively planned for the
end of the year or early 2021.

Changed
~~~~~~~

- The `content.media_capture` setting got split up into three more fine-grained
  settings, `content.media.audio_capture`, `.video_capture` and
  `.audio_video_capture`. Before this change, answering "always" to a prompt
  about e.g. audio capturing would set the `content.media_capture` setting,
  which would also allow the same website to capture video on a future visit.
  Now every prompt will set the appropriate setting, though existing
  `content.media_capture` settings in `autoconfig.yml` will be migrated to set
  all three settings. To review/change previously granted permissions, use
  `:config-diff` and e.g.
  `:config-unset -u example.org content.media.video_capture`.
- The main window's (invisible) background color is now set to transparent.
  This allows using the alpha channel in statusbar/tabbar colors to get a
  partially transparent qutebrowser window on a setup which supports doing so.
- If QtWebEngine is compiled with PipeWire support and libpipewire is
  installed, qutebrowser will now support screen sharing on Wayland. Note that
  QtWebEngine 5.15.1 is needed.
- When `:undo` is used with a count, it now reopens the count-th to last tab
  instead of the last one. The depth can instead be passed as an argument,
  which is also completed.
- The default `completion.timestamp_format` now also shows the time.
- `:back` and `:forward` now take an optional index which is completed using
  the current tab's history.
- The time a website in a tab was visited is now saved/restored in sessions.
- When attempting to download a file to a location for which there's already a
  still-running download, a confirmation prompt is now displayed.
- `:completion-item-focus` now understands `next-page` and `prev-page` with
  corresponding `<PgDown>` / `<PgUp>` default bindings.
- When the last private window is closed, all private browsing data is now cleared.
- When `config.source(...)` is used with a `--config-py` argument given,
  qutebrowser used to search relative files in the config basedir, leading to them
  not being found when using a shared `config.py` for different basedirs. Instead,
  they are now searched relative to the given `config.py` file.
- `navigate prev` (`[[`) and `navigate next` (`]]`) now recognize links with
  `nav-prev` and `nav-next` classes, such as those used by the Hugo static site
  generator.
- When `tabs.favicons` is disabled but `tabs.tabs_are_windows` is set, the
  window icon is still set to the page's favicon now.
- The `--asciidoc` argument to `src2asciidoc.py` and `build_release.py` now
  only takes the path to `asciidoc.py`, using the current Python interpreter by
  default. To configure the Python interpreter as well, use
  `--asciidoc-python path/to/python --asciidoc path/to/asciidoc.py`
  instead of the former
  `--asciidoc path/to/python path/to/asciidoc.py`.
- Dark mode (`colors.webpage.darkmode.*`) is now supported with Qt 5.15.2 (which
  is not released yet).
- The default for the darkmode `policy.images` setting is now set to `smart`
  which fixes issues with e.g. formulas on Wikipedia.
- The `readability-js` userscript now adds some CSS to improve the reader mode
  styling in various scenarios:
  * Images are now shrunk to the page width, similarly to what Firefox' reader
    mode does.
  * Some images are now displayed as block (rather than inline) which is what
    Firefox' reader mode does as well.
  * Blockquotes are now styled more distinctively, again based on the Firefox
    reader mode.
  * Code blocks are now easier to distinguish from text and tables have visible
    cell margins.
- The `readability-js` userscript now supports hint userscript mode.

Added
~~~~~

- New argument `strip` for `:navigate` which removes queries and
  fragments from the current URL.
- `:undo` now has a new `-w` / `--window` argument, which can be used to
  restore closed windows (rather than tabs). This is bound to `U` by default.
- `:jseval` can now take `javascript:...` URLs via a new `--url` flag.
- New replacement `{aligned_index}` for `tabs.title.format` and `format_pinned`
  which behaves like `{index}`, but space-pads the index based on the total
  numbers of tabs. This can be used to get aligned tab texts with vertical
  tabs.
- New command `:devtools-focus` (bound to `wIf`) to toggle keyboard focus
  between the devtools and web page.
- The `--target` argument to qutebrowser now understands a new `private-window`
  value, which can be used to open a private window in an existing instance
  from the commandline.
- The `:download-open` command now has a new `--dir` flag, which can be used to
  open the directory containing the downloaded file. An entry to do the same
  was also added to the context menu.
- Messages are now wrapped when they are too long to be displayed on a single line.
- New possible `--debug-flag` values:
  * `wait-renderer-process` waits for a `SIGUSR1` in the renderer process so a
    debugger can be attached.
  * `avoid-chromium-init` allows using `--version` without needing a working
    QtWebEngine/Chromium.

Fixed
~~~~~

- A URL pattern with a `*.` host was considered valid and matched all hosts.
  Due to keybindings like `tsH` toggling scripts for `*://*.{url:host}/*`,
  invoking them on pages without a host (e.g. `about:blank`) could result in
  accidentally allowing/blocking JavaScript for all pages. Such patterns are
  now considered invalid, with existing patterns being automatically removed
  from `autoconfig.yml`.
- When `scrolling.bar` was set to `overlay` (the default), qutebrowser would
  internally override any `enable-features=...` flags passed via `qt.args` or
  `--qt-flag`. It now correctly combines existing `enable-feature` flags with
  internal ones.
- Elements with an inherited `contenteditable` attribute now trigger insert
  mode and get hints assigned correctly.
- When checkmarks, radio buttons and some other elements are styled via the
  Bootstrap CSS framework, they now get hints correctly.
- When the session file isn't writable when qutebrowser exits, an error is now
  logged instead of crashing.
- When using `-m` with the `qute-lastpass` userscript, it accidentally matched
  URLs containing the match as substring. This is now fixed.
- When a filename is derived from a page's title, it's now shortened to the
  maximum filename length permitted by the filesystem.
- `:enter-mode register` crashed since v1.13.0, it now displays an error
  instead.
- With the QtWebKit backend, webpage resources loading certain invalid URLs
  could cause a crash, which is now fixed.
- When `:config-edit` is used but no `config.py` exists yet, the file is now
  created (and watched for changes properly) before spawning the external
  editor.
- When hint mode was entered from outside normal mode, the status bar was empty
  instead of displaying the proper text. This is now fixed.
- When entering different modes too quickly (e.g. pressing `fV`), the statusbar
  could end up in a confusing state. This is now fixed.
- When qutebrowser quits, running downloads are now cancelled properly.
- The site-specific quirk for `web.whatsapp.com` has been updated to work after recent
  changes in WhatsApp.
- Highlighting in the completion now works properly when UTF-16 surrogate pairs (such as
  emoji) are involved.
- When a windowed inspector is clicked, insert mode now isn't entered anymore.
- When `:undo` is used to re-open a tab, but `tabs.tabs_are_windows` was set between
  closing and undoing the close, qutebrowser crashed. This is now fixed.
- With QtWebEngine 5.15.0, setting the darkmode image policy to `smart` leads to
  renderer process crashes. The offending setting value is now ignored with a
  warning.
- Fixes for the `qute-pass` userscript:
  * With newer `gopass` versions, a deprecation notice was copied as
    password due to `qute-pass` using it in a deprecated way.
  * The `--password-store` argument didn't actually set
    `PASSWORD_STORE_DIR` for `pass`, resulting in `qute-pass` finding matches but the
    underlying `pass` not finding matching passwords.

[[v1.13.1]]
v1.13.1 (2020-07-17)
--------------------

Fixed
~~~~~

- With Qt 5.14, shared workers are now disabled. This works around a crash in
  QtWebEngine on certain sites (like the Epic Games Store or the Unreal Engine
  page). On older versions, you can get the same effect by doing
  `:set qt.args "['disable-shared-workers']"` and `:restart` (or set the
  setting in your `config.py`).
- When a window is closed, the tab it contains are now correctly shut down
  (closing e.g. any dialogs which are still open for those tabs).
- The Qt 5.15 session workaround now loads the correct (rather than the last)
  page when `:back` was used before saving a session.
- In certain situations on Windows, qutebrowser fails to find the username of
  the user launching qutebrowser (most likely due to a bug in the application
  launching it). When this happens, an error is now displayed instead of
  crashing.
- Certain `autoconfig.yml` with an invalid structure could lead to crashes,
  which are now fixed.
- Generating docs with `asciidoc2html.py` (e.g. via `mkvenv.py`) now works
  correctly without Pygments being installed system-wide.
- Ever since Qt 5.9, when `input.mouse.rocker_gestures` was enabled, the
  context menu still was shown when clicking the right mouse button, thus
  preventing the rocker gestures. This is now fixed.
- Clicking the inspector switched from existing modes (such as passthrough) to
  normal mode since v1.13.0. Now insert mode is only entered when the inspector
  is clicked in normal mode.
- Pulseaudio now shows qutebrowser's audio streams as qutebrowser correctly,
  rather than showing them as Chromium with some Qt versions.
- If `:help` was called with a deprecated command (e.g. `:help :inspector`),
  the help page would show despite deprecated commands not being documented.
  This now shows an error instead.
- The `qute-lastpass` userscript now filters out duplicate entries with
  `--merge-candidates`.

[[v1.13.0]]
v1.13.0 (2020-06-26)
--------------------

Deprecated
~~~~~~~~~~

- The `:inspector` command is deprecated and has been replaced by a new
  `:devtools` command (see below).

Removed
~~~~~~~

- The `:debug-log-level` command was removed as it's replaced by the new
  `logging.level.console` setting.
- The `qute://plainlog` special page got replaced by `qute://log?plain` - the
  names of those pages is considered an implementation detail, and
  `:messages --plain` should be used instead.

Changed
~~~~~~~

- Changes to commands:
  * `:config-write-py` now adds a note about `config.py` files being targeted at
    advanced users.
  * `:report` now takes two optional arguments for bug/contact information, so
    that it can be used without the report window popping up.
  * `:message` now takes a `--logfilter` / `-f` argument, which is a list of
    logging categories to show.
  * `:debug-log-filter` now understands the full logfilter syntax.
- Changes to settings:
  * `fonts.tabs` has been split into `fonts.tabs.{selected,unselected}` (see
    below).
  * `statusbar.hide` has been renamed to `statusbar.show` with the possible
    values being `always` (`hide = False`), `never` (`hide = True`) or
    `in-mode` (new, only show statusbar outside of normal mode.
  * The `QtFont` config type formerly used for `fonts.tabs` and
    `fonts.debug_console` is now removed and entirely replaced by `Font`. The
    former distinction was mainly an implementation detail, and the accepted
    values shouldn't have changed.
  * `input.rocker_gestures` has been renamed to `input.mouse.rocker_gestures`.
  * `content.dns_prefetch` is now enabled by default again, since the crashes
    it caused are now fixed (Qt 5.15) or worked around.
  * `scrolling.bar` supports a new `overlay` value to show an overlay
    scrollbar, which is now the default. On unsupported configurations (on Qt <
    5.11, with QtWebKit or on macOS), the value falls back to `when-searching`
    or `never` (QtWebKit).
  * `url.auto_search` supports a new `schemeless` value which always opens a
    search unless the given URL includes an explicit scheme.
- New handling of bindings in hint mode which fixes various bugs and allows for
  single-letter keybindings in hint mode.
- The statusbar now shows partial keychains in all modes (e.g. while hinting).
- New `t[Cc][Hh]` default bindings which work similarly to the `t[Ss][Hh]`
  bindings for JavaScript but toggle cookie permissions.
- The `tor_identity` userscript now takes the password via a `-p` flag and has
  a new `-c` flag to customize the Tor control port.
- Small performance improvements.

Added
~~~~~

- New settings:
  * `logging.level.ram` and `logging.level.console` to configure the default
    logging levels via the config.
  * `fonts.tabs.selected` and `fonts.tabs.unselected` to set the font of the
    selected tab independently from unselected tabs (e.g. to make it bold).
  * `input.mouse.back_forward_buttons` which can be set to `false` to disable
    back/forward mouse buttons.
- New `:devtools` command (replacing `:inspector`) with various improved
  functionality:
  * The devtools can now be docked to the main window, by running
    `:devtools left` (`wIh`), `bottom` (`wIj`), `top` (`wIk`) or `right`
    (`wIl`). To show them in a new window, use `:devtools window` (`wIw`).
    Using `:devtools` (`wi`) will open them at the last used position.
  * The devtool window now has a "qutebrowser developer tools" window title.
  * When a resource is opened from the devtools, it now opens in a proper
    qutebrowser tab.
  * On Fedora, when the `qt5-webengine-devtools` package is missing, an error
    is now shown instead of a blank inspector window.
  * If opened as a window, the devtools are now closed properly when the
    associated tab is closed.
  * When the devtools are clicked, insert mode is entered automatically.

Fixed
~~~~~

- Crash when `tabs.focus_stack_size` is set to -1.
- Crash when a `pdf.js` file for PDF.js exists, but `viewer.html` does not.
- Crash when `:completion-item-yank --sel` is used on a platform without
  primary selection support (e.g. Windows/macOS).
- Crash when there's a feature permission request from Qt with an invalid URL
  (which happens due to a Qt bug with Qt 5.15 in private browsing mode).
- Crash in rare cases where QtWebKit/QtWebEngine imports fail in unexpected
  ways.
- Crash when something removed qutebrowser's IPC socket file and it's been
  running for 6 hours.
- `:config-write-py` now works with paths starting with `~/...` again.
- New site-specific quirk for a missing `globalThis` in Qt <= 5.12 on Reddit
  and Spotify.
- When `;` is added to `hints.chars`, using hint labels containing `;;` now
  works properly.
- Hint letters outside of ASCII should now work.
- When `bindings.key_mappings` is used with hints, it now works properly with
  letters outside of ASCII as well.
- With Qt 5.15, the audible/muted indicators are not updated properly due to a
  Qt bug. This release adds a workaround so that at least the muted indicator
  is shown properly.
- As a workaround for crashes with QtWebEngine versions between 5.12 and 5.14
  (inclusive), changing the user agent (`content.headers.user_agent`) exposed
  to JS now requires a restart. The corresponding HTTP header is not affected.

[[v1.12.0]]
v1.12.0 (2020-06-01)
--------------------

Removed
~~~~~~~

- `tox -e mkvenv` which was deprecated in qutebrowser v1.10.0 is now
  removed. Use the `mkvenv.py` script instead.
- Support for using `config.bind(key, None)` in `config.py` to unbind a
  key was deprecated in v1.8.2 and is now removed. Use
  `config.unbind(key)` instead.
- `:yank markdown` was deprecated in v1.7.0 and is now removed. Use
  `:yank inline [{title}]({url})` instead.

Added
~~~~~

- New `:debug-keytester` command, which shows a "key tester" widget.
  Previously, that was only available as a separate application via `python3 -m
  scripts.keytester`.
- New `:config-diff` command which opens the `qute://configdiff` page.
- New `--debug-flag log-cookies` to log cookies to the debug log.
- New `colors.contextmenu.disabled.{fg,bg}` settings to customize colors for
  disabled items in the context menu.
- New line selection mode (`:toggle-selection --line`), bound to `Shift-V` in caret mode.
- New `colors.webpage.darkmode.*` settings to control Chromium's dark mode.
  Note that those settings only work with QtWebEngine on Qt >= 5.14 and require
  a restart of qutebrowser.

Changed
~~~~~~~

- Windows and macOS releases now ship Qt 5.15, which is based on Chromium
  80.0.3987.163 with security fixes up to 81.0.4044.138.
- The `content.cookies.accept` setting now accepts URL patterns.
- Tests are now included in release tarballs. Note that only running them with
  the exact dependencies listed in
  `misc/requirements/requirements-tests.txt{,-raw}` is supported.
- The `:tab-focus` command now has completion for tabs in the current window.
- The `bindings.key_mappings` setting now maps `<Ctrl+I>` to the tab key by default.
- `:tab-give --private` now detaches a tab into a new private window.

Fixed
~~~~~

- Using `:open -s` now only rewrites `http://` in URLs to `https://`, not other
  schemes like `qute://`.
- When an unhandled exception happens in certain parts of the code (outside of
  the main thread), qutebrowser did crash or freeze when trying to show its
  exception handler. This is now fixed.
- `:inspector` now works correctly when cookies are disabled globally.
- Added workaround for a (Gentoo?) PyQt/packaging issue related to the
  `QWebEngineFindTextResult` handling added in v1.11.0.
- When entering caret selection mode (`v, v`) very early before a page is
  loaded, an error is now shown instead of a crash happening.
- The workaround for session loading with Qt 5.15 now handles
  `sessions.lazy_restore` so that the saved page is loaded instead of the
  "stub" page with no possibility to get to the web page.
- A site specific quirk to allow typing accented characters on Google
  Docs was active for docs.google.com, but not drive.google.com. It is
  now applied for both subdomains.
- With older graphics hardware (OpenGL < 4.3) with Qt 5.14 on Wayland, WebGL
  causes segfaults. Now qutebrowser detects that combination and suggests to
  disable WebGL or use XWayland.

[[v1.11.1]]
v1.11.1 (2020-05-07)
--------------------

Security
~~~~~~~~

- CVE-2020-11054: After a certificate error was overridden by the user,
  qutebrowser displays the URL as yellow (`colors.statusbar.url.warn.fg`).
  However, when the affected website was subsequently loaded again, the URL was
  mistakenly displayed as green (`colors.statusbar.url.success_https`). While
  the user already has seen a certificate error prompt at this point (or set
  `content.ssl_strict` to `false` which is not recommended), this could still
  provide a false sense of security. This is now fixed.

[[v1.11.0]]
v1.11.0 (2020-04-27)
--------------------

Added
~~~~~

- New settings:
  * `search.wrap` which can be set to false to prevent wrapping around the page
    when searching. With QtWebEngine, Qt 5.14 or newer is required.
  * `content.unknown_url_scheme_policy` which allows controlling when an
    external application is opened for external links (never, from user
    interaction, always).
  * `content.fullscreen.overlay_timeout` to configure how long the fullscreen
    overlay should be displayed. If set to `0`, no overlay is displayed.
  * `hints.padding` to add additional padding for hints.
  * `hints.radius` to set a border radius for hints (set to `3` by default).
- New placeholders for `url.searchengines` values:
  * `{unquoted}` inserts the search term without any quoting.
  * `{semiquoted}` (same as `{}`) quotes most special characters, but slashes
    remain unquoted.
  * `{quoted}` (same as `{}` in earlier releases) also quotes slashes.

Changed
~~~~~~~

- First adaptions to Qt 5.15, including a stop-gap measure for session loading
  not working properly with it.
- Searching now wraps around the page by default with QtWebKit (where it didn't
  before). Set `search.wrap` to `false` to restore the old behavior.
- The `{}` placeholder for search engines (the `url.searchengines` setting) now
  does not quote slashes anymore, but other characters typically encoded in
  URLs still get encoded. This matches the behavior of search engines in
  Chromium. To revert to the old behavior, use `{quoted}` instead.
- The `content.windowed_fullscreen` setting got renamed to
  `content.fullscreen.window`.
- Mouse-wheel scrolling is now prevented while hints are active.
- Changes to userscripts:
  * `qute-bitwarden` now has an optional `--totp` flag which can be used
    to copy TOTP codes to clipboard (requires the `pyperclip` module).
  * `readability-js` now opens readability tabs next to the original
    tab (using the `:open --related` flag).
  * `readability-js` now displays a favicon for readability tabs.
  * `password_fill` now triggers a `change` JavaScript event after filling the
    data.
- The `dictcli.py` script now shows better error messages.
- Various improvements to the `mkvenv.py` script (mainly useful for development).
- Minor performance improvements.

Deprecated
~~~~~~~~~~

- A warning about old Qt versions is now also shown with Qt 5.9 and 5.10, as
  support for Qt < 5.11 will be dropped in qutebrowser v2.0.

Fixed
~~~~~

- `unsafeWindow` is now defined for Greasemonkey scripts with QtWebKit.
- The proxied `window` global is now shared between different
  Greasemonkey scripts (but still separate from the page's `window`), to
  match the original Greasemonkey implementation.
- The `--output-messages` (`-m`) flag added in v1.9.0 now also works correctly
  when using `:spawn --userscript`.
- `:version` and `--version` now don't crash if there's an (invalid)
  `/etc/os-release` file which has non-comment lines without a `=` character.
- Scripts in `scripts/` now report errors to `stderr` correctly, instead of
  using `stdout`.

[[v1.10.2]]
v1.10.2 (2020-04-17)
--------------------

Changed
~~~~~~~

- Windows and macOS releases now bundle Qt 5.14.2, including security fixes up
  to Chromium 80.0.3987.132.

Fixed
~~~~~

- The WhatsApp workaround now also works when using WhatsApp in languages other
  than English.
- The `mkvenv.py` script now also works properly on Windows.

[[v1.10.1]]
v1.10.1 (2020-02-15)
--------------------

Fixed
~~~~~

- Crash when saving data fails during shutdown (which was a regression
  introduced in v1.9.0).
- Error while reading config.py when `fonts.tabs` or `fonts.debug_console` is
  set to a value including `default_size`.
- When a `state` file contains invalid UTF-8 data, a proper error is now
  displayed.

Changed
~~~~~~~

- When the Qt version changes (and also on the first start of v1.10.1 on Qt
  5.14), service workers registered by websites are now deleted. This is done
  as a workaround for QtWebEngine issues causing crashes when visiting pages
  using service workers (such as Google Mail/Drive). No persistent data should
  be affected as websites can re-register their service workers, but a (single)
  backup is kept at `webengine/Service Worker-bak` in qutebrowser's data
  directory.
- Better output on stdout when config errors occur.
- The `mkvenv.py` now ensures the latest versions of `setuptools` and `wheel`
  are installed in the virtual environment, which should speed up installation
  and fix install issues.
- The default for `colors.statusbar.command.private.bg` has been changed to a
  slightly different gray, as a workaround for a Qt issue where the cursor was
  invisible in that case.

[[v1.10.0]]
v1.10.0 (2020-02-02)
--------------------

Added
~~~~~

- New `colors.webpage.prefers_color_scheme_dark` setting which allows forcing
  `prefers-color-scheme: dark` colors for websites (QtWebEngine with Qt 5.14 or
  newer).
- New `fonts.default_size` setting which can be used to set a bigger font size
  for all UI fonts.

Changed
~~~~~~~

- The `fonts.monospace` setting has been removed and replaced by
  `fonts.default_family`. The new `default_family` setting is improved in
  various ways:
  * It accepts a list of font families (or a single font family) rather than a
    comma-separated string. As an example, instead of
    `fonts.monospace = "Courier, Monaco"`, use
    `fonts.default_family = ["Courier", "Monaco"]`.
  * Since a list is now accepted as value, no quoting of font names with spaces
    is required anymore. As an example, instead of
    `fonts.monospace = '"xos4 Terminus"'`, use
    `fonts.default_family = 'xos4 Terminus'`.
  * It is now empty by default rather than having a long list of font names in
    the default config. When the value is empty, the system's default
    monospaced font is used.
- If `monospace` is now used in a font value, it's used literally and not
  replaced anymore. Instead, `default_family` is replaced as explained above.
- The default `content.headers.accept_language` value now adds a `;q=0.9`
  classifier which should make the value sent more in-line with what other
  browsers do.
- The `qute-pass` userscript now has a new `--mode gopass` switch which uses
  gopass rather than pass.
- The `tox -e mkvenv` (or `mkvenv-pypi`) way of installing qutebrowser is now
  replaced by a `mkvenv.py` script. See the updated
  link:install{outfilesuffix}#tox[install instructions] for details.
- macOS and Windows releases now ship with Qt/QtWebEngine 5.14.1
  * Based on Chromium 77.0.3865.129 with security fixes up to Chromium 79.0.3945.117.
  * Sandboxing is now enabled on Windows.
  * Monospace fonts are now used when a website requests them on macOS 10.15.
  * Web notifications are now supported.

Fixed
~~~~~

- When quitting qutebrowser, components are now cleaned up differently. This
  should fix certain (rare) segmentation faults and exceptions when quitting,
  especially with the new exit scheme introduced in in PyQt5 5.13.1.
- Added a workaround for per-domain settings (e.g. a JavaScript whitelist) not
  being applied in some scenarios with Qt 5.13 and above.
- Added additional site-specific quirk for WhatsApp Web.
- The `qute-pass` userscript now works correctly when a `PASSWORD_STORE_DIR`
  ending with a trailing slash is given.

[[v1.9.0]]
v1.9.0 (2020-01-08)
-------------------

Added
~~~~~

- Initial support for Qt 5.14.
- New `content.site_specific_quirks` setting which enables workarounds for
  websites with broken user agent parsing (enabled by default, see the "Fixed"
  section for fixed websites).
- New `qt.force_platformtheme` setting to force Qt to use a given platform
  theme.
- New `tabs.tooltips` setting which can be used to disable hover tooltips for
  tabs.
- New settings to configure the appearance of context menus:
  * `fonts.contextmenu`
  * `colors.contextmenu.menu.bg`
  * `colors.contextmenu.menu.fg`
  * `colors.contextmenu.selected.bg`
  * `colors.contextmenu.selected.fg`

Changed
~~~~~~~

- The macOS binaries now require macOS 10.13 High Sierra or newer. Support for
  macOS 10.12 Sierra has been dropped.
- The `content.headers.user_agent` setting now is a format string with the
  default value resembling the behavior of it being set to null before.
  This slightly changes the sent user agent for QtWebKit: Instead of mentioning
  qutebrowser and its version it now mentions the Qt version.
- The `qute-pass` userscript now has a new `--extra-url-suffixes` (`-s`)
  argument which passes extra URL suffixes to the tldextract library.
- A stack is now used for `:tab-focus last` rather than just saving one tab.
  Additionally, `:tab-focus` now understands `stack-prev` and `stack-next`
  arguments to traverse that stack.
- `:hint` now has a new `right-click` target which allows right-clicking
  elements via hints.
- The Terminus font has been removed from the default monospace fonts since it
  caused trouble with HighDPI setups. To get it back, add either
  `"xos4 Terminus"` or `Terminus` (depending on fontconfig version) to the
  beginning of the `fonts.monospace` setting.
- As a workaround for a Qt bug causing a segfault, desktop sharing is now
  automatically rejected on Qt versions before 5.13.2. Note that screen sharing
  still won't work on Linux before Qt 5.14.
- Comment lines in quickmarks/bookmarks files are now ignored. However, note that
  qutebrowser will overwrite those files if bookmark/quickmark commands are used.
- Reopening PDF.js pages from e.g. a session file will now re-download and
  display those PDFs.
- Improved behavior when using `:open-download` in a sandboxed environment (KDE
  Flatpak).
- qutebrowser now enables the new PyQt exit scheme, which should result in
  things being cleaned up more properly (e.g. cookies being saved even without
  a timeout) on PyQt 5.13.1 and newer.
- The `:spawn` command has a new `-m` / `--output-messages` argument which
  shows qutebrowser messages based on a command's standard output/error.
- Improved insert mode detection for some CodeMirror usages (e.g. in
  JupyterLab and Jupyter Notebook).
- If JavaScript is disabled globally, `file://*` now doesn't automatically have
  it enabled anymore. Run `:set -u file://* content.javascript.enabled true` to
  restore the previous behavior.
- Settings with URL patterns can now be used to affect the behavior of the
  QtWebEngine inspector. Note that the underlying URL is `chrome-devtools://*`
  from Qt 5.11 to Qt 5.13, but `devtools://*` with Qt 5.14.
- Improvements when `tabs.tabs_are_windows` is set:
  * Using `:tab-take` and `:tab-give` now shows an error, as the effect of
    doing so would be equal to `:tab-clone`.
  * The `:buffer` completion doesn't show any window sections anymore, only a
    flat list of tabs.
- Improved parsing in some corner cases for the `QtFont` type (used for
  `fonts.tabs` and `fonts.debug_console`).
- Performance improvements for the following areas:
  * Adding settings with URL patterns
  * Matching of settings using URL patterns

Fixed
~~~~~

- Downloads (e.g. via `:download`) now see the same user agent header as
  webpages, which fixes cases where overly restrictive servers/WAFs closed the
  connection before.
- `dictcli.py` now works correctly on Windows again.
- The logic for `:restart` has been revisited, which should fix issues with
  relative basedirs.
- Remaining issues related to Python 3.8 are now fixed (mostly warnings,
  especially on QtWebKit).
- Workaround for a Qt bug where a page never finishes loading with a
  non-overridable TLS error (e.g. due to HSTS).
- The `qute://configdiff` page now doesn't show built-in settings (e.g.
  javascript being enabled for `qute://` and `chrome://` pages) anymore.
- The `qute-lastpass` userscript now stops prompting for passwords when
  cancelling the password input.
- The tab hover text now shows ampersands (&) correctly.
- With QtWebEngine and Qt >= 5.11, the inspector now shows its icons correctly
  even if loading of images is disabled via the `content.images` setting.
- Entering a very long string (over 50k characters) in the completion used to
  crash, now it shows an error message instead.
- Various improvements for URL/searchengine detection:
  * Strings with a dot but with characters not allowed in a URL (e.g. an
    underscore) are now not treated as URL anymore.
  * Strings like "5/8" are now not treated as IP anymore.
  * URLs with an explicit scheme and a space (%20) are correctly treated as
    URLs.
  * Mail addresses are now treated as search terms.
  * With `url.open_base_url` set, searching for a search engine name now works.
  * `url.open_base_url = True` together with `url.auto_search = 'never'` is now
    handled correctly.
  * Fixed crash when a search engine URL turns out to be invalid.
- New "site specific quirks", which work around some broken websites:
  * WhatsApp Web
  * Google Accounts
  * Slack (with older QtWebEngine versions)
  * Dell.com support pages (with Qt 5.7)
  * Google Docs (fixes broken IME/compose key)

[[v1.8.3]]
v1.8.3 (2019-12-05)
-------------------

Fixed
~~~~~

- Segmentation fault introduced in v1.8.2 when a tab gets closed immediately
  after it has finished loading (e.g. with certain login flows).

[[v1.8.2]]
v1.8.2 (2019-11-22)
-------------------

Changed
~~~~~~~

- Windows/macOS releases now ship with Qt 5.12.6. This includes security fixes
  up to Chromium 77.0.3865.120 plus a security fix for CVE-2019-13720 from
  Chromium 78.

Fixed
~~~~~

- Unbinding keys via `config.bind(key, None)` accidentally worked in
  v1.7.0 but raises an exception in v1.8.0. It now works again, but is
  deprecated and shows an error. Note that `:config-py-write` did write
  such invalid lines before v1.8.0, so existing config files might need
  adjustments.
- The `readability-js` userscript now handles encodings correctly (which it
  didn't before for some websites).
- <Shift-Insert> can now be used to paste text starting with a hyphen.
- Following hints via the number keypad now works properly again.
- Errors while reading the state file are now displayed instead of causing a
  crash.
- Crash when using `:debug-log-level` without a console attached.
- Downloads are now hidden properly when the browser is in fullscreen mode.
- Crash when setting `colors.webpage.bg` to an empty value with QtWebKit.
- Crash when the history database file is not a proper sqlite database.
- Workaround for missing/broken error pages on Debian.
- A deprecation warning (caused by pywin32) about the imp module on Windows is
  now hidden.

[[v1.8.1]]
v1.8.1 (2019-09-27)
-------------------

Changed
~~~~~~~

- No code changes - this release only repackages the Windows/macOS
  releases due to issues with the v1.8.0 release.
- Updated dependencies for Windows/macOS releases:
  * macOS and Windows releases now ship with Qt/QtWebEngine 5.12.5. Those
    are based on Chromium 69.0.3497.128 with security fixes up to Chromium
    76.0.3809.87.
  * Qt 5.13 couldn't be used yet due to various bugs in Qt 5.13.0 and .1.

[[v1.8.0]]
v1.8.0 (2019-09-25)
-------------------

Added
~~~~~

- New userscripts:
  * `readability-js` which uses Mozilla's node.js readability library.
  * `qute-bitwarden` which integrates the Bitwarden CLI.

Changed
~~~~~~~

- The statusbar text for passthrough mode now shows all configured bindings to
  leave the mode, not only one.
- When `:config-source` is used with a relative filename, the file is now
  searched in the config directory instead of the current working directory.
- HTML5 inputs with date/time types now enter insert mode when selected.
- `dictcli.py` now shows where dictionaries are installed to and complains when
  running it as root if doing so would result in a wrong installation path.
- The Makefile now can also run `setup.py build` when invoked without a target.
- Changes to userscripts:
  * qute-pass: Don't run `pass` if only a username is requested.
  * qute-pass: Support private domains like `myrouter.local`.
  * readability: Improved CSS styling.
- Performance improvements in various areas:
  * Loading config files
  * Typing without any completion matches
  * General keyboard handling
  * Scrolling
- `:version` now shows details about the loaded autoconfig.yml/config.py.
- Hosts are now additionally looked up including their ports in netrc files.
- With Qt 5.10 or newer, qutebrowser now doesn't force software rendering with
  Nouveau drivers anymore. However, QtWebEngine/Chromium still do so.
- The XSS Auditor is now disabled by default (`content.xss_auditing` =
  `false`). This reflects a similar change in Chromium, see
  their https://www.chromium.org/developers/design-documents/xss-auditor[XSS
  Auditor Design Document] for details.

Fixed
~~~~~

- `:config-write-py` now correctly writes `config.unbind(...)` lines (instead
  of `config.bind(..., None)`) when unbinding a default keybinding.
- Prevent repeat keyup events for JavaScript when a key is held down.
- The Makefile now rebuilds the manpage correctly.
- `~/.config/qutebrowser/blocked-hosts` can now also contain /etc/hosts-like
  lines, not just simple hostnames.
- Restored compatibility with Jinja2 2.8 (e.g. used on Debian Stretch or Ubuntu
  16.04 LTS).
- Fixed implicit type conversion warning with Python 3.8.
- The desktop file now sets `StartupWMClass` correctly, so the qutebrowser icon
  is no longer shown twice in the Gnome dock when pinned.
- Bindings involving keys which need the AltGr key now work properly.
- Fixed crash (caused by a Qt bug) when typing characters above the Unicode BMP
  (such as certain emoji or CJK characters).
- `dictcli.py` now works properly again.
- Shift can now be used while typing hint keystrings, which e.g. allows typing
  number hints on French keyboards.
- With rapid hinting in number mode, backspace now edits the filter text after
  following a hint.
- A certain type of error ("locking protocol") while initializing sqlite now
  isn't handled as crash anymore.
- Crash when showing a permission request in certain scenarios.

Removed
~~~~~~~

- At least Python 3.5.2 is now required to run qutebrowser, support for 3.5.0
  and 3.5.1 was dropped.


[[v1.7.0]]
v1.7.0 (2019-07-18)
-------------------

Added
~~~~~

- New settings:
  * `colors.tabs.pinned.*` to control colors of pinned tabs.
  * `hints.leave_on_load` which allows disabling leaving of hint mode when a
    new page is loaded.
  * `colors.completion.item.selected.match.fg` which allows configuring the
    text color for the matching text in the currently selected completion item.
  * `tabs.undo_stack_size` to limit how many undo entries are kept for closed tabs.
- New commands:
  * `:reverse-selection` (`o` in caret mode) to swap the stationary/moving ends
    of a selection.
- New commandline replacements:
  * `{url:domain}`, `{url:auth}`, `{url:scheme}`, `{url:username}`,
    `{url:password}`, `{url:host}`, `{url:port}`, `{url:path}`, `{url:query}`
    for the respective parts of the current URL.
  * `{title}` for the current page title.
- The `{title}` field in `tabs.title.format`, `tabs.title.format_pinned` and
  `window.title_format` got renamed to `{current_title}` (mirroring
  `{current_url}`) in order to not conflict with the new `{title}` commandline
  replacement.
- New `delete` target for `:hint` which removes the hinted element from
  the DOM.
- New `--config-py` commandline argument to use a custom `config.py` file.
- Qt 5.13: Support for notifications (shown via system tray).

Changed
~~~~~~~

- Updated dependencies for Windows/macOS releases:
   - PyQt5 5.12.3 / PyQtWebEngine 5.12.1
   - Qt 5.12.4, which includes security fixes up to Chromium 74.0.3729.157
   - Python 3.7.4
   - OpenSSL 1.1.1
   - Note: This release includes Qt 5.12.4 instead of Qt 5.13.0 due to
     https://bugreports.qt.io/browse/QTBUG-76913[QTBUG-76913] causing frequent
     segfaults with Qt 5.13. After Qt 5.13.1 is released, qutebrowser v1.8.0
     will be released with an updated Qt.
- Completely revamped Windows installer which allows installing without admin
  permissions and allows setting qutebrowser as default browser.
- The desktop file `qutebrowser.desktop` is now renamed to
  `org.qutebrowser.qutebrowser.desktop`.
- Pinned tabs now always show a favicon (even if the site doesn't provide one)
  when shrinking.
- Setting `downloads.location.directory` now changes the directory displayed in
  the download prompt even if `downloads.location.remember` is set.
- The `yank` command gained a new `inline` argument, which allows to e.g. use
  `:yank inline [{title}]({url})`.
- Duplicate consecutive history entries with the same URL are now ignored.
- More detailed error messages when spawning a process failed.
- The `content.pdfjs` setting now supports domain patterns.
- Improved process status output with `:spawn -o`.
- The `colors.tabs.bar.bg` setting is now of type `QssColor` and thus supports
  gradients.
- The `:fullscreen` command now understands a new `--enter` flag which
  causes it to always enter fullscreen instead of toggling the current
  state.
- `--debug-flag stack` is now needed to show stack traces on renderer process
  crashes.
- `--debug-flag chromium` can be used to easily turn on verbose Chromium logging.
- For runtime data (such as the IPC socket), a proper runtime path is now used
  on BSD; only macOS/Windows continue to use the temporary directory.
- PDF.js is now also searched in `/app/share/pdf.js/` (for Flatpak)
- Permission prompts can now be answered with `Y` (`:prompt-accept --save yes`)
  and `N` (`:prompt-accept --save no`) to save the answer as a per-domain
  setting.
- `content.dns_prefetch` is now turned off by default, as it causes crashes
  inside QtWebEngine.
- The (still unofficial) interceptor plugin API now contains `resource_type`
  for a request and allows redirecting requests.
- `:bookmark-remove` now shows a message for consistency with `:bookmark-add`.
- Very early segfaults are now also caught by the crash handler.
- The appdata XML now contains proper release information and an (empty) OARS
  content rating.
- Improved Linux distribution detection.
- Qt 5.13: Request filtering now happens in the UI rather than IO thread.
- Qt 5.13: Support for PDFium (Chromium's PDF viewer) is disabled for now so
  that PDFs can still be downloaded (or shown with PDF.js) properly.
- Various performance improvements (e.g. for showing hints or the :open
  completion).

Deprecated
~~~~~~~~~~

- `:yank markdown` got deprecated, as `:yank inline [{title}]({url})` can now
  be used instead.

Fixed
~~~~~

- Various QtWebEngine load signals are now handled differently, which should
  fix issues with insert mode being left while typing on sites like Google
  Translate.
- Race condition causing a colored statusbar in normal mode when
  entering/exiting caret mode quickly.
- Using `100%` for a hue in a `hsv(...)` config value now corresponds to 359
  (rather than 255), matching the fixed behavior in Qt 5.13.
- Chaining commands with `;;` used to abort with some failing commands. It now
  runs the second command no matter whether the first one succeeded or not.
- Handling of profiles and private windows (and resulting crashes with Qt
  5.12.2).
- Fixes for corner-cases when using `:navigate increment/decrement`.
- The type for the `colors.hints.match.fg` setting was changed to `QtColor`.
  Gradients were never supported for this setting, and with this change, values
  like `rgb(0, 0, 0)` now work as well.
- Permission prompts now show a properly normalized URL with QtWebKit.
- Crash on start when PyQt was built without SSL support with Qt >= 5.12.
- Minor memory leaks.

[[v1.6.3]]
v1.6.3 (2019-06-18)
-------------------

Fixed
~~~~~

- Crash when hinting and changing/closing the tab before hints are displayed.
- Crash on redirects with Qt 5.13.
- Hide bogus `AA_ShareOpenGLContexts` warning with Qt 5.12.4.
- Workaround for renderer process crashes with Qt 5.12.4.
  If you're unable to update, you can remove `~/.cache/qutebrowser` for the
  same result.

[[v1.6.2]]
v1.6.2 (2019-05-06)
-------------------

Changed
~~~~~~~

- Windows/macOS releases now ship with Qt 5.12.3, which includes security fixes
  up to Chromium 73.0.3683.75.

Fixed
~~~~~

- Crash when SQL errors occur while using the completion.
- Crash when cancelling a download prompt started in an already closed window.
- Crash when many prompts are opened at the same time.
- Running without Qt installed now displays a proper error again.
- High CPU usage when using the keyhint widget with a low delay.
- Crash with Qt >= 5.14 on redirects.

[[v1.6.1]]
v1.6.1 (2019-03-20)
-------------------

Changed
~~~~~~~

- Windows/macOS releases now ship with Qt 5.12.2, which includes
  security fixes up to Chromium 72.0.3626.121 (including CVE-2019-5786
  which is known to be exploited in the wild).

Fixed
~~~~~

- Crash when using `:config-{dict,list}-{add,remove}` with an invalid setting.
- Functionality like hinting on pages with an element with ID `_qutebrowser` (such as qutebrowser.org) on Qt 5.12.
- The .desktop file in v1.6.0 was missing the "Actions" key, which is now fixed.
- The SVG icon now has a size of 256x256px set to comply with freedesktop standards.
- Setting `colors.statusbar.*.bg` to a gradient now has the expected effect of
  the gradient spanning the entire statusbar.

[[v1.6.0]]
v1.6.0 (2019-02-25)
-------------------

Added
~~~~~

- New settings:
  * `tabs.new_position.stacking` which controls whether new tabs opened from a
    page should stack on each other or not.
  * `completion.open_categories` which allows to configure which categories are
    shown in the `:open` completion, and how they are ordered.
  * `tabs.pinned.frozen` to allow/deny navigating in pinned tabs.
  * `hints.selectors` which allows to configure what CSS selectors are used for
    hints, and also allows adding custom hint groups.
  * `input.insert_mode.leave_on_load` to turn off leaving insert mode when a
    new page is loaded.
- New config manipulation commands:
  * `:config-dict-add` and `:config-list-add` to a new element to a dict/list
    setting.
  * `:config-dict-remove` and `:config-list-remove` to remove an element from a
    dict/list setting.
- New `:yank markdown` feature which yanks the current URL and title in
  markdown format.
- Support for new QtWebEngine features in Qt 5.12:
  * Basic support for client certificates. Selecting the certificate to use
    when there are multiple matching certificates isn't implemented yet.
  * Support for DNS prefetching (plus new `content.dns_prefetch` setting).

Changed
~~~~~~~

- Various changes to the Windows and macOS builds:
  * Bundling Qt 5.12.1, based on Chromium 69.0.3497.128 with security fixes up
    to 71.0.3578.94.
  * Windows: A 32-bit build is available again.
  * Windows: The builds now bundle the Universal CRT DLLs, causing them to work
    on earlier versions of Windows 10.
  * macOS: Support for OS X 10.11 El Capitan was dropped, requiring macOS 10.12
    Sierra or newer.
  * macOS: The IPC socket path used to communicate with existing instances
    changed due to changes in Qt 5.12. Please make sure to quit qutebrowser
    before upgrading.
- `:q` now closes the current window instead of quitting qutebrowser completely
  (`:close`), while `:qa` quits (`:quit`). The behavior of `:wq` remains
  unchanged (`:quit --save`), as closing a window while saving the session
  doesn't make sense.
- Completion highlighting is now done differently (using `QSyntaxHighlighter`),
  which should fix some highlighting corner-cases.
- The `QtColor` config type now also understands colors like `rgb(...)`.
- `:yank` now has a `--quiet` option which causes it to not display a message.
- The `:open` completion now also shows search engines by default.
- The `content.host_blocking.enabled` setting now supports URL patterns, so the
  adblocker can be disabled on a given page.
- Elements with a `tabindex` attribute now also get hints by default.
- Various small performance improvements for hints and the completion.
- The Wayland check for QtWebEngine is now disabled on Qt >= 5.11.2, as those
  versions should work without any issues.
- The JavaScript `console` object is now available in PAC files.
- PAC proxies currently don't work properly on QtWebEngine (and never did), so
  an error is now shown when trying to configure a PAC proxy.
- The metainfo file `qutebrowser.appdata.xml` is now renamed to
  `org.qutebrowser.qutebrowser.appdata.xml`.
- The `qute-pass` userscript now understands domains in gpg filenames
  in addition to directory names.
- The autocompletion for `content.headers.user_agent` got updated to only
  include the default and Chrome, as setting the UA to Firefox has various
  bad side-effects.
- Combining Qt 5.12 with an older PyQt can lead to issues, so a warning is
  now shown when starting qutebrowser with that combination.

Fixed
~~~~~

- Invalid world IDs now get rejected for `:jseval` and GreaseMonkey scripts.
- When websites suggest download filenames with invalid characters, those are
  now correctly replaced.
- Invalid hint length calculation in certain rare cases.
- Dragging tabs in the tab bar (which was broken in v1.5.0)
- Using Shift-Home in command mode now works properly.
- Workaround for a Qt bug which prevented
  `content.cookies.accept = no-3rdparty` from working properly on some pages
  like GMail. However, the default for `content.cookies.accept` is still `all`
  to be in line with what other browsers do.
- `:navigate` not incrementing in anchors or queries.
- Crash when trying to use a proxy requiring authentication with QtWebKit.
- Slashes in search terms are now percent-escaped.
- When `scrolling.bar = True` was set in versions before v1.5.0, this now
  correctly gets migrated to `always` instead of `when-searching`.
- Completion highlighting now works again on Qt 5.11.3 and 5.12.1.
- The non-standard header `X-Do-Not-Track` is no longer sent.
- PAC proxies were never correctly supported with QtWebEngine, but are now
  explicitly disallowed.
- macOS: Context menus for download items now show in the correct macOS style.
- Issues with fullscreen handling when exiting a video player.
- Various fixes for Qt 5.12 issues:
  * A javascript error on page load was fixed.
  * `window.print()` works with Qt 5.12 now.
  * Fixed handling of duplicate download filenames.
  * Fixed broken `qute://history` page.
  * Fixed PDF.js not working properly.
  * The download button in PDF.js now works (it's not possible to make
    it work with earlier Qt versions).
  * Since Greasemonkey scripts modifying the DOM fail when being run at
    document-start, some known-broken scripts (Iridium, userstyles.org) are now
    forced to run at document-end.

[[v1.5.2]]
v1.5.2 (2018-10-26)
-------------------

Changed
~~~~~~~

- The `content.cookies.accept` setting is now set to `all` instead of
  `no-3rdparty` by default, as `no-3rdparty` breaks various pages such as
  GMail.

[[v1.5.1]]
v1.5.1 (2018-10-10)
-------------------

Fixed
~~~~~

- Flickering when opening/closing tabs (as soon as more than 10 are open) on
  some pages.
- PDF.js is now bundled again with the macOS/Windows release.
- PDF.js is now searched in the correct path (if not installed system-wide)
  instead of hardcoding `~/.local/share/qutebrowser`.
- Improved logging for PDF.js resources which fail to load.
- Crash when closing a tab after doing a search.
- Tabs appearing when hidden after e.g. closing tabs.

[[v1.5.0]]
v1.5.0 (2018-10-03)
-------------------

Added
~~~~~

- Rewritten PDF.js support:
  * PDF.js support and the `content.pdfjs` setting are now also available with
    QtWebEngine.
  * Opening a PDF file now doesn't start a second request anymore.
  * Opening PDFs on https:// sites now works properly.
  * New `--pdfjs` flag for `prompt-open-download`, so PDFs can be opened in
    PDF.js with `<Ctrl-P>` in the download prompt.
- New settings:
  * `content.mouse_lock` to handle HTML5 pointer locking.
  * `completion.web_history.exclude` which hides a list of URL patterns from
    the completion.
  * `qt.process_model` which can be used to change Chromium's process model.
  * `qt.low_end_device_mode` which turns on Chromium's low-end device mode.
    This mode uses less RAM, but the expense of performance.
  * `content.webrtc_ip_handling_policy`, which allows more
    fine-grained/restrictive control about which IPs are exposed via WebRTC.
  * `tabs.max_width` which allows to have a more "normal" look for tabs.
  * `content.mute` which allows to mute pages (or all tabs) by default.
- Running qutebrowser with QtWebKit or Qt < 5.9 now shows a warning (only
  once), as support for those is going to be removed in a future release.
- New t[iI][hHu] default bindings (similar to `tsh` etc.) to toggle images.
- The qute-pass userscript now has optional OTP support.
- When `:spawn --userscript` is called with a count, that count is now
  passed to userscripts as `$QUTE_COUNT`.

Changed
~~~~~~~

- Windows and macOS releases now bundle Python 3.7, PyQt 5.11.3 and Qt 5.11.2.
  QtWebEngine includes security fixes up to Chromium 68.0.3440.75 and
  https://code.qt.io/cgit/qt/qtwebengine.git/tree/dist/changes-5.11.2/?h=v5.11.2[various other fixes].
- Various performance improvements when many tabs are opened.
- The `content.headers.referer` setting now works on QtWebEngine.
- The `:repeat` command now takes a count which is multiplied with the given
  "times" argument.
- The default keybinding to leave passthrough mode was changed from `<Ctrl-V>`
  to `<Shift-Escape>`, which makes pasting from the clipboard easier in
  passthrough mode and is also unlikely to conflict with webpage bindings.
- The `app_id` is now set to `qutebrowser` for Wayland.
- `Command` or `Cmd` can now be used (instead of `Meta`) to map the Command key
  on macOS.
- Using `:set option` now shows the value of the setting (like `:set option?`
  already did).
- The `completion.web_history_max_items` setting got renamed to
  `completion.web_history.max_items`.
- The Makefile shipped with qutebrowser now supports overriding variables
  `DATADIR` and `MANDIR`.
- Regenerating completion history now shows a progress dialog.
- The `content.autoplay` setting now supports URL patterns on Qt >= 5.11.
- The `content.host_blocking.whitelist` setting now takes a list of URL
  patterns instead of globs.
- In passthrough mode, Ctrl + Mousewheel now also gets passed through to the
  page instead of zooming.
- Editing text in an external editor now simulates a JS "input" event, which
  improves compatibility with websites reacting via JS to input.
- The `qute://settings` page is now properly sorted on Python 3.5.
- `:zoom`, `:zoom-in` and `:zoom-out` now have a `--quiet` switch which causes
  them to not display a message.
- The `scrolling.bar` setting now takes three values instead of being a
  boolean: `always`, `never`, and `when-searching` (which only displays it
  while a search is active).
- '@@' now repeats the last run macro.
- The `content.host_blocking.lists` setting now accepts a `file://` URL to a
  directory, and reads all files in that directory.
- The `:tab-give` and `:tab-take` command now have a new flag `--keep` which
  causes them to keep the old tab around.
- `:navigate` now clears the URL query.

Fixed
~~~~~

- `qute://` pages now work properly on Qt 5.11.2
- Error when passing a substring with spaces to `:tab-take`.
- Greasemonkey scripts which start with a UTF-8 BOM are now handled correctly.
- When no documentation has been generated, the plaintext documentation now can
  be shown for more files such as `qute://help/userscripts.html`.
- Crash when doing initial run on Wayland without XWayland.
- Crash when trying to load an empty session file.
- `:hint` with an invalid `--mode=` value now shows a proper error.
- Rare crash on Qt 5.11.2 when clicking on `<select>` elements.
- Rare crash related to the completion.

Removed
~~~~~~~

- Support for importing pre-v1.0.0 history files has been removed.
- The `content.webrtc_public_interfaces_only` setting has been removed and
  replaced by `content.webrtc_ip_handling_policy`.

[[v1.4.2]]
v1.4.2 (2018-09-02)
-------------------

Changed
~~~~~~~

- The `content.xss_auditing` setting is now enabled by default, to mirror
  Chromium's rather than Qt's default behavior.
- Long URLs in the statusbar are now elided at the end rather than in the
  middle, to make sure the hostname is completely visible whenever possible.

Fixed
~~~~~

- Crash in Qt 5.7.1 when a website uses `window.print()`.
- The workaround for Nouveau graphic drivers now works properly again.
- Crash when using `:follow-selected` with a link which is outside of the view.
- Workaround for windows not showing as urgent with some window managers
  (like i3).
- Crash when opening URLs with some unicode characters (IDNA 2008). Those URLs
  still won't open though, due to missing support in Qt.
- Crash when a download directory which can't be created is configured.
- Crash in the `importer.py` script when importing Chrome bookmarks from newer Chrome versions.
- The `content.webrtc_public_interfaces_only` option didn't work on Qt 5.11 previously (it now does).
  Note it still does not work on Qt 5.10 (due to a Qt bug) and Qt < 5.9.2.
- Repeated escaping of entries in `qute://log` when refreshing page.
- The host blocker doesn't block 0.0.0.0 anymore.
- Crash when using :// as URL pattern.
- The `:buffer` completion now sorts tabs with indices >= 10 correctly again.

[[v1.4.1]]
v1.4.1 (2018-07-11)
-------------------

Security
~~~~~~~~

- CVE-2018-10895: Fix CSRF issue on the qute://settings page, leading to
  possible arbitrary code execution. See the related GitHub issue for details:
  https://github.com/qutebrowser/qutebrowser/issues/4060

Fixed
~~~~~

- Rare crash when an error occurs in downloads.
- Newlines are now stripped from the :version pastebin URL.
- There's a new `mkvenv-pypi-old` environment in `tox.ini` which installs an
  older Qt, which is needed on Ubuntu 16.04.
- Worked around a Qt issue which redirects to a `chrome-error://` page when
  trying to use U2F.
- The `link_pyqt.py` script now works correctly with PyQt 5.11.
- The Windows installer now uninstalls the old version before installing the
  new one, fixing issues with qutebrowser not starting after installing v1.4.0
  over v1.3.3.

[[v1.4.0]]
v1.4.0 (2018-07-03)
-------------------

Added
~~~~~

- Support for the bundled `sip` module in PyQt 5.11 and other changes in
  Qt/PyQt 5.11.x.
- New `--debug-flag log-requests` to log requests to the debug log for
  debugging.
- New `--first` flag for `:hint` (bound to `gi` for inputs) which automatically
  selects the first hint.
- New `input.escape_quits_reporter` setting which can be used to avoid
  accidentally quitting the crash reporter when pressing escape.
- New `qute-lastpass` userscript which uses the LastPass CLI to fill passwords.
- The Makefile now installs a `/usr/share/metainfo/qutebrowser.appdata.xml` file.
- QtWebEngine: Support for printing from webpages via `window.print`.
- QtWebEngine: Support for muting tabs:
  * New `{audio}` field for `window.title_format` and `tabs.title.format` which
    displays `[M]`/`[A]` for muted/recently audible tabs.
  * New `:tab-mute` command (bound to `<Alt-m>`) to mute/unmute a tab.
- QtWebEngine: Support for `content.cookies.accept` with third-party cookies
  blocked by default (requires Qt 5.11).
- QtWebEngine: New settings:
  * Support for requesting persistent storage via
    `navigator.webkitPersistentStorage.requestQuota` with a new
    `content.persistent_storage` setting (requires Qt 5.11).
    This setting also supports URL patterns.
  * Support for registering custom protocol handlers via
    `navigator.registerProtocolHandler` with a new
    `content.register_protocol_handler` setting (requires Qt 5.11).
    This setting also supports URL patterns.
  * Support for WebRTC screen sharing with a new `content.desktop_capture`
    setting (requires Qt 5.10).
    This setting also supports URL patterns.
  * New `content.autoplay` setting to enable/disable automatic video playback
    (requires Qt 5.10).
  * New `content.webrtc_public_interfaces_only` setting to only expose public
    interfaces over WebRTC (requires Qt 5.9.2 or 5.11).
  * New `content.canvas_reading` setting to disable reading from canvas
    elements.

Changed
~~~~~~~

- The following settings now support URL patterns:
  * `content.headers.do_not_track`
  * `content.headers.custom`
  * `content.headers.accept_language`
  * `content.headers.user_agent`
  * `content.ssl_strict`
  * `content.geolocation`
  * `content.notifications`
  * `content.media_capture`
- The Windows/macOS releases now bundle Qt 5.11.1 which is based on
  Chromium 65.0.3325.151 with security fixes up to Chromium 67.0.3396.87.
- New short flags for commandline arguments: `-B` and `-T` for `--basedir` and
  `--temp-basedir`; `-d` and `-D` for `--debug` and `--debug-flag`.
- Deleting history items via `:history-clear` or `:completion-item-del` now
  also removes that URL from QtWebEngine's visited links.
- There's now completion for commands taking a variable count of arguments
  (like `:config-cycle`).
- QtWebEngine: On Qt 5.11.1, no reloads are needed anymore when switching
  between pages with changed settings (e.g. `content.javascript.enabled`).
- The `qt.force_software_rendering` setting changed from a boolean to taking
  different values (`software-opengl`, `qt-quick` and `chromium`) for different
  kinds of software rendering workarounds.
- On Qt 5.11, using wayland with QtWebEngine is now possible when using
  software rendering.
- GreaseMonkey scripts now get their own global scope (based on the page's
  one), which allows scripts like OneeChan to work.
- Rapid hinting is now supported with the `yank` and `yank-primary` targets,
  copying newline-separated links.
- QtWebEngine: On Qt 5.11, the developer tools (inspector) can now be used
  securely and without requiring the `--enable-webengine-inspector` option.
- The `<Enter>` key (`:follow-selected`) now follows the currently focused
  element if there's no selection.
- The `--logfilter` argument now can be prepended with an exclamation mark
  (e.g. `--logfilter '!init,destroy'`) to invert the filter.
- `:view-source` now has a `--pygments` flag which uses the "old" way of
  rendering sources even with QtWebEngine.
- Improved error messages when a setting needs a newer Qt version.
- QtWebEngine: Various improvements to make the cursor more visible in caret
  browsing.
- When a prompt is opened in insert/passthrough mode, the mode is restored
  after closing the prompt.
- On Qt 5.10 or newer, dictionaries are now read from the qutebrowser data
  directory (e.g. `~/.local/share/qutebrowser`) instead of `/usr/share/qt`.
  Existing dictionaries are copied over.
- If an error while parsing `~/.netrc` occurs, the cause of the error is now
  logged.
- On Qt 5.9 or newer, certificate errors now show Chromium's detailed error
  page.
- Greasemonkey scripts now support a "@qute-js-world" tag to run them in a
  different JavaScript context.

Fixed
~~~~~

- Various subtle keyboard focus issues.
- The security fix in v1.3.3 caused URLs with ampersands
  (`www.example.com?one=1&two=2`) to send the wrong arguments when clicked on
  the `qute://history` page.
- Crash when opening a PDF page with PDF.js enabled (on QtWebKit), but no
  PDF.js installed.
- Crash when closing a tab shortly after opening it.

Removed
~~~~~~~

- No prebuilt binaries for 32-bit Windows are supplied anymore. This is due to
  Qt removing QtWebEngine support for those upstream. It might be possible to
  distribute 32-bit binaries again with Qt 5.12 in December, but that will only
  happen if it turns out enough people actually need 32-bit support.
- `:tab-detach` which has been deprecated in v1.1.0 has been removed.
- The `content.developer_extras` setting got removed. On QtWebKit, developer
  extras are now automatically enabled when opening the inspector.

[[v1.3.3]]
v1.3.3 (2018-06-21)
-------------------

Security
~~~~~~~~

- CVE-2018-1000559: An XSS vulnerability on the `qute://history` page allowed
  websites to inject HTML into the page via a crafted title tag. This could
  allow them to steal your browsing history. If you're currently unable to
  upgrade, avoid using `:history`. See the related GitHub issue for details:
  https://github.com/qutebrowser/qutebrowser/issues/4011.

Fixed
~~~~~

- Crash in a workaround for a Qt 5.11 bug in rare circumstances.
- Workaround for a Qt bug which preserves searches between page loads.
- In v1.3.2 a dependency on the `PyQt5.QtQuickWidgets` module was accidentally
  introduced. Since that module isn't packaged everywhere, it's been removed
  again.

[[v1.3.2]]
v1.3.2 (2018-06-10)
-------------------

Fixed
~~~~~

- QtWebEngine: Improved workaround for a bug in Qt 5.11 where only the
  top/bottom half of the window is used.
- QtWebEngine: Work around a bug in Qt 5.11 where an endless loading-loop is
  triggered when clicking a link with an unknown scheme.
- QtWebEngine: When switching between pages with changed settings, less
  unnecessary reloads are done now.
- QtWebEngine: It's now possible to open external links such as `magnet://` or
  `mailto:` via hints.

[[v1.3.1]]
v1.3.1 (2018-05-29)
-------------------

Fixed
~~~~~

- Work around a bug in Qt 5.11 where only the top/bottom half of the window is used.
  This workaround is incomplete, but fixes the majority of the cases where this happens.
- Work around keyboard focus issues with Qt 5.11.
- Work around an issue in Qt 5.11 where e.g. activating JavaScript per-domain
  needed a manual reload in some cases.
- Don't crash when a ² key is pressed (e.g. on AZERTY keyboards).
- Don't crash when a tab is opened and quickly closed again.


[[v1.3.0]]
v1.3.0 (2018-05-03)
-------------------

Added
~~~~~

- New `:scroll-to-anchor` command to scroll to an anchor in the document.
- New `url.open_base_url` option to open the base URL of a searchengine when no
  search term is given.
- New `tabs.min_width` setting to configure the minimal width for tabs.
- New userscripts:
  * `getbib` to download bibtex information for DOIs on a page.
  * `qute-keepass` to get passwords from KeePassX.

Changed
~~~~~~~

- QtWebEngine: Support for JavaScript Shared Web Workers have been disabled on
  Qt versions older than 5.11 because of security issues in in Chromium.
  You can get the same effect in earlier versions via
  `:set qt.args ['disable-shared-workers']`. An equivalent workaround is also
  contained in Qt 5.9.5 and 5.10.1.
- The file dialog for downloads now has basic tab completion based on the
  entered text.
- `:version` now shows OS information for POSIX OS other than Linux/macOS.
- When there's an error inserting the text from an external editor, a backup
  file is now saved.
- The `window.hide_wayland_decoration` setting got renamed to
  `window.hide_decoration` and now also works outside of wayland.
- The `tabs.favicons.show` setting now can take three values: `'always'` (was
  `True`), `'never'` (was `False`) and `'pinned'` (to only show favicons for
  pinned tabs).
- Hover tooltips on tabs now always show the webpage's title.
- The default value for `content.host_blocking.lists` was changed to only
  include https://github.com/StevenBlack/hosts[Steven Black's hosts-list] which
  combines various sources.
- Error messages when trying to wrap when `tabs.wrap` is `False` are now logged
  to debug instead of messages.

Fixed
~~~~~

- Using hints before a page is fully loaded is now possible again.
- Selecting hints with the number keypad now works again.
- Tab titles for tabs loaded from sessions should now really be correct instead
  of showing the URL.
- Loading URLs with customized settings from a session now avoids an additional
  reload.
- The window icon and title now get set correctly again.
- The `tabs.switching_delay` setting now has a correct maximum value limit set.
- The `taskadd` script now works properly when there's multi-line output.
- QtWebEngine: Worked around issues with GreaseMonkey/stylesheets not being
  loaded correctly in some situations.
- The statusbar now more closely reflects the caret mode state.
- The icon on Windows should now be displayed in a higher resolution.
- The QtWebEngine development tools (inspector) now also work when JavaScript is
  disabled globally.
- Building `.exe` files now works when `upx` is installed on the system.
- The keyhint widget now shows the correct text for chained modifiers.
- Loading GreaseMonkey scripts now also works with Jinja2 2.8 (e.g. on Debian
  Stable).
- Adding styles with GreaseMonkey on fast sites now works properly.
- Window ID 0 is now excluded properly from `:tab-take` completion.
- A rare crash when cancelling a download has been fixed.
- The Makefile (intended for packagers) now supports `PREFIX` properly.
- The workaround for a black window with Nvidia graphics is now enabled on
  non-Linux systems (like FreeBSD) as well.
- Initial support for Qt 5.11.
- Checking for a new version after sending a crash report now works properly
  again.
- `@match` in Greasemonkey scripts now more closely matches the proper pattern
  syntax.
- Searching via `/` or `?` now doesn't handle any characters in a special way.
- Fixed crash when trying to retry some failed downloads on QtWebEngine.
- An invalid spellcheck dictionary filename now doesn't crash anymore.
- When no spellcheck dictionaries are configured, it's now disabled internally.
  This works around an issue with entering special characters on Facebook
  messenger.
- The macOS release now should work again on macOS 10.11 and newer.

[[v1.2.1]]
v1.2.1 (2018-03-14)
-------------------

Fixed
~~~~~

- qutebrowser now starts properly when the PyQt5 QOpenGLFunctions package wasn't
  found.
- The keybinding cheatsheet on the quickstart page is now loaded from a local
  `qute://` URL again.
- With "tox -e mkvenv-pypi", PyQt 5.10.0 is used again instead of Qt 5.10.1,
  because of an issue with Qt 5.10.1 which causes qutebrowser to fail to start
  ("Could not find QtWebEngineProcess").
- Unbinding keys which were bound in older qutebrowser versions now doesn't
  crash anymore.
- Fixed a crash when reloading a page which wasn't fully loaded with v1.2.0
- Keys on the numeric keypad now fall back to the same bindings without `Num+`
  if no `Num+` binding was found.
- Fixed hinting on some pages with Qt < 5.10.
- Titles are now displayed correctly again for tabs which are cloned or loaded
  from sessions.
- Shortcuts now correctly use `Ctrl` instead of `Command` on macOS again.

[[v1.2.0]]
v1.2.0 (2018-03-09)
-------------------

Added
~~~~~

- Initial implementation of per-domain settings:
  * `:set` and `:config-cycle` now have a `-u`/`--pattern` argument taking a
    https://developer.chrome.com/extensions/match_patterns[URL match pattern]
    for supported settings.
  * `config.set` in `config.py` now takes a third argument which is the pattern.
  * New `with config.pattern('...') as p:` context manager for `config.py` to
    use the shorthand syntax with a pattern.
  * New `tsh` keybinding to toggle scripts for the current host. With a capital
    `S`, the toggle is saved. With a capital `H`, subdomains are included. With
    `u` instead of `h`, the exact current URL is used.
  * New `tph` keybinding to toggle plugins, with the same additional binding
    described above.
- New QtWebEngine features:
  * Caret/visual mode
  * Authentication via ~/.netrc
  * Retrying downloads with Qt 5.10 or newer
  * Hinting and other features inside same-origin frames
- New flags for existing commands:
  * `:session-load` has a new `--delete` flag which deletes the
    session after loading it.
  * New `--no-last` flag for `:tab-focus` to not focus the last tab when focusing
    the currently focused one.
  * New `--edit` flag for `:view-source` to open the source in an external editor.
  * New `--select` flag for `:follow-hint` which acts like the given string was entered but doesn't necessary follow the hint.
- New special pages:
  * `qute://bindings` (opened via `:bind`) which shows all keybindings.
  * `qute://tabs` (opened via `:buffer`) which lists all tabs.
- New settings:
  * `statusbar.widgets` to configure which widgets should be shown in which
    order in the statusbar.
  * `tabs.mode_on_change` which replaces `tabs.persist_mode_on_change`. It can
    now be set to `restore` which remembers input modes (input/passthrough)
    per tab.
  * `input.insert_mode.auto_enter` which makes it possible to disable entering
    insert mode automatically when an editable element was clicked. Together
    with `input.forward_unbound_keys`, this should allow for emacs-like
    "modeless" keybindings.
- New `:prompt-yank` command (bound to `Alt-y` by default) to yank URLs
  referenced in prompts.
- The `hostblock_blame` script which was removed in v1.0 was updated for the new
  config and re-added.
- New `cycle-inputs.js` script in `scripts/` which can be used with `:jseval -f`
  to cycle through inputs.

Changed
~~~~~~~

- Complete refactoring of key input handling, with various effects:
  * emacs-like keychains such as `<Ctrl-X><Ctrl-C>` can now be bound.
  * Key chains can now be bound in any mode (this allows binding unused keys in
    hint mode).
  * Yes/no prompts don't use keybindings from the `prompt` section anymore, they
    have their own `yesno` section instead.
  * Trying to bind invalid keys now shows an error.
  * The `bindings.default` setting can now only be set in a `config.py`, and
    existing values in `autoconfig.yml` are ignored.
- Improvements for GreaseMonkey support:
  * `@include` and `@exclude` now support regex matches. With QtWebEngine and Qt
    5.8 and newer, Qt handles the matching, but similar functionality will be
    added in Qt 5.11.
  * Support for `@requires`
  * Support for the GreaseMonkey 4.0 API
- The sqlite history now uses write-ahead logging which should be
  a performance and stability improvement.
- When an editor is spawned with `:open-editor` and `:config-edit`, the changes
  are now applied as soon as the file is saved in the editor.
- The `hist_importer.py` script now only imports URL schemes qutebrowser can
  handle.
- Deleting a prefix (`:`, `/` or `?`) via backspace now leaves command mode.
- Angular 1 elements and `<summary>`/`<details>` now get hints assigned.
- `:tab-only` with pinned tabs now still closes unpinned tabs.
- The `url.incdec_segments` option now also can take `port` as possible segment.
- QtWebEngine: `:view-source` now uses Chromium's `view-source:` scheme.
- Tabs now show their full title as tooltip.
- When there are multiple unknown keys in a autoconfig.yml, they now all get
  reported in one error.
- More performance improvements when opening/closing many tabs.
- The `:version` page now has a button to pastebin the information.
- Replacements like `{url}` can now be escaped as `{{url}}`.

Fixed
~~~~~

- QtWebEngine bugfixes:
  * Improved fullscreen handling with Qt 5.10.
  * Hinting and scrolling now works properly on special `view-source:` pages.
  * Scroll positions are now restored correctly from sessions.
  * `:follow-selected` should now work in more cases with Qt > 5.10.
  * Incremental search now flickers less and doesn't move to the second result
    when pressing Enter.
  * Keys like `Ctrl-V` or `Shift-Insert` are now correctly handled/filtered with
    Qt 5.10.
  * Fixed hangs/segfaults on exit with Qt 5.10.1.
  * Fixed favicons sometimes getting cleared with Qt 5.10.
  * Qt download objects are now cleaned up properly when a download is removed.
  * JavaScript messages are now not double-HTML escaped anymore on Qt < 5.11
- QtWebKit bugfixes:
  * Fixed GreaseMonkey-related crashes.
  * `:view-source` now displays a valid URL.
- URLs containing ampersands and other special chars are now shown correctly
  when filtering them in the completion.
- `:bookmark-add "" foo` can now be used to save the current URL with a custom
  title.
- `:spawn -o` now waits until the process has finished before trying to show the
  output. Previously, it incorrectly showed the previous output immediately.
- Suspended pages now should always load the correct page when being un-suspended.
- Exception types are now shown properly with `:config-source` and `:config-edit`.
- When using `:bookmark-add --toggle`, bookmarks are now saved properly.
- Crash when opening an invalid URL from an application on macOS.
- Crash with an empty `completion.timestamp_format`.
- Crash when `completion.min_chars` is set in some cases.
- HTML/JS resource files are now read into RAM on start to avoid crashes when
  changing qutebrowser versions while it's open.
- Setting `bindings.key_mappings` to an empty value is now allowed.
- Bindings to an empty commands are now ignored rather than crashing.

Removed
~~~~~~~

- `QUTE_SELECTED_HTML` is now not set for userscripts anymore except when called
  via hints.
- The `qutebrowser_viewsource` userscript has been removed as
  `:view-source --edit` can now be used.
- The `tabs.persist_mode_on_change` setting has been removed and replaced by
  `tabs.mode_on_change`.

[[v1.1.2]]
v1.1.2 (2018-03-01)
-------------------

Changed
~~~~~~~

- Windows/macOS releases now bundle Qt 5.10.1 which includes security fixes from
  Chromium up to version 64.0.3282.140.

Fixed
~~~~~

- QtWebEngine: Crash with Qt 5.10.1 when using :undo on some tabs.
- Compatibility with Python 3.7

[[v1.1.1]]
v1.1.1 (2018-01-20)
-------------------

Fixed
~~~~~

- The Makefile now actually works.
- Fixed crashes with Qt 5.10 when closing a tab before it finished loading.

[[v1.1.0]]
v1.1.0 (2018-01-15)
-------------------

Added
~~~~~

- Initial support for Greasemonkey scripts. There are still some rough edges,
  but many scripts should already work.
- There's now a `misc/Makefile` file in releases, which should help
  distributions which package qutebrowser, as they can run something like
  `make -f misc/Makefile DESTDIR="$pkgdir" install` now.
- New fields for `window.title_format` and `tabs.title.format`:
  * `{current_url}`
  * `{protocol}`
- New settings:
  * `colors.statusbar.passthrough.fg`/`.bg`
  * `completion.delay` and `completion.min_chars` to update the completion less
    often.
  * `completion.use_best_match` to automatically use the best-matching
    command in the completion.
  * `keyhint.radius` to configure the edge rounding for the key hint widget.
  * `qt.highdpi` to turn on Qt's High-DPI scaling.
  * `tabs.pinned.shrink` (`true` by default) to make it possible
    for pinned tabs and normal tabs to have the same size.
  * `content.windowed_fullscreen` to show e.g. a fullscreened video in the
    window without fullscreening that window.
  * `tabs.persist_mode_on_change` to keep the current mode when
    switching tabs.
  * `session.lazy_restore` which allows to not load pages immediately
    when restoring a session.
- New commands:
  * `:tab-give` and `:tab-take`, to give tabs to another window, or take them
    from another window.
  * `:completion-item-yank` (bound to `<Ctrl-C>`) to yank the current
    completion item text.
  * `:edit-command` to edit the commandline in an editor.
  * `search.incremental` for incremental text search.
- New flags for existing commands:
  * `-o` flag for `:spawn` to show stdout/stderr in a new tab.
  * `--rapid` flag for `:command-accept` (bound to `Ctrl-Enter` by default),
    which allows executing a command in the completion without closing it.
  * `--private` and `--related` flags for `:edit-url`, which have the
    same effect they have with `:open`.
  * `--history` for `:completion-item-focus` which causes it to go
    through the command history when no text was entered. The default bindings for
    cursor keys in the completion changed to use that, so that they can be used
    again to navigate through completion items when a text was entered.
  * `--file` for `:debug-pyeval` which makes it take a filename instead of a
    line of code.
- New `config.source(...)` method for `config.py` to source another file.
- New `{line}` and `{column}` replacements for `editor.command` to position the
  cursor correctly.
- New `qute-pass` userscript as alternative to `password_fill` which allows
  selecting accounts via rofi or any other dmenu-compatile application.
- New `hist_importer.py` script to import history from Firefox/Chromium.

Changed
~~~~~~~

- Some settings got renamed:
  * `tabs.width.bar` -> `tabs.width`
  * `tabs.width.indicator` -> `tabs.indicator.width`
  * `tabs.indicator_padding` -> `tabs.indicator.padding`
  * `session_default_name` -> `session.default_name`
  * `ignore_case` -> `search.ignore_case`
- Much improved user stylesheet handling for QtWebEngine which reduces
  flickering and updates immediately after setting a stylesheet.
- High-DPI favicons are now used when available.
- The `asciidoc2html.py` script now uses Pygments (which is already a dependency
  of qutebrowser) instead of `source-highlight` for syntax highlighting.
- The `:buffer` command now doesn't require quoting anymore, similar to `:open`.
- The `importer.py` script was largely rewritten and now also supports importing
  from Firefox' `places.sqlite` file and Chrome/Chromium profiles.
- Various internal refactorings to use Python 3.5 and ECMAscript 6 features.
- If the `window.hide_wayland_decoration` setting is False, but
  `QT_WAYLAND_DISABLE_WINDOWDECORATION` is set in the environment,
  the decorations are still hidden.
- The `install_dict.py` script for QtWebEngine was renamed to `dictcli.py` and
  can now also upgrade dictionaries correctly.
- `:undo` now can re-open multiple tabs after `:tab-only` was used.
- `:config-write-py` with a relative path now puts the file into the config
  directory.
- The `qute://version` page now also shows the uptime of qutebrowser.
- qutebrowser now prompts to create a non-existing directory when starting a
  download.
- `:jseval --file` now searches relative paths in a `js/` subdir in
  qutebrowser's data dir, e.g. `~/.local/share/qutebrowser/js`.
- The current/default bindings are now shown in the ``:bind` completion.
- Empty categories are now hidden in the `:open` completion.
- Search terms for URLs and titles can now be mixed when filtering the
  completion.
- The default font size for the UI got bumped up from 8pt to 10pt.
- Improved matching in the completion: The words entered are now matched in any
  order, and mixed matches on URL/tite are possible.
- The system's default encoding (rather than UTF-8) is now used to decode
  subprocess output.
- qutebrowser now ensures it's focused again after an external editor is closed.
- The `colors.completion.fg` setting can now be a list, allowing to specify
  different colors for the three completion columns.

Fixed
~~~~~

- More consistent sizing for favicons with vertical tabs.
- Using `:home` on pinned tabs is now prevented.
- Fix crash with unknown file types loaded via `qute://help`.
- Scrolling performance improvements.
- Sites like `qute://help` now redirect to `qute://help/` to make sure links
  work properly.
- Fixes for the size calculation of pinned tabs in the tab bar.
- Worked around a crash with PyQt 5.9.1 compiled against Qt < 5.9.1 when using
  `:yank` or `qute://` URLs.
- Fixed crash when opening `qute://help/img`.
- Fixed `gU` (`:navigate up`) on `qute://help` and webservers not handling `..`
  in a URL.
- Using e.g. `-s backend webkit` to set the backend now works correctly.
- Fixed crash when closing the tab an external editor was opened in.
- When using `:search-next` before a search is finished, no warning about no
  results being found is shown anymore.
- Fix `:click-element` with an ID containing non-alphanumeric characters.
- Fix crash when a subprocess outputs data which is not decodable as UTF-8.
- Fix crash when closing a tab immediately after hinting.
- Worked around issues in Qt 5.10 with loading progress never being finished.
- Fixed a crash when writing a flag before a command (e.g. `:-w open `).
- Fixed a crash when clicking certain form elements with QtWebEngine.

Deprecated
~~~~~~~~~~

- `:tab-detach` has been deprecated, as `:tab-give` without argument can be used
  instead.

Removed
~~~~~~~

- The long-deprecated `:prompt-yes`, `:prompt-no`, `:paste-primary` and `:paste`
  commands have been removed.
- The invocation `:download <url> <dest>` which was deprecated in v0.5.0 was
  removed, use `:download --dest <dest> <url>` instead.
- The `messages.unfocused` option which wasn't used anymore was removed.
- The `x[xtb]` default bindings got removed again as many users accidentally
  triggered them.

[[v1.0.4]]
v1.0.4 (2017-11-28)
-------------------

Fixed
~~~~~

- The `qute://gpl` page now works correctly again.
- Trying to bind an empty command now doesn't crash anymore.
- Fixed crash when `:config-write-py` fails to write to the given path.
- Fixed crash for some users when selecting a file with Qt 5.9.3
- Improved handling for various SQL errors
- Fix crash when setting content.cache.size to a big value (> 2 GB)

[[v1.0.3]]
v1.0.3 (2017-11-04)
-------------------

Changed
~~~~~~~

- macOS and Windows builds are now built with PyQt 5.9.1 and Qt 5.9.2, including
  various bugfixes, as well as security fixes from Chromium up to version
  61.0.3163.79.
- Performance improvements for tab rendering.
- The :open-editor command is now not hidden anymore as it's also usable in
  normal mode.

Fixed
~~~~~

- Handle accessing a locked sqlite database gracefully
- Abort pinned tab dialogs properly when a tab is closed e.g. by closing a
  window
- Unbinding a default keybinding twice now doesn't bind it again
- Completions are now sorted correctly again when filtered

[[v1.0.2]]
v1.0.2 (2017-10-17)
-------------------

Fixed
~~~~~

- Fix workaround for black screens or crashes with Nvidia cards
- Handle a filesystem going read-only gracefully
- Fix crash when setting `fonts.monospace`
- Fix list options not being modifiable via `.append()` in `config.py`
- Mark the content.notifications setting as QtWebKit only correctly
- Fix wrong rendering of keys like `<back>` in the completion

Changed
~~~~~~~

- Nicer error messages and other minor improvements

[[v1.0.1]]
v1.0.1 (2017-10-13)
-------------------

Fixed
~~~~~

- Fixed starting after customizing `fonts.tabs` or `fonts.debug_console`.
- Fixed starting with old PyQt versions compiled against newer Qt versions.
- Fixed check for PyQt version to correctly enforce 5.7 (not 5.2).

[[v1.0.0]]
v1.0.0 (2017-10-12)
-------------------

Major changes
~~~~~~~~~~~~~

- Dependency changes:
  * Support for legacy QtWebKit (before 5.212 which is
    https://github.com/annulen/webkit/wiki[distributed independently from Qt])
    is dropped.
  * Support for Python 3.4 is dropped.
  * Support for Qt before 5.7.1 and PyQt before 5.7 is dropped.
  * New dependency on the QtSql module and Qt sqlite support.
  * New dependency on the https://www.attrs.org/[attrs] project (packaged as
    `python-attr` in some distributions).
  * The dependency on PyOpenGL (when using QtWebEngine) got removed. Note
    that PyQt5.QtOpenGL is still a dependency.
  * PyQt5.QtOpenGL is now always required, even with QtWebKit.
- The QtWebEngine backend is now used by default. Note this means that
  QtWebEngine now should be a required dependency, and QtWebKit (if new enough)
  should be changed to an optional dependency.
- Completely rewritten configuration system which ignores the old config file.
  See link:qute://help/configuring.html[] for details.
- Various documentation files got moved to the doc/ subfolder;
 `qutebrowser.desktop` got moved to misc/.
- `:set` now doesn't support toggling/cycling values anymore, that functionality
  got moved to `:config-cycle`.
- New completion engine based on sqlite, which allows to complete
  the entire browsing history. The default for
  `completion.web_history_max_items` got changed to `-1` (unlimited). If the
  completion is too slow on your machine, try setting it to a few 1000 items.
- Up/Down now navigates through the command history instead of selecting
  completion items. Either use Tab to cycle through the completion, or
  https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#migrating-older-configurations[restore the old behavior].

Added
~~~~~

- QtWebEngine: Spell checking support, see the `spellcheck.languages` setting.
- New `qt.args` setting to pass additional arguments to Qt/Chromium.
- New `backend` setting to select the backend to use.
  Together with the previous setting, this should make most wrapper scripts
  unnecessary.
- qutebrowser can now be set as the default browser on macOS.
- New config commands:
  * `:config-cycle` to cycle an option between multiple values.
  * `:config-unset` to remove a configured option.
  * `:config-clear` to remove all configured options.
  * `:config-source` to (re-)read a `config.py` file.
  * `:config-edit` to open the `config.py` file in an editor.
  * `:config-write-py` to write a `config.py` template file.
- New `:version` command which opens `qute://version`.
- New back/forward indicator in the statusbar.
- New `bindings.key_mappings` setting to map keys to other keys.
- QtWebEngine: Support for proxy authentication.

Changed
~~~~~~~

- Using `:download` now uses the page's title as filename.
- Using `:back` or `:forward` with a count now skips intermediate pages.
- When there are multiple messages shown, the timeout is increased.
- `:search` now only clears the search if one was displayed before, so pressing
  `<Escape>` doesn't un-focus inputs anymore.
- Pinned tabs now adjust to their text's width, so the `tabs.width.pinned`
  setting got removed.
- `:set-cmd-text` now has a `--run-on-count` argument to run the underlying
  command directly if a count was given.
- `:scroll-perc` got renamed to `:scroll-to-perc`.

Removed
~~~~~~~

- Migrating QtWebEngine data written by versions before 2016-11-15 (before
  v0.9.0) is now not supported anymore.
- Upgrading qutebrowser with a version older than v0.4.0 still running now won't
  work properly anymore.
- The `--harfbuzz` and `--relaxed-config` commandline arguments got dropped.

Fixes
~~~~~

- Exiting fullscreen via `:fullscreen` or buttons on a page now
  restores the correct previous window state (maximized/fullscreen).
- When `input.insert_mode.auto_load` is set, background tabs now don't enter
  insert mode anymore.
- The keybinding help widget now works correctly when using keybindings with a
  count.
- The `window.hide_wayland_decoration` setting now works correctly again.

[[v0.11.1]]
v0.11.1 (2017-10-09)
--------------------

Fixes
~~~~~

- Fixed empty space being shown after tabs in the tabbar in some cases.
- Fixed `:restart` in private browsing mode.
- Fixed printing on macOS.
- Closing a pinned tab via mouse now also prompts for confirmation.
- The "try again" button on error pages works correctly again.
- :spawn -u -d is now disallowed.
- :spawn -d shows error messages correctly now.

[[v0.11.0]]
v0.11.0 (2017-07-04)
--------------------

New dependencies
~~~~~~~~~~~~~~~~

- New dependency on `PyQt5.QtOpenGL` if QtWebEngine is used. QtWebEngine depends
  on QtOpenGL already, but on distributions packaging split PyQt5 wrappers, the
  wrappers for QtOpenGL are now required.
- New dependency on `PyOpenGL` if QtWebEngine is used.

Added
~~~~~

- Private browsing is now implemented for QtWebEngine, *and changed its
  behavior*: The `general -> private-browsing` setting now only applies to newly
  opened windows, and you can use the `-p` flag to `:open` to open a private
  window.
- New "pinned tabs" feature, with a new `:tab-pin` command (bound
  to `<Ctrl-p>` by default).
- (QtWebEngine) Implemented `:follow-selected`.
- New `:clear-messages` command to clear shown messages.
- New `ui -> keyhint-delay` setting to configure the delay until
  the keyhint overlay pops up.
- New `-s` option for `:open` to force a HTTPS scheme.
- `:debug-log-filter` now accepts `none` as an argument to clear any log
  filters.
- New `--debug-flag` argument which replaces `--debug-exit` and
  `--pdb-postmortem`.
- New `tabs -> favicon-scale` option to scale up/down favicons.
- `colors -> statusbar.bg/fg.private` and `.command.private` to
  customize statusbar colors for private windows.
- New `{private}` field displaying `[Private Mode]` for
  `ui -> window-title-format` and `tabs -> title-format`.
- (QtWebEngine) Proxy support with Qt 5.7.1 (already was supported for 5.8 and
  newer)

Changed
~~~~~~~

- To prevent elaborate phishing attacks, the Punycode version (`xn--*`) is now
  shown in addition to the decoded version for international domain names
  (IDN).
- Starting with legacy QtWebKit now shows a warning message.
  *With the next release, support for it will be removed.*
- The Windows releases are redone from scratch, which means:
  * They now use the new QtWebEngine backend
  * The bundled Qt is updated from 5.5 to 5.9
  * The bundled Python is updated from 3.4 to 3.6
  * They are now generated with PyInstaller instead of cx_Freeze
  * The installer is now generated using NSIS instead of being a MSI
- Improved `qute://history` page (with lazy loading)
- Crash reports are not public anymore.
- Paths like `C:` are now treated as absolute paths on Windows for downloads,
  and invalid paths are handled properly.
- Comments in the config file are now placed before the individual options
  instead of being before sections.
- Messages are now hidden when clicked.
- stdin is now closed immediately for processes spawned from qutebrowser.
- When `ui -> message-timeout` is set to 0, messages are now never cleared.
- Middle/right-clicking the blank parts of the tab bar (when vertical) now
  closes the current tab.
- The adblocker now also blocks non-GET requests (e.g. POST).
- `javascript:` links can now be hinted.
- `:view-source`, `:tab-clone` and `:navigate --tab` now don't open the tab as
  "explicit" anymore, i.e. (with the default settings) open it next to the
  active tab.
- `qute:*` pages now use `qute://*` instead (e.g. `qute://version` instead of
  `qute:version`), but the old versions are automatically redirected.
- Texts in prompts are now selectable.
- The default level for `:messages` is now `info`, not `error`
- Trying to focus the currently focused tab with `:tab-focus` now focuses the
  last viewed tab.
- (QtWebEngine) With Qt 5.9, `content -> cookies-store` can now be set without
  a restart.
- (QtWebEngine) With Qt 5.9, better error messages are now shown for failed
  downloads.
- (QtWebEngine) The underlying Chromium version is now shown in the version
  info.
- (QtWebKit) Renderer process crashes now show an error page on Qt 5.9 or newer.
- (QtWebKit) storage -> offline-web-application-storage` got renamed to `...-cache`
- (QtWebKit) PAC now supports SOCKS5 as type.

Fixed
~~~~~

- The macOS .dmg is now built against Qt 5.9 which fixes various
  important issues (such as not being able to type dead keys).
- Fixed crash with `:download` on PyQt 5.9.
- Cloning a page without history doesn't crash anymore.
- When a download results in a HTTP error, it now shows the error correctly
  instead of crashing.
- Pressing ctrl-c while a config error is shown works as intended now.
- When the key config isn't writable, we now show an error instead of crashing.
- Fixed crash when unbinding an unbound key in the key config.
- Fixed crash when using `:debug-log-filter` when `--filter` wasn't given on startup.
- Fixed crash with some invalid setting values.
- Continuing a search after clearing it now works correctly.
- The tabbar and completion should now be more consistently and correctly
  styled with various system styles.
- Applying styiles in `qt5ct` now shouldn't crash anymore.
- The validation for colors in stylesheets is now less strict,
  allowing for all valid Qt values.
- `data:` URLs now aren't added to the history anymore.
- Accidentally starting with Python 2 now shows a proper error message again.
- For some people, running some userscripts crashed - this should now be fixed.
- Various other rare crashes should now be fixed.
- The settings documentation was truncated with v0.10.1 which should now be
  fixed.
- Scrolling to an anchor in a background tab now works correctly, and javascript
  gets the correct window size for background tabs.
- (QtWebEngine) Added a workaround for a black screen with some setups
- (QtWebEngine) Starting with Nouveau graphics now shows an error message
  instead of crashing in Qt.
- (QtWebEngine) Retrying downloads now shows an error instead of crashing.
- (QtWebEngine) Cloning a view-source tab now doesn't crash anymore.
- (QtWebEngine) `window.navigator.userAgent` is now set correctly when
  customizing the user agent.
- (QtWebEngine) HTML fullscreen is now tracked for each tab separately, which
  means it's not possible anymore to accidentally get stuck in fullscreen state
  by closing a tab with a fullscreen video.
- (QtWebEngine) `:scroll-page` with `--bottom-navigate` now works correctly.
- (QtWebKit) The HTTP cache is disabled on Qt 5.7.1 and 5.8 now as it leads to
  frequent crashes due to a Qt bug.
- (QtWebKit) Fixed Crash when a PAC file returns an invalid value.

[[v0.10.1]]
v0.10.1 (2017-03-08)
--------------------

Changed
~~~~~~~

- `--qt-arg` and `--qt-flag` can now also be used to pass arguments to Chromium when using QtWebEngine.

Fixed
~~~~~

- URLs are now redacted properly (username/password, and path/query for HTTPS) when using Proxy Autoconfig with QtWebKit
- Crash when updating adblock lists with invalid UTF8-chars in them
- Fixed the web inspector with QtWebEngine
- Version checks when starting qutebrowser now also take the Qt version PyQt was compiled against into account
- Hinting a input now doesn't select existing text anymore with QtWebKit
- The cursor now moves to the end when input elements are selected with QtWebEngine
- Download suffixes like (1) are now correctly stripped with QtWebEngine
- Crash when trying to print a tab which was closed in the meantime
- Crash when trying to open a file twice on Windows

[[v0.10.0]]
v0.10.0 (2017-02-25)
--------------------

Added
~~~~~

- Userscripts now have a new `$QUTE_COMMANDLINE_TEXT` environment variable, containing the current commandline contents
- New `ripbang` userscript to create a searchengine from a duckduckgo bang
- link:https://github.com/annulen/webkit/wiki[QtWebKit Reloaded] (also called QtWebKit-NG) is now fully supported
- Various new functionality with the QtWebEngine backend:
    * Printing support with Qt >= 5.8
    * Proxy support with Qt >= 5.8
    * The `general -> print-element-backgrounds` option with Qt >= 5.8
    * The `content -> cookies-store` option
    * The `storage -> cache-size` option
    * The `colors -> webpage.bg` option
    * The HTML5 fullscreen API (e.g. youtube videos) with QtWebEngine
    * `:download --mhtml`
- New `qute:history` URL and `:history` command to show the browsing history
- Open tabs are now auto-saved on each successful load and restored in case of a crash
- `:jseval` now has a `--file` flag so you can pass a javascript file
- `:session-save` now has a `--only-active-window` flag to only save the active window
- macOS builds are back, and built with QtWebEngine

Changed
~~~~~~~

- PyQt 5.7/Qt 5.7.1 is now required for the QtWebEngine backend
- Scrolling with the scrollwheel while holding shift now scrolls sideways
- New way of clicking hints which solves various small issues
- When yanking a mailto: link via hints, the mailto: prefix is now stripped
- Zoom level messages are now not stacked on top of each other anymore
- qutebrowser now automatically uses QtWebEngine if QtWebKit is unavailable
- :history-clear now asks for a confirmation, unless it's run with --force.
- `input -> mouse-zoom-divider` can now be 0 to disable zooming by mouse wheel
- `network -> proxy` can also be set to `pac+file://...` now to
  use a local proxy autoconfig file (on QtWebKit)

Removed
~~~~~~~

- (QtWebKit) Various rarely customized settings were removed:
  * `ui -> css-media-type` (defaults to desktop)
  * `general -> site-specific-quirks` (now always turned on)
  * `storage -> offline-storage-default-quota` (defaults to 5MB)
  * `storage -> offline-web-application-cache-quota` (defaults to no quota)
  * `storage -> object-cache-capacities` (default depends on disk space)
  * `content -> css-regions` (now always turned off)
  * `storage -> offline-storage-database` (merged into `storage -> local-storage`)

Fixed
~~~~~

- Various bugs with Qt 5.8 and QtWebEngine:
    * Segfault when closing a window
    * Segfault when closing a tab with a search active
    * Fixed various mouse actions (like automatically entering insert mode) not working
    * Fixed hints sometimes not working
    * Segfault when opening a URL after a QtWebEngine renderer process crash
- Other QtWebEngine fixes:
    * Insert mode now gets entered correctly with a non-100% zoom
    * Crash reports are now re-enabled when using QtWebEngine
    * Fixed crashes when closing tabs while hinting
    * Using :undo or :tab-clone with a view-source:// or chrome:// tab is now prevented, as it segfaults
- `:enter-mode` now refuses to enter modes which can't be entered manually (which caused crashes)
- `:record-macro` (`q`) now doesn't try to record macros for special keys without a text
- Fixed PAC (proxy autoconfig) not working with QtWebKit
- `:download --mhtml` now uses the new file dialog
- Word hints are now upper-cased correctly when hints -> uppercase is true
- Font validation is now more permissive in the config, allowing e.g. "Terminus
  (TTF)" as font name
- Fixed starting on newer PyQt/sip versions with LibreSSL
- When downloading files with QtWebKit, a User-Agent header is set when possible
- Fixed showing of keybindings in the :help completion
- `:navigate prev/next` now detects `rel` attributes on `<a>` elements, and
  handles multiple `rel` attributes correctly
- Fixed a crash when hinting with target `userscript` and spawning a non-existing script
- Lines in Jupyter notebook now trigger insert mode

[[v0.9.1]]
v0.9.1 (2017-01-13)
-------------------

Fixed
~~~~~

- Prevent websites from downloading files to a location outside of the download
  folder with QtWebEngine.

[[v0.9.0]]
v0.9.0 (2016-12-28)
-------------------

Added
~~~~~

- *New dependency:* qutebrowser now depends on the Qt QML module, which is
   packaged separately in some distributions (as Qt Declarative/QML/Quick).
- New `:rl-backward-kill-word` command which does what `:rl-unix-word-rubout`
  did before v0.8.0.
- New `:rl-unix-filename-rubout` command which is similar to readline's
  `unix-filename-rubout`.
- New `fonts -> completion.category` setting to customize the font used for
  completion category headers.
- New `:debug-log-capacity` command to adjust how many lines are logged into RAM
  (to report bugs which are difficult to reproduce).
- New `hide-unmatched-rapid-hints` option to not hide hint unmatched hint labels
  in rapid mode.
- New `{clipboard}` and `{primary}` replacements for the commandline which
  replace the `:paste` command.
- New `:insert-text` command to insert a given text into a field on the page,
  which replaces `:paste-primary` together with the `{primary}` replacement.
- New `:window-only` command to close all other windows.
- New `prev-category` and `next-category` arguments to `:completion-item-focus`
  to focus the previous/next category in the completion (bound to `<Ctrl-Tab>`
  and `<Ctrl-Shift-Tab>` by default).
- New `:click-element` command to fake a click on a element.
- New `:debug-log-filter` command to change console log filtering on-the-fly.
- New `:debug-log-level` command to change the console loglevel on-the-fly.
- New `general -> yank-ignored-url-parameters` option to configure which URL
  parameters (like `utm_source` etc.) to strip off when yanking a URL.
- Support for the
  https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API[HTML5 page visibility API]
- New `readability` userscript which shows a readable version of a page (using
  the `readability-lxml` python package)
- New `cast` userscript to show a video on a Google Chromecast
- New `:run-with-count` command which replaces the (undocumented) `:count:command` syntax.
- New `:record-macro` (`q`) and `:run-macro` (`@`) commands for keyboard macros.
- New `ui -> hide-scrollbar` setting to hide the scrollbar independently of the
  `user-stylesheet` setting.
- New `general -> default-open-dispatcher` setting to configure what to open
  downloads with (instead of e.g. `xdg-open` on Linux).
- Support for PAC (proxy autoconfig) with QtWebKit

Changed
~~~~~~~

- Hints are now drawn natively in Qt instead of using web elements. This has a
  few implications for users:
    * The `hints -> opacity` setting does not exist anymore, but you can use
      `rgba(r, g, b, alpha)` colors instead for `colors -> hints.bg`.
    * The `hints -> font` setting is not affected by
      `fonts -> web-family-fixed` anymore. Thus, a transformer got added to
      change `Monospace` to `${_monospace}`.
    * Gradients in hint colors can now be configured by using `qlineargradient`
      and friends instead of `-webkit-gradient`. The most common cases get
      migrated automatically, but if you drastically changed the defaults,
      you'll need to manually adjust your config.
    * Styling hints by styling `qutehint` elements in `user-stylesheet` was
      never officially supported and does not work anymore.
    * Hints are now not affected by the page's stylesheet or zoom anymore.
- `:bookmark-add` now has a `--toggle` flag which deletes the bookmark if it
  already exists.
- `:bookmark-load` now has a `--delete` flag which deletes the bookmark after
  loading it.
- `:open` now also accepts quickmark names instead of URLs
- `:tab-move` now optionally takes an index for absolute moving.
- Commands taking either an argument or a count (like `:zoom` or `:tab-focus`)
  now prefer the count instead of showing an error message.
- `:open` now has an `--implicit` argument to treat the opened tab as implicit
  (i.e. to open it at the position it would be opened if it was a clicked link)
- `:download-open` and `:prompt-open-download` now have an optional `cmdline`
  argument to pass a commandline to open the download with.
- `:yank` now has a position argument to select what to yank instead of using
  flags.
- Replacements like `{url}` can now also be used in the middle of an argument.
  Consequently, commands taking another command (`:later`, `:repeat` and
  `:bind`) now don't immediately evaluate variables.
- Tab titles in the `:buffer` completion now update correctly when a page's
  title is changed via javascript.
- `:hint` now has a `--mode <mode>` flag to override the hint mode configured
  using the `hints -> mode` setting.
- With `new-instance-open-target` set to a tab option, the tab is now opened in
  the most recently focused (instead of the last opened) window. This can be
  configured with the new `new-instance-open-target.window` setting.
  It can also be set to `last-visible` to show the pages in the most recently
  visible window, or `first-opened` to use the first (oldest) available window.
- Word hints now are more clever about getting the element text from some elements.
- Completions for `:help` and `:bind` now also show hidden commands
- The `:buffer` completion now also filters using the first column (id).
- `:undo` has been improved to reopen tabs at the position they were closed.
- `:navigate` now takes a count for `up`/`increment`/`decrement`.
- The `hints -> auto-follow` setting now can be set to
  `always`/`full-match`/`unique-match`/`never` to more precisely control when
  hints should be followed automatically.
- Counts can now be used with special keybindings (e.g. with modifiers).
  This was already implemented for v0.7.0 originally, but got reverted because
  it caused some issues and then never re-applied.
- Sending a command to an existing instance (via "qutebrowser :reload") now
  doesn't mark it as urgent anymore.
- `tabs -> title-format` now treats an empty string as valid.
- Bindings for `:`, `/` and `?` are now configured explicitly and not hardcoded
  anymore.
- The `completion -> show` setting can now be set to `always`, `auto` or
  `never`.
- `:open-editor` can now be used in any mode.
- Lots of improvements to and bugfixes for the QtWebEngine backend, such as
  working hints. However, using qutebrowser directly from git is still advised
  when using `--backend webengine`.
- `content -> javascript-can-open-windows` got renamed to
  `javascript-can-open-windows-automatically`.
- `:prompt-accept` now optionally accepts a value which overrides the one
  entered in the input box. `yes` and `no` can be used as values for yes/no
  questions.
- The new `--qt-arg` and `--qt-flag` arguments can be used to pass
  arguments/flags to Qt's commandline.
- Error/warning/info messages are now shown stacked above the statusbar.
  This also added various new settings:
    * `colors -> messages.fg.error` (renamed from `statusbar.fg.error`)
    * `colors -> messages.bg.error` (renamed from `statusbar.bg.error`)
    * `colors -> messages.border.error`
    * `colors -> messages.fg.warning` (renamed from `statusbar.fg.warning`)
    * `colors -> messages.bg.warning` (renamed from `statusbar.bg.warning`)
    * `colors -> messages.border.warning`
    * `colors -> messages.fg.info`
    * `colors -> messages.bg.info`
    * `colors -> messages.border.info`
    * `fonts -> messages.error`
    * `fonts -> messages.warning`
    * `fonts -> messages.info`
- The `qute:settings` page now also shows option descriptions.
- `qute:version` and `qutebrowser --version` now show various important paths
- `:spawn`/userscripts now show a nicer error when a script wasn't found
- Various functionality now works when javascript is disabled with QtWebKit
- Various commands/settings taking `left`/`right`/`previous` arguments now take
  `prev`/`next`/`last-used` to remove ambiguity.
- The `ui -> user-stylesheet` setting now only takes filenames, not CSS snippets
- `ui -> window-title-format` now has a new `{backend} ` replacement
- `:hint` has a new `--add-history` argument to add the URL to the history for
  yank/spawn targets.
- `:set` now cycles through values if more than one argument is given.
- `:open` now opens `default-page` without a URL even without `-t`/`-b`/`-w` given.

Deprecated
~~~~~~~~~~

- The `:paste` command got deprecated as `:open` with `{clipboard}` and
  `{primary}` can be used instead.
- The `:paste-primary` command got deprecated as `:insert-text {primary}` can
  be used instead.
- The `:prompt-yes` and `:prompt-no` commands got deprecated as
  `:prompt-accept yes` and `:prompt-accept no` can be used instead.

Removed
~~~~~~~

- The `:yank-selected` command got merged into `:yank` as `:yank selection`
  and thus removed.
- The `:completion-item-prev` and `:completion-item-next` commands got merged
  into a new `:completion-focus {prev,next}` command and thus removed.
- The `ui -> hide-mouse-cursor` setting since it was completely broken and
  nobody seemed to care.
- The `hints -> opacity` setting - see the "Changed" section for details.
- The `completion -> auto-open` setting got merged into `completion -> show` and
  thus removed.
- All `--qt-*` arguments got replaced by `--qt-arg` and `--qt-flag` and thus
  removed.
- The `-c`/`--confdir`, `--datadir` and `--cachedir` arguments got removed, as
  `--basedir` should be sufficient.

Fixed
~~~~~

- `:undo` now doesn't undo tabs "closed" by `:tab-detach` anymore.
- Fixed an issue with hint chars not being cleared correctly when leaving hint
  mode.
- `:tab-detach` now fails correctly when there's only one tab open.
- Various small issues with the command completion
- Fixed hang when using multiple spaces in a row with the URL completion
- qutebrowser now still starts with an incorrectly configured
  `$XDG_RUNTIME_DIR`.
- Fixed crash when a userscript writes invalid unicode data to the FIFO
- Fixed crash when a included HTML was not found

[[v0.8.3]]
v0.8.3 (2016-11-05)
-------------------

Fixed
~~~~~

- Fixed crash when doing `:<space><enter>`, another corner-case introduced in v0.8.0
- Fixed `:open-editor` (`<Ctrl-e>`) on Windows
- Fixed crash when setting `general -> auto-save-interval` to a too big value.
- Fixed crash when using hints on Void Linux.
- Fixed compatibility with Python 3.5.2+ on Debian unstable
- Compatibility with pdfjs v1.6.210
- `:bind` can now be used to bind to an alias (binding by editing `keys.conf`
  already worked before)
- The command completion now updates correctly when changing aliases
- The tabbar now displays correctly with the Adwaita Qt theme
- The default `sk` keybinding now sets the commandline to `:bind` correctly
- Fixed crash when closing a window without focusing it
- Userscripts now can access QUTE_FIFO correctly on Windows

[[v0.8.2]]
v0.8.2 (2016-08-02)
-------------------

Fixed
~~~~~

- Fixed `general -> private-browsing` not being set correctly until a restart
  (which caused e.g. local storage to be enabled).
- When hinting input fields (`:t`), also consider input elements without a type.
- Fixed crash when opening an invalid URL with a percent-encoded and a real @ in it
- Fixed default `;o` and `;O` bindings
- Fixed local storage not working (and possible other bugs) when using a
  relative path with `--basedir`.
- Fixed crash when deleting a quickmark with Ctrl-D
- Fixed HTML5 video playback on Windows
- Fixed crash when using `:prompt-open-download` with a file with chars not
  encodable with the OS' filesystem encoding (e.g. with `LC_ALL=C`)
- Fixed `:prompt-open-download` with a too long filename (> 255 bytes)
- Fixed crash when cancelling a download after doing `:prompt-open-download`
- Fixed crash when writing a download to disk fails with
  `:prompt-open-download`.
- Fixed `:restart` deleting the basedir when it was given with `--basedir`.

[[v0.8.1]]
v0.8.1 (2016-07-27)
-------------------

Fixed
~~~~~

- Fix crash when pressing enter without a command
- Adjust error message to point out QtWebEngine is unsupported with the OS
  X .app currently.
- Hide Harfbuzz warning with the macOS .app

[[v0.8.0]]
v0.8.0 (2016-07-26)
-------------------

Added
~~~~~

- New `:repeat-command` command (mapped to `.`) to repeat the last command.
  Note that two former default bundings conflict with that binding, unbinding
  them via `:unbind .i` and `:unbind .o` is recommended.
- New `qute:bookmarks` page which displays all bookmarks and quickmarks.
- New `:prompt-open-download` (bound to `Ctrl-X`) which can be used to open a
  download directly when getting the filename prompt.
- New `{host}` replacement for tab- and window titles which evaluates
  to the current host.
- New default binding `;t` for `:hint input`.
- New variables `$QUTE_CONFIG_DIR`, `$QUTE_DATA_DIR` and
  `$QUTE_DOWNLOAD_DIR` available for userscripts.
- New option `ui` -> `status-position` to configure the position of the
  status bar (top/bottom).
- New `--pdf <filename>` argument for `:print` WHICH can be used to generate a
  PDF without a dialog.

Changed
~~~~~~~

- `:scroll-perc` now prefers a count over the argument given to it, which means
  `gg` can be used with a count.
- Aliases can now use `;;` to have an alias which executed multiple commands.
- `:edit-url` now does nothing if the URL isn't changed in the spawned editor.
- `:bookmark-add` can now be passed a URL and title to add that as a bookmark
  rather than the current page.
- New `taskadd` userscript to add a taskwarrior task annotated with the
  current URL.
- `:bookmark-del` and `:quickmark-del` now delete the current page's URL if none
  is given.

Fixed
~~~~~

- Compatibility with PyQt 5.7
- Fixed some configuration values being lost when a config option gets removed
  from qutebrowser's code.
- Fix crash when downloading with a full disk
- Using `:jump-mark` (e.g. `''`) when the current URL is invalid doesn't crash
  anymore.

Removed
~~~~~~~

- The ability to display status messages from webpages, as well as the related
  `ui ->  display-statusbar-messages` setting.
- The `general -> wrap-search` setting as searches now always wrap.
  According to a quick straw poll and prior crash logs, almost nobody is using
  `wrap-search = false`, and turning off wrapping is not possible with
  QtWebEngine.
- `:edit-url` now doesn't accept a count anymore as its behavior was confusing
  and it doesn't make much sense to add a count.

[[v0.7.0]]
v0.7.0 (2016-06-10)
-------------------

Added
~~~~~

- New `:edit-url` command to edit the URL in an external editor.
- New `network -> custom-headers` setting to send custom headers with every request.
- New `{url:pretty}` commandline replacement which gets replaced by the decoded URL.
- New marks to remember a scroll position:
    - New `:jump-mark` command to jump to a mark, bound to `'`
    - New `:set-mark` command to set a mark, bound to ```(backtick)
    - The `'` mark gets set when moving away (hinting link with anchor, searching, etc.) so you can move back with `''`
- New `--force-color` argument to force colored logging even if stdout is not a
  terminal
- New `:messages` command to show error messages
- New pop-up showing possible keybinding when the first key of a keychain is
  pressed. This can be turned off using `:set ui keyhint-blacklist *`.
- New `hints -> auto-follow-timeout` setting to ignore keypresses after
  following a hint when filtering in number mode.
- New `:history-clear` command to clear the entire history
- New `hints -> find-implementation` to select which implementation (JS/Python)
  should be used to find hints on a page. The `javascript` implementation is
  better, but slower.
- New `inputs` group for `:hint` to hint text input fields.

Changed
~~~~~~~

- qutebrowser got a new (slightly updated) logo
- `:tab-focus` can now take a negative index to focus the nth tab counted from
  the right.
- `:yank` can now yank the pretty/decoded URL by adding `--pretty`
- `:navigate` now clears the URL fragment
- `:completion-item-del` (`Ctrl-D`) can now be used in `:buffer` completion to
  close a tab
- Various SSL ciphers are now disabled by default. With recent Qt/OpenSSL
  versions those already all are disabled, but with older versions they might
  not be.
- Show favicons as window icon with `tabs-are-windows` set.
- `:bind <key>` without a command now shows the existing binding
- The optional `colorlog` dependency got removed, as qutebrowser now displays
  colored logs without it.
- URLs are now shown decoded when hovering.
- Keybindings are now shown in the command completion
- Improved behavior when pasting multiple lines
- Rapid hints can now also be used for the `normal` hint target, which can be
  useful with javascript click handlers or checkboxes which don't actually open
  a new page.
- `:zoom-in` or `:zoom-out` (`+`/`-`) with a too large count now zooms to the
  smallest/largest zoom instead of doing nothing.
- The commandline now accepts partially typed commands if they're unique.
- Number hints are now kept filtered after following a hint in rapid mode.
- Number hints are now renumbered after filtering
- Number hints can now be filtered with multiple space-separated search terms
- `hints -> scatter` is now ignored for number hints
- Better history implementation which also stores titles.
  As a consequence, URLs which redirect to another URL are now added to the
  history too, marked with a `-r` suffix to the timestamp field.

Fixed
~~~~~

- Fixed using `:hint links spawn` with flags - you can now use things like the
  `-v` argument for `:spawn` or pass flags to the spawned commands.
- Various fixes for hinting corner-cases where following a link didn't work or
  the hint was drawn at the wrong position.
- Fixed crash when downloading from a URL with SSL errors
- Close file handles correctly when a download failed
- Fixed crash when using `;Y` (`:hint links yank-primary`) on a system without
  primary selection
- Don't display quit confirmation with finished downloads
- Fixed updating the tab index in the statusbar when opening a background tab
- Fixed a crash when entering `:-- ` in the commandline
- Fixed `:debug-console` with PyQt 5.6
- Fixed qutebrowser not starting when `sys.stderr` is `None`
- Fixed crash when cancelling a download which belongs to an MHTML download
- Fixed rebinding of keybindings being case-sensitive
- Fix for tab indicators getting lost when moving tabs
- Fixed handling of backspace in number hinting mode
- Fixed `FileNotFoundError` when starting in some cases on old Qt versions
- Fixed sharing of cookies between tabs when `private-browsing` is enabled
- Toggling values with `:set` now uses lower-case values
- Hints now work with (non-standard) links with spaces around the URL
- Strip off trailing spaces for history entries with no title

[[v0.6.2]]
v0.6.2 (2016-04-30)
-------------------

Fixed
~~~~~

- Fixed crash when using `:tab-{prev,next,focus}` right after closing the last
  tab with `last-close` set to `close`.
- Fixed crash when doing `:undo` in a new instance with `tabs -> last-close` set
  to `default-page`.
- Fixed crash when starting with --cachedir=""
- Fixed crash in some circumstances when using dictionary hints
- Fixed various crashes related to PyQt 5.6

[[v0.6.1]]
v0.6.1 (2016-04-10)
-------------------

Fixed
~~~~~~

- Fixed broken cheatsheet image which was missing from package
- Fixed occasional crash when switching/disconnecting monitors
- Fixed crash when downloading non-ascii files with a broken locale (`LC_ALL=C`)
- Added workaround for a Qt/PyQt bug which is too weird to describe here

[[v0.6.0]]
v0.6.0 (2016-04-04)
-------------------

Added
~~~~~

- New `:buffer` command to easily switch tabs by name. This is not bound to a
  key by default for existing users due to a conflict with the `gt`/`gT`
  bindings (which are now removed from the default bindings).
  You can bind it by hand by running `:bind -f gt set-cmd-text -s :buffer`.
- New `--quiet` argument for the `:debug-pyeval` command to not open a tab with
  the results. Note `:debug-pyeval` is still only intended for debugging.
- The completion now matches each entered word separately.
- A new command `:paste-primary` got added to paste the primary selection, and
  `<Shift-Insert>` got added as a binding so it pastes primary rather than
  clipboard.
- New mode `word` for `hints -> mode` which uses a dictionary and link-texts
  for hints instead of single characters.
- New `--all` argument for `:download-cancel` to cancel all running downloads.
- New `password_fill` userscript to fill passwords using the `pass` executable.
- New `current` hinting mode which forces opening hints in the current tab
  (even with `target="_blank"`)

Changed
~~~~~~~

- Pasting multiple lines via `:paste` now opens each line in a new tab.
- `:navigate increment/decrement` now preserves leading zeroes in URLs.
- `general -> editor` can now also handle `{}` inside another argument (e.g. to open `vim` via `termite`)
- Improved performance when scrolling with many tabs open.
- Shift-Insert now also pastes primary selection for prompts.
- `:download-remove --all` got un-deprecated to provide symmetry with
  `:download-cancel --all`. It does the same as `:download-clear`.
- Improved detection of URLs/search terms when pasting multiple lines.
- Don't remove `qutebrowser-editor-*` temporary file if editor subprocess crashed
- Userscripts are also searched in `/usr/share/qutebrowser/userscripts`.
- Blocked hosts are now also read from a `blocked-hosts` file in the config dir
  (e.g. `~/.config/qutebrowser/blocked-hosts`).

Fixed
~~~~~

- Fixed starting with -c "".
- Fixed crash when a tab is closed twice via javascript (e.g. Dropbox
  authentication dialogs)
- Fixed crash when a notification/geolocation prompt is answered after closing
  the tab it belongs to.
- Fixed crash when downloading a file without any path information (e.g a
  magnet link).
- Fixed crashes when opening an empty URL (e.g. via pasting).
- Fixed validation of duplicate values in `hints -> chars`.
- Fixed crash when PDF.js was partially installed.
- Fixed crash when XDG_DOWNLOAD_DIR was not an absolute path.
- Fixed very long filenames when downloading `data://`-URLs.
- Fixed ugly UI fonts on Windows when Liberation Mono is installed
- Fixed crash when unbinding key from a section which doesn't exist in the config
- Fixed report window after a segfault
- Fixed some directory browser issues on Windows
- Fixed crash when closing a window with a finished download and delayed
  `remove-finished-downloads` setting.
- Fixed crash when hitting `<Tab>` then `<Ctrl-C>` on pages without keyboard
  focus.
- Fixed "Frame load interrupted by policy change" error showing up when
  downloading files with Qt 5.6.

Removed
~~~~~~~

- The `gt`/`gT` bindings (luakit-like alternatives to `J`/`K`) were removed
  (except for existing configs) to make room for the `gt` binding to show
  buffers.

[[v0.5.1]]
v0.5.1 (2016-01-18)
-------------------

Fixed
~~~~~

- Fixed completion for various config values when using `:set`.
- Fixed config validation for various config values.
- Prevented an error being logged when a website with HTTP authentication was
  opened on Windows.

[[v0.5.0]]
v0.5.0 (2016-01-05)
-------------------

Added
~~~~~

- Ability to preview PDFs using pdf.js in the browser if it's installed. This
  is disabled by default and can be enabled using the
  `content -> pdfjs-enabled` setting.
- New setting `ui -> hide-wayland-decoration` to hide the window decoration
  when using wayland.
- New userscripts in `misc/userscripts`:
    - `open_download` to easily open a file in your downloads folder.
    - `view_in_mpv` to open a video in mpv and remove it from the page.
    - `qutedmenu` and `dmenu_qutebrowser` to select URLs via dmenu
- New setting `content -> host-blocking-whitelist` to whitelist certain domains
  from the adblocker.
- `{scroll_pos}` can now be used in `ui -> window-title-format` and
  `tabs -> title-format`.
- New setting `general -> url-incdec-segments` to configure which segments of
  the URL should be affected by `:navigate increment/decrement`.
- New `--target` argument to specify how URLs should be opened in an existing
  instance.
- New setting `statusbar.url.fg.success.https` to set the foreground color for
  the URL when a page was loaded via HTTPS.
- The scrollbar in the completion is now styled, and the following new options
  got added:
    * `completion -> scrollbar-width`
    * `completion -> scrollbar-padding`
    * `colors -> completion.scrollbar.fg`
    * `colors -> completion.scrollbar.bg`
- New value `none` for options taking a color system so they don't display a
  gradient:
    * `colors -> tabs.indicator.system`
    * `colors -> downloads.fg.system`
    * `colors -> downloads.bg.system`
- New command `:download-retry` to retry a failed download.
- New command `:download-clear` which replaces `:download-remove --all`.
- `:set-cmd-text` has a new `--append` argument to append to the current
  statusbar text.
- qutebrowser now uses `~/.netrc` if available to authenticate via HTTP.
- New `:fake-key` command to send a fake keypress to a website or to
  qutebrowser.
- New `--mhtml` argument for `:download` to download a page including all
  resources as MHTML file.
- New option `tabs -> title-alignment` to change the alignment of tab titles.

Changed
~~~~~~~

- The `colors -> tabs.bg/fg.selected` option got split into
  `tabs.bg/fg.selected.odd/even`.
- `:spawn --userscript` and `:hint` with the `userscript` target now look up
  relative paths in `~/.local/share/qutebrowser/userscripts` or
  `$XDG_DATA_HOME`. Using a binary in `$PATH` won't work anymore with
  `--userscript`.
- New design for error pages
- Link filtering for hints now checks if the text is contained anywhere in
  the link, and matches case-insensitively.
- The `ui -> remove-finished-downloads` option got changed to an integer and
  now takes a time (in milliseconds) to keep the download around after it's
  finished. When set to `-1`, downloads are never removed.
- The `:follow-hint` command now optionally takes the keystring of a hint to
  follow.
- `:scroll-px` now doesn't take floats anymore, which made little sense.
- Updated the user agent list for the `:set network user-agent` completion.
- Starting with `--debug` doesn't log `VDEBUG` messages anymore (add
  `--loglevel VDEBUG` to get them).
- `:debug-console` now hides the console if it's already shown.
- `:yank-selected` now doesn't log the selected text anymore.
- `general -> log-javascript-console` got changed from a boolean to an option
  taking a loglevel (`none`, `info`, `debug`).
- `:tab-move +/-` now wraps around if `tabs -> wrap` is `true`.
- When a subprocess (like launched by `:spawn`) fails, its stdout/stderr is now
  logged to the console.
- A search engine name can now contain any non-space character, like dashes.

Deprecated
~~~~~~~~~~

- `:download-remove --all` is now deprecated and `:download-clear` should be
  used instead.
- `:download <url> <destination>` is now deprecated and
  `:download --dest <destination> <url>` should be used instead.

Removed
~~~~~~~

- `:scroll` with two pixel-arguments (deprecated in v0.3.0)
- The `:run-userscript` command (deprecated in v0.2.0)
- The `rapid` and `rapid-win` targets for `:hint` (deprecated in v0.2.0)
- The `:cancel-download` command (deprecated in v0.2.0)
- The `:download-page` command (deprecated in v0.2.0)

Fixed
~~~~~

- Fixed retrying of downloads which were started in a now closed tab.
- Fixed displaying of web history if `web-history-max-items` is set to -1.
- Cloned tabs now don't display favicons anymore if show-favicons is False.
- Fixed a crash when clicking a bookmark name and pressing `Ctrl-D`.
- Fixed a crash when a website presents a very small favicon.
- Fixed prompting for download directory when
  `storage -> prompt-download-directory` was unset.
- Fixed crash when using `:follow-hint` outside of hint mode.
- Fixed crash when using `:set foo bar?` with invalid section/option.
- Fixed scrolling to the very left/right with `:scroll-perc`.
- Using an external editor should now work correctly with some funny chars
  (U+2028/U+2029/BOM).
- Movements in caret mode now should work correctly on macOS and Windows.
- Fixed upgrade from earlier config versions.
- Fixed crash when killing a running userscript.
- Fixed characters being passed through when shifted with
  `forward-unbound-keys` set to `auto`.
- Fixed restarting after a crash is reported.
- Removed `.pyc` files accidentally contained in source releases.

[[v0.4.1]]
v0.4.1 (2015-09-30)
-------------------

Fixed
~~~~~

- Adjusted AppArmor config for the IPC changes in v0.4.0.
- Fixed atime update frequency for IPC file.
- Worked around a Qt issue where middle-clicking caused scrolling with a
  touchpad to restart at the beginning of the page.
- The `completion -> web-history-max-items` setting is now also respected for
  items added after starting qutebrowser.
- Search terms are now shared between different tabs again
- Tests (a reduced subset of them) now run correctly again when DISPLAY is not
  set.
- Fixed an issue causing qutebrowser to crash with Python 3.5 as soon as an ad
  was blocked.
- Fixed an issue causing qutebrowser to not start with more recent Python 3.4
  versions (e.g. on Debian experimental).
- Fixed various `PendingDeprecationWarnings` shown with Python 3.5.

[[v0.4.0]]
v0.4.0 (2015-09-11)
-------------------

Added
~~~~~

- New bookmark functionality (similar to quickmarks without a name).
    * New command `:bookmark-add` to bookmark the current page (bound to `M`).
    * New command `:bookmark-load` to load a bookmark (bound to `gb`/`gB`/`wB`).
- New (hidden) command `:completion-item-del` (bound to `<Ctrl-D>`) to delete
  the current item in the completion (for quickmarks/bookmarks).
- New settings `tabs -> padding` and `tabs -> indicator-tabbing` to control the
  size/padding of the tabbar.
- New setting `ui -> statusbar-padding` to control the size/padding of the
  status bar.
- New setting `network -> referer-header` to configure when the referer should
  be sent (by default it's only sent while on the same domain).
- New setting `tabs -> show` which supersedes the old `tabs -> hide-*` options
  and has an additional `switching` option which shows tab while switching
  them. There's also a new `show-switching` option to configure the timeout.
- New setting `storage -> remember-download-directory` to remember the last
  used download directory.
- New setting `storage -> prompt-download-directory` to download all downloads
  without asking.
- Rapid hinting is now also possible for downloads.
- Directory browsing via `file://` is now supported.

Changed
~~~~~~~

- Some developer scripts got moved to `scripts/dev/`
- When downloading to a FIFO or special file, a confirmation is displayed as
  this might cause qutebrowser to hang.
- The `:yank-selected` command now works in all modes instead of just caret
  mode and is not hidden anymore.
- `minimal_webkit_testbrowser.py` now has a `--webengine` switch to test
  QtWebEngine if it's installed.
- The column width percentages for the completion view now depend on the
  completion model.
- The values for `tabs -> position` and `ui -> downloads-position` got changed
  from `north`/`south`/`west/`east` to `top`/`bottom`/`left`/`right`. Existing
  configs should be adjusted automatically.
- `:tab-focus`/`gt` now behaves like `:tab-next` if no count/index is given.
- The completion widget doesn't show a border anymore.
- The tabbar doesn't display ugly arrows anymore if there isn't enough space
  for all tabs.
- Some insignificant Qt warnings which were printed on macOS are now hidden.
- Better support for Qt 5.5 and Python 3.5.

Fixed
~~~~~

- Fixed a bug where cookies were saved despite qutebrowser being started in
  private browsing mode.
- The local socket used for inter-process communication (opening new instances)
  is now ensured to only be accessible by the user on all operating systems.
- Various corner cases for inter-process communication issues got fixed.
- `link_pyqt.py` now should work better on untested distributions.
- Fixed various corner-cases with crashes when reading invalid config values
  and the history file.
- Fixed various corner-cases when setting text via an external editor.
- Fixed potential crash when hinting a text field.
- Fixed entering of insert mode when certain disabled text fields were clicked.
- Fixed a crash when using `:set` with `-p` and `!` (invert value)
- Downloads with unknown size are now handled correctly.
- `:navigate increment/decrement` (`<Ctrl-A>`/`<Ctrl-X>`) now handles some
  corner-cases better.
- Fixed a bug where the completion got affected by another window's completion
  if it was open in both windows.
- Fixed a performance issue with large histories when opening previously
  unvisited websites.
- The progress bar now doesn't cause the statusbar to change it's height
  anymore.
- `~` is now always expanded when spawning a script.
- Fixed various corner cases when opening links in an existing instance.
- Fixed a race-condition causing an exception when starting qutebrowser.

Removed
~~~~~~~

- The `tabs -> indicator-space` setting got removed as the new padding settings
  should be used instead.
- The `tabs -> hide-always` and `tabs -> hide-auto` settings got merged into
  the new `tabs -> show` setting.

[[v0.3.0]]
v0.3.0 (2015-06-28)
-------------------

Added
~~~~~

- New commands `:message-info`, `:message-error` and `:message-warning` to show messages in the statusbar, e.g. from a userscript.
- New command `:scroll-px` which replaces `:scroll` for pixel-exact scrolling.
- New command `:jseval` to run a javascript snippet on the current page.
- New (hidden) command `:follow-selected` (bound to `Enter`/`Ctrl-Enter` by default) to follow the link which is currently selected (e.g. after searching via `/`).
- New (hidden) command `:clear-keychain` to clear a partially entered keychain (bound to `<Escape>` by default, in addition to clearing search).
- New setting `ui -> smooth-scrolling`.
- New setting `content -> webgl` to enable/disable https://www.khronos.org/webgl/[WebGL].
- New setting `content -> css-regions` to enable/disable support for https://dev.w3.org/csswg/css-regions/[CSS Regions].
- New setting `content -> hyperlink-auditing` to enable/disable support for https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing[hyperlink auditing].
- New setting `tabs -> mousewheel-tab-switching` to control mousewheel behavior on the tab bar.
- New arguments `--datadir` and `--cachedir` to set the data/cache location.
- New arguments `--basedir` and `--temp-basedir` (intended for debugging) to set a different base directory for all data, which allows multiple invocations.
- New argument `--no-err-windows` to suppress all error windows.
- New arguments `--top-navigate` and `--bottom-navigate` (`-t`/`-b`) for `:scroll-page` to specify a navigation action (e.g. automatically go to the next page when arriving at the bottom).
- New flag `-d`/`--detach` for `:spawn` to detach the spawned process so it's not closed when qutebrowser is.
- New flag `-v`/`--verbose` for `:spawn` to print information when the process started/exited successfully.
- Many new color settings (foreground setting for every background setting).
- New setting `ui -> modal-js-dialog` to use the standard modal dialogs for javascript questions instead of using the statusbar.
- New setting `colors -> webpage.bg` to set the background color to use for websites which don't set one.
- New setting `completion -> auto-open` to only open the completion when tab is pressed (if set to false).
- New visual/caret mode (bound to `v`) to select text by keyboard.
- There are now some example userscripts in `misc/userscripts`.
- Support for Qt 5.5 and tox 2.0

Changed
~~~~~~~

- *Breaking change for userscripts:* `QUTE_HTML` and `QUTE_TEXT` for userscripts now don't store the contents directly, and instead contain a filename.
- The `content -> geolocation` and `notifications` settings now support a `true` value to always allow those. However, this is *not recommended*.
- New bindings `<Ctrl-R>` (rapid), `<Ctrl-F>` (foreground) and `<Ctrl-B>` (background) to switch hint modes while hinting.
- `<Ctrl-M>` and numpad-enter are now bound by default for bindings where `<Return>` was bound.
- `:hint tab` and `F` now respect the `background-tabs` setting. To enforce a foreground tab (what `F` did before), use `:hint tab-fg` or `;f`.
- `:scroll` now takes a direction argument (`up`/`down`/`left`/`right`/`top`/`bottom`/`page-up`/`page-down`) instead of two pixel arguments (`dx`/`dy`). The old form still works but is deprecated.
- The `ui -> user-stylesheet` setting now also takes file paths relative to the config directory.
- The `content -> cookies-accept` setting now has new `no-3rdparty` (default) and `no-unknown-3rdparty` values to block third-party cookies. The `default` value got renamed to `all`.
- Improved startup time by reading the webpage history while qutebrowser is open.
- The way `:spawn` splits its commandline has been changed slightly to allow commands with flags.
- The default for the `new-instance-open-target` setting has been changed to `tab`.
- Sessions now store zoom/scroll-position separately for each entry.

Deprecated
~~~~~~~~~~

- `:scroll` with two pixel-arguments is now deprecated - `:scroll-px` should be used instead.

Removed
~~~~~~~

- The `--no-crash-dialog` argument which was intended for debugging only was removed as it's replaced by `--no-err-windows` which suppresses all error windows.
- Support for Qt installations without SSL support was dropped.

Fixed
~~~~~

- Scrolling should now work more reliably on some pages where arrow keys worked but `hjkl` didn't.
- Small improvements when checking if an input is a URL or not.
- Fixed wrong cursor position when completing the first item in the completion.
- Fixed exception when using search engines with {foo} in their name.
- Fixed a bug where the same title was shown for all tabs on some systems.
- Don't install the scripts package when installing qutebrowser.
- Fixed searching for terms starting with a hyphen (e.g. `/-foo`)
- Proxy authentication credentials are now remembered between different tabs.
- Fixed updating of the tab title on pages without title.
- Fixed AssertionError when closing many windows quickly.
- Various fixes for deprecated key bindings and auto-migrations.
- Workaround for qutebrowser not starting when there are NUL-bytes in the history (because of a currently unknown bug).
- Fixed handling of keybindings containing Ctrl/Meta on macOS.
- Fixed crash when downloading a URL without filename (e.g. magnet links) via "Save as...".
- Fixed exception when starting qutebrowser with `:set` as argument.
- Fixed horrible completion performance when the `shrink` option was set.
- Sessions now store zoom/scroll-position correctly.

[[v0.2.1]]
v0.2.1 (2015-04-19)
-------------------

Fixed
~~~~~

- Added missing manpage (doc/qutebrowser.1.asciidoc) to archive.

[[v0.2.0]]
v0.2.0 (2015-04-19)
-------------------

Added
~~~~~

- Session support
    * new command `:session-load` to load a session.
    * new command `:session-save` to save a session.
    * new command `:session-delete` to delete a session.
    * new setting `general -> save-session` to always save the session on quit.
    * new setting `general -> session-default-name` to configure the session name to use if none is given.
    * new argument `-r`/`--restore` to specify a session to load.
    * new argument `-R`/`--override-restore` to not load a session even if one was saved.
- New commands to manage downloads:
    * `:download` to download a URL or the current page.
    * `:download-cancel` to cancel a download.
    * `:download-delete` to delete a download from disk.
    * `:download-open` to open a finished download.
    * `:download-remove` to remove a download from the list. `:download-remove --all` or the new 'cd' keybinding can be used to clear all finished downloads.
- History completion
    * New option `completion -> timestamp-format` to set the format used to display the history timestamps.
    * New option `completion -> web-history-max-items` to configure how many history items to show in the completion.
    * The option `completion -> history-length` for the command history got renamed to `cmd-history-max-items`.
- Better save logic for the config/state:
    * Only save files if modified (e.g. don't overwrite the config if it was edited outside of qutebrowser and nothing was changed in qutebrowser).
    * Save things (cookies, config, quickmarks, ...) periodically all 15 seconds (time can be changed with the `general -> auto-save-interval` option).
- Opera-like mouse rocker gestures
    * New option `input -> rocker-gestures`. When turned on, the history can be navigated back/forward by holding a mouse button and pressing the other one.
- New `-f` option for `:reload` to reload and bypass the cache.
- Pass more information (`QUTE_MODE`, `QUTE_SELECTED_TEXT`, `QUTE_SELECTED_HTML`, `QUTE_USER_AGENT`, `QUTE_HTML`, `QUTE_TEXT`) to userscripts.
- New `--userscript` option to `:spawn` (which deprecates `:run-userscript`).
- Ability to toggle a value to `:set` by appending a `!` to the value.
- New options to hide the tab-/statusbar:
    * `tabs -> hide-always` for the tabbar
    * `ui -> hide-statusbar` for the statusbar
- New options to configure how the tab/window titles should look:
    * `tabs -> title-format` for the tabbar
    * `ui -> window-title-format` for the window title
- HTML5 Geolocation/Notification support:
    * New option `content -> geolocation` to permanently turn the geolocation off.
    * New option `content -> notifications` to permanently turn notifications off.
- New options to disable javascript prompts/alerts:
    * `content -> ignore-javascript-prompt` to turn off prompts.
    * `content -> ignore-javascript-alerts` to turn off alerts.
- Two new options to customize the behavior of hints:
    * `hints -> min-chars` to set minimum number of chars in hints.
    * `hints -> scatter` which when turned off distributes the hints sequentially (like dwb) instead of scattering their positions (like Vimium).
- Make it possible to use `:open -[twb]` without url.
    * New option `general -> default-page` to set the page to be opened when doing that.
- New `input -> partial-timeout` option to clear partial keystrings.
- New option `completion -> download-path-suggestion` to configure what to show in the completion for downloads.
- Queue messages shown in unfocused windows and show them when the window is focused.
    * New option `ui -> message-unfocused` to disable this behavior.
- New `--relaxed-config` argument which ignores unknown options.
- New `:tab-detach` command to open the current tab in a new window.
- Zooming via Ctrl-Mousewheel.
    * New option `input -> mouse-zoom-divider` to control how much the page is zoomed when rotating the wheel.
- New option (`content -> host-blocking-enabled`) to enable/disable host blocking.
- New values `tab-bg`/`tab-bg-silent` for `new-instance-open-target` to open a background tab.
- New `ui -> downloads-position` setting to move the downloads to the bottom.
- New `ui -> hide-mouse-cursor` option to hide the mouse cursor inside qutebrowser.
- New argument `-s` for qutebrowser to set a temporary config option.
- New argument `-p` for the `:set` command to print the new value.
- New `--rapid` option to `:hint`. The `rapid`/`rapid-win` targets are now deprecated, and `--rapid` can be used as well with the targets run/hover/userscript/spawn as well.
- New `-f` argument to `:bind` to overwrite the old binding.
- New `--qt-name` argument to qutebrowser which is passed to Qt to set `WM_CLASS`.
- Alternating row colors in completion. This adds a new `colors -> completion.alternate-bg` option.

Changed
~~~~~~~

- Ignore quotes with maxsplit-commands (`:open`, `:quickmark-load`, etc.) and don't quote arguments for those commands in the completions. This also means some commands needed adjustments:
    * Clear search when `:search` without arguments is given.  (`:search ""` will now search for the literal text `""`)
    * Add `-s`/`--space` argument to `:set-cmd-text` (as `:set-cmd-text "foo "` will now set the literal text `"foo "`)
- Ignore `;;` for splitting with some commands like `:bind`.
- Add unbound (new) default keybindings to config. This also adds a new `<unbound>` special command.
    * To unbind a command keybinding without binding it to a new key, you now have to bind it to `<unbound>` or it'll be re-added automatically.
- If an SSL error is raised multiple times with the same error/certificate/host/scheme/port, the user is only asked once.
- Jump to last instead of first item when pressing Shift-Tab the first time in the completion.
- Add a fullscreen keybinding.
- Add a `:search` command in addition to `/foo` so it's more visible and can be used from scripts.
- Various improvements to documentation, logging, and the crash reporter.
- Expand `~` to the users home directory with `:run-userscript`.
- Improve the userscript runner on Linux/macOS by using `QSocketNotifier`.
- Add luakit-like `gt`/`gT` keybindings to cycle through tabs.
- Show default value for config values in the completion.
- Clone tab icon, tab text and zoom level when cloning tabs.
- Don't open relative file paths with `:open`, only with commandline arguments.
- Expand environment variables in config settings which take a file path.
- Add a list of common user agents to the user agent setting completion.
- Move cursor to end of textboxes when hinting.
- Don't start searches on invalid URLs for quickmarks/startpage.
- Various performance improvements for the completion.
- Always open URLs given as argument in the foreground.
- Improve various error messages.
- Add `startpage`/`default-page` values to `tabs -> last-close`.
- Various improvements to `:restart` - it should be more robust now and uses sessions so all state (focused tab, scroll position, etc.) gets remembered.
- Add tab index display to the statusbar.
- Keep progress bar height fixed when the statusbar is multiline.
- Many improvements to tests and related infrastructure:
    * `init_venv.py` and `run_checks.py` have been replaced by https://tox.readthedocs.org/[tox]. Install tox and run `tox -e mkvenv` instead.
    * The tests now use https://pytest.org/[pytest]
    * Many new tests added
    * Mac Mini buildbot to run the tests on macOS.
    * Coverage recording via https://coverage.readthedocs.io/[coverage.py].
    * New `--pdb-postmortem argument` to drop into the pdb debugger on exceptions.
    * Use https://github.com/ionelmc/python-hunter[hunter] for line tracing instead of a selfmade solution.

Deprecated
~~~~~~~~~~

- The `:run-userscript` command - use `:spawn --userscript` instead.
- The `rapid` and `rapid-win` targets for `:hint` - use the `--rapid` argument to `:hint` instead.
- The `:cancel-download` command - use `:download-cancel` instead.
- The `:download-page` command - use `:download` instead.

Removed
~~~~~~~

- `init_venv.py` and `run_checks.py` have been replaced by https://tox.readthedocs.org/[tox]. Install tox and run `tox -e mkvenv` instead..

Fixed
~~~~~

- Fix for cache never being used.
- Fixed handling of key release events (e.g. for javascript) when holding a key and pressing a second one.
- Fix handling of commands using `;;` at various places (key config, command parser, `:bind`)
- Fix splitting of flags with arguments (`:bind -m`/`--mode`).
- Fix bindings of special keys with lower-case modifiers (e.g.  `<ctrl-x>`)
- Fix for weird search highlights when changing tabs while search is active.
- Fix starting with `-c ""`.
- Fix removing of partial downloads when a download is cancelled via context menu.
- Fix retrying of downloads which were started in a now closed tab.
- Highlight text case-insensitively in completion.
- Scroll completion to top when showing it.
- Handle unencodable file paths in config types correctly.
- Fix for crash when executing a delayed command (because of a shadowed keybinding) and then unfocusing the window.
- Fix for crash when hinting on a page which doesn't have a URL yet.
- Fix exception when using `:set-cmd-text` with an empty argument.
- Add a timeout to pastebin HTTP replies.
- Various other fixes for small/rare bugs.

[[v0.1.4]]
v0.1.4 (2015-03-19)
-------------------

Changed
~~~~~~~

* The Windows builds come with Qt 5.4.1 which has some https://listi.jpberlin.de/pipermail/qutebrowser/2015-March/000054.html[related bugfixes].
* Improvements to CPU usage when idle.
* Ensure there's no size for `font-family` settings.
* Handle URLs with double-colon as search strings.
* Adjust prompt size hint based on content.
* Refactor websettings and save/restore defaults.
* Various small improvements to logging.
* Various improvements for hinting.
* Improve parsing of `faulthandler` logs.

Removed
~~~~~~~

* Remove default search engines.
* Remove debug console completing completely.

Fixed
~~~~~

* Ignore RuntimeError in `mouserelease_insertmode`.
* Hide Qt warning when aborting download reply.
* Hide "Error while shutting down tabs" message.
* Clear open target in `acceptNavigationRequest`.
* Fix handling of signals with deleted tabs.
* Restore `sys.std*` in `utils.fake_io` on exceptions.
* Allow font names with integers in them.
* Fix `QIODevice` warnings when closing tabs.
* Set the `QSettings` path to a config-subdirectory.
* Add workaround for adblock-message without window.
* Fix searching for terms starting with a slash.
* Ignore tab key presses if they'd switch focus.

Security
~~~~~~~~

* Stop the icon database from being created when private-browsing is set to true.
* Disable insecure SSL ciphers.

[[v0.1.3]]
v0.1.3 (2015-02-12)
-------------------

Changed
~~~~~~~

* Various small logging improvements.
* Don't open relative files in `fuzzy_url` with `:open`
* Various crashdialog improvements.
* Hide adblocked iframes.

Fixed
~~~~~

* Handle shutdown of page with prompt correctly.
* fuzzy_url: handle invalid URLs with autosearch off
* Handle explicit searches with `auto-search=false`.
* Abort download override question on error/cancel.
* Set a higher z-index for hint labels.
* Close contextmenu when closing tab to avoid crash.
* Fix statusbar quickly popping up as window.
* Clean up `NetworkManager` after downloads finished.
* Fix restoring of cmd widget after an error.
* Fix retrying of downloads after the tab is closed.
* Fix `check_libraries()` output for Arch Linux.
* Handle all `IPCErrors` properly.
* Handle another `webelem.IsNullError` with hints.
* Handle `UnicodeDecodeError` when reading configs.

Security
~~~~~~~~

* Fix for HTTP passwords accidentally being written to debug log.

[[v0.1.2]]
v0.1.2 (2015-01-09)
-------------------

Changed
~~~~~~~

* Uncheck sending of debug log by default when private browsing is on.
* Add SSL info to version info.

Removed
~~~~~~~

* Remove hosts-file.net from blocker default lists.

Fixed
~~~~~

* Fix rare exception when a key is pressed shortly after opening a window
* Fix exception with certain invalid URLs like `http:foo:0`
* Work around Qt bug which renders checkboxes on macOS unusable
* Fix exception when a local files can't be read in `:adblock-update`
* Hide 2 more Qt warnings.
* Add `!important` to hint CSS so websites don't override the hint look
* Make `init_venv.py` work with multiple sip `.so` files.
* Fix splitting with certain commands with an empty argument
* Fix uppercase hints.
* Fix segfaults if another page is loaded while a prompt is open
* Fix exception with invalid `ShellCommand` config values.
* Replace unencodable chars
* Fix user-stylesheet setting with an empty value.


[[v0.1.1]]
v0.1.1 (2014-12-28)
-------------------

Added
~~~~~

* Set window icon and add a qutebrowser.ico file for Windows.
* Ask the user when downloading to an already existing file.
* Add a `network -> proxy-dns-requests` option.
* Add "Remove finished" to the download context menu
* Open and remove clicked downloads.

Changes
~~~~~~~

* Windows releases are now built with Qt 5.4 which brings many improvements and bugfixes.
* Add a troubleshooting section to the FAQ.
* Display IPC errors to the user.
* Rewrite keymode handling to use only one mode which also fixes various bugs.
* Save version to state config.
* Set zoom to default instead of 100% with `:zoom`/`=`.
* Adjust page zoom if default zoom changed.
* Force tabs to be focused on `:undo`.
* Replace manual installation instructions on macOS with homebrew/macports.
* Allow min-/maximizing of print preview on Windows.
* Various documentation improvements.
* Various other small improvements and cleanups.

Removed
~~~~~~~

* Clean up and temporarily disable alias completion.

Fixed
~~~~~

* Fix setting of `QWebSettings` (e.g. web fonts) with empty strings.
* Re-focus web view when leaving prompt/yesno mode.
* Handle `:restart` correctly with Python eggs.
* Handle an invalid cwd properly.
* Fix popping of a dead question in prompter.
* Fix `AttributeError` on config changes on Ubuntu.
* Don't treat things like "31c3" as IP address.
* Handle category being `None` in Qt message handler.
* Force-include pygments in `freeze.py`.
* Fix scroll percentage not updating on some pages like twitter.
* Encode `Content-Disposition` header name properly.
* Fix item sorting in `NeighborList`.
* Handle data being `None` in download read timer.
* Stop download read timer when reply has finished.
* Fix handling of small/big `fuzzyval`'s in `NeighborList`.
* Fix crashes when entering invalid values in `qute:settings`.
* Abort questions in `NetworkManager` when destroyed.
* Fix height calculation of download view.
* Always auto-remove adblock downloads when done.
* Ensure the docs get included in `freeze.py`.
* Fix crash with `:zoom`.

[[v0.1]]
v0.1 (2014-12-14)
-----------------

Initial release.