diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 9e5f811c612..fbe0cf7103b 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -21,6 +21,7 @@ New features:: * buflist: increase max number of buflist items from 3 to 5 (issue #1703) * fset: add variable `allowed_values` in options, add options fset.color.allowed_values and fset.color.allowed_values_selected * fset: allow long type name in type filter + * irc: add buffer for /list reply, add options irc.color.list_buffer_line_selected, irc.color.list_buffer_line_selected_bg, irc.look.list_buffer_sort, irc.look.list_buffer_scroll_horizontal, irc.look.new_list_position, irc.look.list_buffer_topic_strip_colors (issue #1972) * irc: display commands 716/717 in private buffer (if present) (issue #146) * irc: create default options irc.ctcp.* when file irc.conf is created (issue #1974) * irc: evaluate options irc.ctcp.* (issue #1974) diff --git a/doc/en/weechat_dev.en.adoc b/doc/en/weechat_dev.en.adoc index 0fdd8e402dd..b84d891eee0 100644 --- a/doc/en/weechat_dev.en.adoc +++ b/doc/en/weechat_dev.en.adoc @@ -281,6 +281,7 @@ WeeChat "core" is located in following directories: |       irc-info.c | IRC info/infolists/hdata. |       irc-input.c | Input of commands/text. |       irc-join.c | Functions for list of channels to join. +|       irc-list.c | Buffer for reply to /list command. |       irc-message.c | Functions to manipulate IRC messages. |       irc-mode.c | Functions about channel/nick modes. |       irc-modelist.c | IRC channel mode lists (+b, +e, +I, ...). @@ -439,6 +440,7 @@ WeeChat "core" is located in following directories: |             test-irc-ctcp.cpp | Tests: IRC CTCP. |             test-irc-ignore.cpp | Tests: IRC ignores. |             test-irc-join.cpp | Tests: IRC join functions. +|             test-irc-list.cpp | Tests: IRC buffer for reply to /list command. |             test-irc-message.cpp | Tests: IRC messages. |             test-irc-mode.cpp | Tests: IRC modes. |             test-irc-nick.cpp | Tests: IRC nicks. diff --git a/doc/fr/weechat_dev.fr.adoc b/doc/fr/weechat_dev.fr.adoc index 69385b1a079..d82a0ead92d 100644 --- a/doc/fr/weechat_dev.fr.adoc +++ b/doc/fr/weechat_dev.fr.adoc @@ -283,6 +283,7 @@ Le cœur de WeeChat est situé dans les répertoires suivants : |       irc-info.c | Info/infolists/hdata pour IRC. |       irc-input.c | Entrée de commandes/texte. |       irc-join.c | Fonctions pour les listes de canaux à rejoindre. +|       irc-list.c | Tampon pour la réponse à la commande /list. |       irc-message.c | Fonctions pour manipuler les messages IRC. |       irc-mode.c | Fonctions pour les modes de canal/pseudo. |       irc-modelist.c | Listes de modes de canaux IRC (+b, +e, +I, ...). @@ -441,6 +442,7 @@ Le cœur de WeeChat est situé dans les répertoires suivants : |             test-irc-ctcp.cpp | Tests : CTCP IRC. |             test-irc-ignore.cpp | Tests : ignores IRC. |             test-irc-join.cpp | Tests : fonctions de join IRC. +|             test-irc-list.cpp | Tests : tampon IRC pour la réponse à la commande /list. |             test-irc-message.cpp | Tests : messages IRC. |             test-irc-mode.cpp | Tests : modes IRC. |             test-irc-nick.cpp | Tests : pseudos IRC. diff --git a/doc/ja/weechat_dev.ja.adoc b/doc/ja/weechat_dev.ja.adoc index c6fcb515e7b..6d47cde1015 100644 --- a/doc/ja/weechat_dev.ja.adoc +++ b/doc/ja/weechat_dev.ja.adoc @@ -295,6 +295,8 @@ WeeChat "core" は以下のディレクトリに配置されています: |       irc-input.c | コマンドおよびテキストの入力 // TRANSLATION MISSING |       irc-join.c | Functions for list of channels to join. +// TRANSLATION MISSING +|       irc-list.c | Buffer for reply to /list command. |       irc-message.c | IRC メッセージを操作する関数 |       irc-mode.c | チャンネルおよびニックネームのモードを操作する関数 |       irc-modelist.c | IRC チャンネルモードリスト (+b、+e、+I、...). @@ -485,6 +487,8 @@ WeeChat "core" は以下のディレクトリに配置されています: // TRANSLATION MISSING |             test-irc-join.cpp | Tests: IRC join functions. // TRANSLATION MISSING +|             test-irc-list.cpp | Tests: IRC buffer for reply to /list command. +// TRANSLATION MISSING |             test-irc-message.cpp | Tests: IRC messages. // TRANSLATION MISSING |             test-irc-mode.cpp | Tests: IRC modes. diff --git a/doc/sr/weechat_dev.sr.adoc b/doc/sr/weechat_dev.sr.adoc index da2651d3f5b..b240d41cfd4 100644 --- a/doc/sr/weechat_dev.sr.adoc +++ b/doc/sr/weechat_dev.sr.adoc @@ -283,6 +283,8 @@ WeeChat „језгро” се налази у следећим директо |       irc-info.c | IRC info/infolists/hdata. |       irc-input.c | Унос команди/текста. |       irc-join.c | Функције за листе канала којима се приступа. +// TRANSLATION MISSING +|       irc-list.c | Buffer for reply to /list command. |       irc-message.c | Функције за манипулисање IRC порукама. |       irc-mode.c | Функције у вези режима канала/надимка. |       irc-modelist.c | Листе режима IRC канала (+b, +e, +I, ...). @@ -442,6 +444,8 @@ WeeChat „језгро” се налази у следећим директо |             test-irc-ctcp.cpp | Tests: IRC CTCP. |             test-irc-ignore.cpp | Тестови: IRC игнорисања. |             test-irc-join.cpp | Тестови: IRC функције приступања. +// TRANSLATION MISSING +|             test-irc-list.cpp | Tests: IRC buffer for reply to /list command. |             test-irc-message.cpp | Тестови: IRC поруке. |             test-irc-mode.cpp | Тестови: IRC режими. |             test-irc-nick.cpp | Тестови: IRC надимци. diff --git a/po/cs.po b/po/cs.po index 7b20a3e6bff..357935fb6c7 100644 --- a/po/cs.po +++ b/po/cs.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-26 21:34+0200\n" "Last-Translator: Ondřej Súkup \n" "Language-Team: weechat-dev \n" @@ -6900,6 +6900,9 @@ msgstr "%s%s: nedostatek paměti pro regulární výraz" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" není validní regulární výraz (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -7717,39 +7720,79 @@ msgid "list channels and their topics" msgstr "vypsat kanály a jejich témata" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [[,...]] [[,...]]" -#, fuzzy msgid "" " server: send to this server (internal name)\n" " regex: POSIX extended regular expression used to filter results (case " "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" kanál: kanál, který vypsat\n" -"server: jméno serveru\n" -"regexp: regulární výraz pro filtrování výsledků\n" -"\n" -"Příklady:\n" -" vypsat všechny kanály na serveru (na velkých sítích může být velmi " -"pomalé):\n" -" /list\n" -" vypsat kanál #weechat:\n" -" /list #weechat\n" -" vypsat všechny kanály začínající na \"#weechat\" (na velkých sítích může " -"být velmi pomalé):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "získat statistiku o velikosti IRC sítě" @@ -9146,6 +9189,21 @@ msgstr "" "kanálu nezačíná se správným znakem druhu kanálu na serveru; například: \"/" "join weechat\" ve skutečnosti odešle: \"/join #weechat\"" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "barva textu v skript buferu" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -9162,6 +9220,20 @@ msgstr "" "by být poslední buffer), next = aktuální buffer + 1, near_server = za " "posledním kanálem/pv serveru)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"vynutit pozici nového soukroméno bufferu v seznamu bufferů (none = výchozí " +"pozice (měl by být poslední buffer), next = aktuální buffer + 1, near_server " +"= za posledním kanálem/pv serveru)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -9378,6 +9450,14 @@ msgstr "barva přípony přezdívky (přípona je uživatelský řetězec za př msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "barva přípony přezdívky (přípona je uživatelský řetězec za přezdívkou)" +#, fuzzy +msgid "color for selected line on /list buffer" +msgstr "barva textu řádku vybraného klienta" + +#, fuzzy +msgid "background color for selected line on /list buffer" +msgstr "barva textu řádku vybraného klienta" + #, fuzzy msgid "color for text in account messages" msgstr "barva textu vezprávách připojení" @@ -9784,6 +9864,12 @@ msgstr "irc server" msgid "irc batch" msgstr "irc kanál" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sCTCP dotaz pro %s%s%s: %s%s%s%s%s" @@ -9796,6 +9882,17 @@ msgstr "%s%s: nejste připojen k serveru" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: tenhle buffer není kanál!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: chyba ve funkci \"%s\"" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: nemohu přidělit nový kanál" @@ -14212,3 +14309,42 @@ msgstr "%s%s: vypršel časový limit \"%s\" pro %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: nemohu se připojit\" neočekávaná chyba (%d)" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "sekce konfigu" + +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "barva textu řádku vybraného klienta" + +#, fuzzy +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " kanál: kanál, který vypsat\n" +#~ "server: jméno serveru\n" +#~ "regexp: regulární výraz pro filtrování výsledků\n" +#~ "\n" +#~ "Příklady:\n" +#~ " vypsat všechny kanály na serveru (na velkých sítích může být velmi " +#~ "pomalé):\n" +#~ " /list\n" +#~ " vypsat kanál #weechat:\n" +#~ " /list #weechat\n" +#~ " vypsat všechny kanály začínající na \"#weechat\" (na velkých sítích " +#~ "může být velmi pomalé):\n" +#~ " /list -re #weechat.*" diff --git a/po/de.po b/po/de.po index 3d43649cd07..141cec3f0ad 100644 --- a/po/de.po +++ b/po/de.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-08-08 07:12+0200\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -8687,6 +8687,9 @@ msgstr "%s%s: Nicht genügend Speicher für regulären Ausdruck vorhanden" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" ist kein korrekter regulärer Ausdruck (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -9690,7 +9693,12 @@ msgstr "" msgid "list channels and their topics" msgstr "Kanäle und deren Themen auflisten" -msgid "[-server ] [-re ] [[,...]] []" +#, fuzzy +#| msgid "" +#| "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [-re ] [[,...]] []" msgid "" @@ -9699,33 +9707,68 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" server: an diesen Server senden (interner Name)\n" -" regexp: erweiterter regulärer POSIX Ausdruck, der auf die Ausgabe " -"angewendet werden soll (zwischen Groß- und Kleinschreibung wird nicht " -"unterschieden. Um zwischen Groß- und Kleinschreibung zu unterscheiden muss " -"zu Beginn \"(?-i)\" genutzt werden)\n" -"channel: aufzulistender Kanal\n" -" target: Servername\n" -"\n" -"Beispiele:\n" -" listet alle Kanäle des Servers auf (dies kann bei großen Netzwerken sehr " -"lange dauern):\n" -" /list\n" -" listet den Kanal #weechat auf:\n" -" /list #weechat\n" -" listet alle Kanäle auf die mit \"#weechat\" beginnen (dies kann bei großen " -"Netzwerken sehr lange dauern):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "Statistik über die Größe des IRC-Netzwerks abfragen" @@ -11357,6 +11400,36 @@ msgstr "" "der Benutzung des /join Befehls der angegebene Kanalname keinen gültigen Typ " "besitzt; Beispiel: \"/join weechat\" wird als: \"/join #weechat\" versendet" +#, fuzzy +#| msgid "left/right scroll in fset buffer (percent of width)" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "links/rechts im fset Buffer scrollen (prozentual zur Breite)" + +#, fuzzy +#| msgid "" +#| "comma-separated list of fields to sort options (see /help fset for a list " +#| "of fields); char \"-\" can be used before field to reverse order, char " +#| "\"~\" can be used to do a case insensitive comparison; example: \"-" +#| "~name\" for case insensitive and reverse sort on option name" +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"durch Kommata getrennte Liste von Feldern um die Optionen zu sortieren " +"(siehe /help fset um eine Auflistung der Felder zu erhalten); wird das \"-\" " +"Zeichen vor einem Feld angewendet, wird die Ausgabe umgekehrt, um bei einem " +"Vergleich nicht zwischen Groß- und Kleinschreibung zu unterscheiden wird das " +"Zeichen \"~\" verwendet; Beispiel: \"-~name\" sortiert die Optionsnamen in " +"umgekehrter Reihenfolge und es wird dabei nicht zwischen Groß-und " +"Kleinschreibung unterschieden" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "Textfarbe im Skript-Buffer" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -11374,6 +11447,21 @@ msgstr "" "aktueller Buffer + 1, near_server = nach dem letztem Kanal/privaten Buffer " "des jeweiligen Servers)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"ein neuer privater Buffer wird auf eine Position gezwungen (none = " +"standardmäßige Position (sollte der letzte Buffer in der Liste sein), next = " +"aktueller Buffer + 1, near_server = nach dem letztem Kanal/privaten Buffer " +"des jeweiligen Servers)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -11635,6 +11723,16 @@ msgstr "" "Farbe die für eine sicherere TLS-Version im Bar-Item \"tls_version\" genutzt " "wird" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "Textfarbe für den Auswahlbalken im Skript-Buffer" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "Hintergrundfarbe" + msgid "color for text in account messages" msgstr "Textfarbe für \"account\" Nachrichten" @@ -12088,6 +12186,12 @@ msgstr "IRC-Server" msgid "irc batch" msgstr "IRC-Batch" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sCTCP Anfrage an %s%s%s: %s%s%s%s%s" @@ -12100,6 +12204,17 @@ msgstr "%s%s: Es besteht keine Verbindung zum Server" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: Dieser Buffer ist kein Kanal!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: Fehler in Funktion \"%s\"" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: Neue Modeliste konnte nicht alloziert werden" @@ -16994,3 +17109,47 @@ msgstr "%s%s: Zeitüberschreitung für \"%s\" mit %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "" "%s%s: Verbindung konnte nicht hergestellt werden: unerwarteter Fehler (%d)" + +#, fuzzy +#~| msgid "color for section" +#~ msgid "color for selected line" +#~ msgstr "Farbe für Sektion" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "Hintergrundfarbe" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " server: an diesen Server senden (interner Name)\n" +#~ " regexp: erweiterter regulärer POSIX Ausdruck, der auf die Ausgabe " +#~ "angewendet werden soll (zwischen Groß- und Kleinschreibung wird nicht " +#~ "unterschieden. Um zwischen Groß- und Kleinschreibung zu unterscheiden " +#~ "muss zu Beginn \"(?-i)\" genutzt werden)\n" +#~ "channel: aufzulistender Kanal\n" +#~ " target: Servername\n" +#~ "\n" +#~ "Beispiele:\n" +#~ " listet alle Kanäle des Servers auf (dies kann bei großen Netzwerken " +#~ "sehr lange dauern):\n" +#~ " /list\n" +#~ " listet den Kanal #weechat auf:\n" +#~ " /list #weechat\n" +#~ " listet alle Kanäle auf die mit \"#weechat\" beginnen (dies kann bei " +#~ "großen Netzwerken sehr lange dauern):\n" +#~ " /list -re #weechat.*" diff --git a/po/es.po b/po/es.po index 533ff79793f..c1ba92385f4 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-26 21:34+0200\n" "Last-Translator: Santiago Forero \n" "Language-Team: weechat-dev \n" @@ -7541,6 +7541,9 @@ msgstr "%s%s: no hay suficiente memoria para la expresión regular" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" no es una expresión regular válida (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -8368,40 +8371,79 @@ msgid "list channels and their topics" msgstr "lista canales y sus temas" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [[,...]] [[,...]]" -#, fuzzy msgid "" " server: send to this server (internal name)\n" " regex: POSIX extended regular expression used to filter results (case " "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" canal: canal a listar\n" -"servidor: nombre del servidor\n" -" regexp: expresión regular a usar para filtrar resultados (insensible a las " -"mayúsculas, puede empezar con \"(?-i)\" para hacerlo sensible)\n" -"\n" -"Ejemplos:\n" -" listar todos los canales en el servidor (puede ser muy lento en redes " -"grandes):\n" -" /list\n" -" listar canal #weechat:\n" -" /list #weechat\n" -" listar todos los canales que empiecen con \"#weechat\" (puede ser muy " -"lento en redes grandes):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "obtener estadísticas sobre el tamaño de la red IRC" @@ -9847,6 +9889,21 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "color del texto en el buffer de scripts" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -9863,6 +9920,20 @@ msgstr "" "predeterminada (último buffer), next = buffer actual + 1, near_server = " "después del último canal/privado del server)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"fuerza la posición de nuevos privados en la lista de buffers (none = " +"posición predeterminada (último buffer), next = buffer actual + 1, " +"near_server = después del último canal/privado del server)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -10087,6 +10158,16 @@ msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "" "color del sufijo del apodo (el sufijo es el texto mostrado después del apodo)" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "color del texto para la línea seleccionada en el buffer de scripts" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "color de fondo para la línea seleccionada en el buffer de scripts" + #, fuzzy msgid "color for text in account messages" msgstr "color para el texto en mensajes de unión" @@ -10518,6 +10599,12 @@ msgstr "servidor irc" msgid "irc batch" msgstr "canal irc" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sconsulta CTCP a %s%s%s: %s%s%s%s%s" @@ -10530,6 +10617,17 @@ msgstr "%s%s: no estas conectado a ningún servidor" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: ¡este buffer no es un canal!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: error en la función \"%s\"" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: no se pudo crear un nuevo canal" @@ -14887,3 +14985,44 @@ msgstr "%s%s: tiempo de espera máximo para \"%s\" con %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: no es posible conectarse: error (%d)" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "sección de configuración" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "color de fondo para la línea seleccionada en el buffer de scripts" + +#, fuzzy +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " canal: canal a listar\n" +#~ "servidor: nombre del servidor\n" +#~ " regexp: expresión regular a usar para filtrar resultados (insensible a " +#~ "las mayúsculas, puede empezar con \"(?-i)\" para hacerlo sensible)\n" +#~ "\n" +#~ "Ejemplos:\n" +#~ " listar todos los canales en el servidor (puede ser muy lento en redes " +#~ "grandes):\n" +#~ " /list\n" +#~ " listar canal #weechat:\n" +#~ " /list #weechat\n" +#~ " listar todos los canales que empiecen con \"#weechat\" (puede ser muy " +#~ "lento en redes grandes):\n" +#~ " /list -re #weechat.*" diff --git a/po/fr.po b/po/fr.po index 5b952c89be9..456171e623f 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" -"PO-Revision-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" +"PO-Revision-Date: 2023-08-12 10:59+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -8523,6 +8523,9 @@ msgstr "%s%s : pas assez de mémoire pour l'expression régulière" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s : \"%s\" n'est pas une expression régulière valide (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "Réception de la liste des canaux, merci de patienter..." + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -9517,8 +9520,12 @@ msgstr "" msgid "list channels and their topics" msgstr "lister les canaux et leurs titres" -msgid "[-server ] [-re ] [[,...]] []" -msgstr "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" +msgstr "" +"[-server ] [-re ] [[,...]] [] || -up|-" +"down [] || -left|-right [] || -go |end || -join" msgid "" " server: send to this server (internal name)\n" @@ -9526,15 +9533,67 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" "serveur : envoyer à ce serveur (nom interne)\n" " regex : expression régulière POSIX étendue utilisée pour filtrer les " @@ -9542,16 +9601,76 @@ msgstr "" "sensible à la casse)\n" " canal : canal à lister\n" " cible : nom du serveur\n" +" -up : déplacer la ligne sélectionnée de \"nombre\" lignes vers le haut\n" +" -down : déplacer la ligne sélectionnée de \"nombre\" lignes vers le bas\n" +" -left : faire défier le tampon fset de \"pourcentage\" de largeur vers la " +"gauche\n" +" -right : faire défier le tampon fset de \"pourcentage\" de largeur vers la " +"droite\n" +" -go : sélectionner une ligne par numéro, la première ligne est 0 " +"(\"end\" pour sélectionner la dernière ligne)\n" +" -join : rejoindre le canal sur la ligne sélectionnée\n" +"\n" +"Touches et entrée sur le tampon /list :\n" +" haut se déplacer d'une ligne vers le haut\n" +" bas se déplacer d'une ligne vers le bas\n" +" pgup se déplacer d'une page vers le haut\n" +" pgdn se déplacer d'une page vers le bas\n" +" alt-home << se déplacer à la première ligne\n" +" alt-end >> se déplacer à la dernière ligne\n" +" F11 < faire défiler horizontalement vers la gauche\n" +" F12 > faire défiler horizontalement vers la droite\n" +" * afficher tous les canaux (pas de filtre)\n" +" xxx afficher seulement les canaux avec \"xxx\" dans " +"le nom ou le titre\n" +" n:xxx afficher seulement les canaux avec \"xxx\" dans " +"le nom\n" +" u:n afficher seulement les canaux avec au moins \"n\" " +"utilisateurs\n" +" u:>n afficher seulement les canaux avec plus de \"n\" " +"utilisateurs\n" +" u: 10\n" +" tri des canaux par nombre d'utilisateurs (gros canaux en premier) puis " +"\"name2\" (nom sans le préfixe):\n" +" s:-users,name2" msgid "get statistics about the size of the IRC network" msgstr "obtenir des statistiques sur la taille du réseau IRC" @@ -11146,6 +11265,25 @@ msgstr "" "valide pour le serveur ; par exemple \"/join weechat\" enverra en fait : \"/" "join #weechat\"" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" +"défilement gauche/droite dans le tampon /list (pourcentage de la largeur)" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"liste de champs séparés par des virgules pour trier les options (voir /help " +"list pour la liste des champs) ; le caractère \"-\" peut être utilisé pour " +"inverser l'ordre, le caractère \"~\" peut être utilisé pour effectuer une " +"comparaison insensible à la casse ; exemple : \"-count,~name\" pour les plus " +"gros canaux en premier puis tri insensible à la casse sur le nom" + +msgid "strip channel topic colors in /list buffer" +msgstr "supprimer les couleurs des titres des canaux dans le tampon /list" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -11162,6 +11300,15 @@ msgstr "" "position par défaut (devrait être le dernier tampon), next = tampon courant " "+ 1, near_server = après le dernier canal/privé du serveur)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"force la position du nouveau tampon /list dans la liste des tampons (none = " +"position par défaut (devrait être le dernier tampon), next = tampon courant " +"+ 1, near_server = après le dernier canal/privé du serveur)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -11416,6 +11563,12 @@ msgstr "" "couleur pour la version de TLS la plus haute dans l'objet de barre " "\"tls_version\"" +msgid "color for selected line on /list buffer" +msgstr "couleur du texte pour la ligne sélectionnée dans le tampon /list" + +msgid "background color for selected line on /list buffer" +msgstr "couleur du fond pour la ligne sélectionnée dans le tampon /list" + msgid "color for text in account messages" msgstr "couleur pour le texte dans les messages account" @@ -11846,6 +11999,12 @@ msgstr "serveur irc" msgid "irc batch" msgstr "batch irc" +msgid "irc channel on /list buffer" +msgstr "canal irc sur le tampon /list" + +msgid "irc data for /list buffer" +msgstr "données irc sur le tampon /list" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sDemande CTCP vers %s%s%s : %s%s%s%s%s" @@ -11858,6 +12017,18 @@ msgstr "%s%s : vous n'êtes pas connecté au serveur" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s : ce tampon n'est pas un canal !" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" +"%d canaux (total : %d) | Filtre : %s | Tri : %s | Touche(entrée) : " +"ctrl+j=rejoindre canal, ($)=rafraîchir, (q)=fermer le tampon" + +#, c-format +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s : erreur dans la redirection de /list : %s" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s : impossible d'allouer une nouvelle liste de modes" @@ -16687,3 +16858,42 @@ msgstr "%s%s : délai d'attente dépassé pour \"%s\" avec %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s : impossible de se connecter : erreur inattendue (%d)" + +#~ msgid "color for selected line" +#~ msgstr "couleur pour la ligne sélectionnée" + +#~ msgid "background color for selected line" +#~ msgstr "couleur du fond pour la ligne sélectionnée" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ "serveur : envoyer à ce serveur (nom interne)\n" +#~ " regex : expression régulière POSIX étendue utilisée pour filtrer les " +#~ "résultats (insensible à la casse, peut commencer par \"(?-i)\" pour " +#~ "devenir sensible à la casse)\n" +#~ " canal : canal à lister\n" +#~ " cible : nom du serveur\n" +#~ "\n" +#~ "Exemples :\n" +#~ " lister tous les canaux du serveur (peut être très lent pour les grands " +#~ "réseaux) :\n" +#~ " /list\n" +#~ " lister le canal #weechat :\n" +#~ " /list #weechat\n" +#~ " lister tous les canaux commençant par \"#weechat\" (peut être très lent " +#~ "pour les grands réseaux) :\n" +#~ " /list -re #weechat.*" diff --git a/po/hu.po b/po/hu.po index 839133abab7..1ee8d0b026e 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-17 11:47+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -6387,6 +6387,9 @@ msgstr "%s nincs elég memória a reguláris kifejezéshez\n" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s a(z) \"%s\" érvénytelen reguláris kifejezés (%s)\n" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -7174,7 +7177,9 @@ msgid "list channels and their topics" msgstr "szobák listája témájukkal együtt" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "szoba[,szoba] [kulcs[,kulcs]]" msgid "" @@ -7183,15 +7188,67 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" msgid "get statistics about the size of the IRC network" @@ -8615,6 +8672,20 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +msgid "strip channel topic colors in /list buffer" +msgstr "szerver nevének színe" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -8626,6 +8697,12 @@ msgid "" "channel/pv of server)" msgstr "" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -8814,6 +8891,14 @@ msgstr "névkiegészítés után beszúrt szöveg" msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "névkiegészítés után beszúrt szöveg" +#, fuzzy +msgid "color for selected line on /list buffer" +msgstr "szerver nevének színe" + +#, fuzzy +msgid "background color for selected line on /list buffer" +msgstr "szerver nevének színe" + #, fuzzy msgid "color for text in account messages" msgstr "új üzenetet tartalmazó ablak színe" @@ -9226,6 +9311,12 @@ msgstr "szerver" msgid "irc batch" msgstr "%d szoba" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, fuzzy, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%s Szerver: %s%s %s[%s%s%s]\n" @@ -9238,6 +9329,16 @@ msgstr "%s nincs csatlakozva szerverhez!\n" msgid "%s%s: this buffer is not a channel!" msgstr "Ez az ablak nem egy szoba!\n" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +msgid "%s%s: error in redirection of /list: %s" +msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s nem sikerült új csatornát lefoglalni" @@ -13464,3 +13565,11 @@ msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s DCC: nem sikerült kapcsolódni a küldőhöz\n" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "konfigurációs paraméterek beállítása" + +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "szerver nevének színe" diff --git a/po/it.po b/po/it.po index 11510d6c779..d3b448efc64 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-26 21:34+0200\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -7240,6 +7240,9 @@ msgstr "%s%s: memoria non sufficiente per l'espressione regolare" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" non è una espressione regolare valida (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -8069,43 +8072,81 @@ msgid "list channels and their topics" msgstr "elenca i canali ed i loro argomenti" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "" "[-noswitch] [-server ] [[,...]] [[," "...]]" -#, fuzzy msgid "" " server: send to this server (internal name)\n" " regex: POSIX extended regular expression used to filter results (case " "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -"canale: canale da elencare\n" -"server: nome del server\n" -" regex: espressione regolare usata per filtrare i risultati (non sensibile " -"alle maiuscole, può iniziare con \"(?-i)\" per renderla sensibile alle " -"maiuscole)\n" -"\n" -"Esempi:\n" -" elenca tutti i canali sul server (può essere molto lento su grandi " -"network):\n" -" /list\n" -" elenca il canale #weechat:\n" -" /list #weechat.*\n" -" elenca tutti i canali che iniziano con \"#weechat\" (può essere molto " -"lento su grandi network):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "ottiene statistiche sulla dimensione del network IRC" @@ -9566,6 +9607,21 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "colore del testo nel buffer degli script" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -9582,6 +9638,20 @@ msgstr "" "predefinita (dovrebbe essere l'ultimo buffer), next = buffer corrente + 1, " "near_server = dopo l'ultimo canale/privato del server)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"forza la posizione del nuovo buffer privato nell'elenco dei buffer (none = " +"posizione predefinita (dovrebbe essere l'ultimo buffer), next = buffer " +"corrente + 1, near_server = dopo l'ultimo canale/privato del server)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -9816,6 +9886,16 @@ msgstr "" "colore per il prefisso del nick (stringa visualizzata dopo il nick nel " "prefisso)" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "colore del testo della riga selezionata nel buffer degli script" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "colore di sfondo per la riga selezionata nel buffer degli script" + #, fuzzy msgid "color for text in account messages" msgstr "colore per il testo nei messaggi di entrata" @@ -10248,6 +10328,12 @@ msgstr "server irc" msgid "irc batch" msgstr "canale irc" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sRichiesta CTCP a %s%s%s: %s%s%s%s%s" @@ -10260,6 +10346,17 @@ msgstr "%s%s: non connesso al server" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: questo buffer non è un canale!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: errore nella funzioe \"%s\"" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: impossibile allocare un nuovo canale" @@ -14658,3 +14755,45 @@ msgstr "%s%s: timeout per \"%s\" con %s" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: impossibile connettersi al mittente" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "sezione di configurazione" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "colore di sfondo per la riga selezionata nel buffer degli script" + +#, fuzzy +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ "canale: canale da elencare\n" +#~ "server: nome del server\n" +#~ " regex: espressione regolare usata per filtrare i risultati (non " +#~ "sensibile alle maiuscole, può iniziare con \"(?-i)\" per renderla " +#~ "sensibile alle maiuscole)\n" +#~ "\n" +#~ "Esempi:\n" +#~ " elenca tutti i canali sul server (può essere molto lento su grandi " +#~ "network):\n" +#~ " /list\n" +#~ " elenca il canale #weechat:\n" +#~ " /list #weechat.*\n" +#~ " elenca tutti i canali che iniziano con \"#weechat\" (può essere molto " +#~ "lento su grandi network):\n" +#~ " /list -re #weechat.*" diff --git a/po/ja.po b/po/ja.po index e44dc72dda0..ae34ceeab4a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-08-08 07:13+0200\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese ] [-re ] [[,...]] []" +#, fuzzy +#| msgid "" +#| "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [-re ] [[,...]] []" msgid "" @@ -9170,31 +9178,68 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" server: 宛先サーバ (内部名)\n" -" regex: 結果をフィルタする POSIX 拡張正規表現 (大文字小文字は区別しな" -"い、\"(?-i)\" で始めれば区別する)\n" -"channel: リストアップするチャンネル名\n" -" server: サーバ名\n" -"\n" -"例:\n" -" サーバ上の全てのチャンネルをリストアップ (大きなネットワークでは非常に遅" -"い):\n" -" /list\n" -" #weechat チャンネルをリストアップ:\n" -" /list #weechat\n" -" \"#weechat\" で始まる全てのチャンネルをリストアップ (大きなネットワークでは" -"非常に遅い):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "IRC ネットワークのサイズに関する統計を入手" @@ -10742,6 +10787,34 @@ msgstr "" "る; 例: \"/join weechat\" とした場合、実際に送信されるコマンドは \"/join " "#weechat\" になります" +#, fuzzy +#| msgid "left/right scroll in fset buffer (percent of width)" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "fset バッファの左右スクロール量 (横幅の割合)" + +#, fuzzy +#| msgid "" +#| "comma-separated list of fields to sort options (see /help fset for a list " +#| "of fields); char \"-\" can be used before field to reverse order, char " +#| "\"~\" can be used to do a case insensitive comparison; example: \"-" +#| "~name\" for case insensitive and reverse sort on option name" +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"ソートオプションのコンマ区切りリスト (フィールドのリストは /help fset を参照" +"してください); フィールドの先頭に \"-\" 文字を付けることでソート順を逆にする" +"ことも可能です。大文字小文字を区別せずに比較を行うには \"~\" 文字を使います; " +"例: \"-~name\" オプション名を基準に大文字小文字を区別せずにソートして、順番を" +"逆にします" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "スクリプトバッファのテキスト色" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -10758,6 +10831,20 @@ msgstr "" "後ろのバッファ)、next = 現在のバッファ番号 + 1、near_server = サーバの一番後" "ろのチャンネル/プライベートバッファ)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"バッファリスト内で新しいプライベートバッファの位置を固定 (none = デフォルトの" +"位置 (一番後ろのバッファ)、next = 現在のバッファ番号 + 1、near_server = サー" +"バの一番後ろのチャンネル/プライベートバッファ)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -10995,6 +11082,16 @@ msgstr "\"input_prompt\" バー要素内のニックネームモードに付け msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "\"input_prompt\" バー要素内のニックネームモードに付ける色" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "スクリプトバッファ内の選択行のテキスト色" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "スクリプトバッファ内の選択行の背景色" + #, fuzzy msgid "color for text in account messages" msgstr "参加メッセージの色" @@ -11428,6 +11525,12 @@ msgstr "irc サーバ" msgid "irc batch" msgstr "irc チャンネル" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%s%s%s%s への CTCP クエリ: %s%s%s%s%s" @@ -11440,6 +11543,17 @@ msgstr "%s%s: サーバに接続していません" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: このバッファはチャンネルではありません" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: 関数 \"%s\" にエラー" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: 新しいモードリストの割り当てに失敗" @@ -16122,3 +16236,45 @@ msgstr "%s%s: \"%s\" のタイムアウト %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: 接続できません: 未定義のエラー (%d)" + +#, fuzzy +#~| msgid "color for section" +#~ msgid "color for selected line" +#~ msgstr "セクション名のテキスト色" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "スクリプトバッファ内の選択行の背景色" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " server: 宛先サーバ (内部名)\n" +#~ " regex: 結果をフィルタする POSIX 拡張正規表現 (大文字小文字は区別しな" +#~ "い、\"(?-i)\" で始めれば区別する)\n" +#~ "channel: リストアップするチャンネル名\n" +#~ " server: サーバ名\n" +#~ "\n" +#~ "例:\n" +#~ " サーバ上の全てのチャンネルをリストアップ (大きなネットワークでは非常に遅" +#~ "い):\n" +#~ " /list\n" +#~ " #weechat チャンネルをリストアップ:\n" +#~ " /list #weechat\n" +#~ " \"#weechat\" で始まる全てのチャンネルをリストアップ (大きなネットワーク" +#~ "では非常に遅い):\n" +#~ " /list -re #weechat.*" diff --git a/po/pl.po b/po/pl.po index e983d8facc0..3a43cf17fae 100644 --- a/po/pl.po +++ b/po/pl.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-08-08 07:13+0200\n" "Last-Translator: Krzysztof Korościk \n" "Language-Team: Polish \n" @@ -8981,6 +8981,9 @@ msgstr "%s%s: za mało pamięci dla wyrażenia regularnego" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" nie jest prawidłowym wyrażeniem regularnym (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -10050,7 +10053,12 @@ msgstr "" msgid "list channels and their topics" msgstr "wyświetla kanały i ich tematy" -msgid "[-server ] [-re ] [[,...]] []" +#, fuzzy +#| msgid "" +#| "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [-re ] [[,...]] []" msgid "" @@ -10059,32 +10067,68 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" serwer: wyślij do tego serwera (nazwa wewnętrzna)\n" -" regexp: rozszerzone wyrażenie regularne POSIX użyte do filtrowania wyników " -"(wielkość znaków nie ma znaczenia, jeśli poprzedzone \"(?-i)\" to wielkość " -"znaków ma znaczenie)\n" -"channel: kanał do wylistowania\n" -" cel: nazwa serwera\n" -"\n" -"Przykłady:\n" -" wyświetla wszystkie kanały na serwerze (może być bardzo wolny w dużych " -"sieciach):\n" -" /list\n" -" wyświetla kanał #weechat:\n" -" /list #weechat\n" -" wyświetla wszystkie kanały zaczynające się od \"#weechat\" (może być " -"bardzo wolny w dużych sieciach):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "pobiera statystyki o wielkości sieci IRC" @@ -11742,6 +11786,34 @@ msgstr "" "jeśli nazwa kanału nie zaczyna się od poprawnego typu kanału na serwerze; na " "przykład: \"/join weechat\" zostanie wysłane jako: \"/join #weechat\"" +#, fuzzy +#| msgid "left/right scroll in fset buffer (percent of width)" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "przewinięcie w lewo/prawo w buforze fset (procent szerokości)" + +#, fuzzy +#| msgid "" +#| "comma-separated list of fields to sort options (see /help fset for a list " +#| "of fields); char \"-\" can be used before field to reverse order, char " +#| "\"~\" can be used to do a case insensitive comparison; example: \"-" +#| "~name\" for case insensitive and reverse sort on option name" +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"oddzielona przecinkami lista pól do sortowania opcji (listę pól można " +"znaleźć w wyniku polecenia /help fset); znak \"-\" użyty przed nazwą pola " +"odwraca kolejność , znak \"~\" może zostać użyty do porównania bez " +"uwzględniania wielkości znaków; na przykład: \"-~name\" dla odwrócenia " +"wyniku sortowania z porównaniem nazwy bez uwzględnienia wielkości znaków" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "kolor tekstu w buforze skryptów" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -11758,6 +11830,20 @@ msgstr "" "(powinien być to ostatni bufor), next = obecny bufor + 1, near_server = po " "ostatnim kanale/pv serwera)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"wymusza pozycję nowych prywatnych wiadomości na liście buforów (none = " +"domyślna pozycja (powinien być to ostatni bufor), next = obecny bufor + 1, " +"near_server = po ostatnim kanale/pv serwera)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -11996,6 +12082,16 @@ msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "" "kolor dla wyższej wspieranej wersji TLS w elemencie paska \"tls_version\"" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "kolor tekstu w zaznaczonej linii w buforze skryptów" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "kolor tła dla zaznaczonej linii w buforze skryptów" + msgid "color for text in account messages" msgstr "kolor tekstu w wiadomościach konta" @@ -12431,6 +12527,12 @@ msgstr "serwer irc" msgid "irc batch" msgstr "kanał irc" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sZapytanie CTCP do %s%s%s: %s%s%s%s%s" @@ -12443,6 +12545,17 @@ msgstr "%s%s: nie jesteś połączony z serwerem" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: to nie jest bufor kanału!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: błąd w funkcji \"%s\"" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: nie można przydzielić nowej modlisty" @@ -17402,3 +17515,46 @@ msgstr "%s%s: przekroczono czas na \"%s\" z %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: nie można połączyć: niespodziewany błąd (%d)" + +#, fuzzy +#~| msgid "color for section" +#~ msgid "color for selected line" +#~ msgstr "kolor zaznaczenia" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "kolor tła dla zaznaczonej linii w buforze skryptów" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " serwer: wyślij do tego serwera (nazwa wewnętrzna)\n" +#~ " regexp: rozszerzone wyrażenie regularne POSIX użyte do filtrowania " +#~ "wyników (wielkość znaków nie ma znaczenia, jeśli poprzedzone \"(?-i)\" to " +#~ "wielkość znaków ma znaczenie)\n" +#~ "channel: kanał do wylistowania\n" +#~ " cel: nazwa serwera\n" +#~ "\n" +#~ "Przykłady:\n" +#~ " wyświetla wszystkie kanały na serwerze (może być bardzo wolny w dużych " +#~ "sieciach):\n" +#~ " /list\n" +#~ " wyświetla kanał #weechat:\n" +#~ " /list #weechat\n" +#~ " wyświetla wszystkie kanały zaczynające się od \"#weechat\" (może być " +#~ "bardzo wolny w dużych sieciach):\n" +#~ " /list -re #weechat.*" diff --git a/po/pt.po b/po/pt.po index 38c724f6c18..51297246359 100644 --- a/po/pt.po +++ b/po/pt.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-26 21:34+0200\n" "Last-Translator: Vasco Almeida \n" "Language-Team: Portuguese <>\n" @@ -8001,6 +8001,9 @@ msgstr "%s%s: memória insuficiente para a expressão regular" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\" não é uma expressão regular válida (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -8913,43 +8916,81 @@ msgid "list channels and their topics" msgstr "listar canais e respetivos tópicos" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "" "[-noswitch] [-server ] [[,...]] [[," "...]]" -#, fuzzy msgid "" " server: send to this server (internal name)\n" " regex: POSIX extended regular expression used to filter results (case " "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" canal: canal a listar\n" -"servidor: nome do servidor\n" -" regex: expressão regular POSIX estendida usada para filtrar os resultados " -"(não distingue maiúscula e minúsculas, pode começar por \"(?-i)\" para " -"distinguir)\n" -"\n" -"Exemplos:\n" -" listar todos os canais no servidor (pode ser muito lento em redes " -"grandes):\n" -" /list\n" -" listar o canal #weechat:\n" -" /list #weechat\n" -" listar todos os canais começados por \"#weechat\" (pode ser muito lento em " -"redes grandes):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "obter estatísticas sobre o tamanho da rede IRC" @@ -10506,6 +10547,21 @@ msgstr "" "comando /join se o nome do canal não começar por um tipo de canal válido do " "servidor; por exemplo: \"/join weechat\" enviará de facto: \"/join #weechat\"" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "cor do texto no buffer de scripts" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -10522,6 +10578,20 @@ msgstr "" "predefinida (deverá ser o último buffer), next = buffer atual + 1, " "near_server = depois do último canal/pvt do servidor)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"forçar a posição do novo privado na lista de buffers (none = posição " +"predefinida (deverá ser o último buffer), next = buffer atual + 1, " +"near_server = depois do último canal/pvt do servidor)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -10759,6 +10829,16 @@ msgstr "cor dos modos de nick no item de barra \"input_prompt\"" msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "cor dos modos de nick no item de barra \"input_prompt\"" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "cor do texto da linha selecionada no buffer de scripts" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "cor de fundo da linha selecionada no buffer de scripts" + #, fuzzy msgid "color for text in account messages" msgstr "cor do texto das mensagens de join" @@ -11207,6 +11287,12 @@ msgstr "servidor de irc" msgid "irc batch" msgstr "canal de irc" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sconsulta CTCP a %s%s%s: %s%s%s%s%s" @@ -11219,6 +11305,17 @@ msgstr "%s%s: não está conectado ao servidor" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: este buffer não é um canal!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: erro na função \"%s\"" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: não é possível alocar novo canal" @@ -15889,3 +15986,45 @@ msgstr "%s%s: tempo limite de \"%s\" com %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: não foi possível conectar: erro inesperado (%d)" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "secção de configuração" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "cor de fundo da linha selecionada no buffer de scripts" + +#, fuzzy +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " canal: canal a listar\n" +#~ "servidor: nome do servidor\n" +#~ " regex: expressão regular POSIX estendida usada para filtrar os " +#~ "resultados (não distingue maiúscula e minúsculas, pode começar por \"(?-" +#~ "i)\" para distinguir)\n" +#~ "\n" +#~ "Exemplos:\n" +#~ " listar todos os canais no servidor (pode ser muito lento em redes " +#~ "grandes):\n" +#~ " /list\n" +#~ " listar o canal #weechat:\n" +#~ " /list #weechat\n" +#~ " listar todos os canais começados por \"#weechat\" (pode ser muito lento " +#~ "em redes grandes):\n" +#~ " /list -re #weechat.*" diff --git a/po/pt_BR.po b/po/pt_BR.po index 90b7e01a35f..c30a7f777be 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-26 21:34+0200\n" "Last-Translator: Érico Nogueira \n" "Language-Team: weechat-dev \n" @@ -7137,6 +7137,9 @@ msgstr "" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -7863,7 +7866,9 @@ msgid "list channels and their topics" msgstr "listar canais e seus tópicos" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr " []" msgid "" @@ -7872,15 +7877,67 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" msgid "get statistics about the size of the IRC network" @@ -9170,6 +9227,20 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +msgid "strip channel topic colors in /list buffer" +msgstr "cor do texto para nomes de buffer" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -9184,6 +9255,20 @@ msgstr "" "(deve ser o último buffer), next = buffer atual + 1, near_server = depois do " "último canal/privado do servidor" +#, fuzzy +#| msgid "" +#| "force position of new channel in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"forçar posição de novo canal na lista de buffers (none = posição padrão " +"(deve ser o último buffer), next = buffer atual + 1, near_server = depois do " +"último canal/privado do servidor" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -9371,6 +9456,14 @@ msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "" "cor para o sufixo do apelido (string exibida depois do apelido no prefixo)" +#, fuzzy +msgid "color for selected line on /list buffer" +msgstr "cor do texto da linha do cliente selecionada" + +#, fuzzy +msgid "background color for selected line on /list buffer" +msgstr "cor do texto da linha do cliente selecionada" + #, fuzzy msgid "color for text in account messages" msgstr "cor de texto para valores" @@ -9778,6 +9871,12 @@ msgstr "servidor irc" msgid "irc batch" msgstr "canal irc" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "" @@ -9790,6 +9889,17 @@ msgstr "%s%s: você não está conectado ao servidor" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: este buffer não é um canal!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: erro na função \"%s\"" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: não foi possível criar novo canal \"%s\"" @@ -14081,3 +14191,11 @@ msgstr "%s%s: tempo esgotado para \"%s\" com %s" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: não foi possível conectar ao remetente" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "seção de configuração" + +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "cor do texto da linha do cliente selecionada" diff --git a/po/ru.po b/po/ru.po index 9f67fba6622..1a61a9e8c05 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-06-17 11:47+0200\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -6425,6 +6425,9 @@ msgstr "%s недостаточно памяти для регулярного msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s \"%s\" не является регулярным выражением (%s)\n" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -7212,7 +7215,9 @@ msgid "list channels and their topics" msgstr "перечислить каналы и их темы" #, fuzzy -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "канал[,канал] [ключ[,ключ]]" msgid "" @@ -7221,15 +7226,67 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" msgid "get statistics about the size of the IRC network" @@ -8647,6 +8704,20 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +#, fuzzy +msgid "strip channel topic colors in /list buffer" +msgstr "цвет названия сервера" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -8658,6 +8729,12 @@ msgid "" "channel/pv of server)" msgstr "" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -8846,6 +8923,14 @@ msgstr "строка, вставляемая после автодополнен msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "строка, вставляемая после автодополнения ника" +#, fuzzy +msgid "color for selected line on /list buffer" +msgstr "цвет названия сервера" + +#, fuzzy +msgid "background color for selected line on /list buffer" +msgstr "цвет названия сервера" + #, fuzzy msgid "color for text in account messages" msgstr "цвет текущего окна с сообщениями" @@ -9263,6 +9348,12 @@ msgstr "сервер" msgid "irc batch" msgstr "%d канал" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, fuzzy, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sСервер: %s%s %s[%s%s%s]\n" @@ -9275,6 +9366,16 @@ msgstr "%s вы не подключены к серверу\n" msgid "%s%s: this buffer is not a channel!" msgstr "Это окно не является каналом!\n" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +msgid "%s%s: error in redirection of /list: %s" +msgstr "Не могу записать лог-файл \"%s\"\n" + #, fuzzy, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s не могу расположить новый канал" @@ -13498,3 +13599,11 @@ msgstr "%s нет аргумента для параметра \"%s\"\n" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s DCC: не могу соединиться с отправителем\n" + +#, fuzzy +#~ msgid "color for selected line" +#~ msgstr "настроить параметры конфигурации" + +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "цвет названия сервера" diff --git a/po/sr.po b/po/sr.po index 4b388d4e80e..0b19ec754b6 100644 --- a/po/sr.po +++ b/po/sr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-08-08 07:14+0200\n" "Last-Translator: Ivan Pešić \n" "Language-Team: weechat-dev \n" @@ -8554,6 +8554,9 @@ msgstr "%s%s: нема довољно слободне меморије за р msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: „%s” није важећи регуларни израз (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -9552,7 +9555,12 @@ msgstr "" msgid "list channels and their topics" msgstr "листа канала и њихових тема" -msgid "[-server ] [-re ] [[,...]] []" +#, fuzzy +#| msgid "" +#| "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "" "[-server <сервер>] [-re <регуларни_израз>] [<канал>[,<канал>...]] [<циљ>]" @@ -9562,32 +9570,68 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" сервер: шаље на овај сервер (интерно име)\n" -"регуларни_израз: POSIX проширени регуларни израз који се користи за " -"филтрирање резултата (без разликовања величине слова, може да почне са „(?-" -"i)” чиме се укључује разликовање величине слова)\n" -" канал: канал који треба да се излиста\n" -" циљ: име сервера\n" -"\n" -"Примери:\n" -" исписује све канале на серверу (може да буде веома споро на великим " -"мрежама):\n" -" /list\n" -" исписује канал #weechat:\n" -" /list #weechat\n" -" исписује све канале који почињу на „#weechat” (може да буде веома споро на " -"великим мрежама):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "креирање статистике о величини IRC мреже" @@ -11158,6 +11202,34 @@ msgstr "" "ако име канала не почиње са важећим типом канала за сервер; на пример: „/" "join weechat” ће уствари да пошаље „/join #weechat”" +#, fuzzy +#| msgid "left/right scroll in fset buffer (percent of width)" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "скроловање у лево/десно у fset баферу (проценат ширине)" + +#, fuzzy +#| msgid "" +#| "comma-separated list of fields to sort options (see /help fset for a list " +#| "of fields); char \"-\" can be used before field to reverse order, char " +#| "\"~\" can be used to do a case insensitive comparison; example: \"-" +#| "~name\" for case insensitive and reverse sort on option name" +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"листа поља за сортирање опција раздвојених запетама (погледајте /help fset " +"за листу поља); карактер „-” може да се користи испред поља чиме се обрће " +"редослед, карактер „~” може да се употреби за поређење које не прави разлику " +"у величини слова; пример: „-~name” за поређење које не прави разлику у " +"величини слова и обрнуто сортирање по имену опције" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "боја текста у скрипт баферу" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -11174,6 +11246,20 @@ msgstr "" "(требало би да буде последњи бафер), next = текући бафер + 1, near_server = " "након последњег канала/приватног сервера)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"форсира позицију новог приватног бафера у листи бафера (none = подразумевана " +"позиција (требало би да буде последњи бафер), next = текући бафер + 1, " +"near_server = након последњег канала/приватног сервера)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -11408,6 +11494,16 @@ msgstr "боја за небезбедне TLS верзије у ставки т msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "боја за више подржане TLS верзије у ставки траке „tls_version”" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "боја текста за изабрану линију у скрипт баферу" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "боја позадине за изабрану линију у скрипт баферу" + msgid "color for text in account messages" msgstr "боја за текст у account порукама" @@ -11832,6 +11928,12 @@ msgstr "irc server" msgid "irc batch" msgstr "irc batch" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%sCTCP упит за %s%s%s: %s%s%s%s%s" @@ -11844,6 +11946,17 @@ msgstr "%s%s: нисте повезани са сервером" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: овај бафер није канал!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: грешка у функцији „%s”" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: не може да се алоцира нова modelist" @@ -16676,3 +16789,46 @@ msgstr "%s%s: тајмаут за „%s” са %s" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: повезивање није успело: неочекивана грешка (%d)" + +#, fuzzy +#~| msgid "color for section" +#~ msgid "color for selected line" +#~ msgstr "боја за одељке" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "боја позадине за изабрану линију у скрипт баферу" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " сервер: шаље на овај сервер (интерно име)\n" +#~ "регуларни_израз: POSIX проширени регуларни израз који се користи за " +#~ "филтрирање резултата (без разликовања величине слова, може да почне са " +#~ "„(?-i)” чиме се укључује разликовање величине слова)\n" +#~ " канал: канал који треба да се излиста\n" +#~ " циљ: име сервера\n" +#~ "\n" +#~ "Примери:\n" +#~ " исписује све канале на серверу (може да буде веома споро на великим " +#~ "мрежама):\n" +#~ " /list\n" +#~ " исписује канал #weechat:\n" +#~ " /list #weechat\n" +#~ " исписује све канале који почињу на „#weechat” (може да буде веома споро " +#~ "на великим мрежама):\n" +#~ " /list -re #weechat.*" diff --git a/po/srcfiles.cmake b/po/srcfiles.cmake index e6fa5b65010..044ebc30e0f 100644 --- a/po/srcfiles.cmake +++ b/po/srcfiles.cmake @@ -258,6 +258,8 @@ SET(WEECHAT_SOURCES ./src/plugins/irc/irc-input.h ./src/plugins/irc/irc-join.c ./src/plugins/irc/irc-join.h +./src/plugins/irc/irc-list.c +./src/plugins/irc/irc-list.h ./src/plugins/irc/irc-message.c ./src/plugins/irc/irc-message.h ./src/plugins/irc/irc-mode.c diff --git a/po/tr.po b/po/tr.po index c6a5792e063..6c9c1efaf4b 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2023-08-08 07:14+0200\n" "Last-Translator: Emir SARI \n" "Language-Team: weechat-dev \n" @@ -8584,6 +8584,9 @@ msgstr "%s%s: Düzenli ifade için yetersiz bellek" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "%s%s: \"%s\", geçerli bir düzenli ifade değil (%s)" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -9636,7 +9639,12 @@ msgstr "" msgid "list channels and their topics" msgstr "kanalları ve konularını listele" -msgid "[-server ] [-re ] [[,...]] []" +#, fuzzy +#| msgid "" +#| "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "[-server ] [-re ] [[,...]] []" msgid "" @@ -9645,30 +9653,68 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" -" sunucu: Bunu sunucuya gönder (içsel ad)\n" -" ifade: Sonuçları süzmek için kullanılan POSIX genişletilmiş düzenli " -"ifadesi (BÜYÜK/küçük harf duyarsız, duyarlı yapmak için \"(?-i)\" ile " -"başlayabilir)\n" -" kanal: Listelenecek kanal\n" -" hedef: Sunucu adı\n" -"\n" -"Örnekler:\n" -" bir sunucudaki tüm kanalları listele (büyük ağlarda çok yavaş olabilir):\n" -" /list\n" -" #weechat kanalını listele:\n" -" /list #weechat\n" -" \"#weechat\" ile başlayan tüm kanalları listele (yavaş olabilir):\n" -" /list -re #weechat.*" msgid "get statistics about the size of the IRC network" msgstr "IRC ağının büyüklüğü hakkındaki istatistikleri al" @@ -11314,6 +11360,34 @@ msgstr "" "komutundaki kanal adının önüne kendiliğinden kanal türünü ekle; örneğin: \"/" "join weechat\" komutu \"/join #weechat\" olarak algılanacaktır" +#, fuzzy +#| msgid "left/right scroll in fset buffer (percent of width)" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "fset arabelleğinde sola/sağa kaydırma (genişlik yüzdesi)" + +#, fuzzy +#| msgid "" +#| "comma-separated list of fields to sort options (see /help fset for a list " +#| "of fields); char \"-\" can be used before field to reverse order, char " +#| "\"~\" can be used to do a case insensitive comparison; example: \"-" +#| "~name\" for case insensitive and reverse sort on option name" +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" +"seçenekleri sıralamak için kullanılan alanların virgülle ayrılmış listesi " +"(alanların bir listesi için bkz. /help fset); sıralamayı tersine çevirmek " +"için \"-\" karakteri, BÜYÜK/küçük harf duyarsız bir kıyaslama yapmak için " +"\"~\" karakteri kullanılabilir; örnek: seçenek adında BÜYÜK/küçük harf " +"duyarsız ve ters sıralama yapmak için \"-~ad\" kullanın" + +#, fuzzy +#| msgid "text color in script buffer" +msgid "strip channel topic colors in /list buffer" +msgstr "betik arabelleği metin rengi" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -11330,6 +11404,20 @@ msgstr "" "(son arabellek olur), next = geçerli arabellek + 1, near_server = sunucunun " "son kanalından/özel arabelleğinden sonra)" +#, fuzzy +#| msgid "" +#| "force position of new private in list of buffers (none = default position " +#| "(should be last buffer), next = current buffer + 1, near_server = after " +#| "last channel/pv of server)" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" +"arabellek listesinde yeni özel arabelleğin konumunu zorla (none = öntanımlı " +"konum (son arabellek olur), next = geçerli arabellek + 1, near_server = " +"sunucunun son kanalından/özel arabelleğinden sonra)" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -11567,6 +11655,16 @@ msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "" "\"tls_version\" bar ögesindeki daha yükseği desteklenen TLS sürümleri rengi" +#, fuzzy +#| msgid "text color for selected line in script buffer" +msgid "color for selected line on /list buffer" +msgstr "betik arabelleği seçili satır metin rengi" + +#, fuzzy +#| msgid "background color for selected line in script buffer" +msgid "background color for selected line on /list buffer" +msgstr "betik arabelleği seçili satır arka plan rengi" + msgid "color for text in account messages" msgstr "hesap iletilerindeki metin rengi" @@ -11992,6 +12090,12 @@ msgstr "irc sunucusu" msgid "irc batch" msgstr "irc kanalı" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "%s%s%s%s konumuna CTCP sorgusu: %s%s%s%s%s" @@ -12004,6 +12108,17 @@ msgstr "%s%s: Sunucuya bağlı değilsiniz" msgid "%s%s: this buffer is not a channel!" msgstr "%s%s: Bu arabellek bir kanal değil!" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, fuzzy, c-format +#| msgid "%s%s: error in function \"%s\"" +msgid "%s%s: error in redirection of /list: %s" +msgstr "%s%s: \"%s\" işlevinde hata" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "%s%s: Yeni kip listesi için yer ayrılamıyor" @@ -16780,3 +16895,45 @@ msgstr "%s%s: \"%s\" için %s ile zaman aşımı" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: Bağlanılamıyor: Beklenmedik hata (%d)" + +#, fuzzy +#~| msgid "color for section" +#~ msgid "color for selected line" +#~ msgstr "bölüm rengi" + +#, fuzzy +#~| msgid "background color for selected line in script buffer" +#~ msgid "background color for selected line" +#~ msgstr "betik arabelleği seçili satır arka plan rengi" + +#~ msgid "" +#~ " server: send to this server (internal name)\n" +#~ " regex: POSIX extended regular expression used to filter results (case " +#~ "insensitive, can start by \"(?-i)\" to become case sensitive)\n" +#~ "channel: channel to list\n" +#~ " target: server name\n" +#~ "\n" +#~ "Examples:\n" +#~ " list all channels on server (can be very slow on large networks):\n" +#~ " /list\n" +#~ " list channel #weechat:\n" +#~ " /list #weechat\n" +#~ " list all channels beginning with \"#weechat\" (can be very slow on " +#~ "large networks):\n" +#~ " /list -re #weechat.*" +#~ msgstr "" +#~ " sunucu: Bunu sunucuya gönder (içsel ad)\n" +#~ " ifade: Sonuçları süzmek için kullanılan POSIX genişletilmiş düzenli " +#~ "ifadesi (BÜYÜK/küçük harf duyarsız, duyarlı yapmak için \"(?-i)\" ile " +#~ "başlayabilir)\n" +#~ " kanal: Listelenecek kanal\n" +#~ " hedef: Sunucu adı\n" +#~ "\n" +#~ "Örnekler:\n" +#~ " bir sunucudaki tüm kanalları listele (büyük ağlarda çok yavaş " +#~ "olabilir):\n" +#~ " /list\n" +#~ " #weechat kanalını listele:\n" +#~ " /list #weechat\n" +#~ " \"#weechat\" ile başlayan tüm kanalları listele (yavaş olabilir):\n" +#~ " /list -re #weechat.*" diff --git a/po/weechat.pot b/po/weechat.pot index 00037af7736..ecaea999a77 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2023-08-08 07:11+0200\n" +"POT-Creation-Date: 2023-08-12 10:59+0200\n" "PO-Revision-Date: 2014-08-16 10:27+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" @@ -5887,6 +5887,9 @@ msgstr "" msgid "%s%s: \"%s\" is not a valid regular expression (%s)" msgstr "" +msgid "Receiving list of channels, please wait..." +msgstr "" + #, c-format msgid "" "%s%s: you must specify channel for \"%s\" command if you're not in a channel" @@ -6568,7 +6571,9 @@ msgstr "" msgid "list channels and their topics" msgstr "" -msgid "[-server ] [-re ] [[,...]] []" +msgid "" +"[-server ] [-re ] [[,...]] [] || -" +"up|-down [] || -left|-right [] || -go |end || -join" msgstr "" msgid "" @@ -6577,15 +6582,67 @@ msgid "" "insensitive, can start by \"(?-i)\" to become case sensitive)\n" "channel: channel to list\n" " target: server name\n" +" -up: move the selected line up by \"number\" lines\n" +" -down: move the selected line down by \"number\" lines\n" +" -left: scroll the list buffer by \"percent\" of width on the left\n" +" -right: scroll the list buffer by \"percent\" of width on the right\n" +" -go: select a line by number, first line number is 0 (\"end\" to select " +"the last line)\n" +" -join: join the channel on the selected line\n" +"\n" +"Keys and input on /list buffer:\n" +" up move one line up\n" +" down move one line down\n" +" pgup move one page up\n" +" pgdn move one page down\n" +" alt-home << move to first line\n" +" alt-end >> move to last line\n" +" F11 < scroll horizontally on the left\n" +" F12 > scroll horizontally on the right\n" +" * show all channels (no filter)\n" +" xxx show only channels with \"xxx\" in name or topic " +"(case insensitive)\n" +" n:xxx show only channels with \"xxx\" in name (case " +"insensitive)\n" +" u:n show only channels with at least \"n\" users\n" +" u:>n show only channels with more than \"n\" users\n" +" u: 10\n" +" sort channels by users (big channels first), then name2 (name without " +"prefix):\n" +" s:-users,name2" msgstr "" msgid "get statistics about the size of the IRC network" @@ -7724,6 +7781,19 @@ msgid "" "for example: \"/join weechat\" will in fact send: \"/join #weechat\"" msgstr "" +msgid "left/right scroll in /list buffer (percent of width)" +msgstr "" + +msgid "" +"comma-separated list of fields to sort channels (see /help list for a list " +"of fields); char \"-\" can be used before field to reverse order, char \"~\" " +"can be used to do a case insensitive comparison; example: \"-count,~name\" " +"for biggest channels first then case insensitive sort on name" +msgstr "" + +msgid "strip channel topic colors in /list buffer" +msgstr "" + msgid "" "default target buffer for msgbuffer options when target is private and that " "private buffer is not found" @@ -7735,6 +7805,12 @@ msgid "" "channel/pv of server)" msgstr "" +msgid "" +"force position of new /list buffer in list of buffers (none = default " +"position (should be last buffer), next = current buffer + 1, near_server = " +"after last channel/pv of server)" +msgstr "" + msgid "" "force position of new private in list of buffers (none = default position " "(should be last buffer), next = current buffer + 1, near_server = after last " @@ -7909,6 +7985,12 @@ msgstr "" msgid "color for higher supported TLS version in bar item \"tls_version\"" msgstr "" +msgid "color for selected line on /list buffer" +msgstr "" + +msgid "background color for selected line on /list buffer" +msgstr "" + msgid "color for text in account messages" msgstr "" @@ -8269,6 +8351,12 @@ msgstr "" msgid "irc batch" msgstr "" +msgid "irc channel on /list buffer" +msgstr "" + +msgid "irc data for /list buffer" +msgstr "" + #, c-format msgid "%sCTCP query to %s%s%s: %s%s%s%s%s" msgstr "" @@ -8281,6 +8369,16 @@ msgstr "" msgid "%s%s: this buffer is not a channel!" msgstr "" +#, c-format +msgid "" +"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join " +"channel, ($)=refresh, (q)=close buffer" +msgstr "" + +#, c-format +msgid "%s%s: error in redirection of /list: %s" +msgstr "" + #, c-format msgid "%s%s: cannot allocate new modelist" msgstr "" diff --git a/src/plugins/fset/fset-buffer.c b/src/plugins/fset/fset-buffer.c index 0822d24eda6..9e378d0aaf2 100644 --- a/src/plugins/fset/fset-buffer.c +++ b/src/plugins/fset/fset-buffer.c @@ -1433,7 +1433,7 @@ fset_buffer_input_cb (const void *pointer, void *data, return WEECHAT_RC_OK; } - /* execute action on an option */ + /* execute action */ for (i = 0; actions[i][0]; i++) { if (strcmp (input_data, actions[i][0]) == 0) diff --git a/src/plugins/irc/CMakeLists.txt b/src/plugins/irc/CMakeLists.txt index bdc290e5860..6452ac59b6f 100644 --- a/src/plugins/irc/CMakeLists.txt +++ b/src/plugins/irc/CMakeLists.txt @@ -32,6 +32,7 @@ add_library(irc MODULE irc-ignore.c irc-ignore.h irc-info.c irc-info.h irc-input.c irc-input.h + irc-list.c irc-list.h irc-join.c irc-join.h irc-message.c irc-message.h irc-mode.c irc-mode.h diff --git a/src/plugins/irc/irc-buffer.c b/src/plugins/irc/irc-buffer.c index a2332a3d507..63c10787183 100644 --- a/src/plugins/irc/irc-buffer.c +++ b/src/plugins/irc/irc-buffer.c @@ -31,6 +31,7 @@ #include "irc-command.h" #include "irc-config.h" #include "irc-join.h" +#include "irc-list.h" #include "irc-raw.h" #include "irc-server.h" @@ -67,6 +68,13 @@ irc_buffer_get_server_and_channel (struct t_gui_buffer *buffer, return; } + if (ptr_server->list->buffer == buffer) + { + if (server) + *server = ptr_server; + return; + } + for (ptr_channel = ptr_server->channels; ptr_channel; ptr_channel = ptr_channel->next_channel) { @@ -204,41 +212,52 @@ irc_buffer_close_cb (const void *pointer, void *data, } irc_channel_free (ptr_server, ptr_channel); } - else + else if (ptr_server && (ptr_server->buffer == buffer)) { - if (ptr_server) + if (!ptr_server->disconnected) { - if (!ptr_server->disconnected) - { - /* send QUIT to server, then disconnect */ - irc_command_quit_server (ptr_server, NULL); - irc_server_disconnect (ptr_server, 0, 0); - } + /* send QUIT to server, then disconnect */ + irc_command_quit_server (ptr_server, NULL); + irc_server_disconnect (ptr_server, 0, 0); + } - /* disable reconnection */ - ptr_server->reconnect_delay = 0; - ptr_server->reconnect_start = 0; + /* disable reconnection */ + ptr_server->reconnect_delay = 0; + ptr_server->reconnect_start = 0; - /* consider auto-join has never been done */ - ptr_server->autojoin_done = 0; + /* consider auto-join has never been done */ + ptr_server->autojoin_done = 0; - /* close server channels/privates */ - ptr_channel = ptr_server->channels; - while (ptr_channel) - { - next_channel = ptr_channel->next_channel; - if (ptr_channel->buffer != buffer) - weechat_buffer_close (ptr_channel->buffer); - ptr_channel = next_channel; - } + /* close server channels/privates */ + ptr_channel = ptr_server->channels; + while (ptr_channel) + { + next_channel = ptr_channel->next_channel; + if (ptr_channel->buffer != buffer) + weechat_buffer_close (ptr_channel->buffer); + ptr_channel = next_channel; + } - /* - * close remaining channels/privates - * (which are not yet in server->channels) - */ - irc_buffer_close_server_channels (ptr_server); + /* + * close remaining channels/privates + * (which are not yet in server->channels) + */ + irc_buffer_close_server_channels (ptr_server); - ptr_server->buffer = NULL; + ptr_server->buffer = NULL; + } + else if (ptr_server && (ptr_server->list->buffer == buffer)) + { + ptr_server->list->buffer = NULL; + if (ptr_server->list->channels) + { + weechat_arraylist_free (ptr_server->list->channels); + ptr_server->list->channels = NULL; + } + if (ptr_server->list->filter_channels) + { + weechat_arraylist_free (ptr_server->list->filter_channels); + ptr_server->list->filter_channels = NULL; } } } @@ -357,3 +376,108 @@ irc_buffer_search_private_lowest_number (struct t_irc_server *server) } return ptr_buffer; } + +/* + * Moves new channel/pv or list buffer near server. + * + * Parameters: + * list_buffer: 1 if it is a /list buffer, 0 otherwise + * channel_type: -1, IRC_CHANNEL_TYPE_CHANNEL or IRC_CHANNEL_TYPE_PRIVATE + */ + +void +irc_buffer_move_near_server (struct t_irc_server *server, + int list_buffer, int channel_type, + struct t_gui_buffer *buffer) +{ + int number, number_channel, number_last_channel, number_last_private; + int number_found; + char str_number[32]; + const char *ptr_type, *ptr_server_name; + struct t_hdata *hdata_buffer; + struct t_gui_buffer *ptr_buffer; + + number = weechat_buffer_get_integer (buffer, "number"); + number_last_channel = 0; + number_last_private = 0; + number_found = 0; + + hdata_buffer = weechat_hdata_get ("buffer"); + ptr_buffer = weechat_hdata_get_list (hdata_buffer, "gui_buffers"); + while (ptr_buffer) + { + if ((ptr_buffer != buffer) + && (weechat_buffer_get_pointer (ptr_buffer, + "plugin") == weechat_irc_plugin)) + { + ptr_type = weechat_buffer_get_string (ptr_buffer, + "localvar_type"); + ptr_server_name = weechat_buffer_get_string (ptr_buffer, + "localvar_server"); + number_channel = weechat_buffer_get_integer (ptr_buffer, + "number"); + if (ptr_type && ptr_type[0] + && ptr_server_name && ptr_server_name[0] + && (strcmp (ptr_server_name, server->name) == 0)) + { + if (strcmp (ptr_type, "channel") == 0) + { + if (number_channel > number_last_channel) + number_last_channel = number_channel; + } + else if (strcmp (ptr_type, "private") == 0) + { + if (number_channel > number_last_private) + number_last_private = number_channel; + } + } + } + /* move to next buffer */ + ptr_buffer = weechat_hdata_move (hdata_buffer, ptr_buffer, 1); + } + + if (list_buffer) + { + if ((number_last_private > 0) + && (number_last_private > number_last_channel)) + { + number_found = number_last_private + 1; + } + else if ((number_last_channel > 0) + && (number_last_channel > number_last_private)) + { + number_found = number_last_channel + 1; + } + } + else + { + /* use last channel/pv number + 1 */ + switch (channel_type) + { + case IRC_CHANNEL_TYPE_CHANNEL: + if (number_last_channel > 0) + number_found = number_last_channel + 1; + break; + case IRC_CHANNEL_TYPE_PRIVATE: + if (number_last_private > 0) + number_found = number_last_private + 1; + else if (number_last_channel > 0) + number_found = number_last_channel + 1; + break; + } + } + + if ((number_found == 0) + && (weechat_config_enum (irc_config_look_server_buffer) == + IRC_CONFIG_LOOK_SERVER_BUFFER_INDEPENDENT)) + { + number_found = weechat_buffer_get_integer (server->buffer, "number") + 1; + } + + /* switch to number found */ + if ((number_found >= 1) && (number_found != number)) + { + snprintf (str_number, sizeof (str_number), "%d", number_found); + weechat_buffer_set (buffer, "number", str_number); + } +} diff --git a/src/plugins/irc/irc-buffer.h b/src/plugins/irc/irc-buffer.h index 4282709c2b7..5e8ca6c11c7 100644 --- a/src/plugins/irc/irc-buffer.h +++ b/src/plugins/irc/irc-buffer.h @@ -54,5 +54,8 @@ extern int irc_buffer_nickcmp_cb (const void *pointer, void *data, const char *nick1, const char *nick2); extern struct t_gui_buffer *irc_buffer_search_server_lowest_number (); extern struct t_gui_buffer *irc_buffer_search_private_lowest_number (struct t_irc_server *server); +extern void irc_buffer_move_near_server (struct t_irc_server *server, + int list_buffer, int channel_type, + struct t_gui_buffer *buffer); #endif /* WEECHAT_PLUGIN_IRC_BUFFER_H */ diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c index b0bed60d7aa..ccb264d941c 100644 --- a/src/plugins/irc/irc-channel.c +++ b/src/plugins/irc/irc-channel.c @@ -75,90 +75,6 @@ irc_channel_valid (struct t_irc_server *server, struct t_irc_channel *channel) return 0; } -/* - * Moves new channel/pv buffer near server. - */ - -void -irc_channel_move_near_server (struct t_irc_server *server, int channel_type, - struct t_gui_buffer *buffer) -{ - int number, number_channel, number_last_channel, number_last_private; - int number_found; - char str_number[32]; - const char *ptr_type, *ptr_server_name; - struct t_hdata *hdata_buffer; - struct t_gui_buffer *ptr_buffer; - - number = weechat_buffer_get_integer (buffer, "number"); - number_last_channel = 0; - number_last_private = 0; - number_found = 0; - - hdata_buffer = weechat_hdata_get ("buffer"); - ptr_buffer = weechat_hdata_get_list (hdata_buffer, "gui_buffers"); - while (ptr_buffer) - { - if ((ptr_buffer != buffer) - && (weechat_buffer_get_pointer (ptr_buffer, - "plugin") == weechat_irc_plugin)) - { - ptr_type = weechat_buffer_get_string (ptr_buffer, - "localvar_type"); - ptr_server_name = weechat_buffer_get_string (ptr_buffer, - "localvar_server"); - number_channel = weechat_buffer_get_integer (ptr_buffer, - "number"); - if (ptr_type && ptr_type[0] - && ptr_server_name && ptr_server_name[0] - && (strcmp (ptr_server_name, server->name) == 0)) - { - if (strcmp (ptr_type, "channel") == 0) - { - if (number_channel > number_last_channel) - number_last_channel = number_channel; - } - else if (strcmp (ptr_type, "private") == 0) - { - if (number_channel > number_last_private) - number_last_private = number_channel; - } - } - } - /* move to next buffer */ - ptr_buffer = weechat_hdata_move (hdata_buffer, ptr_buffer, 1); - } - - /* use last channel/pv number + 1 */ - switch (channel_type) - { - case IRC_CHANNEL_TYPE_CHANNEL: - if (number_last_channel > 0) - number_found = number_last_channel + 1; - break; - case IRC_CHANNEL_TYPE_PRIVATE: - if (number_last_private > 0) - number_found = number_last_private + 1; - else if (number_last_channel > 0) - number_found = number_last_channel + 1; - break; - } - - if ((number_found == 0) - && (weechat_config_enum (irc_config_look_server_buffer) == - IRC_CONFIG_LOOK_SERVER_BUFFER_INDEPENDENT)) - { - number_found = weechat_buffer_get_integer (server->buffer, "number") + 1; - } - - /* switch to number found */ - if ((number_found >= 1) && (number_found != number)) - { - snprintf (str_number, sizeof (str_number), "%d", number_found); - weechat_buffer_set (buffer, "number", str_number); - } -} - /* * Searches for a channel by name. * @@ -374,8 +290,11 @@ irc_channel_create_buffer (struct t_irc_server *server, break; case IRC_CONFIG_LOOK_BUFFER_POSITION_NEAR_SERVER: /* move buffer after last channel/pv of server */ - irc_channel_move_near_server (server, channel_type, - ptr_buffer); + irc_buffer_move_near_server ( + server, + 0, /* list_buffer */ + channel_type, + ptr_buffer); break; } if (ptr_buffer_for_merge) diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index 7e7058bc737..57f8e45410d 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -43,6 +43,7 @@ #include "irc-ignore.h" #include "irc-input.h" #include "irc-join.h" +#include "irc-list.h" #include "irc-message.h" #include "irc-mode.h" #include "irc-modelist.h" @@ -3369,15 +3370,38 @@ IRC_COMMAND_CALLBACK(links) return WEECHAT_RC_OK; } +/* + * Gets an integer argument given to the /list command. + */ + +int +irc_command_list_get_int_arg (int argc, char **argv, int arg_number, + int default_value) +{ + long value; + char *error; + + value = default_value; + if (argc > arg_number) + { + error = NULL; + value = strtol (argv[arg_number], &error, 10); + if (!error || error[0]) + value = default_value; + } + return (int)value; +} + /* * Callback for command "/list": lists channels and their topics. */ IRC_COMMAND_CALLBACK(list) { + struct t_hashtable *hashtable; char buf[512], *ptr_channel_name, *ptr_server_name, *ptr_regex; regex_t *new_regexp; - int i, ret; + int i, ret, value; IRC_BUFFER_GET_SERVER(buffer); @@ -3390,6 +3414,69 @@ IRC_COMMAND_CALLBACK(list) ptr_regex = NULL; new_regexp = NULL; + if ((argc > 0) && (weechat_strcmp (argv[1], "-up") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + { + irc_list_move_line_relative ( + ptr_server, + -1 * irc_command_list_get_int_arg (argc, argv, 2, 1)); + } + return WEECHAT_RC_OK; + } + if ((argc > 0) && (weechat_strcmp (argv[1], "-down") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + { + irc_list_move_line_relative ( + ptr_server, + irc_command_list_get_int_arg (argc, argv, 2, 1)); + } + return WEECHAT_RC_OK; + } + if ((argc > 0) && (weechat_strcmp (argv[1], "-go") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + { + if (argc < 3) + WEECHAT_COMMAND_ERROR; + value = (weechat_strcmp (argv[2], "end") == 0) ? + -1 : irc_command_list_get_int_arg (argc, argv, 2, -2); + if (value < -1) + WEECHAT_COMMAND_ERROR; + irc_list_move_line_absolute (ptr_server, value); + } + return WEECHAT_RC_OK; + } + if ((argc > 0) && (weechat_strcmp (argv[1], "-left") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + { + value = irc_command_list_get_int_arg ( + argc, argv, 2, + weechat_config_integer (irc_config_look_list_buffer_scroll_horizontal)); + irc_list_scroll_horizontal (ptr_server, -1 * value); + } + return WEECHAT_RC_OK; + } + if ((argc > 0) && (weechat_strcmp (argv[1], "-right") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + { + value = irc_command_list_get_int_arg ( + argc, argv, 2, + weechat_config_integer (irc_config_look_list_buffer_scroll_horizontal)); + irc_list_scroll_horizontal (ptr_server, value); + } + return WEECHAT_RC_OK; + } + if ((argc > 0) && (weechat_strcmp (argv[1], "-join") == 0)) + { + if (ptr_server && ptr_server->list->buffer) + irc_list_join_channel (ptr_server); + return WEECHAT_RC_OK; + } + for (i = 1; i < argc; i++) { if (weechat_strcmp (argv[i], "-server") == 0) @@ -3458,6 +3545,39 @@ IRC_COMMAND_CALLBACK(list) ptr_server->cmd_list_regexp = NULL; } + if (ptr_server->list && !ptr_server->cmd_list_regexp) + { + hashtable = weechat_hashtable_new (32, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, + NULL); + if (hashtable) + { + weechat_hashtable_set (hashtable, "server", ptr_server->name); + weechat_hashtable_set (hashtable, "pattern", "list"); + snprintf (buf, sizeof (buf), "server_%s", ptr_server->name); + weechat_hashtable_set (hashtable, "signal", buf); + weechat_hook_hsignal_send ("irc_redirect_command", hashtable); + weechat_hashtable_free (hashtable); + } + + irc_list_reset (ptr_server); + + if (ptr_server->list->buffer) + weechat_buffer_clear (ptr_server->list->buffer); + else + ptr_server->list->buffer = irc_list_create_buffer (ptr_server); + if (ptr_server->list->buffer) + { + weechat_printf_y (ptr_server->list->buffer, 1, + "%s", + _("Receiving list of channels, please wait...")); + irc_list_buffer_set_title (ptr_server); + weechat_buffer_set (ptr_server->list->buffer, "display", "1"); + } + } + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, "LIST%s%s%s%s", (ptr_channel_name) ? " " : "", @@ -7155,24 +7275,84 @@ irc_command_init () "list", N_("list channels and their topics"), N_("[-server ] [-re ] [[,...]] " - "[]"), + "[]" + " || -up|-down []" + " || -left|-right []" + " || -go |end" + " || -join"), N_(" server: send to this server (internal name)\n" " regex: POSIX extended regular expression used to filter results " "(case insensitive, can start by \"(?-i)\" to become case " "sensitive)\n" "channel: channel to list\n" " target: server name\n" + " -up: move the selected line up by \"number\" lines\n" + " -down: move the selected line down by \"number\" lines\n" + " -left: scroll the list buffer by \"percent\" of width " + "on the left\n" + " -right: scroll the list buffer by \"percent\" of width " + "on the right\n" + " -go: select a line by number, first line number is 0 " + "(\"end\" to select the last line)\n" + " -join: join the channel on the selected line\n" + "\n" + "Keys and input on /list buffer:\n" + " up move one line up\n" + " down move one line down\n" + " pgup move one page up\n" + " pgdn move one page down\n" + " alt-home << move to first line\n" + " alt-end >> move to last line\n" + " F11 < scroll horizontally on the left\n" + " F12 > scroll horizontally on the right\n" + " * show all channels (no filter)\n" + " xxx show only channels with \"xxx\" in name or topic (case insensitive)\n" + " n:xxx show only channels with \"xxx\" in name (case insensitive)\n" + " u:n show only channels with at least \"n\" users\n" + " u:>n show only channels with more than \"n\" users\n" + " u: 10\n" + " sort channels by users (big channels first), then name2 (name without prefix):\n" + " s:-users,name2"), "-server %(irc_servers)" - " || -re", + " || -re" + " || -up 1|2|3|4|5" + " || -down 1|2|3|4|5" + " || -left 10|20|30|40|50|60|70|80|90|100" + " || -right 10|20|30|40|50|60|70|80|90|100" + " || -go 0|end" + " || -join", &irc_command_list, NULL, NULL); weechat_hook_command ( "lusers", diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index 36c564f94c8..3a90efdfa40 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -33,6 +33,7 @@ #include "irc-channel.h" #include "irc-ctcp.h" #include "irc-ignore.h" +#include "irc-list.h" #include "irc-mode.h" #include "irc-msgbuffer.h" #include "irc-nick.h" @@ -91,8 +92,12 @@ struct t_config_option *irc_config_look_item_display_server = NULL; struct t_config_option *irc_config_look_item_nick_modes = NULL; struct t_config_option *irc_config_look_item_nick_prefix = NULL; struct t_config_option *irc_config_look_join_auto_add_chantype = NULL; +struct t_config_option *irc_config_look_list_buffer_scroll_horizontal = NULL; +struct t_config_option *irc_config_look_list_buffer_sort = NULL; +struct t_config_option *irc_config_look_list_buffer_topic_strip_colors = NULL; struct t_config_option *irc_config_look_msgbuffer_fallback = NULL; struct t_config_option *irc_config_look_new_channel_position = NULL; +struct t_config_option *irc_config_look_new_list_position = NULL; struct t_config_option *irc_config_look_new_pv_position = NULL; struct t_config_option *irc_config_look_nick_completion_smart = NULL; struct t_config_option *irc_config_look_nick_mode = NULL; @@ -133,6 +138,8 @@ struct t_config_option *irc_config_color_item_nick_modes = NULL; struct t_config_option *irc_config_color_item_tls_version_deprecated = NULL; struct t_config_option *irc_config_color_item_tls_version_insecure = NULL; struct t_config_option *irc_config_color_item_tls_version_ok = NULL; +struct t_config_option *irc_config_color_list_buffer_line_selected = NULL; +struct t_config_option *irc_config_color_list_buffer_line_selected_bg = NULL; struct t_config_option *irc_config_color_message_account = NULL; struct t_config_option *irc_config_color_message_chghost = NULL; struct t_config_option *irc_config_color_message_join = NULL; @@ -735,6 +742,29 @@ irc_config_change_color_item_tls_version (const void *pointer, void *data, weechat_bar_item_update ("tls_version"); } +/* + * Callback for changes on options "irc.color.list_buffer_*". + */ + +void +irc_config_change_color_list_buffer (const void *pointer, void *data, + struct t_config_option *option) +{ + struct t_irc_server *ptr_server; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) option; + + for (ptr_server = irc_servers; ptr_server; + ptr_server = ptr_server->next_server) + { + if (ptr_server->list->buffer) + irc_list_buffer_refresh (ptr_server, 0); + } +} + /* * Callback for changes on option "irc.color.mirc_remap". */ @@ -3230,6 +3260,34 @@ irc_config_init () "will in fact send: \"/join #weechat\""), NULL, 0, 0, "off", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + irc_config_look_list_buffer_scroll_horizontal = weechat_config_new_option ( + irc_config_file, irc_config_section_look, + "list_buffer_scroll_horizontal", "integer", + N_("left/right scroll in /list buffer (percent of width)"), + NULL, 1, 100, "10", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + irc_config_look_list_buffer_sort = weechat_config_new_option ( + irc_config_file, irc_config_section_look, + "list_buffer_sort", "string", + N_("comma-separated list of fields to sort channels (see /help list " + "for a list of fields); char \"-\" can be used before field to " + "reverse order, char \"~\" can be used to do a case insensitive " + "comparison; example: \"-count,~name\" for biggest channels " + "first then case insensitive sort on name"), + NULL, 0, 0, "~name2", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + irc_config_look_list_buffer_topic_strip_colors = weechat_config_new_option ( + irc_config_file, irc_config_section_look, + "list_buffer_topic_strip_colors", "boolean", + N_("strip channel topic colors in /list buffer"), + NULL, 0, 0, "on", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); irc_config_look_msgbuffer_fallback = weechat_config_new_option ( irc_config_file, irc_config_section_look, "msgbuffer_fallback", "enum", @@ -3246,6 +3304,15 @@ irc_config_init () "of server)"), "none|next|near_server", 0, 0, "none", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + irc_config_look_new_list_position = weechat_config_new_option ( + irc_config_file, irc_config_section_look, + "new_list_position", "enum", + N_("force position of new /list buffer in list of buffers " + "(none = default position (should be last buffer), " + "next = current buffer + 1, near_server = after last channel/pv " + "of server)"), + "none|next|near_server", 0, 0, "none", NULL, 0, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); irc_config_look_new_pv_position = weechat_config_new_option ( irc_config_file, irc_config_section_look, "new_pv_position", "enum", @@ -3564,6 +3631,22 @@ irc_config_init () NULL, NULL, NULL, &irc_config_change_color_item_tls_version, NULL, NULL, NULL, NULL, NULL); + irc_config_color_list_buffer_line_selected = weechat_config_new_option ( + irc_config_file, irc_config_section_color, + "list_buffer_line_selected", "color", + N_("color for selected line on /list buffer"), + NULL, -1, 0, "white", NULL, 0, + NULL, NULL, NULL, + &irc_config_change_color_list_buffer, NULL, NULL, + NULL, NULL, NULL); + irc_config_color_list_buffer_line_selected_bg = weechat_config_new_option ( + irc_config_file, irc_config_section_color, + "list_buffer_line_selected_bg", "color", + N_("background color for selected line on /list buffer"), + NULL, -1, 0, "24", NULL, 0, + NULL, NULL, NULL, + &irc_config_change_color_list_buffer, NULL, NULL, + NULL, NULL, NULL); irc_config_color_message_account = weechat_config_new_option ( irc_config_file, irc_config_section_color, "message_account", "color", diff --git a/src/plugins/irc/irc-config.h b/src/plugins/irc/irc-config.h index 3a9e8b89926..c5d078bdc0f 100644 --- a/src/plugins/irc/irc-config.h +++ b/src/plugins/irc/irc-config.h @@ -127,8 +127,12 @@ extern struct t_config_option *irc_config_look_item_display_server; extern struct t_config_option *irc_config_look_item_nick_modes; extern struct t_config_option *irc_config_look_item_nick_prefix; extern struct t_config_option *irc_config_look_join_auto_add_chantype; +extern struct t_config_option *irc_config_look_list_buffer_scroll_horizontal; +extern struct t_config_option *irc_config_look_list_buffer_sort; +extern struct t_config_option *irc_config_look_list_buffer_topic_strip_colors; extern struct t_config_option *irc_config_look_msgbuffer_fallback; extern struct t_config_option *irc_config_look_new_channel_position; +extern struct t_config_option *irc_config_look_new_list_position; extern struct t_config_option *irc_config_look_new_pv_position; extern struct t_config_option *irc_config_look_nick_completion_smart; extern struct t_config_option *irc_config_look_nick_mode; @@ -167,6 +171,8 @@ extern struct t_config_option *irc_config_color_item_nick_modes; extern struct t_config_option *irc_config_color_item_tls_version_deprecated; extern struct t_config_option *irc_config_color_item_tls_version_insecure; extern struct t_config_option *irc_config_color_item_tls_version_ok; +extern struct t_config_option *irc_config_color_list_buffer_line_selected; +extern struct t_config_option *irc_config_color_list_buffer_line_selected_bg; extern struct t_config_option *irc_config_color_message_account; extern struct t_config_option *irc_config_color_message_chghost; extern struct t_config_option *irc_config_color_message_join; diff --git a/src/plugins/irc/irc-info.c b/src/plugins/irc/irc-info.c index 98da456f8fe..a95d95f1f20 100644 --- a/src/plugins/irc/irc-info.c +++ b/src/plugins/irc/irc-info.c @@ -30,6 +30,7 @@ #include "irc-color.h" #include "irc-config.h" #include "irc-ignore.h" +#include "irc-list.h" #include "irc-message.h" #include "irc-modelist.h" #include "irc-nick.h" @@ -1384,4 +1385,10 @@ irc_info_init () weechat_hook_hdata ( "irc_batch", N_("irc batch"), &irc_batch_hdata_batch_cb, NULL, NULL); + weechat_hook_hdata ( + "irc_list_channel", N_("irc channel on /list buffer"), + &irc_list_hdata_list_channel_cb, NULL, NULL); + weechat_hook_hdata ( + "irc_list", N_("irc data for /list buffer"), + &irc_list_hdata_list_cb, NULL, NULL); } diff --git a/src/plugins/irc/irc-input.c b/src/plugins/irc/irc-input.c index d0cae36c12f..fa44d593887 100644 --- a/src/plugins/irc/irc-input.c +++ b/src/plugins/irc/irc-input.c @@ -32,6 +32,7 @@ #include "irc-nick.h" #include "irc-color.h" #include "irc-config.h" +#include "irc-list.h" #include "irc-msgbuffer.h" #include "irc-protocol.h" #include "irc-raw.h" @@ -365,6 +366,12 @@ irc_input_data (struct t_gui_buffer *buffer, const char *input_data, int flags, else irc_raw_filter_options (input_data); } + else if (weechat_strcmp ( + weechat_buffer_get_string (buffer, + "localvar_type"), "irc_list") == 0) + { + irc_list_buffer_input_data (buffer, input_data); + } else { /* diff --git a/src/plugins/irc/irc-list.c b/src/plugins/irc/irc-list.c new file mode 100644 index 00000000000..e4383b4490c --- /dev/null +++ b/src/plugins/irc/irc-list.c @@ -0,0 +1,1309 @@ +/* + * irc-list.c - functions for IRC list buffer + * + * Copyright (C) 2023 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see . + */ + +#include +#include +#include +#include + +#include "../weechat-plugin.h" +#include "irc.h" +#include "irc-list.h" +#include "irc-buffer.h" +#include "irc-color.h" +#include "irc-config.h" +#include "irc-input.h" +#include "irc-message.h" +#include "irc-server.h" + + +struct t_hdata *irc_list_hdata_list_channel = NULL; +struct t_hashtable *irc_list_filter_hashtable_pointers = NULL; +struct t_hashtable *irc_list_filter_hashtable_extra_vars = NULL; +struct t_hashtable *irc_list_filter_hashtable_options = NULL; + + +/* + * Compares two channels in list. + */ + +int +irc_list_compare_cb (void *data, struct t_arraylist *arraylist, + void *pointer1, void *pointer2) +{ + struct t_irc_server *ptr_server; + const char *ptr_field; + int i, reverse, case_sensitive, rc; + + /* make C compiler happy */ + (void) arraylist; + + ptr_server = data; + if (!ptr_server) + return 1; + + for (i = 0; i < ptr_server->list->sort_fields_count; i++) + { + reverse = 1; + case_sensitive = 1; + ptr_field = ptr_server->list->sort_fields[i]; + while ((ptr_field[0] == '-') || (ptr_field[0] == '~')) + { + if (ptr_field[0] == '-') + reverse *= -1; + else if (ptr_field[0] == '~') + case_sensitive ^= 1; + ptr_field++; + } + rc = weechat_hdata_compare (irc_list_hdata_list_channel, + pointer1, pointer2, + ptr_field, + case_sensitive); + rc *= reverse; + if (rc != 0) + return rc; + } + + return 1; +} + +/* + * Frees a channel in list. + */ + +void +irc_list_free_cb (void *data, struct t_arraylist *arraylist, void *pointer) +{ + struct t_irc_list_channel *ptr_channel; + + /* make C compiler happy */ + (void) data; + (void) arraylist; + + ptr_channel = (struct t_irc_list_channel *)pointer; + if (ptr_channel) + { + if (ptr_channel->name) + free (ptr_channel->name); + if (ptr_channel->name2) + free (ptr_channel->name2); + if (ptr_channel->topic) + free (ptr_channel->topic); + free (ptr_channel); + } +} + +/* + * Sets filter for list of channels. + */ + +void +irc_list_set_filter (struct t_irc_server *server, const char *filter) +{ + if (server->list->filter) + { + free (server->list->filter); + server->list->filter = NULL; + } + + server->list->filter = (filter && (strcmp (filter, "*") != 0)) ? + strdup (filter) : NULL; +} + +/* + * Sets sort for list of channels. + * + */ + +void +irc_list_set_sort (struct t_irc_server *server, const char *sort) +{ + if (server->list->sort) + { + free (server->list->sort); + server->list->sort = NULL; + } + if (server->list->sort_fields) + { + weechat_string_free_split (server->list->sort_fields); + server->list->sort_fields = NULL; + } + server->list->sort_fields_count = 0; + + server->list->sort = strdup ( + (sort && sort[0]) ? + sort : weechat_config_string (irc_config_look_list_buffer_sort)); + + if (server->list->sort) + { + server->list->sort_fields = weechat_string_split ( + server->list->sort, + ",", + NULL, + WEECHAT_STRING_SPLIT_STRIP_LEFT + | WEECHAT_STRING_SPLIT_STRIP_RIGHT + | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS, + 0, + &server->list->sort_fields_count); + } +} + +/* + * Adds the properties of an irc list channel in a hashtable + * (keys and values must be strings). + */ + +void +irc_list_add_channel_in_hashtable (struct t_hashtable *hashtable, + struct t_irc_list_channel *channel) +{ + char str_number[32]; + + weechat_hashtable_set (hashtable, "name", channel->name); + weechat_hashtable_set (hashtable, "name2", channel->name2); + snprintf (str_number, sizeof (str_number), "%d", channel->users); + weechat_hashtable_set (hashtable, "users", str_number); + weechat_hashtable_set (hashtable, "topic", channel->topic); +} + +/* + * Checks if a string matches a mask. + * + * If mask has no "*" inside, it just checks if "mask" is inside the "string". + * If mask has at least one "*" inside, the function weechat_string_match is + * used. + * + * Returns: + * 1: string matches mask + * 0: string does not match mask + */ + +int +irc_list_string_match (const char *string, const char *mask) +{ + if (strchr (mask, '*')) + return weechat_string_match (string, mask, 0); + else + return (weechat_strcasestr (string, mask)) ? 1 : 0; +} + +/* + * Checks if a channel matches filter. + * + * Return: + * 1: channel matches filter + * 0: channel does NOT match filter + */ + +int +irc_list_channel_match_filter (struct t_irc_server *server, + struct t_irc_list_channel *channel) +{ + char *error, *result; + long number; + int match; + + /* no filter? then any channel is matching */ + if (!server->list->filter) + return 1; + + if (strncmp (server->list->filter, "c:", 2) == 0) + { + /* filter by evaluated condition */ + weechat_hashtable_set (irc_list_filter_hashtable_pointers, + "irc_list_channel", channel); + irc_list_add_channel_in_hashtable (irc_list_filter_hashtable_extra_vars, + channel); + result = weechat_string_eval_expression ( + server->list->filter + 2, + irc_list_filter_hashtable_pointers, + irc_list_filter_hashtable_extra_vars, + irc_list_filter_hashtable_options); + match = (result && (strcmp (result, "1") == 0)) ? 1 : 0; + if (result) + free (result); + return match; + } + + if (strncmp (server->list->filter, "n:", 2) == 0) + { + /* filter by channel name */ + if (channel->name + && irc_list_string_match (channel->name, server->list->filter + 2)) + { + return 1; + } + } + else if (strncmp (server->list->filter, "t:", 2) == 0) + { + /* filter by topic */ + if (channel->topic + && irc_list_string_match (channel->topic, server->list->filter + 2)) + { + return 1; + } + } + else if (strncmp (server->list->filter, "u:>", 3) == 0) + { + /* filter by users (> N)*/ + number = strtol (server->list->filter + 3, &error, 10); + if (error && !error[0] && channel->users > (int)number) + return 1; + } + else if (strncmp (server->list->filter, "u:<", 3) == 0) + { + /* filter by users (< N)*/ + number = strtol (server->list->filter + 3, &error, 10); + if (error && !error[0] && channel->users < (int)number) + return 1; + } + else if (strncmp (server->list->filter, "u:", 2) == 0) + { + /* filter by users */ + number = strtol (server->list->filter + 2, &error, 10); + if (error && !error[0] && channel->users >= (int)number) + return 1; + } + else + { + if (channel->name + && irc_list_string_match (channel->name, server->list->filter)) + { + return 1; + } + if (channel->topic + && irc_list_string_match (channel->topic, server->list->filter)) + { + return 1; + } + } + + return 0; +} + +/* + * Filters channels: apply filter and use sort to build the list + * "filter_channels" that are pointers to t_irc_list_channel structs + * stored in main list "channels". + */ + +void +irc_list_filter_channels (struct t_irc_server *server) +{ + struct t_irc_list_channel *ptr_channel; + int i, list_size; + + if (server->list->filter_channels) + { + weechat_arraylist_clear (server->list->filter_channels); + } + else + { + server->list->filter_channels = weechat_arraylist_new ( + 16, 1, 0, + &irc_list_compare_cb, server, + NULL, NULL); + } + + if (!server->list->sort) + { + irc_list_set_sort ( + server, + weechat_config_string (irc_config_look_list_buffer_sort)); + } + + list_size = weechat_arraylist_size (server->list->channels); + for (i = 0; i < list_size; i++) + { + ptr_channel = (struct t_irc_list_channel *)weechat_arraylist_get ( + server->list->channels, i); + if (!ptr_channel) + continue; + if (irc_list_channel_match_filter (server, ptr_channel)) + weechat_arraylist_add (server->list->filter_channels, ptr_channel); + } +} + +/* + * Parses output of redirected /list (string with raw IRC messages separated + * by newlines) and returns an arraylist of parsed channels, or NULL if no + * valid message (322) was found in output. + * + * Returns: + * 1: OK + * 0: error + */ + +int +irc_list_parse_messages (struct t_irc_server *server, const char *output) +{ + struct t_irc_list_channel *channel; + char **irc_msgs, *command, **params, *error; + const char *ptr_name; + int i, count_irc_msgs, num_params, length, keep_colors; + long number; + + if (server->list->channels) + { + weechat_arraylist_free (server->list->channels); + server->list->channels = NULL; + } + + irc_msgs = weechat_string_split (output, "\n", NULL, 0, 0, &count_irc_msgs); + if (!irc_msgs) + return 0; + + server->list->channels = weechat_arraylist_new ( + 16, 0, 1, + NULL, NULL, + &irc_list_free_cb, NULL); + if (!server->list->channels) + { + weechat_string_free_split (irc_msgs); + return 0; + } + + server->list->name_max_length = 0; + + keep_colors = (weechat_config_boolean ( + irc_config_look_list_buffer_topic_strip_colors)) ? + 0 : 1; + + for (i = 0; i < count_irc_msgs; i++) + { + irc_message_parse (server, irc_msgs[i], + NULL, /* tags */ + NULL, /* message_without_tags */ + NULL, /* nick */ + NULL, /* user */ + NULL, /* host */ + &command, + NULL, /* channel */ + NULL, /* arguments */ + NULL, /* text */ + ¶ms, + &num_params, + NULL, /* pos_command */ + NULL, /* pos_arguments */ + NULL, /* pos_channel */ + NULL); /* pos_text */ + if (command + && (strcmp (command, "322") == 0) + && params + && (num_params >= 3)) + { + channel = malloc (sizeof (*channel)); + if (channel) + { + channel->name = strdup (params[1]); + ptr_name = params[1] + 1; + while (ptr_name[0] && (ptr_name[0] == params[1][0])) + { + ptr_name++; + } + channel->name2 = strdup (ptr_name); + number = strtol (params[2], &error, 10); + channel->users = (error && !error[0]) ? number : 0; + channel->topic = (num_params > 3) ? + irc_color_decode (params[3], keep_colors) : NULL; + length = weechat_utf8_strlen_screen (channel->name); + if (length > server->list->name_max_length) + server->list->name_max_length = length; + weechat_arraylist_add (server->list->channels, channel); + } + } + if (command) + free (command); + if (params) + weechat_string_free_split (params); + } + + weechat_string_free_split (irc_msgs); + + irc_list_filter_channels (server); + + return 1; +} + +/* + * Sets title of list buffer. + */ + +void +irc_list_buffer_set_title (struct t_irc_server *server) +{ + int num_channels, num_channels_total; + char str_title[8192]; + + if (!server || !server->list->buffer) + return; + + num_channels = (server->list->filter_channels) ? + weechat_arraylist_size (server->list->filter_channels) : 0; + num_channels_total = (server->list->channels) ? + weechat_arraylist_size (server->list->channels) : 0; + + snprintf (str_title, sizeof (str_title), + _("%d channels (total: %d) | Filter: %s | Sort: %s | " + "Key(input): " + "ctrl+j=join channel, " + "($)=refresh, " + "(q)=close buffer"), + num_channels, + num_channels_total, + (server->list->filter) ? server->list->filter : "*", + (server->list->sort) ? server->list->sort : ""); + + weechat_buffer_set (server->list->buffer, "title", str_title); +} + +/* + * Displays a line. + */ + +void +irc_list_display_line (struct t_irc_server *server, int line) +{ + struct t_irc_list_channel *ptr_channel; + const char *ptr_color; + char str_spaces[1024], color[256]; + int num_spaces; + + ptr_channel = (struct t_irc_list_channel *)weechat_arraylist_get ( + server->list->filter_channels, line); + + /* line color */ + if (line == server->list->selected_line) + { + snprintf (color, sizeof (color), + "%s,%s", + weechat_config_string (irc_config_color_list_buffer_line_selected), + weechat_config_string (irc_config_color_list_buffer_line_selected_bg)); + ptr_color = weechat_color (color); + } + else + { + ptr_color = NULL; + } + + /* channel name */ + str_spaces[0] = '\0'; + num_spaces = server->list->name_max_length + - weechat_utf8_strlen_screen (ptr_channel->name); + if (num_spaces > 0) + { + if (num_spaces >= (int)sizeof (str_spaces)) + num_spaces = sizeof (str_spaces) - 1; + memset (str_spaces, ' ', num_spaces); + str_spaces[num_spaces] = '\0'; + } + + /* display the line */ + weechat_printf_y ( + server->list->buffer, + line, + "%s%s%s %7d %s", + (ptr_color) ? ptr_color : "", + ptr_channel->name, + str_spaces, + ptr_channel->users, + ptr_channel->topic); +} + +/* + * Updates list of channels in list buffer. + */ + +void +irc_list_buffer_refresh (struct t_irc_server *server, int clear) +{ + int num_channels, i; + + if (!server || !server->list->buffer) + return; + + num_channels = weechat_arraylist_size (server->list->filter_channels); + + if (clear) + { + weechat_buffer_clear (server->list->buffer); + server->list->selected_line = 0; + } + + for (i = 0; i < num_channels; i++) + { + irc_list_display_line (server, i); + } + + irc_list_buffer_set_title (server); +} + +/* + * Sets current selected line. + */ + +void +irc_list_set_current_line (struct t_irc_server *server, int line) +{ + int old_line; + + if ((line >= 0) && (line < weechat_arraylist_size (server->list->filter_channels))) + { + old_line = server->list->selected_line; + server->list->selected_line = line; + + if (old_line != server->list->selected_line) + irc_list_display_line (server, old_line); + irc_list_display_line (server, server->list->selected_line); + + irc_list_buffer_set_title (server); + } +} + +/* + * Gets info about a window. + */ + +void +irc_list_get_window_info (struct t_gui_window *window, + int *start_line_y, int *chat_height) +{ + struct t_hdata *hdata_window, *hdata_window_scroll, *hdata_line; + struct t_hdata *hdata_line_data; + void *window_scroll, *start_line, *line_data; + + hdata_window = weechat_hdata_get ("window"); + hdata_window_scroll = weechat_hdata_get ("window_scroll"); + hdata_line = weechat_hdata_get ("line"); + hdata_line_data = weechat_hdata_get ("line_data"); + *start_line_y = 0; + window_scroll = weechat_hdata_pointer (hdata_window, window, "scroll"); + if (window_scroll) + { + start_line = weechat_hdata_pointer (hdata_window_scroll, window_scroll, + "start_line"); + if (start_line) + { + line_data = weechat_hdata_pointer (hdata_line, start_line, "data"); + if (line_data) + { + *start_line_y = weechat_hdata_integer (hdata_line_data, + line_data, "y"); + } + } + } + *chat_height = weechat_hdata_integer (hdata_window, window, + "win_chat_height"); +} + +/* + * Checks if current line is outside window and adjusts scroll if needed. + */ + +void +irc_list_check_line_outside_window (struct t_irc_server *server) +{ + struct t_gui_window *window; + int start_line_y, chat_height; + int selected_y; + char str_command[256]; + + window = weechat_window_search_with_buffer (server->list->buffer); + if (!window) + return; + + irc_list_get_window_info (window, &start_line_y, &chat_height); + + selected_y = server->list->selected_line; + + if ((start_line_y > selected_y) + || (start_line_y < selected_y - chat_height + 1)) + { + snprintf (str_command, sizeof (str_command), + "/window scroll -window %d %s%d", + weechat_window_get_integer (window, "number"), + (start_line_y > selected_y) ? "-" : "+", + (start_line_y > selected_y) ? + start_line_y - selected_y : + selected_y - start_line_y - chat_height + 1); + weechat_command (server->list->buffer, str_command); + } +} + +/* + * Callback for signal "window_scrolled". + */ + +int +irc_list_window_scrolled_cb (const void *pointer, void *data, + const char *signal, const char *type_data, + void *signal_data) +{ + struct t_gui_buffer *ptr_buffer; + struct t_irc_server *ptr_server; + int start_line_y, chat_height, line, num_channels; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) signal; + (void) type_data; + + /* search the /list buffer */ + ptr_buffer = weechat_window_get_pointer (signal_data, "buffer"); + for (ptr_server = irc_servers; ptr_server; + ptr_server = ptr_server->next_server) + { + if (ptr_server->list->buffer == ptr_buffer) + break; + } + if (!ptr_server) + return WEECHAT_RC_OK; + + irc_list_get_window_info (signal_data, &start_line_y, &chat_height); + + line = ptr_server->list->selected_line; + while (line < start_line_y) + { + line += chat_height; + } + while (line >= start_line_y + chat_height) + { + line -= chat_height; + } + if (line < start_line_y) + line = start_line_y + 1; + + num_channels = weechat_arraylist_size (ptr_server->list->filter_channels); + if ((num_channels > 0) && (line >= num_channels)) + line = num_channels - 1; + + irc_list_set_current_line (ptr_server, line); + + return WEECHAT_RC_OK; +} + +/* + * Moves N lines up/down in buffer + * (negative lines = move up, positive lines = move down). + */ + +void +irc_list_move_line_relative (struct t_irc_server *server, int num_lines) +{ + int num_channels, line; + + num_channels = weechat_arraylist_size (server->list->filter_channels); + if (num_channels == 0) + return; + + line = server->list->selected_line + num_lines; + if (line < 0) + line = 0; + if ((num_channels > 0) && (line >= num_channels)) + line = num_channels - 1; + if (line != server->list->selected_line) + { + irc_list_set_current_line (server, line); + irc_list_check_line_outside_window (server); + } +} + +/* + * Moves to line N (0 = first line, -1 = last line). + */ + +void +irc_list_move_line_absolute (struct t_irc_server *server, int line_number) +{ + int num_channels, line; + + num_channels = weechat_arraylist_size (server->list->filter_channels); + if (num_channels == 0) + return; + + line = line_number; + if (line < 0) + line = (num_channels > 0) ? num_channels - 1 : 0; + if ((num_channels > 0) && (line >= num_channels)) + line = num_channels - 1; + if (line != server->list->selected_line) + { + irc_list_set_current_line (server, line); + irc_list_check_line_outside_window (server); + } +} + +/* + * Scrolls horizontally with percent + * (negative: scroll to the left, positive: scroll to the right). + */ + +void +irc_list_scroll_horizontal (struct t_irc_server *server, int percent) +{ + struct t_gui_window *ptr_window; + char str_command[512]; + + if (percent < -100) + percent = -100; + else if (percent > 100) + percent = 100; + + ptr_window = weechat_window_search_with_buffer (server->list->buffer); + if (!ptr_window) + return; + + snprintf (str_command, sizeof (str_command), + "/window scroll_horiz -window %d %d%%", + weechat_window_get_integer (ptr_window, "number"), + percent); + weechat_command (server->list->buffer, str_command); +} + +/* + * Joins channel on current selected line. + */ + +void +irc_list_join_channel (struct t_irc_server *server) +{ + struct t_irc_list_channel *ptr_channel; + int num_channels; + char str_command[1024]; + + num_channels = weechat_arraylist_size (server->list->filter_channels); + + if ((num_channels == 0) || (server->list->selected_line >= num_channels)) + return; + + ptr_channel = (struct t_irc_list_channel *)weechat_arraylist_get ( + server->list->filter_channels, + server->list->selected_line); + if (!ptr_channel) + return; + + snprintf (str_command, sizeof (str_command), + "/join %s", ptr_channel->name); + + weechat_command (server->list->buffer, str_command); +} + +/* + * Callback for input data in list buffer. + */ + +int +irc_list_buffer_input_data (struct t_gui_buffer *buffer, const char *input_data) +{ + struct t_irc_server *ptr_server; + const char *ptr_server_name, *ptr_input; + int i; + char *actions[][2] = { + { "<<", "/list -go 0" }, + { ">>", "/list -go end" }, + { "<", "/list -left" }, + { ">", "/list -right" }, + { NULL, NULL }, + }; + + /* close buffer */ + if (strcmp (input_data, "q") == 0) + { + weechat_buffer_close (buffer); + return WEECHAT_RC_OK; + } + + ptr_server_name = weechat_buffer_get_string (buffer, "localvar_server"); + if (!ptr_server_name) + return WEECHAT_RC_OK; + + ptr_server = irc_server_search (ptr_server_name); + if (!ptr_server) + return WEECHAT_RC_OK; + + /* refresh buffer */ + if (strcmp (input_data, "$") == 0) + { + weechat_command (ptr_server->list->buffer, "/list"); + return WEECHAT_RC_OK; + } + + /* join channel */ + if (strcmp (input_data, "j") == 0) + { + irc_list_join_channel (ptr_server); + return WEECHAT_RC_OK; + } + + /* change sort of channels */ + if (strncmp (input_data, "s:", 2) == 0) + { + irc_list_set_sort (ptr_server, input_data + 2); + irc_list_filter_channels (ptr_server); + irc_list_buffer_refresh (ptr_server, 1); + weechat_buffer_set (buffer, "display", "1"); + return WEECHAT_RC_OK; + } + + /* execute action */ + for (i = 0; actions[i][0]; i++) + { + if (strcmp (input_data, actions[i][0]) == 0) + { + weechat_command (buffer, actions[i][1]); + return WEECHAT_RC_OK; + } + } + + /* filter channels with given text */ + ptr_input = input_data; + while (ptr_input[0] == ' ') + { + ptr_input++; + } + if (ptr_input[0]) + { + irc_list_set_filter (ptr_server, ptr_input); + irc_list_filter_channels (ptr_server); + irc_list_buffer_refresh (ptr_server, 1); + weechat_buffer_set (buffer, "display", "1"); + } + + return WEECHAT_RC_OK; +} + +/* + * Sets keys on list buffer. + */ + +void +irc_list_buffer_set_keys (struct t_gui_buffer *buffer) +{ + char *keys[][2] = { + { "up", "/list -up" }, + { "down", "/list -down" }, + { "meta-home", "/list -go 0" }, + { "meta-end", "/list -go end" }, + { "f11", "/list -left" }, + { "f12", "/list -right" }, + { "ctrl-j", "/list -join" }, + { NULL, NULL }, + }; + char str_key[64]; + int i; + + for (i = 0; keys[i][0]; i++) + { + snprintf (str_key, sizeof (str_key), "key_bind_%s", keys[i][0]); + weechat_buffer_set (buffer, str_key, keys[i][1]); + } +} + +/* + * Creates buffer with list of channels for a server. + * + * Returns pointer to newly created buffer, NULL if error. + */ + +struct t_gui_buffer * +irc_list_create_buffer (struct t_irc_server *server) +{ + struct t_hashtable *buffer_props; + struct t_gui_buffer *buffer; + char buffer_name[1024], str_number[32]; + int buffer_position, current_buffer_number; + + buffer_props = weechat_hashtable_new ( + 32, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + if (buffer_props) + { + weechat_hashtable_set (buffer_props, "type", "free"); + weechat_hashtable_set (buffer_props, "localvar_set_type", "irc_list"); + weechat_hashtable_set (buffer_props, "localvar_set_server", server->name); + weechat_hashtable_set (buffer_props, "localvar_set_channel", server->name); + weechat_hashtable_set (buffer_props, "localvar_set_no_log", "1"); + /* disable all highlights on this buffer */ + weechat_hashtable_set (buffer_props, "highlight_words", "-"); + } + + current_buffer_number = weechat_buffer_get_integer ( + weechat_current_buffer (), "number"); + + snprintf (buffer_name, sizeof (buffer_name), "list_%s", server->name); + + buffer = weechat_buffer_new_props ( + buffer_name, + buffer_props, + &irc_input_data_cb, NULL, NULL, + &irc_buffer_close_cb, NULL, NULL); + + if (buffer_props) + weechat_hashtable_free (buffer_props); + + irc_list_buffer_set_keys (buffer); + + if (weechat_buffer_get_integer (buffer, "layout_number") < 1) + { + buffer_position = weechat_config_enum (irc_config_look_new_list_position); + switch (buffer_position) + { + case IRC_CONFIG_LOOK_BUFFER_POSITION_NONE: + /* do nothing */ + break; + case IRC_CONFIG_LOOK_BUFFER_POSITION_NEXT: + /* move buffer to current number + 1 */ + snprintf (str_number, sizeof (str_number), + "%d", current_buffer_number + 1); + weechat_buffer_set (buffer, "number", str_number); + break; + case IRC_CONFIG_LOOK_BUFFER_POSITION_NEAR_SERVER: + /* move buffer after last channel/pv of server */ + irc_buffer_move_near_server ( + server, + 1, /* list_buffer */ + -1, /* channel_type */ + buffer); + break; + } + } + + return buffer; +} + +/* + * Callback for redirected /list command. + */ + +int +irc_list_hsignal_redirect_list_cb (const void *pointer, + void *data, + const char *signal, + struct t_hashtable *hashtable) +{ + struct t_irc_server *ptr_server; + const char *ptr_error, *ptr_server_name, *ptr_output; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) signal; + + ptr_error = weechat_hashtable_get (hashtable, "error"); + if (ptr_error && ptr_error[0]) + { + weechat_printf ( + NULL, + _("%s%s: error in redirection of /list: %s"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, ptr_error); + return WEECHAT_RC_OK; + } + + ptr_server_name = weechat_hashtable_get (hashtable, "server"); + if (!ptr_server_name) + return WEECHAT_RC_OK; + + ptr_server = irc_server_search (ptr_server_name); + if (!ptr_server || !ptr_server->buffer) + return WEECHAT_RC_OK; + + ptr_output = weechat_hashtable_get (hashtable, "output"); + if (!ptr_output) + return WEECHAT_RC_OK; + + if (!irc_list_hdata_list_channel) + { + irc_list_hdata_list_channel = weechat_hdata_get ("irc_list_channel"); + if (!irc_list_hdata_list_channel) + return WEECHAT_RC_OK; + } + + irc_list_parse_messages (ptr_server, ptr_output); + if (!ptr_server->list->channels) + return WEECHAT_RC_OK; + + irc_list_buffer_refresh (ptr_server, 1); + + return WEECHAT_RC_OK; +} + +/* + * Resets lists used by list buffer. + */ + +void +irc_list_reset (struct t_irc_server *server) +{ + if (!server) + return; + + if (server->list->channels) + weechat_arraylist_clear (server->list->channels); + if (server->list->filter_channels) + weechat_arraylist_clear (server->list->filter_channels); + server->list->name_max_length = 0; + if (!server->list->sort) + { + irc_list_set_sort ( + server, + weechat_config_string (irc_config_look_list_buffer_sort)); + } + server->list->selected_line = 0; +} + +/* + * Frees a list structure in a server. + */ + +struct t_irc_list * +irc_list_alloc () +{ + struct t_irc_list *list; + + list = malloc (sizeof (*list)); + if (!list) + return NULL; + + list->buffer = NULL; + list->channels = NULL; + list->filter_channels = NULL; + list->name_max_length = 0; + list->filter = NULL; + list->sort = NULL; + list->sort_fields = NULL; + list->sort_fields_count = 0; + list->selected_line = 0; + + return list; +} + +/* + * Frees a list structure in a server. + */ + +void +irc_list_free (struct t_irc_server *server) +{ + if (!server || !server->list) + return; + + if (server->list->buffer) + weechat_buffer_close (server->list->buffer); + if (server->list->channels) + weechat_arraylist_free (server->list->channels); + if (server->list->filter_channels) + weechat_arraylist_free (server->list->filter_channels); + if (server->list->filter) + free (server->list->filter); + if (server->list->sort) + free (server->list->sort); + if (server->list->sort_fields) + weechat_string_free_split (server->list->sort_fields); + + free (server->list); + server->list = NULL; +} + +/* + * Returns hdata for irc_list_channel. + */ + +struct t_hdata * +irc_list_hdata_list_channel_cb (const void *pointer, void *data, + const char *hdata_name) +{ + struct t_hdata *hdata; + + /* make C compiler happy */ + (void) pointer; + (void) data; + + hdata = weechat_hdata_new (hdata_name, NULL, NULL, 0, 0, NULL, NULL); + if (hdata) + { + WEECHAT_HDATA_VAR(struct t_irc_list_channel, name, STRING, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list_channel, name2, STRING, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list_channel, users, INTEGER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list_channel, topic, STRING, 0, NULL, NULL); + } + return hdata; +} + +/* + * Returns hdata for irc_list. + */ + +struct t_hdata * +irc_list_hdata_list_cb (const void *pointer, void *data, const char *hdata_name) +{ + struct t_hdata *hdata; + + /* make C compiler happy */ + (void) pointer; + (void) data; + + hdata = weechat_hdata_new (hdata_name, NULL, NULL, 0, 0, NULL, NULL); + if (hdata) + { + WEECHAT_HDATA_VAR(struct t_irc_list, buffer, POINTER, 0, NULL, "buffer"); + WEECHAT_HDATA_VAR(struct t_irc_list, channels, POINTER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, filter_channels, POINTER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, name_max_length, INTEGER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, filter, STRING, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, sort, STRING, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, sort_fields, POINTER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, sort_fields_count, INTEGER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_list, selected_line, INTEGER, 0, NULL, NULL); + } + return hdata; +} + +/* + * Callback called when a mouse action occurs in irc list buffer. + */ + +int +irc_list_mouse_hsignal_cb (const void *pointer, void *data, const char *signal, + struct t_hashtable *hashtable) +{ + const char *ptr_key, *ptr_chat_line_y, *ptr_buffer_pointer; + struct t_gui_buffer *ptr_buffer; + unsigned long value; + char str_command[1024]; + int rc; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) signal; + + ptr_key = weechat_hashtable_get (hashtable, "_key"); + ptr_buffer_pointer = weechat_hashtable_get (hashtable, "_buffer"); + ptr_chat_line_y = weechat_hashtable_get (hashtable, "_chat_line_y"); + + if (!ptr_key || !ptr_buffer_pointer || !ptr_chat_line_y) + return WEECHAT_RC_OK; + + rc = sscanf (ptr_buffer_pointer, "%lx", &value); + if ((rc == EOF) || (rc == 0)) + return WEECHAT_RC_OK; + ptr_buffer = (struct t_gui_buffer *)value; + if (!ptr_buffer) + return WEECHAT_RC_OK; + + snprintf (str_command, sizeof (str_command), + "/list -go %s", + ptr_chat_line_y); + weechat_command (ptr_buffer, str_command); + + if (weechat_string_match (ptr_key, "button2*", 1)) + weechat_command (ptr_buffer, "/list -join"); + + return WEECHAT_RC_OK; +} + +/* + * Initializes irc list. + */ + +void +irc_list_init () +{ + struct t_hashtable *keys; + + irc_list_filter_hashtable_pointers = weechat_hashtable_new ( + 8, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_POINTER, + NULL, NULL); + irc_list_filter_hashtable_extra_vars = weechat_hashtable_new ( + 32, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + irc_list_filter_hashtable_options = weechat_hashtable_new ( + 8, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + if (irc_list_filter_hashtable_options) + { + weechat_hashtable_set (irc_list_filter_hashtable_options, + "type", "condition"); + } + + weechat_hook_hsignal (IRC_LIST_MOUSE_HSIGNAL, + &irc_list_mouse_hsignal_cb, NULL, NULL); + + keys = weechat_hashtable_new (32, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + if (keys) + { + weechat_hashtable_set ( + keys, + "@chat(" IRC_PLUGIN_NAME ".list_*):button1", + "/window ${_window_number};/list -go ${_chat_line_y}"); + weechat_hashtable_set ( + keys, + "@chat(" IRC_PLUGIN_NAME ".list_*):button2*", + "hsignal:" IRC_LIST_MOUSE_HSIGNAL); + weechat_hashtable_set ( + keys, + "@chat(" IRC_PLUGIN_NAME ".list_*):wheelup", + "/list -up 5"); + weechat_hashtable_set ( + keys, + "@chat(" IRC_PLUGIN_NAME ".list_*):wheeldown", + "/list -down 5"); + weechat_hashtable_set (keys, "__quiet", "1"); + weechat_key_bind ("mouse", keys); + weechat_hashtable_free (keys); + } +} + +/* + * Ends irc list. + */ + +void +irc_list_end () +{ + if (irc_list_filter_hashtable_pointers) + { + weechat_hashtable_free (irc_list_filter_hashtable_pointers); + irc_list_filter_hashtable_pointers = NULL; + } + if (irc_list_filter_hashtable_extra_vars) + { + weechat_hashtable_free (irc_list_filter_hashtable_extra_vars); + irc_list_filter_hashtable_extra_vars = NULL; + } + if (irc_list_filter_hashtable_options) + { + weechat_hashtable_free (irc_list_filter_hashtable_options); + irc_list_filter_hashtable_options = NULL; + } +} diff --git a/src/plugins/irc/irc-list.h b/src/plugins/irc/irc-list.h new file mode 100644 index 00000000000..d9bc6413d15 --- /dev/null +++ b/src/plugins/irc/irc-list.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2023 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see . + */ + +#ifndef WEECHAT_PLUGIN_IRC_LIST_H +#define WEECHAT_PLUGIN_IRC_LIST_H + +#include + +#define IRC_LIST_MOUSE_HSIGNAL "irc_list_mouse" + +struct t_irc_server; + +struct t_irc_list_channel +{ + char *name; /* channel name */ + char *name2; /* channel name without prefix ('#') */ + int users; /* number of users in the channel */ + char *topic; /* channel topic */ +}; + +struct t_irc_list +{ + struct t_gui_buffer *buffer; /* buffer for /list */ + struct t_arraylist *channels; /* channels received in /list reply */ + struct t_arraylist *filter_channels; /* filtered channels */ + int name_max_length; /* max length for channel name */ + char *filter; /* filter for channels */ + char *sort; /* sort for channels */ + char **sort_fields; /* sort fields */ + int sort_fields_count; /* number of sort fields */ + int selected_line; /* selected line */ +}; + +extern void irc_list_buffer_set_title (struct t_irc_server *server); +extern void irc_list_buffer_refresh (struct t_irc_server *server, int clear); +extern int irc_list_window_scrolled_cb (const void *pointer, void *data, + const char *signal, + const char *type_data, + void *signal_data); +extern void irc_list_move_line_relative (struct t_irc_server *server, + int num_lines); +extern void irc_list_move_line_absolute (struct t_irc_server *server, + int line_number); +extern void irc_list_scroll_horizontal (struct t_irc_server *server, + int percent); +extern void irc_list_join_channel (struct t_irc_server *server); +extern int irc_list_buffer_input_data (struct t_gui_buffer *buffer, + const char *input_data); +extern struct t_gui_buffer *irc_list_create_buffer (struct t_irc_server *server); +extern int irc_list_hsignal_redirect_list_cb (const void *pointer, + void *data, + const char *signal, + struct t_hashtable *hashtable); +extern void irc_list_reset (struct t_irc_server *server); +extern struct t_irc_list *irc_list_alloc (); +extern void irc_list_free (struct t_irc_server *server); +extern struct t_hdata *irc_list_hdata_list_channel_cb (const void *pointer, + void *data, + const char *hdata_name); +extern struct t_hdata *irc_list_hdata_list_cb (const void *pointer, void *data, + const char *hdata_name); +extern void irc_list_init (); +extern void irc_list_end (); + +#endif /* WEECHAT_PLUGIN_IRC_LIST_H */ diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index e7662700772..5f468d0ebc8 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -59,6 +59,7 @@ #include "irc-command.h" #include "irc-config.h" #include "irc-input.h" +#include "irc-list.h" #include "irc-message.h" #include "irc-nick.h" #include "irc-notify.h" @@ -1740,6 +1741,7 @@ irc_server_alloc (const char *name) weechat_config_integer (irc_config_network_lag_check); new_server->lag_last_refresh = 0; new_server->cmd_list_regexp = NULL; + new_server->list = irc_list_alloc (new_server); new_server->last_user_message = 0; new_server->last_away_check = 0; new_server->last_data_purge = 0; @@ -2325,6 +2327,8 @@ irc_server_free_data (struct t_irc_server *server) regfree (server->cmd_list_regexp); free (server->cmd_list_regexp); } + if (server->list) + irc_list_free (server); if (server->buffer_as_string) free (server->buffer_as_string); } @@ -6474,6 +6478,7 @@ irc_server_hdata_server_cb (const void *pointer, void *data, WEECHAT_HDATA_VAR(struct t_irc_server, lag_next_check, TIME, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, lag_last_refresh, TIME, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, cmd_list_regexp, POINTER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_server, list, POINTER, 0, NULL, "irc_list"); WEECHAT_HDATA_VAR(struct t_irc_server, last_user_message, TIME, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, last_away_check, TIME, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, last_data_purge, TIME, 0, NULL, NULL); @@ -7255,6 +7260,13 @@ irc_server_print_log () weechat_log_printf (" lag_next_check. . . . . . : %lld", (long long)ptr_server->lag_next_check); weechat_log_printf (" lag_last_refresh. . . . . : %lld", (long long)ptr_server->lag_last_refresh); weechat_log_printf (" cmd_list_regexp . . . . . : 0x%lx", ptr_server->cmd_list_regexp); + weechat_log_printf (" list. . . . . . . . . . . : 0x%lx", ptr_server->list); + if (ptr_server->list) + { + weechat_log_printf (" buffer. . . . . . . . . : 0x%lx", ptr_server->list->buffer); + weechat_log_printf (" channels. . . . . . . . : 0x%lx", ptr_server->list->channels); + weechat_log_printf (" filter_channels . . . . : 0x%lx", ptr_server->list->filter_channels); + } weechat_log_printf (" last_user_message . . . . : %lld", (long long)ptr_server->last_user_message); weechat_log_printf (" last_away_check . . . . . : %lld", (long long)ptr_server->last_away_check); weechat_log_printf (" last_data_purge . . . . . : %lld", (long long)ptr_server->last_data_purge); diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index 8f9323d15d3..f26a4437ed8 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -280,6 +280,7 @@ struct t_irc_server time_t lag_next_check; /* time for next check */ time_t lag_last_refresh; /* last refresh of lag item */ regex_t *cmd_list_regexp; /* compiled Regular Expression for /list */ + struct t_irc_list *list; /* /list buffer management */ time_t last_user_message; /* time of last user message (anti flood)*/ time_t last_away_check; /* time of last away check on server */ time_t last_data_purge; /* time of last purge (some hashtables) */ diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c index 0ca19852d78..53f07452610 100644 --- a/src/plugins/irc/irc-upgrade.c +++ b/src/plugins/irc/irc-upgrade.c @@ -30,6 +30,7 @@ #include "irc-channel.h" #include "irc-config.h" #include "irc-input.h" +#include "irc-list.h" #include "irc-modelist.h" #include "irc-nick.h" #include "irc-notify.h" @@ -323,6 +324,15 @@ irc_upgrade_set_buffer_callbacks () ptr_server); } } + if (type && (strcmp (type, "irc_list") == 0)) + { + ptr_server = irc_server_search ( + weechat_buffer_get_string (ptr_buffer, + "localvar_server")); + if (ptr_server) + ptr_server->list->buffer = ptr_buffer; + irc_list_buffer_refresh (ptr_server, 1); + } if (strcmp (weechat_infolist_string (infolist, "name"), IRC_RAW_BUFFER_NAME) == 0) { diff --git a/src/plugins/irc/irc.c b/src/plugins/irc/irc.c index bd03193c50e..a978530c4d6 100644 --- a/src/plugins/irc/irc.c +++ b/src/plugins/irc/irc.c @@ -37,6 +37,7 @@ #include "irc-ignore.h" #include "irc-info.h" #include "irc-input.h" +#include "irc-list.h" #include "irc-nick.h" #include "irc-notify.h" #include "irc-protocol.h" @@ -197,6 +198,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) irc_config_read (); + irc_list_init (); + irc_raw_init (); irc_command_init (); @@ -223,12 +226,16 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) &irc_input_send_cb, NULL, NULL); weechat_hook_signal ("typing_self_*", &irc_typing_signal_typing_self_cb, NULL, NULL); + weechat_hook_signal ("window_scrolled", + &irc_list_window_scrolled_cb, NULL, NULL); /* hook hsignals for redirection */ weechat_hook_hsignal ("irc_redirect_pattern", &irc_redirect_pattern_hsignal_cb, NULL, NULL); weechat_hook_hsignal ("irc_redirect_command", &irc_redirect_command_hsignal_cb, NULL, NULL); + weechat_hook_hsignal ("irc_redirection_server_*_list", + &irc_list_hsignal_redirect_list_cb, NULL, NULL); /* modifiers */ weechat_hook_modifier ("irc_color_decode", @@ -322,6 +329,8 @@ weechat_plugin_end (struct t_weechat_plugin *plugin) irc_ignore_free_all (); + irc_list_end (); + irc_raw_end (); irc_server_free_all (); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f84c4bea1ad..66ff18d8d8a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -78,6 +78,7 @@ if(ENABLE_IRC) unit/plugins/irc/test-irc-ctcp.cpp unit/plugins/irc/test-irc-ignore.cpp unit/plugins/irc/test-irc-join.cpp + unit/plugins/irc/test-irc-list.cpp unit/plugins/irc/test-irc-message.cpp unit/plugins/irc/test-irc-mode.cpp unit/plugins/irc/test-irc-nick.cpp diff --git a/tests/unit/plugins/irc/test-irc-buffer.cpp b/tests/unit/plugins/irc/test-irc-buffer.cpp index c62e01987b0..255c67e0bc3 100644 --- a/tests/unit/plugins/irc/test-irc-buffer.cpp +++ b/tests/unit/plugins/irc/test-irc-buffer.cpp @@ -101,3 +101,13 @@ TEST(IrcBuffer, SearchPrivateLowestNumber) { /* TODO: write tests */ } + +/* + * Tests functions: + * irc_buffer_move_near_server + */ + +TEST(IrcBuffer, IrcBufferMoveNearServer) +{ + /* TODO: write tests */ +} diff --git a/tests/unit/plugins/irc/test-irc-list.cpp b/tests/unit/plugins/irc/test-irc-list.cpp new file mode 100644 index 00000000000..1f2a1b9d57e --- /dev/null +++ b/tests/unit/plugins/irc/test-irc-list.cpp @@ -0,0 +1,315 @@ +/* + * test-irc-list.cpp - test IRC list functions + * + * Copyright (C) 2023 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see . + */ + +#include "CppUTest/TestHarness.h" + +#include "tests/tests.h" + +extern "C" +{ +#include "src/plugins/irc/irc-list.h" +} + +TEST_GROUP(IrcList) +{ +}; + +/* + * Tests functions: + * irc_list_compare_cb + */ + +TEST(IrcList, IrcListCompareCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_free_cb + */ + +TEST(IrcList, IrcListFreeCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_set_filter + */ + +TEST(IrcList, IrcListSetFilter) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_set_sort + */ + +TEST(IrcList, IrcListSetSort) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_add_channel_in_hashtable + */ + +TEST(IrcList, IrcListAddChannelInHashtable) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_string_match + */ + +TEST(IrcList, IrcListStringMatch) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_channel_match_filter + */ + +TEST(IrcList, IrcListChannelMatchFilter) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_filter_channels + */ + +TEST(IrcList, IrcListFilterChannels) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_parse_messages + */ + +TEST(IrcList, IrcListParseMessages) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_buffer_set_title + */ + +TEST(IrcList, IrcListBufferSetTitle) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_display_line + */ + +TEST(IrcList, IrcListDisplayLine) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_buffer_refresh + */ + +TEST(IrcList, IrcListBufferRefresh) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_set_current_line + */ + +TEST(IrcList, IrcListSetCurrentLine) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_get_window_info + */ + +TEST(IrcList, IrcListGetWindowInfo) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_check_line_outside_window + */ + +TEST(IrcList, IrcListCheckLineOutsideWindow) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_window_scrolled_cb + */ + +TEST(IrcList, IrcListWindowScrolledCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_move_line_relative + */ + +TEST(IrcList, IrcListMoveLineRelative) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_move_line_absolute + */ + +TEST(IrcList, IrcListMoveLineAbsolute) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_join_channel + */ + +TEST(IrcList, IrcListJoinChannel) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_buffer_input_data_cb + */ + +TEST(IrcList, IrcListBufferInputDataCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_buffer_set_keys + */ + +TEST(IrcList, IrcListBufferSetKeys) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_create_buffer + */ + +TEST(IrcList, IrcListCreateBuffer) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_hsignal_redirect_list_cb + */ + +TEST(IrcList, IrcListHsignalRedirectListCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_alloc + */ + +TEST(IrcList, IrcListAlloc) +{ + struct t_irc_list *list; + + list = irc_list_alloc (); + CHECK(list); + POINTERS_EQUAL(NULL, list->buffer); + POINTERS_EQUAL(NULL, list->channels); + POINTERS_EQUAL(NULL, list->filter_channels); + LONGS_EQUAL(0, list->name_max_length); + POINTERS_EQUAL(NULL, list->filter); + POINTERS_EQUAL(NULL, list->sort); + POINTERS_EQUAL(NULL, list->sort_fields); + LONGS_EQUAL(0, list->sort_fields_count); + LONGS_EQUAL(0, list->selected_line); +} + +/* + * Tests functions: + * irc_list_free + */ + +TEST(IrcList, IrcListFree) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_hdata_list_channel_cb + */ + +TEST(IrcList, IrcListHdataListChannelCb) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * irc_list_hdata_list_cb + */ + +TEST(IrcList, IrcListHdataListCb) +{ + /* TODO: write tests */ +}