1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213
|
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
= Guide utilisateur WeeChat
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:lang: fr
include::includes/attributes-fr.adoc[]
Ce manuel documente le client de messagerie instantanée WeeChat, il fait
partie de WeeChat.
La dernière version de ce document peut être téléchargée sur
https://weechat.org/doc/[cette page ^↗^^].
[[introduction]]
== Introduction
WeeChat (Wee Enhanced Environment for Chat) est un client de discussion libre,
rapide et léger, conçu pour différents systèmes d'exploitation.
[[features]]
=== Fonctionnalités
Ses principales fonctionnalités sont les suivantes :
* multi-protocoles (principalement IRC)
* connexion multi-serveurs (avec TLS, IPv6, proxy)
* petit, rapide et léger
* paramétrable et extensible avec des extensions et des scripts
* conforme aux RFCs IRC
https://datatracker.ietf.org/doc/html/rfc1459[1459 ^↗^^],
https://datatracker.ietf.org/doc/html/rfc2810[2810 ^↗^^],
https://datatracker.ietf.org/doc/html/rfc2811[2811 ^↗^^],
https://datatracker.ietf.org/doc/html/rfc2812[2812 ^↗^^],
https://datatracker.ietf.org/doc/html/rfc2813[2813 ^↗^^] et
https://datatracker.ietf.org/doc/html/rfc7194[7194 ^↗^^]
* proxy IRC et relai pour WeeChat et interfaces distantes
* multi plates-formes (GNU/Linux, *BSD, macOS, Windows et d'autres systèmes)
* 100% GPL, logiciel libre
La liste complète des fonctionnalités peut être trouvée sur
https://weechat.org/[cette page ^↗^^].
[[prerequisites]]
=== Prérequis
Pour installer WeeChat, vous devez avoir :
* un système GNU/Linux (avec le compilateur et les outils associés pour le
paquet des sources), ou un système compatible
* droits "root" (pour installer WeeChat dans un répertoire système)
* quelques bibliothèques (voir les <<dependencies,dépendances>>).
[[install]]
== Installation
[[binary_packages]]
=== Paquets binaires
Les paquets binaires sont disponibles pour beaucoup de distributions, dont :
* Arch Linux : `pacman -S weechat`
* Cygwin (Windows) : sélectionnez les paquets WeeChat dans setup.exe
* Debian/Ubuntu (ou toute distribution compatible Debian) :
`apt-get install weechat-curses weechat-plugins` +
Pour les dernières versions et les constructions nocturnes :
https://weechat.org/download/debian/[dépôts Debian ^↗^^]
* Fedora Core : `dnf install weechat`
* FreeBSD : `pkg install weechat`
* Gentoo : `emerge weechat`
* Mandriva/RedHat (ou toute distribution compatible avec les RPM) :
`rpm -i /path/to/weechat-x.y.z-1.i386.rpm`
* openSUSE : `zypper in weechat`
* Sourcemage : `cast weechat`
* macOS (avec https://brew.sh/[Homebrew ^↗^^]) : `brew install weechat`
(pour l'aide : `brew info weechat`)
Des paquets additionnels peuvent être utiles également, comme weechat-plugins.
Pour les autres distributions supportées, merci de vous référer au manuel de
la distribution pour la méthode d'installation.
[[containers]]
=== Conteneurs
Des conteneurs avec WeeChat peuvent être construits ou installés directement
depuis le https://hub.docker.com/r/weechat/weechat[Docker Hub ^↗^^]. +
Pour plus d'informations, voire le README dans le dépôt
https://github.com/weechat/weechat-container[weechat-container ^↗^^].
[[source_package]]
=== Paquet source
WeeChat doit être construit avec CMake.
[NOTE]
Sous macOS, vous pouvez utiliser https://brew.sh/[Homebrew ^↗^^] :
`brew install --build-from-source weechat`.
[[dependencies]]
==== Dépendances
Le tableau suivant liste les paquets *requis* pour construire WeeChat :
[width="100%",cols="5,^3,.^15",options="header"]
|===
| Paquet ^(1)^ | Version | Fonctionnalités
| compilateur C (gcc / clang) |
| Compilation des sources en C.
| cmake | ≥ 3.0
| Construction.
| pkgconf / pkg-config |
| Détection des bibliothèques installées.
| libncurses-dev |
| Interface ncurses.
| libcurl4-gnutls-dev |
| Transfert d'URL.
| libgcrypt20-dev |
| Données sécurisées, authentification IRC SASL.
| libgnutls28-dev | ≥ 2.2.0 ^(2)^
| Extension IRC : support des connexions TLS, authentification IRC SASL (ECDSA-NIST256P-CHALLENGE). +
Extension Relay : support des connexions TLS.
| zlib1g-dev |
| Extension Logger : compression des fichiers de log qui tournent (gzip). +
Extention Relay : compression des messages (WeeChat -> client) avec https://zlib.net/[zlib ^↗^^]
(protocoles api et weechat). +
Extension Script : lecture du fichier d'index du dépôt (gzip).
|===
[NOTE]
^(1)^ Le nom provient de la distribution GNU/Linux Debian Bookworm, la version
et le nom peuvent être différents dans les autres distributions. +
^(2)^ GnuTLS ≥ 3.0.21 est requis pour l'authentification SASL avec le mécanisme
ECDSA-NIST256P-CHALLENGE.
Le tableau suivant liste les paquets optionnels pour compiler WeeChat :
[width="100%",cols="5,^3,.^15",options="header"]
|===
| Paquet ^(1)^ | Version | Fonctionnalités
| compilateur {cpp} (pass:[g++ / clang++]) |
| Construction et lancement des tests, extension JavaScript.
| gettext |
| Internationalisation (traduction des messages ; la langue de base est l'anglais).
| ca-certificates |
| Certificats pour les connexions TLS.
| libcjson-dev |
| Extension Relay : protocole "api" (API REST HTTP).
| libzstd-dev | ≥ 0.8.1
| Extension Logger : compression des fichiers de log qui tournent (zstandard). +
Extension Relay : compression des messages (WeeChat -> client) avec https://facebook.github.io/zstd/[Zstandard ^↗^^]
(protocoles api et weechat).
| libaspell-dev / libenchant-dev |
| Extension spell.
| python3-dev | ≥ 3.0
| Extension python.
| libperl-dev |
| Extension perl.
| ruby3.1, ruby3.1-dev | ≥ 1.9.1
| Extension ruby.
| liblua5.4-dev |
| Extension lua.
| tcl-dev | ≥ 8.5
| Extension tcl.
| guile-3.0-dev | ≥ 2.0
| Extension guile (scheme).
| libv8-dev | ≤ 3.24.3
| Extension javascript.
| php-dev | ≥ 7.0
| Extension PHP.
| libphp-embed | ≥ 7.0
| Extension PHP.
| libxml2-dev |
| Extension PHP.
| libargon2-dev |
| Extension PHP (si PHP ≥ 7.2).
| libsodium-dev |
| Extension PHP (si PHP ≥ 7.2).
| asciidoctor | ≥ 1.5.4
| Construction de la page man et de la documentation.
| ruby-pygments.rb |
| Construction de la documentation.
| libcpputest-dev | ≥ 3.4
| Construction et lancement des tests.
|===
[NOTE]
^(1)^ Le nom provient de la distribution GNU/Linux Debian Bookworm, la version
et le nom peuvent être différents dans les autres distributions.
Si vous utilisez une distribution basée sur Debian ou Ubuntu, et si vous avez
des entrées source "deb-src" dans votre fichier _/etc/apt/sources.list_, vous
pouvez installer toutes les dépendances avec la commande :
[source,shell]
----
sudo apt-get build-dep weechat
----
[[build]]
==== Construction
* Installation dans les répertoires systèmes (nécessite les droits _root_) :
[source,shell]
----
mkdir build
cd build
cmake ..
make
sudo make install
----
* Installation dans un répertoire spécifique (par exemple dans votre "home") :
[source,shell]
----
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/chemin/vers/répertoire
make
make install
----
Des options peuvent être utilisées pour CMake, avec le format : `-DOPTION=VALUE`.
Liste des options disponibles :
[width="100%",cols="3m,3,3m,10",options="header"]
|===
| Option | Valeurs | Valeur par défaut | Description
| CMAKE_BUILD_TYPE | `Debug`, `Release`, `RelWithDebInfo`, `MinSizeRel` |
| Type de construction : `Debug` (ou `RelWithDebInfo`) est recommandé si vous
utilisez une version de développement de WeeChat.
| CMAKE_INSTALL_PREFIX | répertoire | /usr/local
| Le répertoire dans lequel WeeChat sera installé.
| WEECHAT_HOME | répertoire | (chaîne vide)
| Le répertoire "maison" par défaut lors du lancement de WeeChat. +
Avec une valeur vide (recommandé), les répertoires XDG sont utilisés par défaut.
Si non vide, un répertoire unique est utilisé pour tous les fichiers.
La valeur peut aussi être 4 répertoires séparés par ":", dans cet ordre :
config, data, cache, runtime.
| ENABLE_ALIAS | `ON`, `OFF` | ON
| Compiler <<command_aliases,l'extension Alias>>.
| ENABLE_BUFLIST | `ON`, `OFF` | ON
| Compiler <<buflist,l'extension Buflist>>.
| ENABLE_CHARSET | `ON`, `OFF` | ON
| Compiler <<charset,l'extension Charset>>.
| ENABLE_CJSON | `ON`, `OFF` | ON
| Support du JSON avec la bibliothèque https://github.com/DaveGamble/cJSON[cJSON ^↗^^].
| ENABLE_MAN | `ON`, `OFF` | OFF
| Construire la page man.
| ENABLE_DOC | `ON`, `OFF` | OFF
| Construire la documentation HTML.
| ENABLE_DOC_INCOMPLETE | `ON`, `OFF` | OFF
| Forcer la construction de la documentation même si des extensions ne sont pas
compilées (déconseillé : les documentations seront incomplètes).
| ENABLE_ENCHANT | `ON`, `OFF` | OFF
| Compiler <<spell_checking,l'extension Spell>> avec Enchant.
| ENABLE_EXEC | `ON`, `OFF` | ON
| Compiler <<external_commands,l'extension Exec>>.
| ENABLE_FIFO | `ON`, `OFF` | ON
| Compiler <<fifo_pipe,l'extension Fifo>>.
| ENABLE_FSET | `ON`, `OFF` | ON
| Compiler <<fset,l'extension Fset>>.
| ENABLE_GUILE | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Guile>> (Scheme).
| ENABLE_HEADLESS | `ON`, `OFF` | ON
| Compiler le binaire sans interface (« headless »).
| ENABLE_IRC | `ON`, `OFF` | ON
| Compiler <<irc,l'extension IRC>>.
| ENABLE_JAVASCRIPT | `ON`, `OFF` | OFF
| Compiler <<scripting_plugins,l'extension JavaScript>>.
| ENABLE_LARGEFILE | `ON`, `OFF` | ON
| Support des gros fichiers.
| ENABLE_LOGGER | `ON`, `OFF` | ON
| Compiler <<buffer_logging,l'extension Logger>>.
| ENABLE_LUA | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Lua>>.
| ENABLE_NCURSES | `ON`, `OFF` | ON
| Compiler l'interface Ncurses.
| ENABLE_NLS | `ON`, `OFF` | ON
| Activer NLS (traductions).
| ENABLE_PERL | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Perl>>.
| ENABLE_PHP | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension PHP>>.
| ENABLE_PYTHON | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Python>>.
| ENABLE_RELAY | `ON`, `OFF` | ON
| Compiler <<relay,l'extension Relay>>.
| ENABLE_RUBY | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Ruby>>.
| ENABLE_SCRIPT | `ON`, `OFF` | ON
| Compiler <<script_manager,l'extension Script>>.
| ENABLE_SCRIPTS | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,les extensions de script>> (Python, Perl, Ruby,
Lua, Tcl, Guile, PHP).
| ENABLE_SPELL | `ON`, `OFF` | ON
| Compiler <<spell_checking,l'extension Spell>>.
| ENABLE_TCL | `ON`, `OFF` | ON
| Compiler <<scripting_plugins,l'extension Tcl>>.
| ENABLE_TRIGGER | `ON`, `OFF` | ON
| Compiler <<trigger,l'extension Trigger>>.
| ENABLE_TYPING | `ON`, `OFF` | ON
| Compiler <<typing_notifications,l'extension Typing>>.
| ENABLE_XFER | `ON`, `OFF` | ON
| Compiler <<xfer,l'extension Xfer>>.
| ENABLE_ZSTD | `ON`, `OFF` | ON
| Activer la compression https://facebook.github.io/zstd/[Zstandard ^↗^^].
| ENABLE_TESTS | `ON`, `OFF` | OFF
| Compiler les tests.
| ENABLE_CODE_COVERAGE | `ON`, `OFF` | OFF
| Compiler avec les options de couverture de code. +
Cette option ne devrait être utilisée que pour les tests, pour mesurer la
couverture de tests.
|===
Les autres options peuvent être affichées avec cette commande :
[source,shell]
----
cmake -LA
----
Ou avec l'interface Curses :
[source,shell]
----
ccmake ..
----
[[tests]]
==== Tests
Les paquets suivants sont nécessaires pour compiler les tests :
* libcpputest-dev
* C++ compiler
Les tests doivent être activés pour compiler WeeChat :
[source,shell]
----
cmake .. -DENABLE_TESTS=ON
----
Ils peuvent être lancés après compilation depuis le répertoire de construction :
[source,shell]
----
ctest -V
----
[[git_sources]]
=== Sources Git
Attention : les sources Git sont réservées aux utilisateurs avancés : il se peut
que WeeChat ne compile pas et qu'il soit très instable. Vous êtes prévenus !
Pour récupérer les sources Git, tapez cette commande :
[source,shell]
----
git clone https://github.com/weechat/weechat.git
----
Suivez alors les instructions du paquet source (voir
<<source_package,paquet source>>).
[[report_crashes]]
=== Rapporter les plantages
Si vous avez eu des plantages, ou si vous souhaitez rapporter tout plantage
futur de WeeChat, vous devez :
* Compiler avec :
** les infos de debug (ou installer un paquet binaire avec les infos de debug),
** la vérification des adresses (« address sanitizer ») (facultatif).
* Activer les fichiers _core_ sur votre système.
* Installer gdb.
[[debug_build]]
==== Construction en debug
Si vous compilez avec CMake :
[source,shell]
----
cmake .. -DCMAKE_BUILD_TYPE=Debug
----
[[address_sanitizer]]
==== Vérification des adresses
Vous pouvez aussi activer la vérification des adresses (« address sanitizer »),
ce qui provoquera immédiatement un plantage de WeeChat en cas de problème :
[source,shell]
----
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address
----
[CAUTION]
Vous ne devriez activer la vérification des adresses que si vous essayez de
provoquer un plantage, ce qui n'est pas recommandé en production.
Une fois compilé et installé, vous devez lancer WeeChat comme ceci :
[source,shell]
----
ASAN_OPTIONS="detect_odr_violation=0 log_path=asan.log" weechat
----
En cas de plantage, la trace se trouve dans le fichier `asan.log`.
[[core_files]]
==== Fichiers core
Pour activer les fichiers _core_, vous pouvez utiliser l'option
<<option_weechat.startup.sys_rlimit,weechat.startup.sys_rlimit>> :
----
/set weechat.startup.sys_rlimit "core:-1"
----
Pour WeeChat ≤ 0.3.8 ou si vous voulez activer les fichiers core avant que
WeeChat ne démarre, vous pouvez utiliser la commande `ulimit`.
Par exemple sous Linux avec le shell _bash_, ajoutez cette ligne dans votre
`~/.bashrc` :
[source,shell]
----
ulimit -c unlimited
----
Ou une taille maximum :
[source,shell]
----
ulimit -c 200000
----
[[gdb_backtrace]]
==== Obtenir la trace avec gdb
Lorsque WeeChat se plante, votre système génère un fichier _core_ ou
_core.12345_ (_12345_ est l'identifiant du processus)
si <<core_files,l'option est activée>>.
Ce fichier est créé dans le répertoire où vous avez lancé WeeChat (ce n'est
*pas* le répertoire où WeeChat est installé !).
[NOTE]
Sur certains systèmes comme Archlinux, les fichiers _core_ se trouvent dans un
autre répertoire tel que _/var/lib/systemd/coredump_ et vous devez utiliser la
commande `coredumpctl` pour le lire. +
Pour plus d'informations, voir cette
https://wiki.archlinux.org/title/Core_dump[page wiki ^↗^^].
Par exemple si _weechat_ est installé dans _/usr/bin/_ et que le fichier
_core_ se trouve dans _/home/user/_, alors il faut lancer gdb avec cette commande :
[source,shell]
----
gdb /usr/bin/weechat /home/user/core
----
Puis sous gdb, utilisez la commande `bt full` pour afficher la trace.
Vous verrez quelque chose comme ceci :
----
(gdb) set logging file /tmp/crash.txt
(gdb) set logging on
Copying output to /tmp/crash.txt.
(gdb) bt full
#0 0x00007f9dfb04a465 in raise () from /lib/libc.so.6
#1 0x00007f9dfb04b8e6 in abort () from /lib/libc.so.6
#2 0x0000000000437f66 in weechat_shutdown (return_code=1, crash=1)
at /some_path/src/core/weechat.c:351
#3 <signal handler called>
#4 0x000000000044cb24 in hook_process_timer_cb (arg_hook_process=0x254eb90,
remaining_calls=<value optimized out>) at /some_path/src/core/core-hook.c:1364
hook_process = 0x254eb90
status = <value optimized out>
#5 0x000000000044cc7d in hook_timer_exec ()
at /some_path/src/core/core-hook.c:1025
tv_time = {tv_sec = 1272693881, tv_usec = 212665}
ptr_hook = 0x2811f40
next_hook = 0x0
#6 0x000000000041b5b0 in gui_main_loop ()
at /some_path/src/gui/curses/gui-curses-main.c:319
hook_fd_keyboard = 0x173b600
tv_timeout = {tv_sec = 0, tv_usec = 0}
read_fds = {fds_bits = {0 <repeats 16 times>}}
write_fds = {fds_bits = {0 <repeats 16 times>}}
except_fds = {fds_bits = {0 <repeats 16 times>}}
max_fd = <value optimized out>
----
Vous devez envoyer cette trace aux développeurs, et leur indiquer quelle action
a été la cause de ce plantage.
Merci pour votre aide !
[[debug_running_weechat]]
==== Debug de WeeChat qui tourne
Pour déboguer WeeChat qui tourne (par exemple si WeeChat semble bloqué), vous
pouvez utiliser gdb avec l'identifiant du processus (remplacez _12345_ par le
PID du processus weechat) :
[source,shell]
----
gdb /usr/bin/weechat 12345
----
Ensuite comme pour un crash, utilisez la commande `bt full` :
----
(gdb) bt full
----
[[running_weechat]]
== Lancement de WeeChat
Pour lancer WeeChat, tapez cette commande :
[source,shell]
----
weechat
----
Lorsque vous lancez WeeChat pour la première fois, les fichiers de configuration
par défaut sont créés dans _~/.config/weechat_ avec les options et valeurs par défaut
(voir <<files_and_directories,Fichiers et répertoires>>).
[[command_line_options]]
=== Options de ligne de commande
include::includes/cmdline_options.fr.adoc[tag=standard]
Quelques options supplémentaires sont disponibles pour du debug seulement :
[CAUTION]
N'utilisez *AUCUNE* de ces options in production !
include::includes/cmdline_options.fr.adoc[tag=debug]
[[environment_variables]]
=== Variables d'environnement
Des variables d'environnement sont utilisées par WeeChat si elles sont définies :
[width="100%",cols="1m,6",options="header"]
|===
| Nom | Description
| WEECHAT_HOME | Le répertoire "maison" de WeeChat (avec les fichiers de configuration, logs, scripts, etc.). Même comportement que <<build,l'option CMake>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | La phrase secrète utilisée pour déchiffrer les données sécurisées.
| WEECHAT_EXTRA_LIBDIR | Un répertoire supplémentaire pour charger les extensions (depuis le répertoire "plugins" sous ce chemin).
|===
[[colors_support]]
=== Support des Couleurs
WeeChat peut utiliser jusqu'à 32767 paires de couleur pour afficher le texte dans
les barres et la zone de discussion (votre terminal doit supporter 256 couleurs
pour pouvoir les utiliser dans WeeChat).
Selon la valeur de la variable d'environnement _TERM_, vous pouvez avoir les
limites suivantes pour les couleurs dans WeeChat :
[width="75%",cols="8,>3,>3",options="header"]
|===
| $TERM | Couleurs | Paires
| "rxvt-unicode", "xterm", ... | 88 | 32767
| "rxvt-256color", "xterm-256color", ... | 256 | 32767
| "screen" | 8 | 64
| "screen-256color" | 256 | 32767
| "tmux" | 8 | 64
| "tmux-256color" | 256 | 32767
|===
Vous pouvez lancer `weechat --colors` ou utiliser la commande `/color`
dans WeeChat pour afficher les limites de votre environnement.
Quelques valeurs recommandées pour _TERM_ si vous voulez 256 couleurs :
* sous screen : _screen-256color_
* sous tmux : _screen-256color_ ou _tmux-256color_
* en dehors de screen/tmux : _xterm-256color_, _rxvt-256color_,
_putty-256color_, ...
Si vous utilisez screen, vous pouvez ajouter cette ligne dans votre
_~/.screenrc_ :
[NOTE]
Vous devrez peut-être installer le paquet "ncurses-term" pour utiliser ces
valeurs dans la variable _TERM_.
----
term screen-256color
----
Si votre variable _TERM_ a une valeur erronée et que WeeChat est déjà lancé,
vous pouvez la changer avec ces deux commandes :
----
/set env TERM screen-256color
/upgrade
----
[[files_and_directories]]
=== Fichiers et répertoires
[[xdg_directories]]
==== XDG directories
WeeChat utilise les répertoires XDG par défaut (selon la
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[spécification "XDG Base Directory" ^↗^^]). +
Un répertoire de base unique pour tous les fichiers peut être forcé par
l'option CMake `WEECHAT_HOME`, la variable d'environnement `WEECHAT_HOME` ou
l'option de ligne de commande `-d` / `--dir`.
Lorsqu'un répertoire de base unique n'est pas forcé, les répertoires XDG sont
utilisés et déterminés ainsi :
[width="100%",cols="1,2m,5",options="header"]
|===
| Répertoire | Valeur par défaut | Valeur de repli si $XDG_XXX n'est pas définie
| config | $XDG_CONFIG_HOME/weechat | `$HOME/.config/weechat`
| data | $XDG_DATA_HOME/weechat | `$HOME/.local/share/weechat`
| cache | $XDG_CACHE_HOME/weechat | `$HOME/.cache/weechat`
| runtime | $XDG_RUNTIME_DIR/weechat | Identique au répertoire _cache_
|===
Les fichiers de configuration sont créés avec les valeurs par défaut la première
fois que vous lancez WeeChat.
[[weechat_directories]]
==== Répertoires de WeeChat
Les répertoires de WeeChat sont :
[width="100%",cols="1m,3",options="header"]
|===
| Chemin ^(1)^ | Description
| ~/.config/weechat/ | Fichiers de configuration WeeChat : `*.conf`, certificats, etc.
| ~/.local/share/weechat/ | Fichiers de données WeeChat : logs, scripts, données des scripts, fichiers xfer, etc.
| logs/ | Fichiers de log (un fichier par tampon).
| python/ | Scripts Python.
| autoload/ | Scripts Python chargés automatiquement au démarrage ^(2)^.
| perl/ | Scripts Perl.
| autoload/ | Scripts Perl chargés automatiquement au démarrage ^(2)^.
| ruby/ | Scripts Ruby.
| autoload/ | Scripts Ruby chargés automatiquement au démarrage ^(2)^.
| lua/ | Scripts Lua.
| autoload/ | Scripts Lua chargés automatiquement au démarrage ^(2)^.
| tcl/ | Scripts Tcl.
| autoload/ | Scripts Tcl chargés automatiquement au démarrage ^(2)^.
| guile/ | Scripts Guile.
| autoload/ | Scripts Guile chargés automatiquement au démarrage ^(2)^.
| javascript/ | Scripts JavaScript.
| autoload/ | Scripts JavaScript chargés automatiquement au démarrage ^(2)^.
| php/ | Scripts PHP.
| autoload/ | Scripts PHP chargés automatiquement au démarrage ^(2)^.
| ~/.cache/weechat/ | Fichiers de cache WeeChat : cache des scripts.
| /run/user/1000/weechat/ | Fichiers "runtime" WeeChat : tube FIFO, sockets UNIX Relay.
|===
[NOTE]
^(1)^ Les répertoires XDG peuvent être différents selon vos variables
d'environnement `XDG_*`. +
^(2)^ Ce répertoire contient souvent seulement des liens symboliques vers les
scripts dans le répertoire parent.
[[weechat_files]]
==== Fichiers de WeeChat
Les fichiers dans le répertoire principal de WeeChat sont :
[width="100%",cols="1m,3,6",options="header"]
|===
| Fichier | Description | Données sensibles
| weechat.conf | Fichier de configuration principal de WeeChat | Possible (par exemple : liste des canaux sauvés dans la disposition des tampons).
| sec.conf | Fichier de configuration avec les données sécurisées | *Oui, très sensibles* : ce fichier ne doit jamais être partagé avec quiconque.
| plugins.conf | Fichier de configuration des extensions | Possible, cela dépend des extensions/scripts.
| alias.conf | Fichier de configuration de l'extension _alias_ | Possible, cela dépend des alias.
| buflist.conf | Fichier de configuration de l'extension _buflist_ | Non.
| charset.conf | Fichier de configuration de l'extension _charset_ | Non.
| exec.conf | Fichier de configuration de l'extension _exec_ | Non.
| fifo.conf | Fichier de configuration de l'extension _fifo_ | Non.
| fset.conf | Fichier de configuration de l'extension _fset_ | Non.
| guile.conf | Fichier de configuration de l'extension _guile_ | Non.
| irc.conf | Fichier de configuration de l'extension _irc_ | *Oui* : il peut contenir des mots de passes pour les serveurs, nickserv et les canaux (si non stockés dans `sec.conf`).
| javascript.conf | Fichier de configuration de l'extension _javascript_ | Non.
| logger.conf | Fichier de configuration de l'extension _logger_ | Non.
| lua.conf | Fichier de configuration de l'extension _lua_ | Non.
| perl.conf | Fichier de configuration de l'extension _perl_ | Non.
| php.conf | Fichier de configuration de l'extension _php_ | Non.
| python.conf | Fichier de configuration de l'extension _python_ | Non.
| relay.conf | Fichier de configuration de l'extension _relay_ | *Oui* : il peut contenir le mot de passe relay et le secret TOTP (si non stockés dans `sec.conf`), les adresses IP/origines websocket autorisées et les ports ouverts.
| ruby.conf | Fichier de configuration de l'extension _ruby_ | Non.
| script.conf | Fichier de configuration de l'extension _script_ | Non.
| tcl.conf | Fichier de configuration de l'extension _tcl_ | Non.
| spell.conf | Fichier de configuration de l'extension _spell_ | Non.
| trigger.conf | Fichier de configuration de l'extension _trigger_ | Possible, cela dépend des triggers.
| typing.conf | Fichier de configuration de l'extension _typing_ | Non.
| xfer.conf | Fichier de configuration de l'extension _xfer_ | Non.
| weechat.log | Fichier de log WeeChat | Non.
|===
[IMPORTANT]
Il n'est *pas recommandé* de modifier les fichiers de configuration à la main
car WeeChat peut les écrire à tout moment (par exemple sur
<<command_weechat_quit,/quit>>) et après chaque changement vous devez lancer la
commande <<command_weechat_reload,/reload>> (avec le risque de perdre d'autres
changements qui n'auraient pas été sauvés avec <<command_weechat_save,/save>>). +
Vous pouvez utiliser la commande <<command_weechat_set,/set>>, qui vérifie la
valeur et applique les changements immédiatement.
[[upgrade]]
== Mise à jour
Si une nouvelle version stable de WeeChat est disponible, il est temps pour vous
de passer à cette version.
Avant toute chose, vous devez installer la nouvelle version de WeeChat, soit
via votre gestionnaire de paquets ou en le compilant vous-même, de telle sorte
que le nouveau binaire `weechat` et tous les fichiers requis sont dans les mêmes
répertoires. +
Cela peut être fait pendant que WeeChat tourne.
[[upgrade_command]]
=== Commande de mise à jour
WeeChat peut redémarrer le nouveau binaire avec la commande
<<command_weechat_upgrade,/upgrade>> : le contenu des tampons et les connexions
non TLS sont préservées. +
Les connexions TLS sont perdues pendant la mise à jour et sont automatiquement
rétablies après la mise à jour (le rechargement des sessions TLS n'est pas
possible actuellement avec GnuTLS).
La commande peut aussi être utilisée si vous devez redémarrer la machine, par
exemple pour mettre à jour le noyau ou déplacer WeeChat vers une autre machine :
----
/upgrade -quit
----
Cela sauvegarde l'état actuel dans des fichiers `*.upgrade`. Vous pouvez soit
rebooter ou déplacer les répertoires WeeChat (config, data, cache) vers une
autre machine, et redémarrer WeeChat plus tard avec cette commande :
[source,shell]
----
weechat --upgrade
----
[[restart_after_upgrade]]
=== Redémarrage après mise à jour
[[restart_upgrading_notes]]
==== Notes de mise à jour
Après une mise à jour, il est *fortement recommandé* de lire le fichier
https://github.com/weechat/weechat/blob/main/UPGRADING.md[UPGRADING.md ^↗^^]
qui contient des informations importantes sur les changements majeurs et
quelques actions manuelles qui pourraient être nécessaires.
Vous devez lire les versions entre votre version ancienne (exclue)
et votre nouvelle version (incluse). +
Par exemple si vous passez de la version 4.0.0 à 4.3.0, vous devez lire les
versions 4.0.1 à 4.3.0.
[[restart_configuration_upgrade]]
==== Mise à jour de la configuration
WeeChat a un système de mise à jour automatique des fichiers de configuration
(`*.conf`) :
* les nouvelles options sont silencieusement ajoutées avec la valeur par défaut
* les options obsolètes sont automatiquement supprimées et WeeChat affiche un
avertissement avec la valeur lue dans le fichier.
Exemple d'avertissement lorsqu'une option a été supprimée :
----
=!= Attention : /home/user/.config/weechat/sec.conf, ligne 15 : option inconnue pour la section "crypt" : passphrase_file = ""
----
Cela signifie que l'option `sec.crypt.passphrase_file` a été supprimée, et vous
aviez la valeur définie à une chaîne vide, ce qui était la valeur par défaut
dans la version précédente (dans ce cas aucune action manuelle n'est nécessaire).
[[interface]]
== Interface
[[screen_layout]]
=== Organisation de l'écran
Exemple de terminal avec WeeChat :
....
▼ barre "buflist" ▼ barre "title"
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Bienvenue sur #test, canal de test │
│ weechat│12:52:27 --> | Flashy (flashcode@weechat.org) a rejoint #test │@Flashy│
│2. #test│12:52:27 -- | Pseudos #test: [@Flashy @joe +weebot peter] │@joe │
│3. #abc │12:52:27 -- | Canal #test: 4 pseudos (2 ops, 1 voice, 1 normal) │+weebot│
│4. #def │12:52:27 -- | Canal créé le Tue Jan 27 06:30:17 2009 │peter │
│5. #ghi │12:54:15 peter | bonjour ! │ │
│ │12:55:01 @joe | salut │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │[12:55] [5] [irc/libera] 2:#test(+n){4}* M [H: 3:#abc(2,5), 5] │
│ │[@Flashy(i)] salut peter !█ │
└──────────────────────────────────────────────────────────────────────────────────────┘
▲ barres "status" et "input" barre "nicklist" ▲
....
Par défaut, l'écran est composé des zones suivantes :
* zone de discussion (milieu de l'écran) avec les lignes de discussion, et
pour chaque ligne :
** heure
** préfixe (avant "|")
** message (après "|")
* barres autour de la zone de discussion, les barres par défaut sont :
** barre _buflist_, sur la gauche
** barre _title_, au dessus de la zone de discussion
** barre _status_, sous la zone de discussion
** barre _input_, sous la barre de statut
** barre _nicklist_, sur la droite
La barre _buflist_ contient les objets (items) suivants par défaut :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| buflist | `1.weechat` | Liste des tampons.
|===
La barre _title_ contient les objets (items) suivants par défaut :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| buffer_title | `Bienvenue sur #test` | Titre du tampon.
|===
La barre _status_ contient les objets (items) suivants par défaut :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| time | `12:55` | Heure.
| buffer_last_number | `5` | Numéro du dernier tampon (peut être différent de `buffer_count` si l'option <<option_weechat.look.buffer_auto_renumber,weechat.look.buffer_auto_renumber>> est `off`).
| buffer_plugin | `irc/libera` | Extension du tampon courant (l'extension irc peut afficher le nom du serveur IRC auquel est rattaché ce tampon).
| buffer_number | `2` | Numéro du tampon courant.
| buffer_name | `#test` | Nom du tampon courant.
| buffer_modes | `+n` | Modes du canal IRC.
| buffer_nicklist_count | `4` | Nombre de pseudos affichés dans la liste des pseudos.
| buffer_zoom | ! | `!` signifie que le tampon mélangé est zoomé, une valeur vide signifie que tous les tampons mélangés sont affichés.
| buffer_filter | `+*+` | Indicateur de filtrage : `+*+` signifie que des lignes sont filtrées (cachées), une valeur vide signifie que toutes les lignes sont affichées.
| mouse_status | `M` | Statut de la souris (vide si la souris est désactivée), voir la commande <<command_weechat_mouse,/mouse>> et <<key_bindings_toggle_keys,Touches de bascule>>.
| scroll | `-PLUS(50)-` | Indicateur de scroll, avec le nombre de lignes sous la dernière ligne affichée.
| lag | `Lag: 2.5` | Indicateur de "lag" (ralentissements réseau), en secondes (caché si le lag est faible).
| hotlist | `H: 3:#abc(2,5), 5` | Liste des tampons où il y a de l'activité (messages non lus) (dans cet exemple, 2 highlights et 5 messages non lus sur _#abc_, un message non lu sur le tampon numéro 5).
| typing | `Écrit : bob, (alice)` | Notification de saisie, voir <<typing_notifications,Notifications de saisie>>.
| completion | `abc(2) def(5)` | Liste des mots pour la complétion, avec le nombre de complétions possibles pour chaque mot.
|===
La barre _input_ contient les objets (items) suivants par défaut :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| input_prompt | `@Flashy(i)` | Prompt, pour irc : pseudo et modes (le mode "+i" signifie invisible sur libera).
| away | `absent` | Indicateur d'absence.
| input_search | `Recherche lignes (~ str,msg)` | Indicateur de recherche de texte (voir ci-dessous).
| input_paste | `Coller 7 lignes ? [ctrl-y] Oui [ctrl-n] Non` | Question à l'utilisateur pour coller des lignes.
| input_text | `salut peter !` | Texte entré.
|===
Il y a deux modes de recherche :
* recherche dans les lignes, par exemple `[Recherche lignes (~ str,msg)]`,
avec les informations suivantes :
** `~` : insensible à la casse
** `==` : sensible à la casse
** `str` : recherche de chaîne
** `regex` : recherche d'expression régulière
** `msg` : recherche dans les messages
** `pre` : recherche dans les préfixes
** `pre\|msg` : recherche dans les préfixes et messages
* recherche dans l'historique de commandes, par exemple `[Recherche commande (~ str,local)]`,
avec les informations suivantes :
** `~` : insensible à la casse
** `==` : sensible à la casse
** `str` : recherche de chaîne
** `regex` : recherche d'expression régulière
** `local` : recherche dans l'historique local du tampon
** `global` : recherche dans l'historique global.
La barre _nicklist_ contient les objets (items) suivants par défaut :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| buffer_nicklist | `@Flashy` | Liste des pseudos sur le tampon courant.
|===
Autres objets (non utilisés dans des barres par défaut) :
[width="100%",cols="^3,^3,9",options="header"]
|===
| Objet (item) | Exemple | Description
| buffer_count | `5` | Nombre total de tampons ouverts.
| buffer_nicklist_count_all | `4` | Nombre de groupes et pseudos visibles dans la liste de pseudos.
| buffer_nicklist_count_groups | `0` | Nombre de groupes visibles dans la liste de pseudos.
| buffer_short_name | `#test` | Nom court du tampon courant.
| buflist2 | `1.weechat` | Liste des tampons, deuxième objet de barre (voir l'option <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist3 | `1.weechat` | Liste des tampons, troisième objet de barre (voir l'option <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist4 | `1.weechat` | Liste des tampons, quatrième objet de barre (voir l'option <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist5 | `1.weechat` | Liste des tampons, cinquième objet de barre (voir l'option <<option_buflist.look.use_items,buflist.look.use_items>>).
| fset | `+buflist.look.sort: …+` | Aide sur l'option sélectionnée dans le tampon fset.
| irc_channel | `#test` | Nom de canal IRC courant.
| irc_host | `+user@host.com+` | Hôte sur IRC.
| irc_nick | `+Flashy+` | Pseudo IRC.
| irc_nick_host | `+Flashy!user@host.com+` | Pseudo et hôte IRC.
| irc_nick_modes | `i` | Modes IRC pour le pseudo.
| irc_nick_prefix | `@` | Préfixe de pseudo IRC sur le canal.
| spacer | | Objet spécial utilisé pour aligner le texte dans les barres, voir <<item_spacer,Objet d'espacement>>.
| spell_dict | `fr,en` | Dictionnaires utilisés pour la vérification de l'orthographe sur le tampon courant.
| spell_suggest | `print,prone,prune` | Suggestions pour le mot sous le curseur (si mal orthographié).
| tls_version | `TLS1.3` | Version de TLS utilisée sur le serveur IRC courant.
| window_number | `2` | Numéro de la fenêtre courante.
|===
Chaque aspect de la disposition peut être configuré par la <<command_line,command>> appropriée :
<<command_weechat_bar,`/bar`>> pour configurer les barres,
<<command_weechat_buffer,/buffer>> et <<command_weechat_window,`/window`>>
pour configurer les <<buffers_and_windows,tampons et fenêtres>>,
et <<command_weechat_layout,/layout>> pour nommer, sauver et restaurer la disposition
de l'écran et l'association entre les fenêtres et les tampons.
[[command_line]]
=== Ligne de commande
La ligne de commande WeeChat (située en bas de la fenêtre) permet d'exécuter
des commandes ou d'envoyer du texte vers le tampon.
[[command_line_syntax]]
==== Syntaxe
Les commandes débutent par un caractère "/", suivi du nom de la
commande. Par exemple pour afficher la liste de toutes les options :
----
/set
----
Le texte envoyé à un tampon est tout texte ne commençant pas par le
caractère "/", par exemple pour envoyer _bonjour_ sur le tampon courant :
----
bonjour
----
Il est cependant possible de faire débuter un texte par "/" en le
doublant. Par exemple pour envoyer le texte `/set` sur le tampon courant :
----
//set
----
[[command_line_colors]]
==== Codes couleurs
Pour certaines extensions comme IRC, il est possible d'utiliser des codes
couleur et attributs comme suit (appuyer sur kbd:[Ctrl+c] puis sur la lettre qui
suit et éventuellement une valeur) :
[width="100%",cols="1,2",options="header"]
|===
| Touche | Description
| kbd:[Ctrl+c], kbd:[b] | Texte gras.
| kbd:[Ctrl+c], kbd:[c],
kbd:[xx] | Couleur du texte `xx` (voir la liste des couleurs ci-dessous).
| kbd:[Ctrl+c], kbd:[c],
kbd:[xx], kbd:[,],
kbd:[yy] | Couleur du texte `xx` et du fond `yy` (voir la liste des couleurs ci-dessous).
| kbd:[Ctrl+c], kbd:[d],
kbd:[xxxxxx] | Couleur du texte `xxxxxx` (RGB en hexadécimal, par exemple `FF0000` pour du rouge).
| kbd:[Ctrl+c], kbd:[d],
kbd:[xxxxxx], kbd:[,],
kbd:[yyyyyy] | Couleur du texte `xxxxxx` et du fond `yyyyyy` (RGB en hexadécimal).
| kbd:[Ctrl+c], kbd:[i] | Texte en italique.
| kbd:[Ctrl+c], kbd:[o] | Désactiver la couleur et tous les attributs.
| kbd:[Ctrl+c], kbd:[s] | Texte barré (affiché en demi-intensité dans l'interface ncurses car le texte barré n'est pas supporté).
| kbd:[Ctrl+c], kbd:[v] | Vidéo inverse (inversion de la couleur d'écriture et du fond).
| kbd:[Ctrl+c], kbd:[_] | Texte souligné.
|===
[NOTE]
Le même code (sans le numéro pour kbd:[Ctrl+c], kbd:[c] et kbd:[Ctrl+c], kbd:[d])
peut être utilisé pour stopper l'attribut défini.
Les codes couleur pour kbd:[Ctrl+c], kbd:[c] sont :
include::{autogendir}/autogen_user_irc_colors.fr.adoc[tag=irc_colors]
[NOTE]
Pour voir toutes les couleurs disponibles dans votre terminal, vous pouvez
taper `/color` puis kbd:[Alt+c] dans WeeChat ou lancez cette commande dans le
terminal : `weechat --colors`.
Exemple : affichage de "bonjour Alice !" avec "bonjour" en bleu clair
gras, et "Alice" en rouge clair souligné :
----
^Cc12^Cbbonjour ^Cb^Cc04^C_Alice^C_^Cc !
----
Touches :
kbd:[Ctrl+c] kbd:[c] kbd:[1] kbd:[2] kbd:[Ctrl+c] kbd:[b] +
kbd:[b] kbd:[o] kbd:[n] kbd:[j] kbd:[o] kbd:[u] kbd:[r] kbd:[Espace] +
kbd:[Ctrl+c] kbd:[b] kbd:[Ctrl+c] kbd:[c] kbd:[0] kbd:[4] kbd:[Ctrl+c] kbd:[pass:[_]] +
kbd:[A] kbd:[l] kbd:[i] kbd:[c] kbd:[e] +
kbd:[Ctrl+c] kbd:[pass:[_]] kbd:[Ctrl+c] kbd:[c] +
kbd:[Espace] kbd:[!]
[NOTE]
Dans l'extension irc, vous pouvez réassigner les couleurs en utilisant l'option
<<option_irc.color.mirc_remap,irc.color.mirc_remap>>.
[[buffers_and_windows]]
=== Tampons et fenêtres
Un tampon (_buffer_) est composé d'un numéro, un nom, des lignes affichées
(ainsi que d'autres données).
Exemples de tampons :
* tampon core (créé par WeeChat au démarrage, ne peut pas être fermé)
* serveur irc (affiche les messages du serveur)
* canal irc
* messages privés irc
Une fenêtre (_window_) est une zone de l'écran affichant un tampon. Il est
possible de découper l'écran horizontalement ou verticalement en plusieurs
fenêtres (exemples <<window_split_examples,ci-dessous>>, voir la commande
<<command_weechat_window,/window>> pour plus d'informations).
Chaque fenêtre affiche un tampon. Un tampon peut être caché (affiché par
aucune fenêtre) ou affiché par une ou plusieurs fenêtres.
Les dispositions d'écran et l'association entre les fenêtres et les tampons
peuvent être <<command_weechat_layout,sauvées et restaurées>>.
[[window_split_examples]]
==== Exemples
Exemple de découpage horizontal (`/window splith`) :
....
▼ fenêtre n°2 (tampon n°4)
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Bienvenue sur #def │
│ weechat│12:55:12 Max | bonjour │@Flashy│
│2. #test│12:55:20 @Flashy | salut Max ! │Max │
│3. #abc │ │ │
│4. #def │ │ │
│5. #ghi │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │[12:55] [5] [irc/libera] 4:#def(+n){2} │
│ │[@Flashy] │
│ │────────────────────────────────────────────────────────────────────────────│
│ │Bienvenue sur #abc │
│ │12:54:15 peter | ohé ! │@Flashy│
│ │12:55:01 @joe | salut │@joe │
│ │ │+weebot│
│ │ │peter │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │[12:55] [5] [irc/libera] 3:#abc(+n){4} │
│ │[@Flashy] salut peter !█ │
└──────────────────────────────────────────────────────────────────────────────────────┘
▲ fenêtre n°1 (tampon n°3)
....
Exemple de découpage vertical (`/window splitv`) :
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Bienvenue sur #abc │Bienvenue sur #def │
│ weechat│12:54:15 peter | ohé ! │@Flashy│12:55:12 Max | bonjour │@Flashy│
│2. #test│12:55:01 @joe | salut │@joe │12:55:20 @Flashy | salut Max │Max │
│3. #abc │ │+weebot│ │ │
│4. #def │ │peter │ │ │
│5. #ghi │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │[12:55] [5] [irc/libera] 3:#abc(+n) │[12:55] [5] [irc/libera] 4:#def(+n) │
│ │[@Flashy] salut peter !█ │[@Flashy] │
└──────────────────────────────────────────────────────────────────────────────────────┘
▲ fenêtre n°1 (tampon n°3) ▲ fenêtre n°2 (tampon n°4)
....
Exemple de découpage vertical + horizontal :
....
▼ fenêtre n°3 (tampon n°5)
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Bienvenue sur #abc │Bienvenue sur #ghi │
│ weechat│12:54:15 peter | ohé ! │@Flashy│12:55:42 @Flashy | salut │@Flashy│
│2. #test│12:55:01 @joe | salut │@joe │12:55:56 alex | salut │alex │
│3. #abc │ │+weebot│ │ │
│4. #def │ │peter │ │ │
│5. #ghi │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │[12:55] [5] [irc/libera] 5:#ghi(+n) │
│ │ │ │[@Flashy] │
│ │ │ │──────────────────────────────────────│
│ │ │ │Bienvenue sur #def │
│ │ │ │12:55:12 Max | bonjour │@Flashy│
│ │ │ │12:55:20 @Flashy | salut Max │Max │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │[12:55] [5] [irc/libera] 3:#abc(+n) │[12:55] [5] [irc/libera] 4:#def(+n) │
│ │[@Flashy] salut peter !█ │[@Flashy] │
└──────────────────────────────────────────────────────────────────────────────────────┘
▲ fenêtre n°1 (tampon n°3) ▲ fenêtre n°2 (tampon n°4)
....
[[bare_display]]
==== Affichage dépouillé
Un affichage spécial, appelé "dépouillé" (_bare display_) peut être utilisé pour
un clic facile sur les URLs longs et la sélection de texte (avec la souris).
L'affichage dépouillé a les caractéristiques suivantes :
* Il n'affiche que le contenu du tampon courant : pas de découpage de fenêtres
ni de barre (pas de titre, liste de pseudos, statut, ligne de commande, ...).
* Le support souris de WeeChat est désactivé (s'il avait été activé) : vous
pouvez utiliser votre souris comme vous le faites dans le terminal pour
cliquer sur les URLs et sélectionner du texte.
* Ncurses n'est pas utilisé, par conséquent les URLs ne sont pas coupés en fin
de ligne.
La touche par défaut pour activer l'affichage dépouillé est kbd:[Alt+l] (`L`),
et la même touche pour en sortir (ou par défaut tout changement dans la ligne de
commande sortira de l'affichage dépouillé, voir l'option
<<option_weechat.look.bare_display_exit_on_input,weechat.look.bare_display_exit_on_input>>).
Le format de l'heure peut être personnalisé avec l'option
<<option_weechat.look.bare_display_time_format,weechat.look.bare_display_time_format>>.
L'affichage dépouillé peut être activé pour un temps donné en utilisant la
commande <<command_weechat_window,/window>>.
Si WeeChat ressemble à ceci :
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Bienvenue sur #abc │
│ weechat│12:52:27 --> | Flashy (flashcode@weechat.org) a rejoint #abc │@Flashy│
│2. #test│12:52:27 -- | Pseudos #abc: [@Flashy @joe +weebot peter] │@joe │
│3. #abc │12:52:27 -- | Canal #abc: 4 pseudos (2 ops, 1 voice, 1 normal) │+weebot│
│4. #def │12:52:27 -- | Canal créé le Tue Jan 27 06:30:17 2009 │peter │
│5. #ghi │12:54:15 peter | bonjour ! │ │
│ │12:55:01 @joe | peter: hook_process: https://weechat.org/files/doc │ │
│ │ | /weechat/devel/weechat_plugin_api.en.html#_weechat │ │
│ │ | _hook_process │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │[12:55] [5] [irc/libera] 3:#abc(+n){4} │
│ │[@Flashy(i)] salut peter !█ │
└──────────────────────────────────────────────────────────────────────────────────────┘
....
L'écran ressemblera à ça en mode dépouillé :
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│12:52 --> Flashy (flashcode@weechat.org) a rejoint #abc │
│12:52 -- Pseudos #abc: [@Flashy @joe +weebot peter] │
│12:52 -- Canal #abc: 4 pseudos (2 ops, 1 voice, 1 normal) │
│12:52 -- Canal créé le Tue Jan 27 06:30:17 2009 │
│12:54 <peter> bonjour ! │
│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/weechat/devel/weechat_│
│plugin_api.en.html#_weechat_hook_process │
└──────────────────────────────────────────────────────────────────────────────────────┘
....
Donc vous pouvez cliquer l'URL de _joe_ sans problème dans votre terminal (bien
entendu cela suppose que votre terminal permet le clic sur les URLs).
[[buffers]]
=== Tampons
[[lines_format]]
==== Format des lignes
Les lignes affichées dans les tampons formatés ont les champs suivants :
[width="100%",cols="2,2,10",options="header"]
|===
| Champ | Affiché | Description
| date/heure (message) | Oui | Date/heure du message (peut être dans le passé).
| date/heure (print) | Non | Date/heure lorsque WeeChat affiche le message.
| préfixe | Oui | Préfixe du message, couramment un pseudo.
| message | Oui | Le message lui-même.
| affichée | Non | Booléen : vrai si la ligne est affichée, faux si la ligne est filtrée avec la commande <<command_weechat_filter,/filter>>.
| highlight | Non | Booléen : vrai si la ligne a un highlight, faux sinon.
| étiquettes | Avec `/debug tags` | Étiquettes associées avec la ligne (voir <<lines_tags,les étiquettes des lignes>>).
|===
L'affichage des lignes peut être personnalisé avec des nombreuses options de
présentation (_pass:[weechat.look.*]_) et de couleur (_pass:[weechat.color.chat_*]_).
[[lines_tags]]
==== Étiquettes des lignes
WeeChat utilise des étiquettes (« tags ») dans les lignes pour différentes raisons :
* highlight
* niveau de notification
* enregistrement (« log »)
* utilisation de la commande <<command_weechat_filter,/filter>>
Les étiquettes peuvent être affichées avec la commande `/debug tags`
(même commande pour les cacher).
Les étiquettes couramment utilisées (liste non exhaustive) :
[width="100%",cols="1m,4",options="header"]
|===
| Étiquette | Description
| no_filter | La ligne ne peut pas être filtrée.
| no_highlight | Aucun highlight n'est possible sur cette ligne.
| no_log | La ligne n'est pas écrite dans le fichier de log.
| log0 … log9 | Niveau de log pour la ligne (voir la commande <<command_logger_logger,/logger>>).
| notify_none | La ligne ne doit pas être ajoutée à la "hotlist". ^(1)^
| notify_message | La ligne est un message utilisateur. ^(1)^
| notify_private | La ligne est un message privé. ^(1)^
| notify_highlight | La ligne est un message avec un highlight. ^(1)^
| self_msg | Message de soi-même.
| nick_xxx | Le message vient du pseudo "xxx".
| prefix_nick_ccc | Le préfixe est un pseudo avec la couleur "ccc".
| host_xxx | Nom d'utilisateur et hôte dans le message.
| irc_xxx | Message IRC "xxx" (peut-être une commande ou un numérique sur 3 chiffres).
| irc_numeric | Message IRC numérique.
| irc_error | Erreur du serveur IRC.
| irc_action | Action d'un pseudo (commande `/me`).
| irc_ctcp | Message CTCP.
| irc_ctcp_reply | Réponse à un message CTCP.
| irc_smart_filter | Message IRC qui peut être filtré avec le "smart filter" (filtre intelligent).
| away_info | Message avec une info d'absence.
|===
[NOTE]
^(1)^ Lorsque aucune étiquette "notify_xxx" n'est présente, le niveau de
notification par défaut est "low". Si une étiquette "notify_xxx" est présente,
le niveau de notification réel peut être différent, par exemple si un niveau
maximum de hotlist est utilisé pour un pseudo, le niveau de notification peut
être inférieur à la valeur de l'étiquette.
[[local_variables]]
==== Variables locales
Des variables locales peuvent être définies dans les tampons.
Une variable locale a :
* un nom (chaîne)
* une valeur (chaîne, peut être vide).
Les variables locales peuvent être définies par WeeChat, les extensions, les
scripts, ou manuellement sur la ligne de commande, dans le tampon.
Par exemple pour ajouter la variable locale "completion_default_template" :
----
/buffer setvar completion_default_template %(my_completion)
----
Pour afficher les variables locales du tampon courant :
----
/buffer listvar
----
Pour supprimer la variable locale "completion_default_template" :
----
/buffer delvar completion_default_template
----
Par défaut WeeChat et ses extensions par défaut interprètent ces variables :
[width="100%",cols="2m,2,5",options="header"]
|===
| Nom | Valeur | Description
| away
| toute chaîne
| Message d'absence sur le serveur, défini par l'extension irc.
| channel
| toute chaîne
| Nom du canal, défini par les extensions irc/xfer et le tampon de debug des
extensions relay/trigger.
| charset_modifier
| toute chaîne
| Modificateur de charset du tampon serveur, défini par l'extension irc.
| completion_default_template
| toute chaîne
| Modèle de complétion par défaut pour le tampon, qui remplace l'option
`weechat.completion.default_template`.
| filter
| toute chaîne
| Filtre défini sur certains tampons comme `/fset`, `/list` (irc),
`/server raw` (irc) et `/script`.
| host
| toute chaîne
| Nom d'hôte personnel (si connu), défini par l'extension irc.
| lag
| toute chaîne
| Lag sur le serveur, défini par l'extension irc.
| name
| toute chaîne
| Nom du tampon (attention, ce n'est pas le nom complet du tampon et ce nom
n'est pas suffisant pour identifier ou chercher un tampon).
| nick
| toute chaîne
| Pseudo personnel, défini par les extensions irc et xfer.
| no_log
| `1` (or any non-empty string)
| Si défini, l'extension logger n'écrira pas le "log" du tampon sur disque.
| plugin
| toute chaîne
| Nom de l'extension qui a créé le tampon (`core` pour les tampons WeeChat).
| script_close_cb
| toute chaîne
| Nom de la fonction de rappel pour la fermeture,
défini par un script pour le tampon.
| script_close_cb_data
| toute chaîne
| Données pour la fonction de rappel pour la fermeture,
définies par un script pour le tampon.
| script_input_cb
| toute chaîne
| Nom de la fonction de rappel d'entrée,
défini par un script pour le tampon.
| script_input_cb_data
| toute chaîne
| Données pour la fonction de rappel d'entrée,
définies par un script pour le tampon.
| script_name
| toute chaîne
| Nom du script qui a créé le tampon.
| server
| toute chaîne
| Nom du serveur, défini par l'extension irc et le tampon de debug des extensions
relay/trigger.
| spell_suggest
| toute chaîne
| Mot mal orthographié et ses suggestions (format : "mot:suggestions"), défini
par l'extension spell.
| trigger_filter
| toute chaîne
| Filtre trigger, défini par l'extension trigger.
| type
| toute chaîne, par exemple :
`channel`,
`debug`,
`exec`,
`option`,
`private`,
`relay`,
`script`,
`server`,
`user`,
`xfer`
| Type de tampon, défini par WeeChat et plusieurs extensions.
|===
[NOTE]
Les extensions et script externes peuvent définir et utiliser d'autres
variables locales.
[[buflist]]
=== Liste des tampons
L'extension Buflist affiche une liste des tampons dans un objet de barre appelé
"buflist" (quatre autres objets de barre "buflist2", "buflist3", "buflist4" et
"buflist5" sont également disponibles). +
Une barre par défaut "buflist" est créée au démarrage avec cet objet de barre.
[[buflist_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=buflist_commands]
[[buflist_options]]
==== Options
Sections dans le fichier _buflist.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| format | /set buflist.format.* | Formats utilisés pour l'affichage de la liste des tampons.
| look | /set buflist.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=buflist_options]
[[cursor_mode]]
=== Mode curseur
Le mode curseur vous permet de déplacer librement le curseur partout sur l'écran,
dans la zone de discussion et les barres, et vous permet d'effectuer des actions
à la position donnée. +
Vous pouvez entrer dans le mode curseur avec la commande `/cursor` ou avec un
clic du milieu sur la souris (la souris doit avoir été activée avec la touche
kbd:[Alt+m] ou la commande `/mouse enable`).
L'utilisation typique est de citer des messages (zone de discussion) ou d'interagir
avec des pseudos (barre avec la liste de pseudos).
Voir la commande <<command_weechat_cursor,/cursor>> et
<<key_bindings_cursor_context,les touches du contexte curseur>> pour la liste
des actions que vous pouvez effectuer dans ce mode.
[[key_bindings]]
== Raccourcis clavier
WeeChat fournit beaucoup de raccourcis clavier par défaut, listés dans les chapitres
suivants. +
Ils peuvent être modifiés et de nouveaux peuvent être ajoutés avec la commande
<<command_weechat_key,/key>>.
[[key_bindings_cmdline]]
=== Ligne de commande
[[key_bindings_cmdline_cursor_movement]]
==== Mouvement du curseur
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[←] +
kbd:[Shift+←] +
kbd:[Ctrl+b] | Aller au caractère précédent sur la ligne de commande. | `+/input move_previous_char+`
| kbd:[→] +
kbd:[Shift+→] +
kbd:[Ctrl+f] | Aller au caractère suivant sur la ligne de commande. | `+/input move_next_char+`
| kbd:[Shift+↑] | Aller à la ligne précédente. | `+/input move_previous_line+`
| kbd:[Shift+↓] | Aller à la ligne suivante. | `+/input move_next_line+`
| kbd:[Ctrl+←] +
kbd:[Alt+b] | Aller au mot précédent sur la ligne de commande. | `+/input move_previous_word+`
| kbd:[Ctrl+→] +
kbd:[Alt+f] | Aller au mot suivant sur la ligne de commande. | `+/input move_next_word+`
| kbd:[Home] +
kbd:[Ctrl+a] | Aller au début de la ligne courante. | `+/input move_beginning_of_line+`
| kbd:[Shift+Home] | Aller au début de la ligne de commande. | `+/input move_beginning_of_input+`
| kbd:[End] +
kbd:[Ctrl+e] | Aller à la fin de la ligne courante. | `+/input move_end_of_line+`
| kbd:[Shift+End] | Aller à la fin de la ligne de commande. | `+/input move_end_of_input+`
|===
[[key_bindings_cmdline_editing]]
==== Édition
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Del] +
kbd:[Ctrl+d] | Effacer le caractère suivant sur la ligne de commande. | `+/input delete_next_char+`
| kbd:[Backspace] +
kbd:[Ctrl+h] | Effacer le caractère précédent sur la ligne de commande. | `+/input delete_previous_char+`
| kbd:[Ctrl+k] | Effacer du curseur jusqu'à la fin de la ligne courante (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_end_of_line+`
| kbd:[Alt+Ctrl+k] | Effacer du curseur jusqu'à la fin de la ligne de commande (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_end_of_input+`
| kbd:[Ctrl+t] | Inverser deux caractères. | `+/input transpose_chars+`
| kbd:[Ctrl+u] | Effacer du curseur jusqu'au début de la ligne courante (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_beginning_of_line+`
| kbd:[Alt+Ctrl+u] | Effacer du curseur jusqu'au début de la ligne de commande (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_beginning_of_input+`
| kbd:[Alt+Backspace] | Effacer le mot précédent sur la ligne de commande (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_previous_word+`
| kbd:[Ctrl+w] | Effacer le mot précédent sur la ligne de commande jusqu'à un espace (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_previous_word_whitespace+`
| kbd:[Ctrl+y] | Coller le contenu du presse-papiers interne. | `+/input clipboard_paste+`
| kbd:[Ctrl+_] | Défaire la dernière action sur la ligne de commande. | `+/input undo+`
| kbd:[Alt+_] | Refaire la dernière action sur la ligne de commande. | `+/input redo+`
| kbd:[Tab] | Compléter la commande ou le pseudo (kbd:[Tab] de nouveau : trouver la complétion suivante). | `+/input complete_next+`
| kbd:[Shift+Tab] | Sans complétion, effectue une complétion partielle. Avec une complétion en cours, complète avec la complétion précédente. | `+/input complete_previous+`
| kbd:[Enter] +
kbd:[Ctrl+j] +
kbd:[Ctrl+m] | Exécuter la commande ou envoyer le message (en mode recherche : arrêter la recherche). | `+/input return+`
| kbd:[Alt+Enter] | Insérer une nouvelle ligne. | `+/input insert \n+`
| kbd:[Alt+d] | Effacer le mot suivant (la chaîne supprimée est copiée dans le presse-papiers interne). | `+/input delete_next_word+`
| kbd:[Alt+k] | Capturer une touche et insérer son code (et la commande associée si la commande existe) sur la ligne de commande. | `+/input grab_key_command+`
| kbd:[Alt+r] | Effacer la ligne courante. | `+/input delete_line+`
| kbd:[Alt+R] | Effacer entièrement la ligne de commande. | `+/input delete_input+`
|===
[[key_bindings_cmdline_color_codes]]
==== Codes couleur
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+c], kbd:[b] | Insérer le code pour mettre le texte en gras. | `+/input insert \x02+`
| kbd:[Ctrl+c], kbd:[c] | Insérer le code pour écrire en couleur. | `+/input insert \x03+`
| kbd:[Ctrl+c], kbd:[d] | Insérer le code pour écrire en couleur (couleur RGB, en hexadécimal). | `+/input insert \x04+`
| kbd:[Ctrl+c], kbd:[i] | Insérer le code pour mettre le texte en italique. | `+/input insert \x1D+`
| kbd:[Ctrl+c], kbd:[o] | Insérer le code pour réinitialiser la couleur. | `+/input insert \x0F+`
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[s] | Insert code for strikethrough text. | `+/input insert \x1E+`
| kbd:[Ctrl+c], kbd:[v] | Insérer le code pour écrire en couleur inversée. | `+/input insert \x16+`
| kbd:[Ctrl+c], kbd:[_] | Insérer le code pour écrire en souligné. | `+/input insert \x1F+`
|===
[[key_bindings_cmdline_history]]
==== Historique de commandes
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[↑] | Rappeler la commande précédente (en mode recherche : chercher plus haut). | `+/input history_previous+`
| kbd:[↓] | Rappeler la commande suivante (en mode recherche : chercher plus bas). | `+/input history_next+`
| kbd:[Ctrl+↑] | Rappeler la commande précédente dans l'historique global (commun à tous les tampons). | `+/input history_global_previous+`
| kbd:[Ctrl+↓] | Rappeler la commande suivante dans l'historique global (commun à tous les tampons). | `+/input history_global_next+`
|===
[[key_bindings_cmdline_system]]
==== Système
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+z] | Suspendre le processus WeeChat. | `+/sys suspend+`
|===
[[key_bindings_buffers]]
=== Tampons
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+r] | Chercher du texte dans l'historique de commandes (voir <<key_bindings_histsearch_context,les touches pour le contexte "histsearch">>). | `+/input search_history+`
| kbd:[Ctrl+s] | Chercher du texte dans les lignes du tampon (voir <<key_bindings_search_context,les touches pour le contexte "search">>). | `+/input search_text_here+`
| kbd:[Ctrl+x] | Changer de tampon courant si plusieurs tampons sont mélangés avec le même numéro, par exemple basculer vers un autre tampon serveur IRC. | `+/buffer switch+`
| kbd:[Alt+x] | Zoomer sur le tampon mélangé (kbd:[Alt+x] de nouveau : afficher tous les tampons mélangés). | `+/buffer zoom+`
| kbd:[PgUp] | Monter d'une page dans l'historique du tampon. | `+/window page_up+`
| kbd:[PgDn] | Descendre d'une page dans l'historique du tampon. | `+/window page_down+`
| kbd:[Alt+PgUp] | Monter de quelques lignes dans l'historique du tampon. | `+/window scroll_up+`
| kbd:[Alt+PgDn] | Descendre de quelques lignes dans l'historique du tampon. | `+/window scroll_down+`
| kbd:[Alt+Home] | Aller au début du tampon. | `+/window scroll_top+`
| kbd:[Alt+End] | Aller à la fin du tampon. | `+/window scroll_bottom+`
| kbd:[Alt+←] +
kbd:[Alt+↑] +
kbd:[Ctrl+p] +
kbd:[F5] | Aller au tampon précédent. | `+/buffer -1+`
| kbd:[Alt+→] +
kbd:[Alt+↓] +
kbd:[Ctrl+n] +
kbd:[F6] | Aller au tampon suivant. | `+/buffer +1+`
| kbd:[Alt+j], kbd:[Alt+f] | Sauter au premier tampon. | `+/buffer -+`
| kbd:[Alt+j], kbd:[Alt+l] (`L`) | Sauter au dernier tampon. | `+/buffer ++`
| kbd:[Alt+j], kbd:[Alt+r] | Sauter au tampon IRC de données brutes. | `+/server raw+`
| kbd:[Alt+j], kbd:[Alt+s] | Sauter au tampon IRC du serveur. | `+/server jump+`
| kbd:[Alt+0...9] | Sauter au tampon qui porte ce numéro (0 = 10). | `+/buffer *N+`
| kbd:[Alt+j], kbd:[01...99] | Sauter au tampon qui porte ce numéro. | `+/buffer *NN+`
| kbd:[Alt+n] | Se positionner sur le highlight suivant. | `+/window scroll_next_highlight+`
| kbd:[Alt+p] | Se positionner sur le highlight précédent. | `+/window scroll_previous_highlight+`
| kbd:[Alt+u] | Se positionner sur la première ligne non lue du tampon. | `+/window scroll_unread+`
| kbd:[Alt+Shift+U] | Positionner le marqueur de données non lues sur tous les tampons. | `+/allbuf /buffer set unread+`
| kbd:[Alt+<] | Sauter au tampon précédent dans la liste des tampons visités. | `+/buffer jump prev_visited+`
| kbd:[Alt+>] | Sauter au tampon suivant dans la liste des tampons visités. | `+/buffer jump next_visited+`
| kbd:[Alt+/] | Sauter au dernier tampon affiché (avant le dernier saut vers un tampon). | `+/buffer jump last_displayed+`
|===
[[key_bindings_windows]]
=== Fenêtres
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+l] (`L`) | Réafficher toute la fenêtre. | `+/window refresh+`
| kbd:[Alt+l] (`L`) | Activer/désactiver le mode d'affichage dépouillé. | `+/window bare+`
| kbd:[F7] | Aller à la fenêtre précédente. | `+/window -1+`
| kbd:[F8] | Aller à la fenêtre suivante. | `+/window +1+`
| kbd:[Alt+w], kbd:[Alt+↑] | Sauter à la fenêtre au dessus. | `+/window up+`
| kbd:[Alt+w], kbd:[Alt+↓] | Sauter à la fenêtre en dessous. | `+/window down+`
| kbd:[Alt+w], kbd:[Alt+←] | Sauter à la fenêtre de gauche. | `+/window left+`
| kbd:[Alt+w], kbd:[Alt+→] | Sauter à la fenêtre de droite. | `+/window right+`
| kbd:[Alt+w], kbd:[Alt+b] | Équilibrer la taille de toutes les fenêtres. | `+/window balance+`
| kbd:[Alt+w], kbd:[Alt+s] | Échanger les tampons de deux fenêtres. | `+/window swap+`
| kbd:[Alt+z] | Zoomer sur la fenêtre courante (kbd:[Alt+z] de nouveau : restaurer l'état initial des fenêtres, avant le zoom). | `+/window zoom+`
|===
[[key_bindings_bars]]
=== Barres
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[F1] +
kbd:[Ctrl+F1] | Monter d'une page dans la liste des tampons. | `+/bar scroll buflist * -100%+`
| kbd:[F2] +
kbd:[Ctrl+F2] | Descendre d'une page dans la liste des tampons. | `+/bar scroll buflist * +100%+`
| kbd:[Alt+F1] | Aller au début de la liste des tampons. | `+/bar scroll buflist * b+`
| kbd:[Alt+F2] | Aller à la fin de la liste des tampons. | `+/bar scroll buflist * e+`
| kbd:[F9] | Faire défiler le titre du tampon vers la gauche. | `+/bar scroll title * -30%+`
| kbd:[F10] | Faire défiler le titre du tampon vers la droite. | `+/bar scroll title * +30%+`
| kbd:[F11] +
kbd:[Ctrl+F11] | Monter d'une page dans la liste des pseudos. | `+/bar scroll nicklist * -100%+`
| kbd:[F12] +
kbd:[Ctrl+F12] | Descendre d'une page dans la liste des pseudos. | `+/bar scroll nicklist * +100%+`
| kbd:[Alt+F11] | Aller au début de la liste des pseudos. | `+/bar scroll nicklist * b+`
| kbd:[Alt+F12] | Aller à la fin de la liste des pseudos. | `+/bar scroll nicklist * e+`
| kbd:[Alt+Shift+B] | Activer/désactiver buflist. | `+/buflist toggle+`
| kbd:[Alt+Shift+N] | Activer/désactiver la barre nicklist. | `+/bar toggle nicklist+`
|===
[[key_bindings_hotlist]]
=== Hotlist
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Alt+a] | Sauter au prochain tampon avec activité (avec priorité : highlight, message, autre). | `+/buffer jump smart+`
| kbd:[Alt+h], kbd:[Alt+c] | Vider la hotlist (notification d'activité sur les tampons). | `+/hotlist clear+`
| kbd:[Alt+h], kbd:[Alt+m] | Supprimer le tampon courant de la hotlist. | `+/hotlist remove+`
| kbd:[Alt+h], kbd:[Alt+r] | Restaurer la dernière hotlist supprimée dans le tampon courant. | `+/hotlist restore+`
| kbd:[Alt+h], kbd:[Alt+Shift+R] | Restaurer la dernière hotlist supprimée dans tous les tampons. | `+/hotlist restore -all+`
|===
[[key_bindings_toggle_keys]]
=== Touches de bascule
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Alt+m] | Activer/désactiver la souris. | `+/mouse toggle+`
| kbd:[Alt+s] | Activer/désactiver la vérification de l'orthographe. | `+/mute spell toggle+`
| kbd:[Alt+=] | Activer/désactiver les filtres. | `+/filter toggle+`
| kbd:[Alt+-] | Activer/désactiver les filtres dans le tampon courant. | `+/filter toggle @+`
| kbd:[Alt+Ctrl+l] (`L`) | Basculer entre les commandes distantes et locales sur un tampon distant (relay "api"). | `+/remote togglecmd+`
|===
[[key_bindings_search_context]]
=== Contexte de recherche
Ces touches sont utilisées dans le contexte "search" (lorsque kbd:[Ctrl+s] est
pressé pour chercher du texte dans les lignes du tampon).
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+x] | Basculer le type de recherche : chaîne (par défaut), expression régulière. | `+/input search_switch_regex+`
| kbd:[Alt+c] | Basculer la casse exacte pour la recherche. | `+/input search_switch_case+`
| kbd:[Tab] | Basculer la recherche dans : les messages (par défaut), les préfixes, les préfixes + messages. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
kbd:[↑] | Chercher la ligne précédente. | `+/input search_previous+`
| kbd:[Ctrl+s] +
kbd:[↓] | Chercher la ligne suivante. | `+/input search_next+`
| kbd:[Enter] +
kbd:[Ctrl+j] +
kbd:[Ctrl+m] | Arrêter la recherche à la position courante. | `+/input search_stop_here+`
| kbd:[Ctrl+q] | Arrêter la recherche et réinitialiser le défilement à l'état antérieur à la recherche de texte. | `+/input search_stop+`
|===
[[key_bindings_histsearch_context]]
=== Contexte de recherche dans l'historique
Ces touches sont utilisées dans le contexte "histsearch" (lorsque kbd:[Ctrl+r]
est pressé pour chercher du texte dans l'historique des commandes).
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Touche | Description | Commande
| kbd:[Ctrl+x] | Basculer le type de recherche : chaîne (par défaut), expression régulière. | `+/input search_switch_regex+`
| kbd:[Alt+c] | Basculer la casse exacte pour la recherche. | `+/input search_switch_case+`
| kbd:[Tab] | Basculer la recherche dans : l'historique local du tampon (par défaut), l'historique global. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
kbd:[↑] | Chercher dans les entrées précédentes (plus anciennes) de l'historique. | `+/input search_previous+`
| kbd:[Ctrl+s] +
kbd:[↓] | Chercher dans les entrées suivantes (plus récentes) de l'historique. | `+/input search_next+`
| kbd:[Enter] +
kbd:[Ctrl+j] +
kbd:[Ctrl+m] | Arrêter la recherche et utiliser la commande trouvée. | `+/input search_stop_here+`
| kbd:[Ctrl+o] | Exécuter la commande trouvée dans l'historique et insérer la suivante sur la ligne de commande. | `+/input history_use_get_next+`
| kbd:[Ctrl+q] | Arrêter la recherche et restaurer la ligne de commande à sa valeur initiale. | `+/input search_stop+`
|===
[[key_bindings_cursor_context]]
=== Contexte curseur
Ces touches sont utilisées dans le contexte "cursor" (mouvement libre du curseur
à l'écran), voir le <<cursor_mode,Mode curseur>>.
[width="100%",cols="^.^3,^.^2,.^7,.^7",options="header"]
|===
| Touche | Zone | Description | Commande
| kbd:[↑] | - | Déplacer le curseur d'une ligne vers le haut. | `+/cursor move up+`
| kbd:[↓] | - | Déplacer le curseur d'une ligne vers le bas. | `+/cursor move down+`
| kbd:[←] | - | Déplacer le curseur d'une colonne vers la gauche. | `+/cursor move left+`
| kbd:[→] | - | Déplacer le curseur d'une colonne vers la droite. | `+/cursor move right+`
| kbd:[Alt+↑] | - | Déplacer le curseur vers la première ligne de la zone. | `+/cursor move edge_top+`
| kbd:[Alt+↓] | - | Déplacer le curseur vers la dernière ligne de la zone. | `+/cursor move edge_bottom+`
| kbd:[Alt+←] | - | Déplacer le curseur vers la première colonne de la zone. | `+/cursor move edge_left+`
| kbd:[Alt+→] | - | Déplacer le curseur vers la dernière colonne de la zone. | `+/cursor move edge_right+`
| kbd:[Alt+Home] | - | Déplacer le curseur vers le coin supérieur gauche de la zone. | `+/cursor move top_left+`
| kbd:[Alt+End] | - | Déplacer le curseur vers la coin inférieur droit de la zone. | `+/cursor move bottom_right+`
| kbd:[Alt+Shift+↑] | - | Déplacer le curseur vers la zone au dessus. | `+/cursor move area_up+`
| kbd:[Alt+Shift+↓] | - | Déplacer le curseur vers la zone en dessous. | `+/cursor move area_down+`
| kbd:[Alt+Shift+←] | - | Déplacer le curseur vers la zone sur la gauche. | `+/cursor move area_left+`
| kbd:[Alt+Shift+→] | - | Déplacer le curseur vers la zone sur la droite. | `+/cursor move area_right+`
| kbd:[m] | chat | Citer le message. | `+hsignal:chat_quote_message;/cursor stop+`
| kbd:[l] | chat | Citer la ligne ciblée. | `+hsignal:chat_quote_focused_line;/cursor stop+`
| kbd:[q] | chat | Citer le préfixe + le message. | `+hsignal:chat_quote_prefix_message;/cursor stop+`
| kbd:[Q] | chat | Citer l'heure + le préfixe + le message. | `+hsignal:chat_quote_time_prefix_message;/cursor stop+`
| kbd:[b] | liste des pseudos | Bannir le pseudo. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[k] | liste des pseudos | Retirer par la force le pseudo. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[K] | liste des pseudos | Retirer par la force et bannir le pseudo. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[q] | liste des pseudos | Ouvrir une discussion avec le pseudo. | `+/window ${_window_number};/query ${nick};/cursor stop+`
| kbd:[w] | liste des pseudos | Effectuer un whois sur le pseudo. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[Enter] +
kbd:[Ctrl+j] +
kbd:[Ctrl+m] | - | Arrêter le mode curseur ("cursor"). | `+/cursor stop+`
|===
[[key_bindings_mouse]]
=== Souris
Ces actions avec la souris sont possibles seulement si la souris est activée
avec la touche kbd:[Alt+m] (commande : `+/mouse toggle+`).
[width="100%",cols="^.^3,^.^3,^.^3,.^8,.^8",options="header"]
|===
| Bouton/Roulette ^(1)^ | Geste | Zone | Description | Commande
| kbd:[■ □ □] | - | chat | Aller à la fenêtre. | `+/window ${_window_number}+`
| kbd:[■ □ □] | gauche | chat | Aller au tampon précédent. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □] | droit | chat | Aller au tampon suivant. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □] | gauche (long) | chat | Aller au premier tampon. | `+/window ${_window_number};/buffer 1+`
| kbd:[■ □ □] | droit (long) | chat | Aller au dernier tampon. | `+/window ${_window_number};/buffer ++`
| kbd:[▲] | - | chat | Monter de quelques lignes dans l'historique du tampon. | `+/window scroll_up -window ${_window_number}+`
| kbd:[▼] | - | chat | Descendre de quelques lignes dans l'historique du tampon. | `+/window scroll_down -window ${_window_number}+`
| kbd:[Ctrl+▲] | - | chat | Faire défiler horizontalement vers la gauche. | `+/window scroll_horiz -window ${_window_number} -10%+`
| kbd:[Ctrl+▼] | - | chat | Faire défiler horizontalement vers la droite. | `+/window scroll_horiz -window ${_window_number} +10%+`
| kbd:[▲] | - | chat : tampon fset | Monter de cinq lignes dans le tampon fset. | `+/fset -up 5+`
| kbd:[▼] | - | chat : tampon fset | Descendre de cinq lignes dans le tampon fset. | `+/fset -down 5+`
| kbd:[■ □ □] | - | chat : tampon fset | Sélectionner la ligne dans le tampon fset. | `+/window ${_window_number};/fset -go ${fset_option_index}+`
| kbd:[□ □ ■] | - | chat : tampon fset | Basculer le booléen (on/off) ou éditer la valeur de l'option. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■] | gauche | chat : tampon fset | Décrémenter la valeur de l'entier/couleur/énuméré, définir/ajouter à la valeur pour les autres types. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■] | droit | chat : tampon fset | Incrémenter la valeur de l'entier/couleur/énuméré, définir/ajouter à la valeur pour les autres types. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■] | haut / bas | chat : tampon fset | Marquer/démarquer de multiples options. | `+hsignal:fset_mouse+`
| kbd:[▲] | - | chat : tampon /list | Monter de cinq lignes dans le tampon /list. | `+/list -up 5+`
| kbd:[▼] | - | chat : tampon /list | Descendre de cinq lignes dans le tampon /list. | `+/list -down 5+`
| kbd:[■ □ □] | - | chat : tampon /list | Sélectionner la ligne dans le tampon /list. | `+/window ${_window_number};/list -go ${_chat_line_y}+`
| kbd:[□ □ ■] | - | chat : tampon /list | Rejoindre le canal IRC sur la ligne sélectionnée. | `+hsignal:irc_list_mouse+`
| kbd:[▲] | - | chat : tampon script | Monter de 5 lignes dans le tampon script. | `+/script -up 5+`
| kbd:[▼] | - | chat : tampon script | Descendre de 5 lignes dans le tampon script. | `+/script -down 5+`
| kbd:[■ □ □] | - | chat : tampon script | Sélectionner la ligne dans le tampon script. | `+/script -go ${_chat_line_y}+`
| kbd:[□ □ ■] | - | chat : tampon script | Installer/supprimer un script. | `+/script -go ${_chat_line_y};/script installremove -q ${script_name_with_extension}+`
| kbd:[■ □ □] | haut / gauche | buflist | Déplacer le tampon vers un numéro inférieur. | Signal `+buflist_mouse+`.
| kbd:[■ □ □] | bas / droit | buflist | Déplacer le tampon vers un numéro supérieur. | Signal `+buflist_mouse+`.
| kbd:[■ □ □] | - | buflist | Aller au tampon (tampon précédent dans la liste des tampons visités si le tampon est le courant). | Signal `+buflist_mouse+`.
| kbd:[□ □ ■] | - | buflist | Aller au tampon suivant dans la liste des tampons visités si le tampon est le courant. | Signal `+buflist_mouse+`.
| kbd:[Ctrl+▲] | - | buflist | Aller au tampon précédent. | Signal `+buflist_mouse+`.
| kbd:[Ctrl+▼] | - | buflist | Aller au tampon suivant. | Signal `+buflist_mouse+`.
| kbd:[■ □ □] | haut | liste des pseudos | Monter d'une page dans la liste des pseudos. | `+/bar scroll nicklist ${_window_number} -100%+`
| kbd:[■ □ □] | bas | liste des pseudos | Descendre d'une page dans la liste des pseudos. | `+/bar scroll nicklist ${_window_number} +100%+`
| kbd:[■ □ □] | haut (long) | liste des pseudos | Aller au début de la liste des pseudos. | `+/bar scroll nicklist ${_window_number} b+`
| kbd:[■ □ □] | bas (long) | liste des pseudos | Aller à la fin de la liste des pseudos. | `+/bar scroll nicklist ${_window_number} e+`
| kbd:[■ □ □] | - | liste des pseudos | Ouvrir une discussion avec le pseudo. | `+/window ${_window_number};/query ${nick}+`
| kbd:[□ □ ■] | - | liste des pseudos | Effectuer un whois sur le pseudo. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[■ □ □] | gauche | liste des pseudos | Retirer par la force le pseudo. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[■ □ □] | gauche (long) | liste des pseudos | Retirer par la force et bannir le pseudo. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[□ □ ■] | gauche | liste des pseudos | Bannir le pseudo. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[□ □ ■] | - | ligne de commande | Capturer un évènement de la souris et insérer son code sur la ligne de commande. | `+/input grab_mouse_area+`
| kbd:[▲] | - | toute barre | Faire défiler la barre de -20%. | `+/bar scroll ${_bar_name} ${_window_number} -20%+`
| kbd:[▼] | - | toute barre | Faire défiler la barre de +20%. | `+/bar scroll ${_bar_name} ${_window_number} +20%+`
| kbd:[□ ■ □] | - | n'importe où | Démarrer le mode curseur ("cursor") à ce point. | `+/cursor go ${_x},${_y}+`
|===
[NOTE]
^(1)^ Boutons : +
kbd:[◼ □ □] : clic sur le bouton de gauche +
kbd:[□ ◼ □] : clic sur le bouton du milieu +
kbd:[□ □ ◼] : clic sur le bouton de droite +
Roulette : +
kbd:[▲] : roulette vers le haut +
kbd:[▼] : roulette vers le bas
[[key_bindings_fset_buffer]]
=== Tampon fset
Ces touches et actions sont utilisées sur le tampon fset
(voir <<fset,l'extension Fset>>).
[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Touche | Action ^(1)^ | Description | Commande
| kbd:[↑] | | Monter d'une ligne. | `+/fset -up+`
| kbd:[↓] | | Descendre d'une ligne. | `+/fset -down+`
| kbd:[PgUp] | | Monter d'une page. | `+/window page_up+`
| kbd:[PgDn] | | Descendre d'une page. | `+/window page_down+`
| kbd:[Alt+Home] | `pass:[<<]` | Aller à la première ligne. | `+/fset -go 0+`
| kbd:[Alt+End] | `pass:[>>]` | Aller à la dernière ligne. | `+/fset -go end+`
| kbd:[F11] | `pass:[<]` | Faire défiler horizontalement vers la gauche. | `+/fset -left+`
| kbd:[F12] | `pass:[>]` | Faire défiler horizontalement vers la droite. | `+/fset -right+`
| kbd:[Alt+Space] | `t` | Basculer la valeur booléenne. | `+/fset -toggle+`
| kbd:[Alt+-] | `-` | Soustraire 1 de la valeur de l'entier/couleur/énuméré, définir la valeur pour les autres types. | `+/fset -add -1+`
| kbd:[Alt++] | `+` | Ajouter 1 à la valeur de l'entier/couleur/énuméré, ajouter à la valeur pour les autres types. | `+/fset -add 1+`
| kbd:[Alt+f], kbd:[Alt+r] | `r` | Réinitialiser la valeur. | `+/fset -reset+`
| kbd:[Alt+f], kbd:[Alt+u] | `u` | Supprimer/réinitialiser la valeur. | `+/fset -unset+`
| kbd:[Alt+Enter] | `s` | Définir la valeur. | `+/fset -set+`
| kbd:[Alt+f], kbd:[Alt+n] | `n` | Définir une nouvelle valeur. | `+/fset -setnew+`
| kbd:[Alt+f], kbd:[Alt+a] | `a` | Ajouter à la valeur. | `+/fset -append+`
| kbd:[Alt+,] | `,` | Marquer/démarquer l'option. | `+/fset -mark 1+`
| kbd:[Shift+↑] | | Se déplacer d'une ligne vers le haut et marquer/démarquer l'option. | `+/fset -up; /fset -mark+`
| kbd:[Shift+↓] | | Marquer/démarquer l'option et se déplacer d'une ligne vers le bas. | `+/fset -mark; /fset -down+`
| | `m:xxx` | Marquer les options affichées qui correspondent au filtre "xxx" (tout filtre sur une option ou valeur est autorisé, voir la commande <<command_fset_fset,/fset>>). |
| | `u:xxx` | Démarquer les options affichées qui correspondent au filtre "xxx" (tout filtre sur une option ou valeur est autorisé, voir la commande <<command_fset_fset,/fset>>). |
| kbd:[Ctrl+l] (`L`) | | Rafraîchir les options et l'écran entier. | `+/fset -refresh+`
| | `$` | Rafraîchir les options (garder les options marquées). |
| | `$$` | Rafraîchir les options (démarquer toutes les options). |
| kbd:[Alt+p] | `p` | Activer/désactiver la description des options d'extensions (`pass:[plugins.desc.*]`). | `+/mute /set fset.look.show_plugins_desc toggle+`
| kbd:[Alt+v] | `v` | Activer/désactiver la barre d'aide. | `+/bar toggle fset+`
| | `s:x,y` | Trier les options par les champs x,y (voir l'option <<option_fset.look.sort,fset.look.sort>>). | `+/mute /set fset.look.sort x,y+`
| | `s:` | Réinitialiser le tri à sa valeur par défaut (voir l'option <<option_fset.look.sort,fset.look.sort>>). | `+/mute /unset fset.look.sort+`
| | `w:xxx` | Exporter les options dans le fichier "xxx". | `+/fset -export xxx+`
| | `w-:xxx` | Exporter les options dans le fichier "xxx" sans aide. | `+/fset -export -nohelp xxx+`
| | `w+:xxx` | Exporter les options dans le fichier "xxx" avec aide. | `+/fset -export -help xxx+`
| kbd:[Ctrl+x] | `x` | Basculer le format utilisé pour afficher les options. | `+/fset -format+`
| | `q` | Fermer le tampon fset. | `+/buffer close+`
|===
[NOTE]
^(1)^ L'action doit être tapée comme entrée dans la ligne de commande, suivie de kbd:[Enter].
[[key_bindings_irc_list_buffer]]
=== Tampon IRC /list
Ces touches et actions sont utilisées sur le tampon IRC /list
(voir la commande <<command_irc_list,/list>>).
[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Touche | Action ^(1)^ | Description | Commande
| kbd:[↑] | | Monter d'une ligne. | `+/list -up+`
| kbd:[↓] | | Descendre d'une ligne. | `+/list -down+`
| kbd:[PgUp] | | Monter d'une page. | `+/window page_up+`
| kbd:[PgDn] | | Descendre d'une page. | `+/window page_down+`
| kbd:[Alt+Home] | `pass:[<<]` | Aller à la première ligne. | `+/list -go 0+`
| kbd:[Alt+End] | `pass:[>>]` | Aller à la dernière ligne. | `+/list -go end+`
| kbd:[F11] | `pass:[<]` | Faire défiler horizontalement vers la gauche. | `+/list -left+`
| kbd:[F12] | `pass:[>]` | Faire défiler horizontalement vers la droite. | `+/list -right+`
| kbd:[Ctrl+j] | `j` | Rejoindre le canal IRC sur la ligne sélectionnée. | `+/list -join+`
| | `xxx` | Afficher seulement les canaux avec "xxx" dans le nom ou le titre (insensible à la casse). |
| | `n:xxx` | Afficher seulement les canaux avec "xxx" dans le nom (insensible à la casse). |
| | `t:xxx` | Afficher seulement les canaux avec "xxx" dans le titre (insensible à la casse). |
| | `u:n` | Afficher seulement les canaux avec au moins "n" utilisateurs. |
| | `u:>n` | Afficher seulement les canaux avec plus de "n" utilisateurs. |
| | `u:<n` | Afficher seulement les canaux avec moins de "n" utilisateurs. |
| | `c:xxx` | Afficher seulement les canaux qui correspondent à la condition évaluée "xxx", en utilisant les variables suivantes : name, name2, users, topic. |
| | `s:x,y` | Trier les canaux par les champs x,y (voir la commande <<command_irc_list,/list>>). |
| | `s:` | Réinitialiser le tri à sa valeur par défaut (voir la commande <<command_irc_list,/list>>). |
| | `$` | Rafraîchir la liste (relancer la commande <<command_irc_list,/list>>). |
| | `q` | Fermer le tampon. | `+/buffer close+`
|===
[NOTE]
^(1)^ L'action doit être tapée comme entrée dans la ligne de commande, suivie de kbd:[Enter].
[[key_bindings_script_buffer]]
=== Tampon script
Ces touches et actions sont utilisées sur le tampon script
(voir <<script_manager,le gestionnaire de scripts>>).
[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Touche | Action ^(1)^ | Description | Commande
| kbd:[↑] | | Monter d'une ligne. | `+/script -up+`
| kbd:[↓] | | Descendre d'une ligne. | `+/script -down+`
| kbd:[PgUp] | | Monter d'une page. | `+/window page_up+`
| kbd:[PgDn] | | Descendre d'une page. | `+/window page_down+`
| kbd:[Alt+i] | `i` | Installer le script. | `+/script install+`
| kbd:[Alt+r] | `r` | Supprimer le script. | `+/script remove+`
| kbd:[Alt+l] | `l` | Charger le script. | `+/script load+`
| kbd:[Alt+L] | `L` | Recharger le script. | `+/script reload+`
| kbd:[Alt+u] | `u` | Décharger le script. | `+/script unload+`
| kbd:[Alt+Shift+A] | `A` | Charger automatiquement le script. | `+/script toggleautoload+`
| kbd:[Alt+h] | `h` | Figer/défiger le script. | `+/script hold+`
| kbd:[Alt+v] | `v` | Voir le script. | `+/script show+`
| | `s:x,y` | Trier les scripts par les champs x,y (voir l'option <<option_script.look.sort,script.look.sort>>). |
| | `s:` | Reset sort to its default value (voir l'option <<option_script.look.sort,script.look.sort>>). |
| | `$` | Rafraîchir la liste. |
| | `q` | Fermer le tampon. | `+/buffer close+`
|===
[NOTE]
^(1)^ L'action doit être tapée comme entrée dans la ligne de commande, suivie de kbd:[Enter].
[[configuration]]
== Configuration
[[fset]]
=== Fset
L'extension Fset affiche une liste des options dans un tampon et aide à définir
les options de WeeChat et des extensions.
Exemple de tampon fset affichant les options commençant par `weechat.look` :
[subs="quotes"]
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│7/125 | Filtre : weechat.look.* | Tri : ~name | Touche(entrée) : alt+space>>│
│2.fset │weechat.look.bare_display_exit_on_input : sortir du mode d'affichage dépouil│
│ │lé ("bare") sur tout changement dans la ligne de commande [défaut : on] │
│ │----------------------------------------------------------------------------│
│ │ weechat.look.align_end_of_lines énuméré message │
│ │ weechat.look.align_multiline_words booléen on │
│ │ weechat.look.bar_more_down chaîne "++" │
│ │ weechat.look.bar_more_left chaîne "<<" │
│ │ weechat.look.bar_more_right chaîne ">>" │
│ │ weechat.look.bar_more_up chaîne "--" │
│ │## weechat.look.bare_display_exit_on_input booléen on ##│
│ │ weechat.look.bare_display_time_format chaîne "%H:%M" │
│ │ weechat.look.buffer_auto_renumber booléen on │
│ │ weechat.look.buffer_notify_default énuméré all │
│ │ weechat.look.buffer_position énuméré end │
│ │ weechat.look.buffer_search_case_sensitive booléen off │
│ │ weechat.look.buffer_search_force_default booléen off │
│ │ weechat.look.buffer_search_history énuméré local │
│ │ weechat.look.buffer_search_regex booléen off │
│ │ weechat.look.buffer_search_where énuméré prefix_message │
│ │ weechat.look.buffer_time_format chaîne "%H:%M:%S" │
│ │[12:55] [2] [fset] 2:fset │
│ │█ │
└──────────────────────────────────────────────────────────────────────────────────────┘
....
[[fset_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=fset_commands]
[[fset_options]]
==== Options
Sections dans le fichier _fset.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| color | /set fset.color.* | Couleurs.
| format | /set fset.format.* | Formats utilisés pour afficher la liste des options.
| look | /set fset.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=fset_options]
[[colors]]
=== Couleurs
[[colors_basic]]
==== Couleurs de base
Les couleurs de base dans WeeChat sont :
[width="75%",cols="1m,4",options="header"]
|===
| Nom | Couleur
| default | Couleur par défaut du terminal (transparent pour le fond)
| black | Noir
| darkgray | Gris foncé
| red | Rouge foncé
| lightred | Rouge clair
| green | Vert foncé
| lightgreen | Vert clair
| brown | Marron
| yellow | Jaune
| blue | Bleu foncé
| lightblue | Bleu clair
| magenta | Violet foncé
| lightmagenta | Violet clair
| cyan | Cyan foncé
| lightcyan | Cyan clair
| gray | Gris
| white | Blanc
|===
[[colors_extended]]
==== Couleurs étendues
WeeChat alloue dynamiquement les paires de couleurs quand elles sont utilisées
sur l'écran (pour afficher les tampons et les barres).
En plus des couleurs de base, vous pouvez utiliser un numéro de couleur entre 1
et la limite de votre terminal.
Utilisez la commande `/color` pour voir les couleurs et les limites. Avec la
touche kbd:[Alt+c], vous pouvez basculer temporairement vers les couleurs du
terminal pour choisir une couleur.
Par exemple si vous souhaitez afficher l'heure en orange dans le tampon,
faites :
----
/set weechat.color.chat_time 214
----
Ou si vous voulez un fond vert très foncé pour la barre de statut :
----
/set weechat.bar.status.color_bg 22
----
[[colors_aliases]]
==== Alias
Vous pouvez ajouter des alias de couleur avec la commande `/color alias` puis
utiliser cet alias dans n'importe quelle option de couleur.
Par exemple :
----
/color alias 214 orange
/set weechat.color.chat_delimiters orange
----
[[colors_attributes]]
==== Attributs
Il est possible d'utiliser des attributs pour les couleurs. Un ou plusieurs
attributs peuvent être ajoutés avant le nom ou le numéro de la couleur :
* `+%+` : clignotement
* `+.+` : "dim" (demi-intensité)
* `+*+` : texte gras
* `+!+` : mode vidéo inverse
* `+/+` : italique
* `+_+` : texte souligné
* `+|+` : garder les attributs : ne pas réinitialiser
clignotement/dim/gras/inverse/souligné lors du changement de couleur
Par exemple si vous voulez votre pseudo en blanc souligné, faites :
----
/set weechat.color.chat_nick_self _white
----
Ou si vous voulez l'heure dans la barre de statut en orange souligné avec gras :
----
/set weechat.color.status_time *_214
----
Pour utiliser un attribut avec la couleur par défaut du terminal (-1), vous
devez utiliser un nombre supérieur à la dernière couleur du terminal, par
exemple la couleur maximum de WeeChat : 99999.
Exemple de gras avec la couleur de texte du terminal :
----
/set weechat.color.status_time *99999
----
[[charset]]
=== Charset
L'extension Charset vous permet de décoder et encoder les données en utilisant
un jeu de caractères.
Il y a un jeu de caractère par défaut pour le décodage/encodage, et un
spécifique pour les tampons (ou groupes de tampons).
Cette extension est facultative, mais recommandée : si elle n'est pas chargée,
WeeChat pourra uniquement lire/écrire des données UTF-8.
L'extension Charset devrait être automatiquement chargée par WeeChat au
démarrage. Pour s'assurer que l'extension est bien chargée, essayez :
----
/charset
----
Si la commande n'est pas trouvée, alors chargez l'extension avec la commande :
----
/plugin load charset
----
Si l'extension n'est pas trouvée, alors vous devriez recompiler WeeChat avec
les extensions et le support de Charset.
Lorsque l'extension Charset démarre, elle affiche le jeu de caractères du
terminal et l'interne.
Le jeu de caractères du terminal dépend de votre locale, et l'interne est
UTF-8.
Par exemple :
....
charset : terminal : ISO-8859-15, interne : UTF-8
....
[[charset_set]]
==== Définir le jeu de caractère
Pour modifier les jeux de caractères de décodage et d'encodage
globaux, utilisez la commande `/set`.
Par exemple :
----
/set charset.default.decode ISO-8859-15
/set charset.default.encode ISO-8859-15
----
Si le jeu de caractères de décodage global n'est pas renseigné (par exemple
pendant le premier chargement de Charset), il sera renseigné automatiquement
avec le jeu de caractères du terminal (s'il est différent de UTF-8) ou par
défaut à _ISO-8859-1_.
La valeur d'encodage par défaut est vide, donc WeeChat envoie par défaut avec
le jeu de caractères interne (UTF-8).
Pour modifier le jeu de caractères d'un serveur IRC, utilisez la commande
`/charset` sur le tampon serveur.
Si vous donnez seulement le jeu de caractères, alors vous
modifiez en même temps les valeurs de décodage et d'encodage.
Par exemple :
----
/charset ISO-8859-15
----
Ce qui est équivalent à :
----
/charset decode ISO-8859-15
/charset encode ISO-8859-15
----
Pour modifier le jeu de caractères d'un canal IRC (ou d'une conversation
privée), utilisez la même commande que pour le serveur, mais sur le tampon du
canal (ou du privé).
Pour définir le jeu de caractères pour tous les canaux/privés d'un serveur IRC :
----
/set charset.encode.irc.libera ISO-8859-15
----
Pour voir tous les jeux de caractères utilisés, utilisez la commande suivante :
----
/set charset.*
----
[[charset_troubleshooting]]
==== En cas de problème
Pour tout problème avec les jeux de caractères, merci de consulter la
link:weechat_faq.fr.html#charset[FAQ WeeChat / Accents ^↗^^].
[[charset_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=charset_commands]
[[charset_options]]
==== Options
Sections dans le fichier _charset.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| default | /set charset.default.* | Jeu de caractère d'encodage/décodage par défaut.
| decode | <<command_charset_charset,/charset decode>> +
/set charset.decode.* | Jeu de caractère d'encodage par tampon (les options peuvent être ajoutées/supprimées dans la section).
| encode | <<command_charset_charset,/charset encode>> +
/set charset.encode.* | Jeu de caractère de décodage par tampon (les options peuvent être ajoutées/supprimées dans la section).
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=charset_options]
[[notify_levels]]
=== Niveaux de notification
[[setup_notify_levels]]
==== Configurer les niveaux de notification
Quatre niveaux sont possibles dans les messages affichés dans les tampons, du
moins important au plus important :
* _low_ : message avec faible importance (par exemple un join/part/quit irc)
* _message_ : message d'un utilisateur
* _private_ : message dans un tampon privé
* _highlight_ : message avec highlight
Chaque tampon a un niveau de notification, qui est utilisé pour décider quels
messages ajouteront le tampon dans la hotlist.
Le niveau de notification par défaut peut être défini avec l'option
<<option_weechat.look.buffer_notify_default,weechat.look.buffer_notify_default>>,
la valeur par défaut est _all_.
[width="75%",cols="2m,7",options="header"]
|===
| Niveau de notification | Niveau des messages ajoutés à la hotlist
| none | (aucun)
| highlight | highlight + private
| message | highlight + private + message
| all | highlight + private + message + low
|===
Le niveau de notification peut être défini pour un ensemble de tampons, par
exemple tous les tampons du serveur irc "libera" :
----
/set weechat.notify.irc.libera message
----
Définir le niveau de notification _highlight_ sur le canal "#weechat" seulement :
----
/set weechat.notify.irc.libera.#weechat highlight
----
Le niveau de notification pour un tampon peut aussi être défini avec la
commande `/buffer` :
----
/buffer notify highlight
----
[[max_hotlist_level_nicks]]
==== Niveau maximal de hotlist pour des pseudos
Il est possible de définir un niveau maximal de hotlist pour certains pseudos,
par tampon ou groupe de tampons (comme des serveurs IRC).
La propriété de tampon "hotlist_max_level_nicks" peut être définie avec une
liste de pseudos et pour chaque pseudo le niveau maximal de hotlist à déclencher,
les niveaux possibles sont :
* -1 : pas de changement dans la hotlist pour ce pseudo
* 0 : faible priorité (comme les messages join/part)
* 1 : message
* 2 : message privé
* 3 : highlight (en réalité inutile, car il s'agit déjà du niveau maximal par
défaut pour tous les messages)
Par exemple pour désactiver les « highlights » de "joe" et "mike" sur le tampon
courant :
----
/buffer setauto hotlist_max_level_nicks_add joe:2,mike:2
----
[[highlights]]
=== Highlights
[[highlights_disable]]
==== Désactiver les highlights
Vous pouvez désactiver les highlights avec l'option
<<option_weechat.look.highlight_disable_regex,weechat.look.highlight_disable_regex>>
(expression régulière). +
Lorsqu'un highlight est désactivé avec cette option, les autres options de
highlight sont ignorées.
Par exemple pour désactiver tout highlight sur les messages avec un mot
commençant par "flash" entre chevrons :
----
/set weechat.look.highlight_disable_regex "<flash.*>"
----
Ceci peut aussi être défini avec la propriété de tampon "highlight_disable_regex".
Même exemple, spécifique au tampon courant :
----
/buffer setauto highlight_disable_regex <flash.*>
----
[[highlights_words]]
==== Ajouter des mots pour le « highlight »
Par défaut, WeeChat met en valeur les messages des autres utilisateurs qui
contiennent votre pseudo, par conséquent le highlight dépend du tampon
(le pseudo peut être différent d'un tampon à l'autre).
Vous pouvez ajouter d'autres mots à mettre en valeur avec l'option
<<option_weechat.look.highlight,weechat.look.highlight>>, par exemple pour mettre
en valeur votre pseudo, "mot1", "mot2" et tous les mots commençants par "test" :
----
/set weechat.look.highlight "mot1,mot2,test*"
----
Si vous avez besoin d'une règle plus spécifique pour un mot, vous pouvez utiliser
des expressions régulières avec l'option
<<option_weechat.look.highlight_regex,weechat.look.highlight_regex>>,
par exemple pour mettre en valeur les mots "flashcode", "flashcöde" et "flashy" :
----
/set weechat.look.highlight_regex "flashc[oö]de|flashy"
----
Les délimiteurs autour des mots à mettre en valeur peuvent être paramétrés avec
l'option <<option_weechat.look.word_chars_highlight,weechat.look.word_chars_highlight>>.
[[highlights_tags]]
==== Ajouter des étiquettes pour le « highlight »
Les lignes affichées contiennent des étiquettes (« tags »), qui donnent des
informations sur l'origine du message ou le message lui-même. +
Vous pouvez afficher les étiquettes avec la commande `/debug tags` (même commande
pour les cacher).
Vous pouvez ajouter des étiquettes à mettre en valeur avec l'option
<<option_weechat.look.highlight_tags,weechat.look.highlight_tags>>.
Les étiquettes sont séparées par des virgules, et plusieurs étiquettes peuvent
être séparées par `+++` pour faire un "et" logique entre elles.
Par exemple pour mettre en valeur tous les messages du pseudo "FlashCode" et
toutes les notices des pseudos commençant par "toto" :
----
/set weechat.look.highlight_tags "nick_flashcode,irc_notice+nick_toto*"
----
[[highlights_regex_buffer]]
==== Définir des highlights supplémentaires sur le tampon
Vous pouvez forcer le highlight en utilisant une expression regulière avec la
propriété de tampon "highlight_regex".
Par exemple pour forcer le highlight sur tous les messages dans le canal
courant :
----
/buffer setauto highlight_regex .*
----
[[buffer_logging]]
=== Enregistrement des tampons
L'extension Logger permet de sauvegarder le contenu des tampons dans des
fichiers, avec des options sur comment et quoi sauvegarder.
[[logger_log_levels]]
==== Niveaux d'enregistrement
L'enregistrement est fait selon un niveau pour chaque tampon. Le niveau par
défaut est 9 (enregistrer tous les messages affichés dans le tampon).
Vous pouvez changer ce niveau pour un tampon, ou un groupe de tampons.
Les niveaux possibles vont de 0 à 9. Zéro signifie "ne rien enregistrer" et 9
signifie "enregistrer tous les messages".
Les extensions utilisent différent niveaux pour les messages affichés.
L'extension IRC utilise les niveaux suivants :
* niveau 1 : message d'un utilisateur (sur un canal ou en privé)
* niveau 2 : changement de pseudo (vous ou quelqu'un d'autre)
* niveau 3 : tout message du serveur (sauf join/part/quit)
* niveau 4 : message join/part/quit du serveur
Donc si vous affectez le niveau 3 pour un canal IRC, WeeChat enregistrera
tous les messages sauf les join/part/quit.
Quelques exemples :
* Affecter le niveau 3 pour le canal IRC #weechat :
----
/set logger.level.irc.libera.#weechat 3
----
* Affecter le niveau 3 pour le tampon serveur libera :
----
/set logger.level.irc.server.libera 3
----
* Affecter le niveau 3 pour tous les canaux sur le serveur libera :
----
/set logger.level.irc.libera 3
----
* Affecter le niveau 2 pour tous les tampons IRC :
----
/set logger.level.irc 2
----
[[logger_filenames_masks]]
==== Masques de noms de fichiers
Il est possible de définir un masque de nom de fichier pour chaque tampon, et
d'utiliser les variables locales du tampon pour construire le nom de fichier.
Pour voir les variables disponibles sur le tampon courant :
----
/buffer listvar
----
Les masques seront utilisés par ordre de priorité descendante sur
`logger.mask.$plugin.*`, avec `logger.file.mask` comme option par défaut.
Par exemple, sur le tampon "irc.libera.#weechat", WeeChat cherchera un masque
avec le nom de l'option, dans cet ordre :
----
logger.mask.irc.libera.#weechat
logger.mask.irc.libera
logger.mask.irc
logger.file.mask
----
Cela signifie que vous pouvez avoir un masque spécifique pour certaines
serveurs IRC ("logger.mask.irc.libera") ou pour une extension
("logger.mask.irc").
[[logger_files_by_date]]
===== Fichiers de log par date
Pour avoir des fichiers de log par date, vous pouvez utiliser des marqueurs
dans le masque (voir `man strftime` pour le format), par exemple :
----
/set logger.file.mask "%Y/%m/$plugin.$name.weechatlog"
----
Vous obtiendrez les fichiers suivants :
....
~/.local/share/weechat
└── logs
├── 2010
│ ├── 11
│ │ ├── irc.server.libera.weechatlog
│ │ └── irc.libera.#weechat.weechatlog
│ └── 12
│ ├── irc.server.libera.weechatlog
│ └── irc.libera.#weechat.weechatlog
├── 2011
│ ├── 01
│ │ ├── irc.server.libera.weechatlog
│ │ └── irc.libera.#weechat.weechatlog
│ ├── 02
...
....
[[logger_irc_files_by_server_channel]]
===== Fichiers de log IRC par serveur et canal
Si vous voulez un répertoire par serveur IRC et un fichier par canal dedans :
----
/set logger.mask.irc "irc/$server/$channel.weechatlog"
----
Vous obtiendrez les fichiers suivants :
....
~/.local/share/weechat
└── logs
└── irc
├── libera
│ ├── libera.weechatlog
│ ├── #weechat.weechatlog
│ └── #moncanal.weechatlog
├── oftc
│ ├── oftc.weechatlog
│ ├── #canal1.weechatlog
│ └── #canal2.weechatlog
...
....
[[logger_rotation_compression]]
==== Rotation et compression
Il est possible de définir une taille maximale pour les fichiers de logs, et
lorsqu'elle est atteinte, il y a une rotation automatique du fichier de log.
Les fichiers de logs qui ont tourné peuvent être compressés avec gzip ou
https://facebook.github.io/zstd/[zstd ^↗^^].
[NOTE]
La compression du fichier pouvant prendre du temps, elle est exécutée en tâche
de fond.
Exemple avec une taille maximale de 2 Go et la compression avec gzip, en utilisant
un bon niveau de compression (plus lent que celui par défaut) :
----
/set logger.file.rotation_compression_type gzip
/set logger.file.rotation_compression_level 80
/set logger.file.rotation_size_max "2g"
----
Si vous voulez utiliser un nombre décimal, vous pouvez utiliser l'unité en
dessous et multiplier par 1000, par exemple pour une taille maximale de 2,5 Go :
----
/set logger.file.rotation_size_max "2500m"
----
Avec cette configuration, vous aurez des fichiers comme ceux-ci (dans cet exemple
il y a eu une rotation seulement pour le log du canal "#weechat"):
....
~/.local/share/weechat
└── logs
├── core.weechat.weechatlog
├── irc.server.libera.weechatlog
├── irc.libera.#weechat.weechatlog
├── irc.libera.#weechat.weechatlog.1.gz
├── irc.libera.#weechat.weechatlog.2.gz
└── irc.libera.#weechat.weechatlog.3.gz
....
[[logger_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=logger_commands]
[[logger_options]]
==== Options
Sections dans le fichier _logger.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set logger.look.* | Aspect/présentation.
| color | /set logger.color.* | Couleurs.
| file | /set logger.file.* | Options pour les fichiers de log.
| level | /set logger.level.* | Niveau de log par tampon (les options peuvent être ajoutées/supprimées dans la section).
| mask | /set logger.mask.* | Masque de nom de fichier par tampon (les options peuvent être ajoutées/supprimées dans la section).
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=logger_options]
[[mouse]]
=== Support souris
WeeChat supporte les clics et mouvements avec la souris. Cela fonctionne avec un
terminal local, et à distance via une connexion ssh, avec ou sans screen/tmux.
[[mouse_enable]]
==== Activer la souris
Pour activer la souris au démarrage :
----
/set weechat.look.mouse on
----
Pour activer la souris maintenant, appuyez sur kbd:[Alt+m] ou lancez la commande
suivante :
----
/mouse enable
----
Il est possible de désactiver temporairement la souris, et associer ça à une
touche. Par exemple la touche kbd:[Alt+%] pour désactiver la souris pendant 10
secondes :
----
/key bind meta-% /mouse toggle 10
----
[IMPORTANT]
Lorsque la souris est activée dans WeeChat, tous les évènements souris sont
capturés par WeeChat, donc les actions comme le copier/coller et les clics sur
les URLs ne sont pas envoyées au terminal. +
Utiliser la touche kbd:[Shift] permet d'envoyer directement les évènements au
terminal, comme si la souris était désactivée (sous certains terminaux comme
iTerm, vous devez utiliser kbd:[Alt] au lieu de kbd:[Shift]).
[NOTE]
Pour tout problème avec la souris, merci de consulter la
link:weechat_faq.fr.html#mouse[FAQ WeeChat / Souris ^↗^^].
[[mouse_bind_events]]
==== Associer des évènements souris à des commandes
De nombreux évènements souris sont déjà définis par WeeChat (voir
<<key_bindings_mouse,les actions souris>>).
Vous pouvez modifier ou ajouter des associations avec la commande `/key` en
utilisant le contexte "mouse" (pour la syntaxe voir la commande
<<command_weechat_key,/key>>).
Un nom d'évènement consiste en un modificateur (facultatif), un bouton/roulette
et un geste (facultatif). Les différents éléments sont séparés par `+-+`.
Liste des modificateurs (par ordre dans le nom de l'évènement) :
[width="100%",cols="1m,4",options="header"]
|===
| Modificateur | Description
| alt | Touche kbd:[Alt]
| ctrl | Touche kbd:[Ctrl]
| shift | Touche kbd:[Shift] ^(1)^
|===
[NOTE]
^(1)^ Le modificateur `shift` peut rarement être utilisé dans WeeChat car
beaucoup de terminaux utilisent ce modificateur pour attraper directement les
évènements souris.
Plusieurs modificateurs peuvent être combinés, par exemple :
* `alt-ctrl`
* `ctrl-shift`
* `alt-ctrl-shift`
Liste des boutons/roulette :
[width="100%",cols="1m,4",options="header"]
|===
| Bouton/roulette | Description
| button1 | Clic sur le bouton gauche
| button2 | Clic sur le bouton droit
| button3 | Clic sur le bouton du milieu (souvent clic sur la roulette)
| button4 ... button11 | Clic sur un bouton additionnel
| wheelup | Roulette (haut)
| wheeldown | Roulette (bas)
|===
Liste des gestes (seulement pour les boutons, pas la roulette) :
[width="100%",cols="1m,4",options="header"]
|===
| Geste | Distance
| gesture-up | 3 ... 19
| gesture-up-long | ≥ 20
| gesture-down | 3 ... 19
| gesture-down-long | ≥ 20
| gesture-left | 3 ... 39
| gesture-left-long | ≥ 40
| gesture-right | 3 ... 39
| gesture-right-long | ≥ 40
|===
Liste des évènements incomplets (seulement pour les boutons, pratique pour les
extensions/scripts) :
[width="100%",cols="1m,4",options="header"]
|===
| Évènement | Description
| event-down | Le bouton a été pressé mais pas encore relâché
| event-drag | La souris a bougé avec le bouton pressé
|===
Exemples d'évènements :
* `button1`
* `ctrl-button1`
* `button1-gesture-right`
* `button1-event-down`
* `button1-event-drag`
* `alt-button2-gesture-down-long`
* `wheelup`
* `alt-ctrl-wheeldown`
* ...
[TIP]
Lors de l'association d'une touche dans le contexte "mouse", il est possible
d'adresser plusieurs évènements en utilisant `+*+` au début ou la fin du nom,
par exemple `+button1-gesture-*+` qui correspond à n'importe quel geste
effectué avec le bouton gauche.
[TIP]
Vous pouvez trouver le nom de l'évènement avec la commande `+/input grab_mouse+`
puis en faisant l'action avec la souris. Cela insérera le nom de l'évènement
sur la ligne de commande.
[[spell_checking]]
=== Vérification orthographique
L'extension Spell permet de vérifier l'orthographe de la ligne de commande.
Il est possible d'utiliser plusieurs langages par tampon.
La vérification de l'orthographe est désactivée par défaut et peut être
activée/désactivée avec la touche kbd:[Alt+s].
[[spell_dictionaries]]
==== Dictionnaires
Avant d'utiliser la vérification de l'orthographe, les dictionnaires doivent
être définis soit globalement, soit spécifiquement sur un tampon.
Plusieurs dictionnaires peuvent être utilisés en même temps : WeeChat vérifiera
les mots dans tous les dictionnaires.
Par exemple pour utiliser l'anglais et le français :
----
/set spell.check.default_dict "en,fr"
----
Il est possible d'utiliser un dictionnaire différent sur un tampon spécifique,
par exemple sur un canal allemand :
----
/spell setdict de
----
Vous pouvez aussi spécifier un dictionnaire pour un groupe de tampons, par
exemple l'anglais pour tous les canaux du serveur IRC libera :
----
/set spell.dict.irc.libera en
----
Pour plus d'informations, voir la commande <<command_spell_spell,/spell>>.
[[spell_speller_options]]
==== Options du vérificateur d'orthographe
Les options du vérificateur d'orthographe peuvent être définies en ajoutant des
options dans la section "option" de la configuration aspell.
Le nom de l'option est une option de configuration aspell. La liste des options
peut être trouvée par la commande suivante sous le shell :
[source,shell]
----
aspell config
----
Par exemple, pour activer l'option "ignore-case" :
----
/set spell.option.ignore-case "true"
----
[[spell_suggestions]]
==== Suggestions
Les suggestions sont affichées dans un objet de barre appelé "spell_suggest".
Le nombre de suggestions est défini dans l'option _spell.check.suggestions_.
Pour activer les suggestions, vous devez modifier l'option
_spell.check.suggestions_ avec un entier ≥ 0 et ajouter l'objet de barre
"spell_suggest" à une barre, par exemple _status_.
Exemple de suggestions avec un dictionnaire anglais (`en`) :
....
│[12:55] [6] [irc/libera] 3:#test(+n){4} [print,prone,prune] │
│[@Flashy] prinr █ │
└─────────────────────────────────────────────────────────────────────────────────┘
....
Exemple de suggestions avec des dictionnaires anglais et français (`en,fr`) :
....
│[12:55] [6] [irc/libera] 3:#test(+n){4} [print,prone,prune/prime,primer,primé] │
│[@Flashy] prinr █ │
└─────────────────────────────────────────────────────────────────────────────────┘
....
[[spell_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=spell_commands]
[[spell_options]]
==== Options
Sections dans le fichier _spell.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| color | /set spell.color.* | Couleurs.
| check | /set spell.check.* | Options pour contrôler la vérification orthographique.
| dict | <<command_spell_spell,/spell setdict>> +
/set spell.dict.* | Dictionnaires utilisés par tampon (les options peuvent être ajoutées/supprimées dans la section).
| look | /set spell.look.* | Aspect/présentation.
| option | /set spell.option.* | <<spell_speller_options,Options du vérificateur d'orthographe>> (les options peuvent être ajoutées/supprimées dans la section).
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=spell_options]
[[bars]]
=== Barres
Une _barre_ est une zone à côté de la discussion qui peut contenir tout type de
texte.
Les options de barre sont définies avec les options `weechat.bar.nom.option` où
`nom` et le nom de la barre et `option` l'option pour cette barre.
Liste des options de barre :
[width="100%",cols="2m,2,10",options="header"]
|===
| Option | Valeurs | Description
| type | `root`, `window`
| Une barre avec le type `root` est affichée exactement une fois à l'écran, en
dehors de toutes les fenêtres. La barre par défaut _buflist_ est de type
`root`. +
Une barre avec le type `window` est affichée dans chaque fenêtre, par exemple
si vous découpez l'écran (avec `/window splith` ou `/window splitv`), vous
aurez une barre dans chaque fenêtre. Les barres par défaut _title_, _status_,
_input_ et _nicklist_ sont de type `window`.
| position | `top`, `bottom`, `left`, `right`
| Position de la barre : au dessus/en dessous de la discussion, sur la
gauche/droite.
| priority | entier ≥ 0
| Priorité de la barre : elle est utilisée pour ordonner les barres à l'écran,
quand plusieurs barres utilisent le même type et position. +
Les barres sont affichées depuis le bord de l'écran vers le centre. Une
priorité plus haute affichera la barre au début, donc près du bord. +
Exemple : la barre _input_ a une priorité de 1000, donc elle est affichée
avant la barre _status_, qui a une priorité de 500.
| size | entier ≥ 0
| La taille de la barre : nombre de colonnes pour une position left/right,
nombre de lignes pour une position top/bottom. Une taille de `0` signifie
automatique, donc la taille sera calculée en fonction du contenu affiché dans
la barre.
| size_max | entier ≥ 0
| La taille maximum pour la barre, `0` = pas de limite (cette option est
utilisée seulement si `size` = `0`).
| color_bg | couleur
| La couleur par défaut du fond de la barre.
| color_fg | couleur
| La couleur par défaut du texte dans la barre.
| color_delim | couleur
| La couleur des délimiteurs dans la barre.
| hidden | `on`, `off`
| Lorsque l'option est `on`, la barre est cachée. +
Note : plutôt que de changer cette option, il est préférable d'utiliser la
commande `/bar`, par exemple : `/bar toggle nicklist` (voir la commande
<<command_weechat_bar,/bar>>).
| separator | `on`, `off`
| Lorsque l'option est `on`, un séparateur (ligne) est affiché entre la barre et
les autres barres (ou la discussion).
| items | chaîne
| Une liste d'objets (voir <<bar_items,objets>> pour plus d'infos).
| filling_left_right | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Type de remplissage pour la barre lorsqu'elle a une position `left` ou
`right` (voir <<bar_filling,remplissage>> pour plus d'infos).
| filling_top_bottom | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Type de remplissage pour la barre lorsqu'elle a une position `top` ou `bottom`
(voir <<bar_filling,remplissage>> pour plus d'infos).
| conditions | chaîne
| Les conditions pour afficher la barre (voir <<bar_conditions,conditions>> pour
plus d'infos).
|===
[[bar_items]]
==== Objets
L'option _items_ est une chaîne avec une liste d'objets de barre, séparés par
une virgule (espace entre les objets à l'écran) ou un `+++` (objets collés).
La liste des objets de barre est affichée avec la commande `/bar listitems`.
Avant ou après l'objet de barre, vous pouvez utiliser des caractères (qui ne
sont pas alphanumériques, `+-+` ou `+_+`). Ils seront affichés avant/après
l'objet de barre avec la couleur des délimiteurs définie dans la barre (option
_color_delim_).
Exemple de barre avec les objets
"[time],buffer_number+:+buffer_plugin+.+buffer_name,[buffer_last_number]" :
....
┌───────────────────────────────────────────────────────────────────────────┐
│[12:55] 3:irc/libera.#weechat [9] │
└───────────────────────────────────────────────────────────────────────────┘
....
[[item_spacer]]
===== Objet d'espacement
Un objet appelé `spacer` peut être utilisé pour aligner les objets
(gauche, centre, droite).
Lorsqu'au moins un objet `spacer` est utilisé dans une barre, la largeur totale
de la barre est utilisée : les espacements sont automatiquement étendus avec la
même taille (ou presque). +
Lorsque la barre n'est pas assez large pour afficher tous les objets, les
espacements ne sont pas affichés.
[NOTE]
L'objet de barre `spacer` ne peut être utilisé que dans les barres avec position
`top` ou `bottom`, remplissage `horizontal` et taille `1`.
Exemple de barre avec les objets
"[time],spacer,buffer_number+:+buffer_plugin+.+buffer_name,spacer,[buffer_last_number]" :
....
┌───────────────────────────────────────────────────────────────────────────┐
│[12:55] 3:irc/libera.#weechat [9]│
└───────────────────────────────────────────────────────────────────────────┘
....
[[item_force_buffer]]
===== Tampon forcé
Une syntaxe spéciale peut être utilisée pour forcer le tampon utilisé lors de
l'affichage de l'objet de barre : "@tampon:objet" (où "tampon" est le nom
complet du tampon et "objet" est le nom d'un objet de barre).
Ceci peut être pratique dans les barres "root", pour afficher un objet de barre
pour un tampon qui n'est pas affiché dans la fenêtre courante (ou même pas
affiché du tout).
Exemple : liste de pseudos de bitlbee dans une barre "root" (si la barre
s'appelle _bitlist_ et si le serveur bitlbee s'appelle _bitlbee_) :
----
/set weechat.bar.bitlist.items "@irc.bitlbee.&bitlbee:buffer_nicklist"
----
[[custom_bar_items]]
===== Objets de barre personnalisés
Des objets de barre personnalisés peuvent être ajoutés avec la commande
<<command_weechat_item,/item>>, chaque nouvel objet ayant deux propriétés
définies via des options de configuration :
* `conditions` : conditions évaluées pour afficher l'objet de barre, par exemple
pour restreindre l'objet de barre à certains tampons (si vide, l'objet de barre
est affiché partout)
* `content` : contenu évalué de l'objet de barre.
Dans chacune des options, les variables suivantes peuvent être utilisées :
* `window` : pointeur vers la fenêtre où la barre est affichée (`NULL` pour une
barre de type "root")
* `buffer` : pointeur vers le tampon où la barre est affichée (tampon courant
pour les barres de type "root").
Exemples de conditions :
[width="100%",cols="3,10",options="header"]
|===
| Condition | Description
| `${window}` | Affiché seulement dans les barres de type "window"
| `${buffer.number} == 1` | Affiché dans tous les tampons avec "number" = 1
| `${buffer.plugin.name} == irc` | Affiché dans tous les tampons IRC
| `${type} == channel` | Affiché dans tous les tampons où la variable locale `type` est `channel` (exemple : tous les canaux IRC)
| `${type} == private` | Affiché dans tous les tampons où la variable locale `type` est `private` (exemple : tous les tampons privés IRC)
|===
[NOTE]
Il n'y a pas de moyen intégré de rafraîchir les objets de barre personnalisés.
Vous pouvez utiliser l'extension <<trigger,Trigger>> pour forcer un rafraîchissement,
par exemple sur un ou plusieurs signaux reçus.
Pour plus d'informations et des exemples, voir la commande <<command_weechat_item,/item>>.
[[bar_filling]]
==== Remplissage
Il y a quatre types de remplissage :
* `+horizontal+` : les objets sont affichés horizontalement, de gauche à droite.
S'il y a des retours à la ligne dans les objets, un espace est utilisé pour
séparer les lignes.
* `+vertical+` : les objets sont affichés de haut en bas. S'il y a des retours à
la ligne dans les objets, une nouvelle ligne est utilisée pour séparer les
lignes.
* `+columns_horizontal+` : les objets sont affichés en utilisant des colonnes, où
le texte est aligné à gauche. Le premier objet est en haut à gauche, le second
est sur la même ligne, sur la droite.
* `+columns_vertical+` : les objets sont affichés en utilisant des colonnes, où
le texte est aligné à gauche. Le premier objet est en haut à gauche, le second
est sur la ligne en dessous.
Les barres par défaut _title_, _status_ et _input_ ont un remplissage
_horizontal_, et la barre par défaut _nicklist_ a un remplissage _vertical_.
Quelques exemples de remplissage pour la barre _nicklist_ :
....
┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel │
│12:54:15 peter | hey! │@carl │
│12:55:01 +Max | hello │@jessika│
│ │@maddy │
│ │%Diego │
│ │%Melody │
│ │+Max │
│ │ celia │
│ │ Eva │
│ │ freddy │
│ │ Harold^│
│ │ henry4 │
│ │ jimmy17│
│ │ jodie ▼│
│[12:55] [6] [irc/libera] 3:#test(+n){24} │
│[@carl] █ │
└───────────────────────────────────────────────────────────────────────┘
filling_left_right = vertical ▲
┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel │
│12:54:15 peter | hey! │@carl lee │
│12:55:01 +Max | hello │@jessika louise │
│ │@maddy mario │
│ │%Diego mark │
│ │%Melody peter │
│ │+Max Rachel │
│ │ celia richard│
│ │ Eva sheryl │
│ │ freddy Vince │
│ │ Harold^ warren │
│ │ henry4 zack │
│ │ jimmy17 │
│ │ jodie │
│[12:55] [6] [irc/libera] 3:#test(+n){24} │
│[@carl] █ │
└───────────────────────────────────────────────────────────────────────┘
filling_left_right = columns_vertical ▲
┌───────────────────────────────────────────────────────────────────────┐
│@carl %Diego celia Harold^ jodie mario Rachel Vince │
│@jessika %Melody Eva henry4 lee mark richard warren │
│@maddy +Max freddy jimmy17 louise peter sheryl zack │
│───────────────────────────────────────────────────────────────────────│
│ │
filling_top_bottom = columns_vertical ▲
┌───────────────────────────────────────────────────────────────────────┐
│@carl @jessika @maddy %Diego %Melody +Max celia Eva │
│ freddy Harold^ henry4 jimmy17 jodie lee louise mario │
│ mark peter Rachel richard sheryl Vince warren zack │
│───────────────────────────────────────────────────────────────────────│
│ │
filling_top_bottom = columns_horizontal ▲
....
[[bar_conditions]]
==== Conditions
L'option _conditions_ est une chaîne qui est évaluée pour savoir si la barre
doit être affichée ou non.
La chaîne peut être :
* _active_ : la fenêtre doit être active
* _inactive_ : la fenêtre doit être inactive
* _nicklist_ : le tampon affiché dans la fenêtre doit avoir une liste de pseudos
* une expression : elle est évaluée comme booléen (voir la commande
<<command_weechat_eval,/eval>>)
Pour une expression, les variables suivantes sont disponibles :
* `+${active}+` : vrai si la fenêtre est active
* `+${inactive}+` : vrai si la fenêtre est inactive
* `+${nicklist}+` : vrai si le tampon affiché dans la fenêtre a une liste de
pseudos
Les pointeurs suivants sont disponibles :
* `+${window}+` : la fenêtre où la condition est évaluée
* `+${buffer}+` : le tampon de la fenêtre où la condition est évaluée
Exemple pour afficher la liste de pseudos dans tous les tampons possédant une
liste de pseudos, et seulement si la largeur du terminal est supérieure à 100 :
----
/set weechat.bar.nicklist.conditions "${nicklist} && ${info:term_width} > 100"
----
Même condition, mais afficher toujours la liste de pseudos sur le tampon
_&bitlbee_ (même si le terminal est petit) :
----
/set weechat.bar.nicklist.conditions "${nicklist} && (${info:term_width} > 100 || ${buffer.full_name} == irc.bitlbee.&bitlbee)"
----
[[secured_data]]
=== Données sécurisées
[[secured_data_storage]]
==== Stockage
WeeChat peut chiffrer les mots de passe ou les données sensibles en utilisant
des données sécurisées, stockées dans le fichier _sec.conf_.
Ce fichier de configuration est lu avant tout autre fichier, et les valeurs
ici stockées peuvent être utilisées dans diverses options de WeeChat ou des
extensions/scripts.
Vous pouvez définir une phrase secrète pour chiffrer les données dans le fichier
_sec.conf_. Ce n'est pas obligatoire, mais fortement recommandé, sinon les
données sont stockées sous forme de texte en clair dans le fichier.
----
/secure passphrase ceci est ma phrase secrète
----
[[secured_data_passphrase_on_startup]]
===== Phrase secrète au démarrage
Lorsqu'une phrase secrète est définie, WeeChat vous demandera de la saisir lors
du démarrage (mais pas sur `/upgrade`).
Si vous utilisez un gestionnaire de mots de passe, vous pouvez lancer
un programme externe pour lire la phrase secrète au lieu d'avoir à l'entrer
manuellement au démarrage de WeeChat. +
Par exemple avec password-store (command `pass`) :
----
/set sec.crypt.passphrase_command "/usr/bin/pass show weechat/passphrase"
----
Le programme peut vous demander de déverrouiller votre clé GPG ou d'entrer une
autre phrase secrète. WeeChat attendra la fin de la commande pour lire la phrase
secrète sur la sortie standard (elle doit être sur la première ligne et sans
caractère supplémentaire). +
Si la sortie ne contient pas de phrase secrète ou si celle-ci est erronée,
WeeChat vous demandera alors de la saisir.
[[secured_data_encryption]]
===== Chiffrement
Le chiffrement des données se fait en 3 étapes :
. Dériver une clé de la phrase secrète (avec du salage en option).
. Calculer la somme de contrôle des données à chiffrer.
. Chiffrer la somme de contrôle + les données (la sortie est : sel + somme de
contrôle et données chiffrées).
[NOTE]
Le mode de chiffrement par bloc est _CFB_.
Le résultat est stocké sous forme d'une chaîne hexadécimale dans le fichier
_sec.conf_, par exemple :
----
[data]
__passphrase__ = on
libera = "53B1C86FCDA28FC122A95B0456ABD79B5AB74654F21C3D099A6CCA8173239EEA59533A1D83011251F96778AC3F5166A394"
----
[[secured_data_decryption]]
===== Déchiffrement
Le déchiffrement des données se fait en 3 étapes :
. Dériver une clé en utilisant le sel et la phrase secrète.
. Déchiffrer la somme de contrôle et les données.
. Vérifier que la somme de contrôle déchiffrée correspond à la somme de contrôle
des données.
[[secured_data_manage]]
==== Gérer les données sécurisées
Pour ajouter une donnée sécurisée, utilisez la commande `/secure set`, par
exemple un mot de passe pour le serveur IRC _libera_ :
----
/secure set libera motdepasse
----
Pour plus de confort, les données sécurisées peuvent être affichées dans un
tampon dédié (touche kbd:[Alt+v] sur le tampon pour voir les valeurs), faites
simplement :
----
/secure
----
Les données sécurisées peuvent être utilisées dans quelques options qui peuvent
contenir des données sensibles comme un mot de passe, en utilisant ce format :
"${sec.data.xxx}" où "xxx" est le nom de la donnée sécurisée (utilisé dans la
commande `/secure set xxx ...`). +
Pour une liste complète des options supportées, voir la commande <<command_weechat_secure,/secure>>.
Pour utiliser le mot de passe _libera_, par exemple avec
<<irc_sasl_authentication,l'authentification SASL>> :
----
/set irc.server.libera.sasl_password "${sec.data.libera}"
----
[[command_aliases]]
=== Alias de commandes
L'extension Alias permet de définir des alias pour des commandes (WeeChat ou
d'autres extensions).
Des alias sont créés par défaut, avec le nom en lettres majuscules (pour les
différencier des commandes standard) ; les commandes ne sont pas sensibles à la
casse dans WeeChat, donc par exemple `/close` lance l'alias `/CLOSE`.
Liste des alias par défaut :
include::{autogendir}/autogen_user_default_aliases.fr.adoc[tag=default_aliases]
[[alias_commands]]
==== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=alias_commands]
[[alias_options]]
==== Options
Sections dans le fichier _alias.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| cmd | <<command_alias_alias,/alias>> +
/set alias.cmd.* | Commandes pour les alias.
| completion | <<command_alias_alias,/alias>> +
/set alias.completion.* | Complétions pour les alias.
|===
[[commands_and_options]]
=== Commandes et options
[[weechat_commands]]
==== Commandes WeeChat
include::{autogendir}/autogen_user_commands.fr.adoc[tag=weechat_commands]
[[sec_options]]
==== Options des données sécurisées
Sections dans le fichier _sec.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| crypt | /set sec.crypt.* | Options pour le chiffrement.
| data | <<command_weechat_secure,/secure>> | Données sécurisées.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=sec_options]
[[weechat_options]]
==== Options WeeChat
Sections dans le fichier _weechat.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| debug | <<command_weechat_debug,/debug set>> +
/set weechat.debug.* | Niveau de debug, pour le cœur et les extensions (les options peuvent être ajoutées/supprimées dans la section).
| startup | /set weechat.startup.* | Options de démarrage.
| look | /set weechat.look.* | Aspect/présentation.
| palette | <<command_weechat_color,/color alias>> +
/set weechat.palette.* | Alias de couleurs (les options peuvent être ajoutées/supprimées dans la section).
| color | /set weechat.color.* | Couleurs.
| completion | /set weechat.completion.* | Options de complétion.
| history | /set weechat.history.* | Options d'historique (commandes et tampons).
| proxy | <<command_weechat_proxy,/proxy>> +
/set weechat.proxy.* | Options des proxies.
| network | /set weechat.network.* | Options réseau/TLS.
| plugin | /set weechat.plugin.* | Options sur les extensions.
| signal | /set weechat.signal.* | Options sur les signaux.
| bar | <<command_weechat_bar,/bar>> +
/set weechat.bar.* | Options des barres.
| layout | <<command_weechat_layout,/layout>> | Dispositions.
| buffer | <<command_weechat_buffer,/buffer setauto>> | Propriétés appliquées automatiquement sur les tampons lorsqu'ils sont ouverts.
| notify | <<command_weechat_buffer,/buffer notify>> | Niveaux de notification des tampons (les options peuvent être ajoutées/supprimées dans la section).
| filter | <<command_weechat_filter,/filter>> | Filtres.
| key | <<command_weechat_key,/key>> | Touches pour le contexte "default".
| key_search | <<command_weechat_key,/key>> | Touches pour le contexte "search".
| key_cursor | <<command_weechat_key,/key>> | Touches pour le contexte "cursor".
| key_mouse | <<command_weechat_key,/key>> | Touches pour le contexte "mouse".
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=weechat_options]
[[irc]]
== IRC
L'extension IRC permet de dialoguer avec d'autres personnes via le
protocole IRC.
Elle est multi-serveurs, et offre toutes les commandes IRC supportées, y
compris la discussion directe (DCC chat) et le transfert de fichier DCC
(via l'extension xfer, voir <<xfer,extension Xfer>>).
[[irc_command_line_options]]
=== Options de ligne de commande
Il est possible de passer une URL pour un ou plusieurs serveurs, comme suit :
----
irc[6][s]://[pseudo[:mot_passe]@]irc.example.org[:port][/canal][,canal[...]]
----
Exemple pour rejoindre _#weechat_ et _#weechat-fr_ sur le serveur
_irc.libera.chat_, port par défaut (6667), avec le pseudo _alice_ :
[source,shell]
----
weechat irc://alice@irc.libera.chat/#weechat,#weechat-fr
----
[[irc_servers]]
=== Serveurs
[[irc_servers_add]]
==== Ajout d'un serveur
Par défaut aucun serveur n'est défini. Vous pouvez ajouter autant de serveurs
que vous le souhaitez avec la commande <<command_irc_server,/server>>.
Par exemple pour vous connecter à https://libera.chat/[libera.chat ^↗^^] avec TLS
(communications chiffrées) :
----
/server add libera irc.libera.chat
----
[NOTE]
Le port par défaut est 6697 et TLS (communications chiffrées) est activé.
Vous pouvez demander à WeeChat de se connecter automatiquement à ce serveur
au démarrage :
----
/set irc.server.libera.autoconnect on
----
Pour vous authentifier, il est recommandé d'utiliser SASL (si le serveur le
supporte), avec le mot de passe stocké sous forme de donnée sécurisée (voir aussi
le chapitre sur <<irc_sasl_authentication,l'authentification avec SASL>>) :
----
/set irc.server.libera.sasl_username "alice"
/secure set libera xxxxxxx
/set irc.server.libera.sasl_password "${sec.data.libera}"
----
Si SASL n'est pas supporté, vous pouvez utiliser une commande pour envoyer
un message à nickserv :
----
/set irc.server.libera.command "/msg nickserv identify ${sec.data.libera}"
----
[NOTE]
En envoyant une commande à nickserv, vous pourriez être authentifié après avoir
rejoint les canaux, ce qui peut être un problème sur certains canaux qui
vous obligent à être authentifié pour les rejoindre. Dans ce cas, vous pouvez
définir un délai après la commande : `/set irc.server.libera.command_delay 5`.
[[irc_servers_options]]
==== Options du serveur
Les options du serveur sont nommées `irc.server.<serveur>.<option>` où `<serveur>`
est le nom interne du serveur et `<option>` le nom de l'option. +
La valeur d'une option de serveur est héritée de `irc.server_default.xxx` si
l'option de serveur a la valeur spéciale `null`.
Par exemple si vous avez créé le serveur _libera_ avec les commandes ci-dessus,
vous verrez ceci avec la commande `/fset libera` :
....
irc.server.libera.addresses chaîne "irc.libera.chat"
irc.server.libera.anti_flood entier null -> 2000
irc.server.libera.autoconnect booléen on
irc.server.libera.autojoin chaîne null -> ""
irc.server.libera.autojoin_delay entier null -> 0
irc.server.libera.autojoin_dynamic booléen null -> off
irc.server.libera.autoreconnect booléen null -> on
irc.server.libera.autoreconnect_delay entier null -> 10
irc.server.libera.autorejoin booléen null -> off
irc.server.libera.autorejoin_delay entier null -> 30
irc.server.libera.away_check entier null -> 0
irc.server.libera.away_check_max_nicks entier null -> 25
irc.server.libera.capabilities chaîne null -> "*"
irc.server.libera.charset_message énuméré null -> message
irc.server.libera.command chaîne null -> ""
irc.server.libera.command_delay entier null -> 0
irc.server.libera.connection_timeout entier null -> 60
irc.server.libera.default_chantypes chaîne null -> "#&"
irc.server.libera.ipv6 énuméré null -> auto
irc.server.libera.local_hostname chaîne null -> ""
irc.server.libera.msg_kick chaîne null -> ""
irc.server.libera.msg_part chaîne null -> "WeeChat ${info:version}"
irc.server.libera.msg_quit chaîne null -> "WeeChat ${info:version}"
irc.server.libera.nicks chaîne null -> "${username},${username}2,${username}3,${username}4,${username}5"
irc.server.libera.nicks_alternate booléen null -> on
irc.server.libera.notify chaîne null -> ""
irc.server.libera.password chaîne null -> ""
irc.server.libera.proxy chaîne null -> ""
irc.server.libera.realname chaîne null -> ""
irc.server.libera.registered_mode chaîne null -> "r"
irc.server.libera.sasl_fail énuméré null -> reconnect
irc.server.libera.sasl_key chaîne null -> ""
irc.server.libera.sasl_mechanism énuméré null -> plain
irc.server.libera.sasl_password chaîne "${sec.data.libera}"
irc.server.libera.sasl_timeout entier null -> 15
irc.server.libera.sasl_username chaîne "alice"
irc.server.libera.split_msg_max_length entier null -> 512
irc.server.libera.tls booléen null -> on
irc.server.libera.tls_cert chaîne null -> ""
irc.server.libera.tls_dhkey_size entier null -> 2048
irc.server.libera.tls_fingerprint chaîne null -> ""
irc.server.libera.tls_password chaîne null -> ""
irc.server.libera.tls_priorities chaîne null -> "NORMAL"
irc.server.libera.tls_verify booléen null -> on
irc.server.libera.usermode chaîne null -> ""
irc.server.libera.username chaîne null -> "${username}"
....
Par exemple si vous voulez vous connecter automatiquement à tous les serveurs
que vous ajoutez sans avoir à le faire sur chaque serveur, vous pouvez faire :
----
/set irc.server_default.autoconnect on
----
Et puis vous pouvez réinitialiser l'option du serveur pour qu'elle utilise
la valeur héritée, qui est maintenant `on` au lieu de la valeur par défaut `off` :
----
/unset irc.server.libera.autoconnect
----
[[irc_tls_certificates]]
==== Certificats TLS
Lors de la connexion à un serveur IRC avec TLS, WeeChat vérifie par défaut que
la connexion est entièrement de confiance.
Quelques options sont utilisées pour contrôler la connexion TLS :
weechat.network.gnutls_ca_system::
charger les certificats des autorités de certification système au démarrage
weechat.network.gnutls_ca_user::
fichier(s) supplémentaire(s) avec des autorités de certification
irc.server.xxx.tls_cert::
fichier de certificat TLS utilisé pour authentifier automatiquement votre
pseudo (par exemple CertFP sur oftc, voir ci-dessous)
irc.server.xxx.tls_dhkey_size::
taille de clé utilisée pour l'échange de clé Diffie-Hellman (par défaut :
2048)
irc.server.xxx.tls_verify::
vérifier que la connexion TLS est entièrement de confiance (activé par
défaut)
[NOTE]
L'option "tls_verify" est activée par défaut, donc la vérification est stricte
et peut échouer, même si cela pouvait être OK dans les versions inférieures à
0.3.1.
[[irc_connect_oftc_with_certificate]]
===== Premier exemple : se connecter à oftc en vérifiant le certificat
* Importer le certificat sous le shell :
[source,shell]
----
mkdir -p ~/.config/weechat/tls
wget -O ~/.config/weechat/tls/CAs.pem https://www.spi-inc.org/ca/spi-cacert.crt
----
[NOTE]
Vous devez remplacer `~/.config/weechat` par le chemin vers votre répertoire de
config WeeChat qui peut aussi être par exemple `~/.weechat`.
[NOTE]
Il est possible de concaténer plusieurs certificats dans le fichier CAs.pem.
* Sous WeeChat, avec le serveur "oftc" déjà ajouté :
----
/connect oftc
----
[[irc_connect_oftc_with_certfp]]
===== Second exemple : se connecter à oftc en utilisant CertFP
* Créer le certificat sous le shell :
[source,shell]
----
mkdir -p ~/.config/weechat/tls
cd ~/.config/weechat/tls
openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick.pem
----
[NOTE]
Vous devez remplacer `~/.config/weechat` par le chemin vers votre répertoire de
config WeeChat qui peut aussi être par exemple `~/.weechat`.
* Sous WeeChat, avec le serveur "oftc" déjà ajouté :
----
/set irc.server.oftc.tls_cert "${weechat_config_dir}/tls/nick.pem"
/connect oftc
/msg nickserv cert add
----
Pour plus d'informations, merci de consulter
https://www.oftc.net/NickServ/CertFP/[cette page ^↗^^].
[[irc_sasl_authentication]]
==== Authentification avec SASL
WeeChat supporte l'authentification avec SASL, en utilisant différents
mécanismes :
* _plain_ : mot de passe en clair (par défaut)
* _scram-sha-1_ : SCRAM avec algorithme de hachage SHA-1
* _scram-sha-256_ : SCRAM avec algorithme de hachage SHA-256
* _scram-sha-512_ : SCRAM avec algorithme de hachage SHA-512
* _ecdsa-nist256p-challenge_ : challenge avec clé publique/privée
* _external_ : certificat TLS côté client
Les options dans le serveur sont :
* _sasl_mechanism_ : mécanisme à utiliser (voir ci-dessus)
* _sasl_timeout_ : délai d'attente maximum (en secondes) pour l'authentification
* _sasl_fail_ : action à effectuer si l'authentification échoue
* _sasl_username_ : nom d'utilisateur (pseudo)
* _sasl_password_ : mot de passe
* _sasl_key_ : fichier avec la clé privée ECC (pour le mécanisme
_ecdsa-nist256p-challenge_)
[[irc_sasl_ecdsa_nist256p_challenge]]
===== SASL ECDSA-NIST256P-CHALLENGE
Vous devez générer une clé privée pour vous authentifier avec le mécanisme
ECDSA-NIST256P-CHALLENGE (aucun mot de passe n'est requis lors de la
connexion).
Vous pouvez générer la clé avec cette commande :
[source,shell]
----
openssl ecparam -genkey -name prime256v1 -out ~/.config/weechat/ecdsa.pem
----
[NOTE]
Vous devez remplacer `~/.config/weechat` par le chemin vers votre répertoire de
config WeeChat qui peut aussi être par exemple `~/.weechat`.
Récupérez la clé publique (encodée en base64) avec cette commande :
[source,shell]
----
openssl ec -noout -text -conv_form compressed -in ~/.config/weechat/ecdsa.pem | grep '^pub:' -A 3 | tail -n 3 | tr -d ' \n:' | xxd -r -p | base64
----
Connectez-vous au serveur, identifiez vous (par exemple avec
"nickserv identify") et définissez la clé publique dans votre compte, en
utilisant nickserv (remplacez la valeur base64 par votre clé publique) :
----
/connect libera
/msg nickserv identify votre_mot_de_passe
/msg nickserv set pubkey Av8k1FOGetUDq7sPMBfufSIZ5c2I/QYWgiwHtNXkVe/q
----
Configurez les options SASL dans le serveur :
----
/set irc.server.libera.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.libera.sasl_username "votre_pseudo"
/set irc.server.libera.sasl_key "${weechat_config_dir}/ecdsa.pem"
----
Reconnectez-vous au serveur :
----
/reconnect libera
----
[[irc_servers_connection]]
==== Connexion
Vous pouvez vous connecter au serveur avec la commande
<<command_irc_connect,/connect>> :
----
/connect libera
----
Pour vous déconnecter :
----
/disconnect libera
----
Ou juste ceci si vous être sur un tampon appartenant au serveur _libera_
(serveur, canal, privé) :
----
/disconnect
----
Lorsque vous vous connectez à plusieurs serveurs à la fois, les tampons des
serveurs sont mélangés par défaut et vous pouvez basculer entre eux avec
la touche kbd:[Ctrl+x]. +
Il est possible de désactiver le mélange des tampons serveurs pour avoir
un tampon distinct par serveur :
----
/set irc.look.server_buffer independent
----
[[irc_tor_sasl]]
==== Connexion avec Tor et SASL
Quelques serveurs acceptent les connexions avec
https://www.torproject.org/[Tor ^↗^^], un réseau de tunnels virtuels
qui permet aux personnes et groupes d'améliorer leur vie privée et sécurité
sur Internet.
En premier lieu, installez Tor. Pour Debian (et dérivés) :
[source,shell]
----
sudo apt-get install tor
----
Sous WeeChat vous devez ajouter un proxy socks5 pour le service Tor (le nom/IP
et port dépend de votre configuration de Tor) :
----
/proxy add tor socks5 127.0.0.1 9050
----
Maintenant, ajoutez un nouveau serveur (remplacez le nom du serveur "irc-tor" et
l'adresse par une valide) :
----
/server add irc-tor this.is.the.address.onion
----
Définissez le proxy pour Tor :
----
/set irc.server.irc-tor.proxy "tor"
----
Définissez l'authentification SASL avec ECDSA-NIST256P-CHALLENGE (voir le
chapitre <<irc_sasl_ecdsa_nist256p_challenge,SASL ECDSA-NIST256P-CHALLENGE>>
pour générer une clé privée) :
----
/set irc.server.irc-tor.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.irc-tor.sasl_username "your_nickname"
/set irc.server.irc-tor.sasl_key "${weechat_config_dir}/ecdsa.pem"
----
Et enfin, connectez-vous au serveur :
----
/connect irc-tor
----
[[irc_ircv3_support]]
=== Support IRCv3
WeeChat supporte les https://ircv3.net/irc/[extensions IRCv3 ^↗^^] suivantes :
* <<irc_ircv3_account_notify,account-notify>>
* <<irc_ircv3_account_tag,account-tag>>
* <<irc_ircv3_away_notify,away-notify>>
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
* <<irc_ircv3_message_tags,message-tags>>
* <<irc_ircv3_monitor,monitor>>
* <<irc_ircv3_multi_prefix,multi-prefix>>
* <<irc_ircv3_sasl,SASL v3.2>>
* <<irc_ircv3_server_time,server-time>>
* <<irc_ircv3_setname,setname>>
* <<irc_ircv3_typing,typing>>
* <<irc_ircv3_userhost_in_names,userhost-in-names>>
* <<irc_ircv3_whox,WHOX>>
Par défaut toutes les capacités supportées par le serveur et WeeChat sont
automatiquement activées (voir l'option
<<option_irc.server_default.capabilities,irc.server_default.capabilities>>).
Des tableaux avec une comparaison des différents clients IRC, incluant WeeChat,
sont disponibles sur https://ircv3.net/software/clients[cette page ^↗^^].
[[irc_ircv3_account_notify]]
==== account-notify
Spécification : https://ircv3.net/specs/extensions/account-notify[account-notify ^↗^^]
Cette capacité autorise le serveur à envoyer des messages lorsque les utilisateurs
s'identifient ou perdent l'identification sur le serveur. +
WeeChat affiche ces messages si l'option
<<option_irc.look.display_account_message,irc.look.display_account_message>>
est activée (valeur par défaut).
Exemples :
....
-- alice s'est identifié en tant que Alice01
-- alice n'est plus identifié
....
[[irc_ircv3_account_tag]]
==== account-tag
Spécification : https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^^]
Cette capacité autorise le serveur à envoyer le compte comme étiquette de message
dans les commandes envoyées au client. +
WeeChat extrait cette étiquette et la sauve dans le message, mais elle n'est pas
utilisée ni affichée. Elle peut être utilisée dans la commande <<command_weechat_filter,/filter>>
pour filtrer les messages correspondants à des comptes spécifiques.
Exemple de message IRC brut reçu :
....
@account=Alice01 :user@example.com PRIVMSG #test :Bonjour !
....
Message affiché dans le canal :
....
<alice> Bonjour !
....
Message avec les étiquettes :
....
<alice> Bonjour ! [irc_privmsg,irc_tag_account_Alice01,notify_message,prefix_nick_lightcyan,nick_alice,host_user@example.com,log1]
....
[[irc_ircv3_away_notify]]
==== away-notify
Spécification : https://ircv3.net/specs/extensions/away-notify[away-notify ^↗^^]
Cette capacité autorise le serveur à envoyer des notifications d'absence pour
les utilisateurs qui sont sur les mêmes canaux que vous.
Lorsque le statut d'absence est changé pour un utilisateur (absent ou de retour),
cela est reflété avec une couleur spécifique dans la liste des pseudos, en utilisant
les options suivantes :
* <<option_irc.server_default.away_check,irc.server_default.away_check>>
* <<option_irc.server_default.away_check_max_nicks,irc.server_default.away_check_max_nicks>>
* <<option_weechat.look.item_away_message,weechat.look.item_away_message>>
[[irc_ircv3_batch]]
==== batch
Spécification : https://ircv3.net/specs/extensions/batch[batch ^↗^^]
Cette capacité autorise le serveur à envoyer des évènements "batch" (regroupement
de plusieurs messages qui sont liés).
Pour l'instant, WeeChat stocke seulement ces messages reçus dans un "batch"
et les traite plus tard comme d'habitude, lorsque le "batch" prend fin.
[[irc_ircv3_cap_notify]]
==== cap-notify
Spécification : https://ircv3.net/specs/extensions/capability-negotiation#the-cap-new-subcommand[cap-notify ^↗^^]
Cette capacité autorise le serveur à avertir des nouvelles capacités ou celles
supprimées sur le serveur (via les commandes `CAP NEW` et `CAP DEL`).
Exemples :
....
-- irc : client capability, maintenant disponible : sasl
-- irc : client capability, supprimé : sasl
....
[[irc_ircv3_chghost]]
==== chghost
Spécification : https://ircv3.net/specs/extensions/chghost[chghost ^↗^^]
Cette capacité autorise le serveur à envoyer des messages lorsque les utilisateurs
changent de nom ou d'hôte. +
Lorsque l'option <<option_irc.look.smart_filter_chghost,irc.look.smart_filter_chghost>>
est activée (valeur par défaut), les changements d'hôtes sont automatiquement
masqués si le pseudo n'a pas parlé pendant plusieurs minutes. +
La couleur du message de changement d'hôte est contrôlée par l'option
<<option_irc.color.message_chghost,irc.color.message_chghost>>.
Exemple :
....
-- alice (user@example.com) a changé d'hôte pour test.com
....
[[irc_ircv3_draft_multiline]]
==== draft/multiline
Spécification : https://ircv3.net/specs/extensions/multiline[multiline ^↗^^]
Cette capacité autorise le client et le serveur à envoyer des messages avec
plusieurs lignes, en utilisant la capacité <<irc_ircv3_batch,batch>>, qui doit
être activée également.
Il y a des limites en terme d'octets ou nombre de lignes dans un message
multi-lignes qui sont données dans la capacité envoyée par le serveur,
par exemple :
....
CAP alice LS * :draft/multiline=max-bytes=4096,max-lines=24
....
Cela fixe la limite à 4096 octets et 24 lignes pour un contenu "batch"
multi-lignes.
Si les limites ne sont pas envoyées par le serveur, celles par défaut dans
WeeChat sont :
* max octets : 4096
* max lignes : 24
Seuls les messages standards et ceux envoyés avec la commande
<<command_irc_notice,/notice>> peuvent être multi-lignes. +
Les messages ACTION CTCP envoyés par avec la commande <<command_irc_me,/me>>
ne sont pas affectés par cette capacité. Cela signifie que les actions
multi-lignes sont envoyées sous forme de plusieurs actions.
[WARNING]
Comme la spécification est un brouillon (« draft »), elle peut changer et le
support "multiline" peut être cassé à tout moment dans WeeChat. +
La capacité est automatiquement activée si le serveur la supporte et peut être
désactivée avec cette commande :
`/set irc.server_default.capabilities "*,!draft/multiline"`. +
Lorsque la capacité est désactivée, un message multi-lignes est envoyé sous
forme de plusieurs messages, comme s'ils avaient été envoyés séquentiellement
au serveur.
Exemple de messages IRC envoyés pour un message utilisateur avec deux lignes
(`ceci est un test` / `sur deux lignes`), envoyé au canal #test :
....
BATCH +i8Je7M7gquddoyC9 draft/multiline #test
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :ceci est un test
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :sur deux lignes
BATCH -i8Je7M7gquddoyC9
....
Affichage du message envoyé dans WeeChat :
....
19:01:45 alice | ceci est un test
| sur deux lignes
....
[[irc_ircv3_echo_message]]
==== echo-message
Spécification : https://ircv3.net/specs/extensions/echo-message[echo-message ^↗^^]
Cette capacité oblige le serveur à renvoyer les messages PRIVMSG, NOTICE et TAGMSG
à WeeChat.
WeeChat affiche seulement le message reçu et non pas le message envoyé, donc
un délai peut être perçu entre l'envoi et l'affichage. Lorsque le message est
affiché, cela signifie qu'il a bien été reçu par le serveur et également propagé
aux autres clients connectés sur le serveur.
[[irc_ircv3_extended_join]]
==== extended-join
Spécification : https://ircv3.net/specs/extensions/extended-join[extended-join ^↗^^]
Cette capacité autorise le serveur à envoyer le compte et nom réel lorsque les
utilisateurs rejoignent les canaux. +
WeeChat affiche les informations additionnelles dans les messages de "join"
si l'option
<<option_irc.look.display_extended_join,irc.look.display_extended_join>>
est activée (valeur par défaut).
Exemple :
....
--> john [John01] (John Doe) (~user@example.com) a rejoint #test
....
[[irc_ircv3_invite_notify]]
==== invite-notify
Spécification : https://ircv3.net/specs/extensions/invite-notify[invite-notify ^↗^^]
Cette capacité autorise le serveur à envoyer des messages d'invitation lorsque
les utilisateurs sont invités sur des canaux.
Exemple :
....
-- alice a invité bob sur #test
....
[[irc_ircv3_message_tags]]
==== message-tags
Spécification : https://ircv3.net/specs/extensions/message-tags[message-tags ^↗^^]
Cette capacité autorise l'envoi de méta-données dans les messages. +
Ces étiquettes peuvent être affichées avec la commande `/debug tags`.
Elle doit être activée pour utiliser les <<typing_notifications,notifications de saisie>>.
[[irc_ircv3_monitor]]
==== monitor
Spécification : https://ircv3.net/specs/extensions/monitor[monitor ^↗^^]
Cette capacité autorise le serveur à envoyer des notifications lorsque les clients
se connectent ou se déconnectent. +
WeeChat utilise automatiquement cette extension si disponible lorsque la commande
<<command_irc_notify,/notify>> est utilisée.
[[irc_ircv3_multi_prefix]]
==== multi-prefix
Spécification : https://ircv3.net/specs/extensions/multi-prefix[multi-prefix ^↗^^]
Cette capacité autorise le serveur à envoyer tous les modes utilisateur d'un coup
dans les réponses à <<command_irc_names,/names>> et <<command_irc_whois,/whois>>. +
////
Exemple : sortie de `/names` :
....
-- Pseudos #test : [@%+alice bob +carol]
....
////
[NOTE]
Pour l'instant, WeeChat n'affiche pas les préfixes dans la sortie de `/names`,
même s'ils sont reçus et correctement sauvegardés en interne.
Exemple : sortie de `/whois alice` :
....
-- [alice] @%+#test
....
[[irc_ircv3_sasl]]
==== SASL
Spécification : https://ircv3.net/specs/extensions/sasl-3.2[SASL 3.2 ^↗^^]
Voir le chapitre dédié <<irc_sasl_authentication,Authentification avec SASL>>.
[[irc_ircv3_server_time]]
==== server-time
Spécification : https://ircv3.net/specs/extensions/server-time[server-time ^↗^^]
Cette capacité autorise le serveur à envoyer l'heure pour les messages sous forme
d'étiquette de message. +
Lorsque l'heure est reçue dans un message, WeeChat l'utilise pour afficher le message
(qui peut alors avoir une date dans le passé).
Le <<relay_irc_proxy,proxy IRC>> dans l'extension Relay supporte cette capacité,
donc tout client IRC de Relay devrait l'activer pour afficher l'heure réelle
des messages dans l'historique des messages envoyés à la connexion.
[[irc_ircv3_setname]]
==== setname
Spécification : https://ircv3.net/specs/extensions/setname[setname ^↗^^]
Cette capacité vous permet de changer votre nom réel en utilisant la commande
<<command_irc_setname,/setname>>.
[[irc_ircv3_typing]]
==== typing
Spécification : https://ircv3.net/specs/client-tags/typing[typing ^↗^^]
Voir le chapitre dédié <<typing_notifications,Notifications de saisie>>.
[[irc_ircv3_userhost_in_names]]
==== userhost-in-names
Spécification : https://ircv3.net/specs/extensions/userhost-in-names[userhost-in-names ^↗^^]
Cette capacité autorise le serveur à envoyer les noms d'hôtes dans les réponses à
<<command_irc_names,/names>>.
[NOTE]
WeeChat n'affiche pas les noms d'hôtes dans la sortie de `/names`.
Exemple de message IRC brut reçu sans la capacité :
....
:irc.server 353 alice = #test :@alice bob +carol
....
Exemple de message IRC brut reçu avec la capacité :
....
:irc.server 353 alice = #test :@alice!user1@host1 bob!user2@host2 +carol!user3@host3
....
[[irc_ircv3_whox]]
==== WHOX
Spécification : https://ircv3.net/specs/extensions/whox[WHOX ^↗^^]
Cette capacité vous permet de demander des champs additionnels dans la réponse
WHO (via la commande <<command_irc_who,/who>>). +
WeeChat affiche ces informations additionnelles reçus dans la sortie de WHO.
[[irc_channels]]
=== Canaux
Vous pouvez rejoindre des canaux avec la commande <<command_irc_join,/join>> :
----
/join #canal
----
Quitter un canal (en laissant le tampon ouvert) :
----
/part [message de fin]
----
Les canaux que vous rejoignez ne sont pas sauvegardés. Si vous souhaitez les
rejoindre automatiquement à la connexion au serveur, vous devez définir l'option
`autojoin` du serveur :
----
/set irc.server.libera.autojoin "#weechat,#weechat-fr"
----
[NOTE]
Certains scripts peuvent aider pour définir automatiquement cette option,
voir `/script search autojoin`.
Attention, les espaces ne peuvent être utilisés que pour séparer les canaux
des clés, par exemple si `#canal1` requiert une clé mais pas `#canal2`:
----
/set irc.server.libera.autojoin "#canal1,#canal2 cle1"
----
Pour de l'aide sur le format, voir l'option <<option_irc.server_default.autojoin,irc.server_default.autojoin>>.
[[irc_private_messages]]
=== Messages privés
Vous pouvez envoyer un message privé avec la commande <<command_irc_query,/query>>,
qui ouvre un tampon séparé :
----
/query bob salut, comment vas-tu ?
----
Sans paramètre la commande ouvre juste le tampon (ou le sélectionne s'il est
déjà ouvert) :
----
/query bob
----
Pour fermer le tampon privé, vous pouvez utiliser cette commande sur le tampon
privé :
----
/close
----
[[irc_smart_filter]]
=== Filtre intelligent
Un filtre intelligent est disponible pour filtrer certains messages lorsqu'une
personne n'a rien écrit sur le canal durant un délai configurable :
- join : l'utilisateur rejoint le canal
- part : l'utilisateur quitte le canal
- quit : l'utilisateur quitte le serveur
- account : l'utilisateur change de compte
- chghost : l'utilisateur change son nom ou hôte
- mode : changements de modes sur le canal
- nick : l'utilisateur change son pseudo
- setname : l'utilisateur change son nom réel
Le filtre intelligent est activé par défaut, mais vous devez ajouter un filtre
pour cacher les lignes sur les tampons, par exemple :
----
/filter add irc_smart * irc_smart_filter *
----
Il est possible de créer un filtre pour un canal seulement ou plusieurs canaux
commençant par le même nom (voir la commande <<command_weechat_filter,/filter>>) :
----
/filter add irc_smart_weechat irc.libera.#weechat* irc_smart_filter *
----
Vous pouvez définir un délai plus long (en minutes) :
----
/set irc.look.smart_filter_delay 10
----
Si quelqu'un n'a rien écrit durant les 10 dernières minutes, ses messages
comme les join/part/quit seront cachés par défaut sur le canal, et vous pouvez
utiliser la touche kbd:[Alt+=] (activer/désactiver les filtres) pour les voir.
[[irc_ctcp_replies]]
=== Réponses CTCP
Il est possible de personnaliser les réponses CTCP, ou de bloquer certaines
demandes CTCP (ne pas y répondre).
Par exemple, pour personnaliser la réponse au CTCP "VERSION", utilisez la
commande suivante :
----
/set irc.ctcp.version "Je suis sous WeeChat ${version}, ça déchire !"
----
[NOTE]
Le nom du CTCP doit être en minuscules. Cela signifie que l'option
_irc.ctcp.VERSION_ ne fonctionnerait pas.
Si vous voulez bloquer le CTCP "VERSION" (ne pas répondre à une demande), alors
affectez une chaîne vide :
----
/set irc.ctcp.version ""
----
Même un CTCP inconnu peut être personnalisé, par exemple vous pouvez répondre
au CTCP "BLABLA" :
----
/set irc.ctcp.blabla "C'est ma réponse au CTCP BLABLA"
----
Il est possible de personnaliser le CTCP pour un seul serveur, en utilisant son
nom interne avant le nom du CTCP :
----
/set irc.ctcp.libera.version "WeeChat ${version} (pour libera)"
----
Si vous voulez restaurer la réponse CTCP standard, alors supprimez l'option :
----
/unset irc.ctcp.version
----
Les réponses CTCP sont évaluées (voir la commande <<command_weechat_eval,/eval>>)
et les variables supplémentaires suivantes sont disponibles :
[width="100%",cols="2,4,8",options="header"]
|===
| Variable | Description | Valeur / exemple
| `+${clientinfo}+` | Liste des CTCP supportés | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| `+${version}+` | Version de WeeChat | `+4.1.0-dev+`
| `+${versiongit}+` | Version de WeeChat + version Git ^(1)^ | `+4.1.0-dev (git: v4.0.0-51-g8f98b922a)+`
| `+${git}+` | Version Git ^(1)^ | `+v4.0.0-51-g8f98b922a+`
| `+${compilation}+` | Date de compilation WeeChat | `+Jul 8 2023 20:14:23+`
| `+${osinfo}+` | Information sur l'OS | `+Linux 5.10.0-23-amd64 / x86_64+`
| `+${site}+` | Site WeeChat | `+https://weechat.org/+`
| `+${download}+` | Site WeeChat, page téléchargement | `+https://weechat.org/download/+`
| `+${time}+` | Date/heure courante | `+Sat, 08 Jul 2023 21:11:19 +0200+`
| `+${username}+` | Nom d'utilisateur sur le serveur | `+nom+`
| `+${realname}+` | Nom réel sur le serveur | `+John Doe+`
|===
[NOTE]
^(1)^ La version Git est la sortie de la commande `git describe`. Elle est
connue seulement si WeeChat a été compilé dans le dépôt Git et si Git était
installé.
Les réponses CTCP par défaut sont :
[width="100%",cols="2,4,8",options="header"]
|===
| CTCP | Format de réponse | Exemple
| CLIENTINFO | `+${clientinfo}+` | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| SOURCE | `+${download}+` | `+https://weechat.org/download/+`
| TIME | `+${time}+` | `+Sat, 08 Jul 2023 21:11:19 +0200+`
| VERSION | `+WeeChat ${version}+` | `+WeeChat 4.1.0-dev+`
|===
[[irc_target_buffer]]
=== Tampon cible pour les messages IRC
Il est possible de personnaliser le tampon cible pour les messages IRC (le
tampon utilisé pour afficher le message) avec les options `+irc.msgbuffer.*+`.
Pour certains messages IRC (voir la liste ci-dessous), vous pouvez utiliser
la valeur :
current::
tampon courant (si c'est un tampon IRC, sinon sur le tampon du serveur)
private::
tampon privé pour le pseudo, ou le tampon courant s'il n'est pas trouvé
(selon l'option _irc.look.msgbuffer_fallback_)
server::
tampon du serveur
weechat::
tampon "core" WeeChat
Lorsque l'option n'est pas définie (par défaut), WeeChat choisira
le tampon approprié, généralement le tampon du serveur ou du canal.
Liste non exhaustive des messages ou alias que vous pouvez paramétrer :
[width="100%",cols="^2m,^3m,15",options="header"]
|===
| message | alias | description
| error | | erreur
| invite | | invité sur un canal
| join | | join
| kick | | kick
| kill | | kill
| mode | | mode
| notice | | notice
| part | | part
| quit | | quit
| topic | | topic
| wallops | | wallops
| | ctcp | ctcp (envoyé ou reçu, dans un message privmsg ou notice)
| 221 | | chaîne de mode utilisateur
| 275 | whois | whois (connexion sécurisée)
| 301 | whois | whois (absent)
| 303 | | ison
| 305 | unaway | non absent
| 306 | away | absent
| 307 | whois | whois (pseudo enregistré)
| 310 | whois | whois (mode aide)
| 311 | whois | whois (utilisateur)
| 312 | whois | whois (serveur)
| 313 | whois | whois (opérateur)
| 314 | whowas | whowas
| 315 | who | who (fin)
| 317 | whois | whois (inactivité)
| 318 | whois | whois (fin)
| 319 | whois | whois (canaux)
| 320 | whois | whois (utilisateur identifié)
| 321 | list | list (début)
| 322 | list | list (canal)
| 323 | list | list (fin)
| 326 | whois | whois (a les privilèges oper)
| 327 | whois | whois (machine)
| 328 | | URL du canal
| 329 | | date de création du canal
| 330 | whois | whois (identifié comme)
| 331 | | pas de titre ("topic") pour le canal
| 332 | | titre du canal ("topic")
| 333 | | infos sur le titre ("topic")
| 335 | whois | whois (est un robot sur)
| 338 | whois | whois (machine)
| 341 | | invitation
| 343 | whois | whois (est opéré comme)
| 344 | reop | reop canal
| 345 | reop | reop canal (fin)
| 346 | invitelist | liste des invitations
| 347 | invitelist | liste des invitations (fin)
| 348 | exceptionlist | liste des exceptions
| 349 | exceptionlist | liste des exceptions (fin)
| 351 | | version du serveur
| 352 | who | who
| 353 | names | liste des utilisateurs sur le canal
| 366 | names | fin de la liste /names
| 367 | banlist | liste de bannissement
| 368 | banlist | fin de la liste de bannissement
| 369 | whowas | whowas (fin)
| 378 | whois | whois (connexion depuis)
| 379 | whois | whois (utilise les modes)
| 401 | whois | pas de tel pseudo/canal
| 402 | whois | pas de tel serveur
| 432 | | pseudo erroné
| 433 | | pseudo déjà en cours d'utilisation
| 438 | | pas autorisé à changer de pseudo
| 671 | whois | whois (connexion sécurisée)
| 728 | quietlist | liste des "quiet"
| 729 | quietlist | fin de la liste des "quiet"
| 732 | monitor | liste des pseudos surveillés
| 733 | monitor | liste des pseudos surveillés (fin)
| 901 | | vous êtes maintenant identifié
|===
Les autres messages numériques peuvent être paramétrés de la même manière.
Le message peut être préfixé par le nom du serveur pour être spécifique à un
serveur IRC (par exemple: `libera.whois`).
Quelques exemples :
* Afficher le résultat de `/whois` sur le tampon privé :
----
/set irc.msgbuffer.whois private
----
* Restaurer le tampon par défaut pour whois (tampon du serveur) :
----
/unset irc.msgbuffer.whois
----
* Afficher une invitation sur le tampon courant, pour le serveur "libera"
seulement :
----
/set irc.msgbuffer.libera.invite current
----
* Afficher le message "303" (ison) sur le tampon "core" WeeChat :
----
/set irc.msgbuffer.303 weechat
----
[[irc_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=irc_commands]
[[irc_options]]
=== Options
Sections dans le fichier _irc.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set irc.look.* | Aspect/présentation.
| color | /set irc.color.* | Couleurs.
| network | /set irc.network.* | Options réseau.
| msgbuffer | /set irc.msgbuffer.* | <<irc_target_buffer,Tampon cible pour les messages IRC>> (les options peuvent être ajoutées/supprimées dans la section).
| ctcp | /set irc.ctcp.* | <<irc_ctcp_replies,Réponses CTCP>> (les options peuvent être ajoutées/supprimées dans la section).
| ignore | <<command_irc_ignore,/ignore>> | Personnes ignorées.
| server_default | /set irc.server_default.* | Valeurs par défaut pour serveurs (les options peuvent être ajoutées/supprimées dans la section).
| server | <<command_irc_server,/server>> +
/set irc.server.* | Serveurs.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=irc_options]
[[xfer]]
== Xfer
L'extension Xfer permet :
* la discussion directe (entre deux machines, sans serveur), par exemple le
"DCC Chat" via l'extension IRC
* le transfert de fichiers, par exemple le "DCC" via l'extension IRC
[[xfer_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=xfer_commands]
[[xfer_options]]
=== Options
Sections dans le fichier _xfer.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set xfer.look.* | Aspect/présentation.
| color | /set xfer.color.* | Couleurs.
| network | /set xfer.network.* | Options réseau.
| file | /set xfer.file.* | Options pour les fichiers envoyés/reçus.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=xfer_options]
[[typing_notifications]]
== Notifications de saisie
L'extension typing est utilisée pour informer les autres utilisateurs quand
vous êtes en train d'écrire un message et afficher la liste des utilisateurs
qui écrivent actuellement un message sur un tampon.
Elle est utilisée par l'extension IRC sur les tampons de canaux et privés,
lorsque la capacité "message-tags" est activée (vous pouvez vérifier avec la
commande <<command_irc_cap,/cap>>). +
Sous le capot, l'étiquette client typing est utilisée, en suivant
https://ircv3.net/specs/client-tags/typing[cette spécification ^↗^^].
[[typing_activation]]
=== Activation
Pour des considérations de confidentialité, la fonctionnalité typing est
désactivée par défaut. +
Si vous voulez l'utiliser, vous devez activer des options dans les extensions
typing et irc :
----
/set typing.look.enabled_nicks on
/set typing.look.enabled_self on
/set irc.look.typing_status_nicks on
/set irc.look.typing_status_self on
----
Les notifications "typing" sont affichées à la fin de la barre de statut.
Exemple de barre de statut avec l'objet "typing" : "bob" écrit un message et
"alice" était en train d'en écrire un mais a fait une pause :
....
│[12:55] [6] [irc/libera] 3:#test(+n){4} [Écrit : bob, (alice)] │
│[@Flashy] █ │
└─────────────────────────────────────────────────────────────────────────────────┘
....
[[typing_signals_sent]]
=== Signaux envoyés
Lorsque vous écrivez un message (pas une commande commençant par `/`), l'extension
typing envoie des signaux pour informer les autres extensions (comme IRC) que
vous êtes en train d'écrire, et ces extensions peuvent alors envoyer des
notifications aux autres utilisateurs.
Les signaux suivants sont envoyés quand vous écrivez des messages :
[width="100%",cols="1,1,5",options="header"]
|===
| Signal | Paramètres | Description
| typing_self_typing | Pointeur : tampon. | Vous écrivez un message.
| typing_self_paused | Pointeur : tampon. | Vous avez fait une pause dans l'écriture d'un message.
| typing_self_cleared | Pointeur : tampon. | Vous avez effacé la ligne de commande sans envoyée le message.
| typing_self_sent | Pointeur : tampon. | Vous avez envoyé le message au tampon.
|===
[[typing_signals_caught]]
=== Signaux captés
L'extension typing capte des signaux qui peuvent être envoyés par d'autres
extensions (comme IRC), pour mettre à jour des tables de hachage internes
qui sont utilisées pour sauvegarder l'état d'écriture de message des pseudos
sur les tampons. Ces tables de hachages sont utilisées pour construire le
contenu de l'objet de barre "typing".
Les signaux suivants sont captés par l'extension typing :
[width="100%",cols="1,4,3",options="header"]
|===
| Signal | Paramètres | Description
| typing_set_nick
| Chaîne : pointeur tampon + ";" + état (un parmi ceux-ci : "off", "typing",
"paused", "cleared") + ";" + pseudo. +
Example: "0x1234abcd;typing;alice".
| Définir l'état de la saisie du pseudo sur le tampon.
| typing_reset_buffer
| Pointeur : tampon.
| Supprimer l'état de saisir pour tous les pseudos d'un tampon.
|===
[[typing_options]]
=== Options
Sections dans le fichier _typing.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set typing.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=typing_options]
[[relay]]
== Relay
L'extension Relay est utilisée pour relayer des données via le réseau, en
utilisant divers protocoles :
* _irc_ : proxy IRC : utilisé pour partager la connexions aux serveurs IRC avec
un ou plusieurs autres clients IRC
* _api_ : API REST HTTP, utilisée par WeeChat et les interfaces distantes pour
afficher et interagir avec WeeChat
* _weechat_ : protocole utilisé par les interfaces distantes pour afficher et
interagir avec WeeChat.
Pour les protocoles _api_ et _weechat_, voir la liste des interfaces distantes
sur https://weechat.org/about/interfaces/[cette page ^↗^^].
[[relay_password]]
=== Mot de passe
Il est fortement recommandé de définir un mot de passe pour le relai, avec ces
commandes :
----
/secure set relay motdepasse
/set relay.network.password "${sec.data.relay}"
----
Ce mot de passe est utilisé avec tous les protocoles.
[[relay_totp]]
=== TOTP
TOTP (« Time-based One-Time Password » : mot de passe à usage unique basé sur le
temps) peut être utilisé comme second facteur d'authentification pour les
protocoles _api_ et _weechat_, en plus du mot de passe.
Il est optionnel et augmente le niveau de sécurité.
Les mots de passe à usage unique peuvent être générés avec des applications,
par exemple :
* FreeOTP :
https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android ^↗^^],
https://apps.apple.com/fr/app/freeotp-authenticator/id872559395[iOS ^↗^^]
(https://freeotp.github.io/[site web ^↗^^])
* Google Authenticator :
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2[Android ^↗^^],
https://apps.apple.com/fr/app/google-authenticator/id388497605[iOS ^↗^^]
Le « secret » TOTP doit être défini dans WeeChat et dans l'application utilisée
pour générer les mots de passe à usage unique.
Il doit être une chaîne encodée en base32, avec seulement des lettres et des
chiffres de 2 à 7, par exemple :
----
/secure set relay_totp secretpasswordbase32
/set relay.network.totp_secret "${sec.data.relay_totp}"
----
[[relay_tls]]
=== TLS
Vous pouvez utiliser TLS en créant un certificat et clé privée et en utilisant
le préfixe "tls." dans le nom du protocole.
Le chemin par défaut vers le certificat/clé est défini par l'option
<<option_relay.network.tls_cert_key,relay.network.tls_cert_key>>.
Vous pouvez créer le certificat et la clé privée avec les commandes suivantes :
[source,shell]
----
mkdir -p ~/.config/weechat/tls
cd ~/.config/weechat/tls
openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out relay.pem
----
[NOTE]
Vous devez remplacer `~/.config/weechat` par le chemin vers votre répertoire de
config WeeChat qui peut aussi être par exemple `~/.weechat`.
Si WeeChat tourne déjà, vous pouvez recharger le certificat et clé privée avec la
commande :
----
/relay tlscertkey
----
[[relay_irc_proxy]]
=== Proxy IRC
L'extension Relay peut agir comme un proxy IRC : elle simulera un serveur IRC,
et vous pourrez vous connecter sur WeeChat avec n'importe quel autre client IRC
(y compris WeeChat lui-même).
Vous pouvez définir un port par serveur IRC, ou bien un port générique pour tous
les serveurs.
Lors de l'utilisation d'un port pour tous les serveurs, le client doit envoyer
le nom interne du serveur dans la commande IRC "PASS", avec le format
(voir l'exemple ci-dessous) :
----
PASS serveur:motdepasse
----
Exemple : proxy IRC avec TLS pour tout serveur (le client choisira) :
----
/relay add tls.irc 8000
----
Exemple : proxy IRC sans TLS seulement pour le serveur "libera" :
----
/relay add irc.libera 8000
----
Maintenant vous pouvez vous connecter sur le port 8000 avec n'importe quel
client IRC en utilisant le mot de passe "motdepasse" (ou "libera:motdepasse"
si aucun serveur n'a été spécifié dans le relai).
Par exemple si vous utilisez WeeChat comme client IRC du relai, avec un serveur
"relay" et un mot de passe relay "secret", vous pouvez configurer le mot de passe
avec ces commandes :
----
/secure set relay_libera libera:secret
/set irc.server.relay.password "${sec.data.relay_libera}"
----
[[relay_api_protocol]]
=== API protocol
L'extension Relay peut envoyer les données à un autre WeeChat ou une interface
distante avec un protocol HTTP de type API REST.
Vous pouvez parcourir et tester l'API en ligne :
https://weechat.org/api/[API Relay WeeChat ^↗^^].
Vous pouvez vous connecter avec WeeChat ou une interface distante, voir
https://weechat.org/about/interfaces/[cette page ^↗^^].
Par exemple :
----
/relay add api 9000
----
Maintenant vous pouvez vous connecter sur le port 9000 avec une interface
distante en utilisant le mot de passe "motdepasse".
Pour vous connecter à un relai _api_ avec WeeChat :
----
/remote add weechat http://localhost:9000 -password=motdepasse
/remote connect weechat
----
Pour vous connecter à un relai _api_ tournant ailleurs avec WeeChat
(TLS est fortement recommandé) :
----
/remote add weechat https://example.com:9000 -password=mypassword
/remote connect weechat
----
[NOTE]
Le WeeChat distant doit exposer exactement la même version d'API que le WeeChat
local, il est donc fortement recommandé d'utiliser exactement la même version
de WeeChat de chaque côté.
[[relay_weechat_protocol]]
=== Protocole WeeChat
L'extension Relay peut envoyer les données à une interface distante en
utilisant le protocole WeeChat.
Vous pouvez vous connecter avec une interface distante, voir
https://weechat.org/about/interfaces/[cette page ^↗^^].
[IMPORTANT]
WeeChat lui-même ne peut PAS se connecter sur un autre WeeChat avec ce
protocole.
Par exemple :
----
/relay add weechat 9500
----
Maintenant vous pouvez vous connecter sur le port 9500 avec une interface
distante en utilisant le mot de passe "motdepasse".
[[relay_websocket]]
=== WebSocket
Le protocole WebSocket
(https://datatracker.ietf.org/doc/html/rfc6455[RFC 6455 ^↗^^])
est supporté dans l'extension Relay pour tous les protocoles.
La poignée de main ("handshake") WebSocket est automatiquement détectée et le
socket devient prêt pour WebSocket si les en-tête requis sont trouvés dans la
poignée de main et si l'origine est autorisée (voir l'option
<<option_relay.network.websocket_allowed_origins,relay.network.websocket_allowed_origins>>).
Un WebSocket peut être ouvert dans une page HTML5 avec une seule ligne de
JavaScript :
[source,javascript]
----
websocket = new WebSocket("ws://example.com:9500/weechat");
----
Le port (9500 dans l'exemple) est le port défini dans l'extension Relay.
L'URI doit se terminer par "/weechat" pour les protocoles _irc_ et _weechat_ et
"/api" pour le protocole _api_.
[[relay_unix_socket]]
=== UNIX domain sockets
En utilisant l'option de protocole "unix" avec la commande `/relay add`,
vous pouvez écouter avec n'importe quel protocole sur un socket UNIX et un
chemin donné. Par exemple :
----
/relay add unix.weechat ${weechat_runtime_dir}/relay_socket
----
Cela autorise les clients à se connecter en utilisant le protocole weechat à
_/run/user/1000/weechat/relay_socket_. Cela est utile pour autoriser le
"SSH forwarding" pour les clients relay, quand d'autres ports ne peuvent pas
être ouverts.
Avec OpenSSH :
[source,shell]
----
ssh -L 9000:.weechat/relay_socket user@hostname
----
Cela redirige les clients relay locaux qui se connectent au port 9000 vers
l'instance de WeeChat qui tourne sur "hostname".
[[relay_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=relay_commands]
[[relay_options]]
=== Options
Sections dans le fichier _relay.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set relay.look.* | Aspect/présentation.
| color | /set relay.color.* | Couleurs.
| network | /set relay.network.* | Options réseau.
| irc | /set relay.irc.* | Options spécifiques au protocole irc (proxy irc).
| port | <<command_relay_relay,/relay add>> +
/set relay.port.* | Ports utilisés pour le relai (les options peuvent être ajoutées/supprimées dans la section).
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=relay_options]
[[external_commands]]
== Commandes externes
La commande `/exec` vous permet de lancer des commandes externes dans WeeChat et
d'afficher la sortie localement, ou de l'envoyer à un tampon.
[[exec_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=exec_commands]
[[exec_options]]
=== Options
Sections dans le fichier _exec.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| command | /set exec.command.* | Options pour les commandes.
| color | /set exec.color.* | Couleurs.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=exec_options]
[[fifo_pipe]]
== Tube FIFO
Vous pouvez contrôler WeeChat à distance, en envoyant des commandes ou du
texte dans un tube FIFO (si l'option _fifo.file.enabled_ est activée,
elle l'est par défaut).
Le tube FIFO est dans le répertoire WeeChat "runtime" et s'appelle
_weechat_fifo_12345_ par défaut (où _12345_ est le process id de WeeChat).
La syntaxe pour envoyer des commandes ou du texte dans le tube FIFO est une
des suivantes :
....
plugin.buffer *texte ou commande ici
*texte ou commande ici
....
Les barres obliques inverses peuvent être interprétées avec ce format, où `*`
est remplacé par `\`, autorisant par exemple l'envoi de messages multi-lignes :
....
plugin.buffer \texte ou commande ici
\texte ou commande ici
....
Quelques exemples :
* Changer le pseudo sur libera en "autrepseudo" :
[source,shell]
----
echo 'irc.server.libera */nick autrepseudo' >/run/user/1000/weechat/weechat_fifo_12345
----
* Envoyer un message sur le canal IRC #weechat :
[source,shell]
----
echo 'irc.libera.#weechat *bonjour !' >/run/user/1000/weechat/weechat_fifo_12345
----
* Envoyer un message multi-lignes sur le canal IRC #test, si la capacité
"draft/multiline" est activée sur le serveur ergo :
[source,shell]
----
echo 'irc.ergo.#test \bonjour\n...sur deux lignes !' >/run/user/1000/weechat/weechat_fifo_12345
----
* Envoyer un message sur le tampon courant :
[source,shell]
----
echo '*bonjour !' >/run/user/1000/weechat/weechat_fifo_12345
----
* Envoyer deux commandes pour décharger/recharger les scripts Python (vous devez
les séparer par "\n") :
[source,shell]
----
printf '%b' '*/python unload\n*/python autoload\n' >/run/user/1000/weechat/weechat_fifo_12345
----
[[fifo_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=fifo_commands]
[[fifo_options]]
=== Options
Sections dans le fichier _fifo.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| file | /set fifo.file.* | Contrôle du tube FIFO.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=fifo_options]
[[trigger]]
== Trigger
Trigger est le couteau suisse de WeeChat : il peut accrocher différentes choses
(signal, modificateur, print, ...), changer le contenu des données, et exécuter
une ou plusieurs commandes. Une condition peut être utilisée pour empêcher le
trigger de s'exécuter dans certaines circonstances.
Utiliser les triggers nécessite de connaître le fonctionnement des signaux,
modificateurs, etc. Il peut être utile de lire la
link:weechat_plugin_api.fr.html#hooks[Référence API extension WeeChat / Hooks ^↗^^].
[[trigger_default]]
=== Triggers par défaut
WeeChat créé 5 triggers par défaut, qui peuvent être désactivés, mis à jour ou
supprimés :
* un trigger _beep_ pour les notifications
* quatre autre triggers pour cacher les mots de passe à l'écran
Liste des triggers par défaut :
[width="100%",cols="5m,3,22",options="header"]
|===
| Nom | Hook | Description
| beep | print
| Faire un bip sur un message de highlight ou privé.
| cmd_pass | modifier
| Cacher le mot de passe dans les commandes :
`pass:[/msg nickserv id\|identify\|set password\|ghost\|release\|regain\|recover]`,
`pass:[/oper]`,
`pass:[/quote pass]`,
`pass:[/secure passphrase\|decrypt\|set]`.
| cmd_pass_register | modifier
| Cacher le mot de passe dans la commande `pass:[/msg nickserv register]`.
| msg_auth | modifier
| Cacher le mot de passe dans le message d'authentification IRC affiché
(message reçu du serveur après l'envoi de la commande par l'utilisateur).
| server_pass | modifier
| Cacher le mot de passe du serveur dans les commandes `/server` et `/connect`.
|===
[[trigger_anatomy]]
=== Anatomie d'un trigger
Un trigger a les options suivantes (les noms sont
`trigger.trigger.<nom>.<option>`) :
[width="100%",cols="2m,3,10",options="header"]
|===
| Option | Valeurs | Description
| enabled | `on`, `off`
| Lorsque l'option est `off`, le trigger est désactivé et les actions ne sont
plus exécutées.
| hook | `+signal+`, `+hsignal+`, `+modifier+`, `+line+`, `+print+`, `+command+`,
`+command_run+`, `+timer+`, `+config+`, `+focus+`, `+info+`, `+info_hashtable+`
| Le "hook" utilisé dans le trigger. Pour plus d'information, voir la
link:weechat_plugin_api.fr.html#hooks[Référence API extension WeeChat / Hooks ^↗^^].
| arguments | chaîne
| Les paramètres pour le "hook", ils dépendent du type de hook utilisé.
| conditions | chaîne
| Conditions pour exécuter le trigger : elles sont évaluées (voir la commande
<<command_weechat_eval,/eval>>).
| regex | chaîne
| Une ou plusieurs expressions régulières POSIX étendues, pour modifier les
données reçues dans la fonction de rappel du "hook" (et d'autres choses
ajoutées par l'extension trigger), voir <<trigger_regex,expression régulière>>.
| command | chaîne
| Commande à exécuter (plusieurs commandes peuvent être séparées par des
points-virgules) ; elle est évaluée (voir la commande
<<command_weechat_eval,/eval>>).
| return_code | `+ok+`, `+ok_eat+`, `+error+`
| Le code retour de la fonction de rappel (`ok` par défaut, qui devrait être
utilisé dans quasiment tous les triggers, les autres valeurs sont rarement
utilisées).
| post_action | `none`, `disable`, `delete`
| Action à effectuer sur le trigger après l'exécution (`none` par défaut, qui
devrait être utilisé dans quasiment tous les triggers, les autres valeurs sont
rarement utilisées).
|===
Par exemple, le trigger _beep_ par défaut a les options suivantes :
----
trigger.trigger.beep.enabled = on
trigger.trigger.beep.hook = print
trigger.trigger.beep.arguments = ""
trigger.trigger.beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})"
trigger.trigger.beep.regex = ""
trigger.trigger.beep.command = "/print -beep"
trigger.trigger.beep.return_code = ok
trigger.trigger.beep.post_action = none
----
[[trigger_execution]]
=== Exécution
Lorsque la fonction de rappel d'un trigger est appelée, les actions suivantes
sont exécutées, dans cet ordre, si les triggers sont globalement activés et si
le trigger lui-même est activé :
. vérifier les conditions du trigger : si faux, sortir
. remplacer du texte dans le trigger en utilisant des expressions régulières
. exécuter la/les commande(s)
. sortir avec un code retour (sauf pour les "hooks" _modifier_, _line_,
_focus_, _info_ et _info_hashtable_)
. effectuer l'action "post" (si différente de `none`).
[[trigger_hook_arguments]]
=== Paramètres du hook
Les paramètres dépendent du type de "hook" utilisé. Ils sont séparés par des
points-virgules.
[width="100%",cols="2,6,7,2",options="header"]
|===
| Hook | Paramètres | Exemples | Documentation (API)
| signal
| 1. nom de signal (priorité autorisée) (obligatoire) +
2. nom de signal (priorité autorisée) +
3. ...
| `+*,irc_in_privmsg+` +
`+*,irc_in_privmsg;*,irc_in_notice+` +
`+signal_sigwinch+`
| link:weechat_plugin_api.fr.html#_hook_signal[hook_signal ^↗^^]
| hsignal
| 1. nom de signal (priorité autorisée) (obligatoire) +
2. nom de signal (priorité autorisée) +
3. ...
| `+nicklist_nick_added+`
| link:weechat_plugin_api.fr.html#_hook_hsignal[hook_hsignal ^↗^^]
| modifier
| 1. nom de modificateur (priorité autorisée) (obligatoire) +
2. nom de modificateur (priorité autorisée) +
3. ...
| `+weechat_print+` +
`+5000\|input_text_display;5000\|history_add+`
| link:weechat_plugin_api.fr.html#_hook_modifier[hook_modifier ^↗^^]
| line
| 1. type de tampon +
2. nom de tampon +
3. étiquettes
| `+formatted+` +
`+free+` +
`+*;irc.libera.*+` +
`+*;irc.libera.#weechat+` +
`+formatted;irc.libera.#weechat;irc_notice+`
| link:weechat_plugin_api.fr.html#_hook_line[hook_line ^↗^^]
| print
| 1. nom de tampon +
2. étiquettes +
3. message +
4. suppression des couleurs (0/1)
| `+irc.libera.*+` +
`+irc.libera.#weechat+` +
`+irc.libera.#weechat;irc_notice+` +
`+*;;;1+`
| link:weechat_plugin_api.fr.html#_hook_print[hook_print ^↗^^]
| command
| 1. nom de commande (priorité autorisée) (obligatoire) +
2. description (évalué, voir la commande <<command_weechat_eval,/eval>>) +
3. paramètres (évalué, voir la commande <<command_weechat_eval,/eval>>) +
4. description des paramètres (évalué, voir la commande <<command_weechat_eval,/eval>>) +
5. complétion (évalué, voir la commande <<command_weechat_eval,/eval>>)
| `+test+` +
`+5000\|test+` +
`+test;commande de test;arg1 arg2;arg1: description 1${\n}arg2: description 2+`
| link:weechat_plugin_api.fr.html#_hook_command[hook_command ^↗^^]
| command_run
| 1. commande (priorité autorisée) (obligatoire) +
2. commande (priorité autorisée) +
3. ...
| `+/cmd paramètres+`
| link:weechat_plugin_api.fr.html#_hook_command_run[hook_command_run ^↗^^]
| timer
| 1. intervalle, en millisecondes (obligatoire) +
2. alignement sur la seconde (par défaut : 0) +
3. nombre maximum d'appels (par défaut : 0, qui signifie "sans fin")
| `+3600000+` +
`+60000;0;5+`
| link:weechat_plugin_api.fr.html#_hook_timer[hook_timer ^↗^^]
| config
| 1. nom d'option (priorité autorisée) (obligatoire) +
2. nom d'option (priorité autorisée) +
3. ...
| `+weechat.look.*+`
| link:weechat_plugin_api.fr.html#_hook_config[hook_config ^↗^^]
| focus
| 1. nom d'aire (priorité autorisée) (obligatoire) +
2. nom d'aire (priorité autorisée) +
3. ...
| `+buffer_nicklist+`
| link:weechat_plugin_api.fr.html#_hook_focus[hook_focus ^↗^^]
| info
| 1. nom de l'info (priorité autorisée) (obligatoire) +
2. nom de l'info (priorité autorisée) +
3. ...
| `+mon_info+`
| link:weechat_plugin_api.fr.html#_hook_info[hook_info ^↗^^]
| info_hashtable
| 1. nom de l'info (priorité autorisée) (obligatoire) +
2. nom de l'info (priorité autorisée) +
3. ...
| `+mon_info+`
| link:weechat_plugin_api.fr.html#_hook_info_hashtable[hook_info_hashtable ^↗^^]
|===
[[trigger_conditions]]
=== Conditions
Les conditions sont utilisées pour continuer l'exécution du trigger, ou tout
stopper.
Elles sont évaluées, et les données disponibles dans la fonction de rappel
peuvent être utilisées (voir
<<trigger_callback_data,données dans les callbacks>> et la commande
<<command_weechat_eval,/eval>>).
Exemple : le trigger _beep_ par défaut utilise cette condition pour faire un
beep seulement sur un highlight ou un message privé :
----
${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})
----
[[trigger_regex]]
=== Expression régulière
L'expression régulière est utilisée pour modifier des variables dans la table
de hachage de la fonction de rappel.
Le format est l'un des suivants :
----
/chaîne1/chaîne2
/chaîne1/chaîne2/var
s/chaîne1/chaîne2
s/chaîne1/chaîne2/var
y/chaîne1/chaîne2
y/chaîne1/chaîne2/var
----
Champs :
* `s` ou `y` : une lettre avec la commande ; si manquante, la commande par défaut
est `s` et le premier caractère est alors utilisé comme délimiteur :
** `s` : remplacement par expression régulière : la première chaîne est l'expression
régulière, la seconde chaîne est le remplacement pour chaque chaîne trouvée
** `y` : traduction de caractères : la première chaîne est un ensemble de caractères
qui sont remplacés par les caractères de la seconde chaîne ; une fois évaluée,
chaque chaîne doit contenir exactement le même nombre de caractères UTF-8
* `/` : le délimiteur d'expression régulière ; le caractère "/" peut être remplacé
par n'importe quel caractère (un ou plusieurs caractères identiques)
* `chaîne1` : la première chaîne (l'utilisation dépend de la commande)
* `chaîne2` : la seconde chaîne (l'utilisation dépend de la commande)
* `var` : la table de hachage avec la variable à mettre à jour
Plusieurs expressions régulières peuvent être séparées par un espace, par exemple :
----
s/regex1/remplacement1/var1 y/abcdef/ABDDEF/var2
----
[[trigger_regex_replace]]
==== Regex replace
Pour la commande `s`, le format est : `s/regex/remplacement` ou
`s/regex/remplacement/var` (où _var_ est une variable de la table de hachage).
Comme `s` est la commande par défaut, elle peut être omise, donc `/regex/replace`
est également valide (mais le premier caractère, qui est le délimiteur, ne doit
pas être une lettre).
Les groupes de correspondance peuvent être utilisés dans le _remplacement_ :
* `+${re:0}+` à `+${re:99}+` : `+${re:0}+` est la correspondance complète, `+${re:1}+`
à `+${re:99}+` sont les groupes capturés
* `pass:[${re:+}]` : la dernière correspondance (avec le numéro le plus élevé)
* `+${re:#}+` : index du dernier groupe capturé
* `+${re:repl_index}+` : index du remplacement en cours (démarre à 1)
* `+${hide:c,${re:N}}+` : la correspondance "N" avec tous les caractères
remplacés par "c" (exemple : `+${hide:*,${re:2}}+` est le groupe n°2 avec tous
les caractères remplacés par `+*+`).
Exemple : utiliser du gras pour les mots entre `+*+` :
----
s/\*([^ ]+)\*/*${color:bold}${re:1}${color:-bold}*/
----
Exemple : le trigger par défaut _server_pass_ utilise cette expression régulière
pour cacher le mot de passe dans les commandes `/server` et `/connect` (les
caractères des mots de passe sont remplacés par `+*+`) :
----
s==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}
----
[NOTE]
Dans cet exemple, le séparateur utilisé est "==" car il y a "/" dans
l'expression régulière.
[[trigger_regex_translate_chars]]
==== Translate chars
Pour la commande `y`, le format est : `y/caractères1/caractères2` ou
`y/caractères1/caractères2/var` (où _var_ est une variable de la table de hachage).
Exemple : remplacer "a", "b" et "c" par la lettre en majuscules :
----
y/abc/ABC/
----
Exemple : faire tourner une flèche dans le sens horaire :
----
y/←↑→↓/↑→↓←/
----
Exemple : convertir toutes les lettres en minuscules :
----
y/${chars:upper}/${chars:lower}/
----
Exemple : décaler toutes les lettres d'une position, en préservant la casse :
a→b, b→c … y→z, z→a :
----
y/${chars:a-z}${chars:A-Z}/${chars:b-z}a${chars:B-Z}A/
----
[[trigger_regex_variable]]
==== Variable
Si _var_ n'existe pas dans la table de hachage, elle est automatiquement créée
avec une valeur vide. Cela permet de créer des variables temporaires.
Si _var_ n'est pas spécifiée, la variable par défaut est utilisée, elle dépend
du type de hook :
[width="100%",cols="2,3,7",options="header"]
|===
| Hook | Variable par défaut | Mise à jour autorisée ^(1)^
| signal | tg_signal_data |
| hsignal | |
| modifier | tg_string | tg_string
| line | message | buffer, buffer_name, y, date, date_usec, date_printed, date_usec_printed, str_time, tags, notify_level, highlight, prefix, message
| print | tg_message |
| command | tg_argv_eol1 |
| command_run | tg_command |
| timer | tg_remaining_calls |
| config | tg_value |
| focus | |
| info | tg_info | tg_info
| info_hashtable | | toutes les variables reçues dans la table de hachage
|===
[NOTE]
^(1)^ Toutes les variables peuvent être mises à jour dans le trigger, mais
seulement ces variables ont un effet sur la valeur retournée par le trigger
et utilisée par WeeChat.
[[trigger_command]]
=== Commande
La commande est exécutée après le remplacement du texte avec l'expression
régulière.
Plusieurs commandes peuvent être séparées par des points-virgules.
Elle est évaluée (voir la commande <<command_weechat_eval,/eval>>) et le texte
remplacé avec l'expression régulière peut être utilisé dans la commande.
Exemple : le trigger par défaut _beep_ utilise cette commande pour produire un
beep (BEL) :
----
/print -beep
----
[[trigger_callback_data]]
=== Données dans les fonctions de rappel
Les données reçues dans les fonctions de rappel sont stockées dans des tables
de hachage (pointeurs et chaînes) et peuvent être utilisées dans les options
suivantes :
* _conditions_
* _regex_
* _command_
Le contenu des tables de hachage dépend du type de hook.
Une manière pratique de voir les données dans le trigger est d'ouvrir le tampon
moniteur des triggers :
----
/trigger monitor
----
Toutes les fonctions de rappel définissent les variables suivantes dans la table
de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_trigger_name | chaîne | Nom du trigger.
| tg_hook_type | chaîne | Type de hook : "signal", "command", etc.
|===
[[trigger_data_signal]]
==== Signal
La fonction de rappel "signal" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_signal | chaîne | Nom du signal.
| tg_signal_data | chaîne | Données envoyées avec le signal.
|===
Si le signal contient un message IRC, le message est analysé et les données
suivantes sont ajoutées dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| irc_server | pointeur | Pointeur vers le serveur IRC (les variables dans le hdata de type "irc_server" peuvent être utilisées, comme `+${irc_server.name}+`).
| irc_channel | pointeur | Pointeur vers le canal IRC (les variables dans le hdata de type "irc_channel" peuvent être utilisées, comme `+${irc_channel.name}+`).
| server | chaîne | Nom du serveur (exemple : "libera").
| tags | chaîne | Étiquettes dans le message (rarement utilisées).
| message_without_tags | chaîne | Message sans les étiquettes.
| nick | chaîne | Pseudo. ^(1)^
| host | chaîne | Nom d'hôte.
| command | chaîne | Commande IRC (exemple : "PRIVMSG", "NOTICE", ...).
| channel | chaîne | Canal IRC.
| arguments | chaîne | Paramètres de la commande (inclut la valeur de _channel_).
| text | chaîne | Texte (par exemple message utilisateur).
| pos_command | chaîne | L'index de _command_ dans le message ("-1" si _command_ n'a pas été trouvé).
| pos_arguments | chaîne | L'index de _arguments_ dans le message ("-1" si _arguments_ n'a pas été trouvé).
| pos_channel | chaîne | L'index de _channel_ dans le message ("-1" si _channel_ n'a pas été trouvé).
| pos_text | chaîne | L'index de _text_ dans le message ("-1" si _text_ n'a pas été trouvé).
|===
[NOTE]
^(1)^ Le pseudo est l'expéditeur du message. +
Votre propre pseudo sur le serveur est `${irc_server.nick}`.
Lorsque la donnée est un pointeur, la variable `+tg_signal_data+` peut être
utilisée comme ceci pour lire une propriété hdata (dans cet exemple il s'agit
d'un pointeur sur un tampon) :
----
${buffer[${tg_signal_data}].full_name}
----
[[trigger_data_hsignal]]
==== Hsignal
La fonction de rappel "hsignal" définit les variables suivantes dans la table
de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_signal | chaîne | Nom du signal
|===
La table de hachage contient toutes les clés/valeurs de la table de hachage
reçue (type : chaîne/chaîne).
[[trigger_data_modifier]]
==== Modifier
La fonction de rappel "modifier" définit les variables suivantes dans la table
de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_modifier | chaîne | Nom du modificateur.
| tg_modifier_data | chaîne | Données envoyées avec le modificateur.
| tg_string | chaîne | La chaîne qui peut être modifiée.
| tg_string_nocolor | chaîne | La chaîne sans les codes couleur.
|===
Pour le modificateur _weechat_print_, les variables en utilisant les étiquettes
du message sont ajoutées (voir le <<trigger_data_print,hook print>> ci-dessous),
ainsi que les variables suivantes :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon où le message est affiché.
| tg_plugin | chaîne | Extension du tampon où le message est affiché.
| tg_buffer | chaîne | Nom complet du tampon où le message est affiché.
| tg_prefix | chaîne | Préfixe du message affiché.
| tg_prefix_nocolor | chaîne | Préfixe sans les codes couleur.
| tg_message | chaîne | Message affiché.
| tg_message_nocolor | chaîne | Message sans les codes couleur.
|===
Si le modificateur contient un message IRC, le message est analysé et des
données supplémentaires sont ajoutées dans la table de hachage (voir le
<<trigger_data_signal,"hook" signal>>).
[[trigger_data_line]]
==== Line
La fonction de rappel "line" définit les variables suivantes dans la table
de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon.
| buffer_name | chaîne | Nom du tampon.
| buffer_type | chaîne | Type de tampon ("formatted" ou "free").
| y | chaîne | Numéro de ligne pour un tampon avec contenu libre (≥ 0), -1 pour un tampon avec contenu formaté.
| date | chaîne | Date de la ligne (horodatage).
| date_usec | chaîne | Microsecondes de la date de la ligne.
| date_printed | chaîne | Date d'affichage de la ligne (horodatage).
| date_usec_printed | chaîne | Microsecondes de la date d'affichage de la ligne.
| str_time | chaîne | Date pour l'affichage. Elle peut contenir des codes couleur.
| tags | chaîne | Étiquettes du message (avec une virgule en début/fin de chaîne).
| displayed | chaîne | "1" si affichée, "0" si la ligne est filtrée.
| notify_level | chaîne | "-1" = pas de notification, "0" = niveau bas, "1" = message, "2" = message privé, "3" = highlight
| highlight | chaîne | "1" si highlight, sinon "0".
| prefix | chaîne | Préfixe.
| tg_prefix_nocolor | chaîne | Préfixe sans les codes couleur.
| message | chaîne | Message.
| tg_message_nocolor | chaîne | Message sans les codes couleur.
|===
Variables définies avec les étiquettes du message :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_tags_count | chaîne | Nombre d'étiquettes dans le message.
| tg_tag_nick | chaîne | Pseudo (depuis l'étiquette "nick_xxx").
| tg_tag_prefix_nick | chaîne | Couleur du pseudo dans le préfixe (depuis l'étiquette "prefix_nick_ccc").
| tg_tag_host | chaîne | Nom d'utilisateur et hôte, format : utilisateur@hôte (depuis l'étiquette "host_xxx").
| tg_tag_notify | chaîne | Niveau de notification (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx | chaîne | Étiquette de message IRC (clé "xxx"). ^(1)^
| tg_notify | chaîne | Niveau de notification, si différent de _none_.
| tg_msg_pv | chaîne | "1" pour un message privé, sinon "0".
|===
[NOTE]
^(1)^ Les virgules sont remplacées par des point-virgules dans l'étiquette IRC
(clé et valeur).
[[trigger_data_print]]
==== Print
La fonction de rappel "print" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon.
| tg_date | chaîne | Date/heure du message (format : `%FT%T.%f`, voir la link:weechat_plugin_api.fr.html#_util_strftimeval[Référence API extension WeeChat / util_strftimeval ^↗^^]).
| tg_displayed | chaîne | "1" si affiché, "0" si ligne filtrée.
| tg_highlight | chaîne | "1" si highlight, sinon "0".
| tg_prefix | chaîne | Préfixe.
| tg_prefix_nocolor | chaîne | Préfixe sans les codes couleur.
| tg_message | chaîne | Message.
| tg_message_nocolor | chaîne | Message sans les codes couleur.
|===
Variables définies avec les étiquettes du message :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_tags | chaîne | Étiquettes du message (avec une virgule en début/fin de chaîne).
| tg_tags_count | chaîne | Nombre d'étiquettes dans le message.
| tg_tag_nick | chaîne | Pseudo (depuis l'étiquette "nick_xxx").
| tg_tag_prefix_nick | chaîne | Couleur du pseudo dans le préfixe (depuis l'étiquette "prefix_nick_ccc").
| tg_tag_host | chaîne | Nom d'utilisateur et hôte, format : utilisateur@hôte (depuis l'étiquette "host_xxx").
| tg_tag_notify | chaîne | Niveau de notification (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx | chaîne | Étiquette de message IRC (clé "xxx"). ^(1)^
| tg_notify | chaîne | Niveau de notification, si différent de _none_.
| tg_msg_pv | chaîne | "1" pour un message privé, sinon "0".
|===
[NOTE]
^(1)^ Les virgules sont remplacées par des point-virgules dans l'étiquette IRC
(clé et valeur).
[[trigger_data_command]]
==== Command
La fonction de rappel "command" définit les variables suivantes dans la table
de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon.
| tg_argc | chaîne | Nombre de paramètres (la commande elle-même compte pour un).
| tg_argvN | chaîne | Paramètre n°N (`+tg_argv0+` est la commande elle-même, les autres sont les paramètres de la commande).
| tg_argv_eolN | chaîne | Depuis le paramètre n°N jusqu'à la fin des paramètres (`+tg_argv_eol0+` inclut la commande elle-même).
| tg_shell_argc | chaîne | Nombre de paramètres avec un découpage comme le fait le shell (la commande elle-même compte pour un).
| tg_shell_argvN | chaîne | Paramètre n°N avec un découpage comme le fait le shell (`+tg_shell_argv0+` est la commande elle-même, les autres sont les paramètres de la commande).
|===
[[trigger_data_command_run]]
==== Command_run
La fonction de rappel "command_run" définit les variables suivantes dans la
table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon.
| tg_command | chaîne | Commande exécutée.
|===
[[trigger_data_timer]]
==== Timer
La fonction de rappel "timer" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_remaining_calls | chaîne | Nombre d'appels restants.
| tg_date | chaîne | Date/heure courante (format : `%FT%T.%f`, voir la link:weechat_plugin_api.fr.html#_util_strftimeval[Référence API extension WeeChat / util_strftimeval ^↗^^]).
|===
[[trigger_data_config]]
==== Config
La fonction de rappel "config" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_option | chaîne | Option.
| tg_value | chaîne | Valeur.
|===
[[trigger_data_focus]]
==== Focus
La fonction de rappel "focus" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| window | pointeur | Fenêtre.
| buffer | pointeur | Tampon.
|===
La table de hachage contient toutes les clés/valeurs de la table de hachage
reçue (type : chaîne/chaîne).
[[trigger_data_info]]
==== Info
La fonction de rappel "info" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_info_name | string | Nom de l'info.
| tg_arguments | string | Paramètres.
| tg_info | string | Chaîne vide (l'info à renvoyer).
|===
[[trigger_data_info_hashtable]]
==== Info_hashtable
La fonction de rappel "info_hashtable" définit les variables suivantes dans la
table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_info_name | string | Nom de l'info.
|===
La table de hachage contient toutes les clés/valeurs de la table de hachage
reçue (type : chaîne/chaîne).
[[trigger_examples]]
=== Exemples
[[trigger_example_url_color]]
==== Couleur pour les URLs
Afficher les URLs en vert :
----
/trigger add url_color modifier weechat_print "${tg_notify}" "==[a-zA-Z0-9_]+://[^ ]+==${color:green}${re:0}${color:reset}=="
----
[NOTE]
La simple expression régulière utilisée pour détecter l'URL peut ne pas capturer
correctement toutes les URLs, mais elle est plus rapide qu'une expression
régulière complexe.
[[trigger_example_auto_pong]]
==== Pong auto sur les requêtes ping
Lorsque quelqu'un envoie un "ping" dans un tampon privé, le trigger répondra
automatiquement avec un `pong` :
----
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
----
[[trigger_example_responsive_layout]]
==== Disposition réceptive
Les triggers suivants peuvent être utilisées pour personnaliser l'affichage
lorsque la taille du terminal change :
----
/trigger add resize_small signal signal_sigwinch "${info:term_width} < 100" "" "/bar hide nicklist"
/trigger add resize_big signal signal_sigwinch "${info:term_width} >= 100" "" "/bar show nicklist"
----
Les triggers attrapent le signal "signal_sigwinch", qui et envoyé par WeeChat
lorsque le signal SIGWINCH est reçu (lorsque la taille du terminal a changé).
La condition avec `+${info:term_width}+` vérifie la largeur du terminal (vous
pouvez aussi utiliser `+${info:term_height}+` si besoin).
Dans l'exemple, si le terminal devient petit, la liste de pseudos est cachée.
Et la barre est restaurée lorsque la largeur du terminal est supérieure ou
égale à 100 caractères.
[[trigger_example_config_save]]
==== Sauvegarde automatique de la configuration
Vous pouvez sauvegarder automatiquement les fichiers de configuration
(`+*.conf+`), par example chaque heure :
----
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
----
Les paramètres pour le minuteur sont :
* _3600000_ : 3600 * 1000 millisecondes, la fonction de rappel est appelée
toutes les heures
* _0_ : alignement sur la seconde (pas d'alignement ici)
* _0_ : nombre maximum d'appels (0 = pas de fin pour le minuteur)
La commande `/mute /save` sauvegarde silencieusement les fichiers de
configuration (rien n'est affiché sur le tampon "core").
[[trigger_commands]]
=== Commandes
include::{autogendir}/autogen_user_commands.fr.adoc[tag=trigger_commands]
[[trigger_options]]
=== Options
Sections dans le fichier _trigger.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set trigger.look.* | Aspect/présentation.
| color | /set trigger.color.* | Couleurs.
| trigger | <<command_trigger_trigger,/trigger add>> +
<<command_trigger_trigger,/trigger set>> +
/set trigger.trigger.* | Options des triggers.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=trigger_options]
[[extending_weechat]]
== Extension de WeeChat
WeeChat est conçu de manière modulaire et peut être étendu avec des extensions
et des scripts.
Il est important de bien faire la différence entre une _extension_ et un
_script_ : une _extension_ est un fichier binaire compilé et chargé avec la
commande `/plugin`, tandis qu'un _script_ est un fichier texte chargé par une
extension comme _python_ par la commande `/python`.
[[plugins]]
=== Extensions
Une extension est une bibliothèque dynamique, écrite en C et compilée, qui est
chargée par WeeChat.
Sous GNU/Linux, ce fichier a une extension ".so", et ".dll" sous Windows.
Les extensions trouvées sont automatiquement chargées par WeeChat lorsqu'il
démarre, et il est possible de charger et décharger des extensions pendant que
WeeChat tourne.
Vous pouvez utiliser la commande `/plugin` pour charger/décharger une
extension, ou afficher les extensions chargées.
Quand une extension est déchargée, WeeChat supprime :
* les tampons
* les options de configuration (les options sont écrites dans les fichiers)
* tous les "hooks" : commandes, modificateurs, processus, etc.
* les infos et infolists
* les "hdata"
* les objets de barre.
Exemples pour charger, décharger et afficher les extensions :
----
/plugin load irc
/plugin unload irc
/plugin list
----
Les extensions par défaut sont :
[width="100%",cols="1,5",options="header"]
|===
| Extension | Description
| alias | Définition d'alias pour les commandes.
| buflist | Objet de barre avec la liste des tampons.
| charset | Encodage/encodage avec jeu de caractère sur les tampons.
| exec | Exécution de commandes externes dans WeeChat.
| fifo | Tube FIFO pour envoyer des commandes à distance vers WeeChat.
| fset | Modification rapide des options de WeeChat et des extensions.
| irc | Discussion avec le protocole IRC.
| logger | Enregistrement des tampons dans des fichiers.
| relay | Relai de données via le réseau.
| script | Gestionnaire de scripts.
| python | Interface (API) pour scripts Python.
| perl | Interface (API) pour scripts Perl.
| ruby | Interface (API) pour scripts Ruby.
| lua | Interface (API) pour scripts Lua.
| tcl | Interface (API) pour scripts Tcl.
| guile | Interface (API) pour scripts Guile (scheme).
| javascript | Interface (API) pour scripts JavaScript.
| php | Interface (API) pour scripts PHP.
| spell | Vérification orthographique de la ligne de commande.
| trigger | Remplacement de texte et exécution de commande sur des évènements de WeeChat ou des extensions.
| typing | Affichage des utilisateurs qui sont en train d'écrire des messages.
| xfer | Transfert de fichier et discussion directe.
|===
Pour en apprendre plus sur le développement d'extension ou de script (via
l'API), merci de consulter la
link:weechat_plugin_api.fr.html[Référence API extension WeeChat ^↗^^] ou le
link:weechat_scripting.fr.html[Guide pour scripts WeeChat ^↗^^].
[[scripts]]
=== Scripts
WeeChat fournit 8 extensions pour scripts : Python, Perl, Ruby, Lua, Tcl,
Guile (scheme), JavaScript et PHP.
Ces extensions peuvent charger, exécuter et décharger des scripts pour ces
langages.
Pour plus d'informations sur comment écrire des scripts, ou sur l'API
WeeChat pour les scripts, merci de lire le
link:weechat_scripting.fr.html[Guide pour scripts WeeChat ^↗^^].
[[script_manager]]
==== Gestionnaire de scripts
Le gestionnaire de scripts (commands <<command_script_script,/script>>) est
utilisé pour charger/décharger des scripts pour n'importe quel langage, et
installer/supprimer des scripts du dépôt WeeChat, qui sont visibles sur
https://weechat.org/scripts/[cette page ^↗^^].
Pour des considérations de confidentialité, le téléchargement des scripts est
désactivé par défaut. +
Pour l'activer, tapez cette commande :
----
/script enable
----
Vous pouvez alors télécharger la liste des scripts et les afficher dans un tampon
avec la commande <<command_script_script,/script>> :
[subs="quotes,attributes"]
:x: *
....
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│322/322 scripts (filtre : {x}) | Tri : i,p,n | Alt+touche/entrée : i=installer, r=supprimer, l=charg>>│
│2.scripts│{x} autosort.py 3.10 2023-12-31 | Garder automatiquement les tampons group│
│ │{x} highmon.pl 2.7 2020-06-21 | Ajouter un tampon moniteur de highlights│
│ │{x}ia r grep.py 0.8.6 0.8.6 2022-11-11 | Recherche d'expression régulière dans le│
│ │{x} colorize_nicks.py 32 2023-10-30 | Utiliser la couleur des pseudos weechat │
│ │##{x}ia r go.py 3.0.1 3.0.1 2024-05-30 | Déplacement rapide dans les tampons. ##│
│ │ aesthetic.py 1.0.6 2020-10-25 | Affiche des messages de manière plus E S│
│ │ aformat.py 0.2 2018-06-21 | Formatage de texte alternatif, pratique │
│ │ alternatetz.py 0.4 2022-01-25 | Ajouter un objet de barre avec un fuseau│
│ │ amarok2.pl 0.7 2012-05-08 | Contrôler et afficher la musique jouée p│
│ │ amqp_notify.rb 0.1 2011-01-12 | Envoyer les messages privés et highlight│
│ │ announce_url_title.py 19 2021-06-05 | Annoncer le titre de l'URL à l'utilisate│
│ │ anotify.py 1.0.2 2020-05-16 | Notifications des messages privés, highl│
│ │ anti_password.py 1.2.1 2021-03-13 | Empêcher un mot de passe d'être envoyé a│
│ │ apply_corrections.py 1.3 2018-06-21 | Afficher le texte corrigé quand un utili│
│ │ arespond.py 0.1.2 2022-01-25 | Simple auto-réponse. │
│ │ atcomplete.pl 0.001 2016-10-29 | Complétion avec Tab des pseudos préfixés│
│ │ audacious.pl 0.3 2009-05-03 | Afficher la chanson actuellement jouée p│
│ │ auth.rb 0.3 2014-05-30 | S'authentifier automatiquement avec Nick│
│ │ auto_away.py 0.4 2018-11-11 | Un script simple d'auto absence (away). │
│ │ autoauth.py 1.3 2021-11-07 | Identification automatique en cas de cha│
│ │ autobump.py 0.1.0 2019-06-14 | Trier les tampons selon l'activité. │
│ │ autoconf.py 0.4 2021-05-11 | Charger/sauver automatiquement les optio│
│ │ autoconnect.py 0.3.3 2019-10-06 | Réouvrir les serveurs et canaux ouverts │
│ │ autojoin_on_invite.py 0.9 2022-10-25 | Rejoindre automatiquement les canaux où │
│ │ automarkbuffer.py 1.0 2015-03-31 | Marquer les tampons comme lus s'il n'y a│
│ │ automerge.py 0.2 2018-03-03 | Fusionner automatiquement les tampons se│
│ │[12:55] [2] [script] 2:scripts │
│ │█ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
....
[[script_commands]]
===== Commandes Script
include::{autogendir}/autogen_user_commands.fr.adoc[tag=script_commands]
[[script_options]]
===== Options Script
Sections dans le fichier _script.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set script.look.* | Aspect/présentation.
| color | /set script.color.* | Couleurs.
| scripts | /set script.scripts.* | Options pour le téléchargement des scripts.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=script_options]
[[scripting_plugins]]
==== Extensions pour les scripts
[[python_commands]]
===== Commandes Python
include::{autogendir}/autogen_user_commands.fr.adoc[tag=python_commands]
[[perl_commands]]
===== Commandes Perl
include::{autogendir}/autogen_user_commands.fr.adoc[tag=perl_commands]
[[ruby_commands]]
===== Commandes Ruby
include::{autogendir}/autogen_user_commands.fr.adoc[tag=ruby_commands]
[[lua_commands]]
===== Commandes Lua
include::{autogendir}/autogen_user_commands.fr.adoc[tag=lua_commands]
[[tcl_commands]]
===== Commandes Tcl
include::{autogendir}/autogen_user_commands.fr.adoc[tag=tcl_commands]
[[guile_commands]]
===== Commandes Guile
include::{autogendir}/autogen_user_commands.fr.adoc[tag=guile_commands]
[[php_commands]]
===== Commandes PHP
include::{autogendir}/autogen_user_commands.fr.adoc[tag=php_commands]
[[python_options]]
===== Options Python
Sections dans le fichier _python.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set python.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=python_options]
[[perl_options]]
===== Options Perl
Sections dans le fichier _perl.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set perl.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=perl_options]
[[ruby_options]]
===== Options Ruby
Sections dans le fichier _ruby.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set ruby.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=ruby_options]
[[lua_options]]
===== Options Lua
Sections dans le fichier _lua.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set lua.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=lua_options]
[[tcl_options]]
===== Options Tcl
Sections dans le fichier _tcl.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set tcl.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=tcl_options]
[[guile_options]]
===== Options Guile
Sections dans le fichier _guile.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set guile.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=guile_options]
[[php_options]]
===== Options PHP
Sections dans le fichier _php.conf_ :
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set php.look.* | Aspect/présentation.
|===
Options :
include::{autogendir}/autogen_user_options.fr.adoc[tag=php_options]
[[support]]
== Support
Avant de faire appel au support, merci de lire la documentation et la FAQ de
WeeChat.
Pour le support via IRC, sur le serveur _irc.libera.chat_ :
* canaux officiels (avec les développeurs) :
** _#weechat_ (Anglais)
** _#weechat-fr_ (Français)
* canaux non officiels :
** _#weechat-de_ (Allemand)
** _#weechat-fi_ (Finnois)
Pour les autres formes de support, voir
https://weechat.org/about/support/[cette page ^↗^^].
|