379 changes: 120 additions & 259 deletions po/ast.po

Large diffs are not rendered by default.

158 changes: 71 additions & 87 deletions po/az.po

Large diffs are not rendered by default.

349 changes: 111 additions & 238 deletions po/be.po

Large diffs are not rendered by default.

215 changes: 85 additions & 130 deletions po/bg.po

Large diffs are not rendered by default.

528 changes: 163 additions & 365 deletions po/ca.po

Large diffs are not rendered by default.

857 changes: 367 additions & 490 deletions po/cs.po

Large diffs are not rendered by default.

664 changes: 184 additions & 480 deletions po/da.po

Large diffs are not rendered by default.

890 changes: 289 additions & 601 deletions po/de.po

Large diffs are not rendered by default.

420 changes: 130 additions & 290 deletions po/el.po

Large diffs are not rendered by default.

578 changes: 161 additions & 417 deletions po/en_GB.po

Large diffs are not rendered by default.

1,572 changes: 637 additions & 935 deletions po/es.po

Large diffs are not rendered by default.

327 changes: 106 additions & 221 deletions po/et.po

Large diffs are not rendered by default.

205 changes: 83 additions & 122 deletions po/eu.po

Large diffs are not rendered by default.

367 changes: 117 additions & 250 deletions po/fi.po

Large diffs are not rendered by default.

779 changes: 206 additions & 573 deletions po/fr.po

Large diffs are not rendered by default.

358 changes: 115 additions & 243 deletions po/gl.po

Large diffs are not rendered by default.

262 changes: 95 additions & 167 deletions po/gu.po

Large diffs are not rendered by default.

270 changes: 100 additions & 170 deletions po/hi.po

Large diffs are not rendered by default.

510 changes: 149 additions & 361 deletions po/hu.po

Large diffs are not rendered by default.

501 changes: 147 additions & 354 deletions po/id.po

Large diffs are not rendered by default.

759 changes: 203 additions & 556 deletions po/it.po

Large diffs are not rendered by default.

408 changes: 135 additions & 273 deletions po/ja_JP.po

Large diffs are not rendered by default.

386 changes: 122 additions & 264 deletions po/kn.po

Large diffs are not rendered by default.

683 changes: 208 additions & 475 deletions po/ko.po

Large diffs are not rendered by default.

490 changes: 152 additions & 338 deletions po/lt.po

Large diffs are not rendered by default.

254 changes: 95 additions & 159 deletions po/lv.po

Large diffs are not rendered by default.

340 changes: 109 additions & 231 deletions po/mk.po

Large diffs are not rendered by default.

125 changes: 65 additions & 60 deletions po/ml.po
@@ -1,26 +1,25 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the hexchat package.
#
#
# Translators:
# bviktor, 2012
# bviktor, 2012
# Thorne Heathenspring <thorne@null.net>, 2013
# Thorne Heathenspring <thorne@null.net>, 2012-2013
# Thorne Heathenspring <thorne@null.net>, 2012
# Thorne Heathenspring <thorne@null.net>, 2012-2013
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-03 16:11-0400\n"
"PO-Revision-Date: 2017-09-23 17:57+0000\n"
"POT-Creation-Date: 2018-04-03 16:10-0400\n"
"PO-Revision-Date: 2018-04-03 20:10+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Malayalam (http://www.transifex.com/hexchat/hexchat/language/"
"ml/)\n"
"Language: ml\n"
"Language-Team: Malayalam (http://www.transifex.com/hexchat/hexchat/language/ml/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: data/misc/io.github.Hexchat.appdata.xml.in:4
Expand Down Expand Up @@ -302,8 +301,7 @@ msgstr ""
msgid ""
"* Running IRC as root is stupid! You should\n"
" create a User Account and use that to login.\n"
msgstr ""
"റൂട്ട് ആയി IRC ഉപയോഗിക്കുന്നത് മണ്ടത്തരമാണ് . പുതിയ ഒരു അക്കൗണ്ട്‌ ഉണ്ടാക്കി അതുപയോഗിക്കുക.\n"
msgstr "റൂട്ട് ആയി IRC ഉപയോഗിക്കുന്നത് മണ്ടത്തരമാണ് . പുതിയ ഒരു അക്കൗണ്ട്‌ ഉണ്ടാക്കി അതുപയോഗിക്കുക.\n"

#: src/common/ignore.c:127 src/common/ignore.c:131 src/common/ignore.c:135
#: src/common/ignore.c:139 src/common/ignore.c:143 src/common/ignore.c:147
Expand Down Expand Up @@ -463,7 +461,8 @@ msgstr ""

#: src/common/outbound.c:3945
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current connection"
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr ""

#: src/common/outbound.c:3946
Expand All @@ -490,7 +489,8 @@ msgstr ""

#: src/common/outbound.c:3954
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately rejoins"
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr ""

#: src/common/outbound.c:3956
Expand Down Expand Up @@ -632,8 +632,7 @@ msgid ""
" Use -h to highlight the found string(s)\n"
" Use -m to match case\n"
" Use -r when string is a Regular Expression\n"
" Use -- (double hyphen) to end options when searching for, say, the "
"string '-r'"
" Use -- (double hyphen) to end options when searching for, say, the string '-r'"
msgstr ""

#: src/common/outbound.c:4034
Expand All @@ -651,8 +650,8 @@ msgstr ""

#: src/common/outbound.c:4041
msgid ""
"ME <action>, sends the action to the current channel (actions are written in "
"the 3rd person, like /me jumps)"
"ME <action>, sends the action to the current channel (actions are written in"
" the 3rd person, like /me jumps)"
msgstr ""

#: src/common/outbound.c:4045
Expand All @@ -670,8 +669,8 @@ msgstr ""

#: src/common/outbound.c:4051
msgid ""
"MSG <nick> <message>, sends a private message, message \".\" to send to last "
"nick or prefix with \"=\" for dcc chat"
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
" nick or prefix with \"=\" for dcc chat"
msgstr ""

#: src/common/outbound.c:4054
Expand Down Expand Up @@ -735,8 +734,8 @@ msgstr ""

#: src/common/outbound.c:4080
msgid ""
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /"
"RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as "
"/RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"reconnect to all the open servers"
msgstr ""

Expand Down Expand Up @@ -803,7 +802,8 @@ msgstr ""

#: src/common/outbound.c:4110
msgid ""
"TOPIC [<topic>], sets the topic if one is given, else shows the current topic"
"TOPIC [<topic>], sets the topic if one is given, else shows the current "
"topic"
msgstr ""

#: src/common/outbound.c:4112
Expand All @@ -830,8 +830,8 @@ msgstr ""

#: src/common/outbound.c:4123
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the "
"server."
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr ""

#: src/common/outbound.c:4124
Expand All @@ -840,7 +840,8 @@ msgstr ""

#: src/common/outbound.c:4126
msgid ""
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist"
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel "
"userlist"
msgstr ""

#: src/common/outbound.c:4129
Expand Down Expand Up @@ -1114,7 +1115,8 @@ msgid "%C23*%O$tDCC CHAT to %C18$1%O aborted."
msgstr ""

#: src/common/textevents.h:145
msgid "%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:148
Expand Down Expand Up @@ -1148,8 +1150,8 @@ msgstr ""

#: src/common/textevents.h:169
msgid ""
"%C20*%O$tReceived a malformed DCC request from %C18$1%O.$a010%C23*%O"
"$tContents of packet: %C23$2%O"
"%C20*%O$tReceived a malformed DCC request from "
"%C18$1%O.$a010%C23*%O$tContents of packet: %C23$2%O"
msgstr ""

#: src/common/textevents.h:172
Expand All @@ -1170,7 +1172,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:184
msgid "%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:187
Expand All @@ -1183,7 +1186,8 @@ msgstr ""

#: src/common/textevents.h:193
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' instead."
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr ""

#: src/common/textevents.h:196
Expand All @@ -1200,7 +1204,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:205
msgid "%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:208
Expand Down Expand Up @@ -3505,18 +3510,18 @@ msgstr ""

#: src/fe-gtk/fkeys.c:141
msgid ""
"The Run Command action runs the data in Data 1 as if it had been typed into "
"the entry box where you pressed the key sequence. Thus it can contain text "
"(which will be sent to the channel/person), commands or user commands. When "
"run all \\n characters in Data 1 are used to deliminate separate commands so "
"it is possible to run more than one command. If you want a \\ in the actual "
"text run then enter \\\\"
"The Run Command action runs the data in Data 1 as if it had been typed "
"into the entry box where you pressed the key sequence. Thus it can contain "
"text (which will be sent to the channel/person), commands or user commands. "
"When run all \\n characters in Data 1 are used to deliminate separate "
"commands so it is possible to run more than one command. If you want a \\ "
"in the actual text run then enter \\\\"
msgstr ""

#: src/fe-gtk/fkeys.c:143
msgid ""
"The Change Page command switches between pages in the notebook. Set Data 1 "
"to the page you want to switch to. If Data 2 is set to anything then the "
"The Change Page command switches between pages in the notebook. Set Data 1"
" to the page you want to switch to. If Data 2 is set to anything then the "
"switch will be relative to the current position. Set Data 1 to auto to "
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
Expand All @@ -3531,39 +3536,39 @@ msgstr ""

#: src/fe-gtk/fkeys.c:147
msgid ""
"The Scroll Page command scrolls the text widget up or down one page or one "
"line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
"The Scroll Page command scrolls the text widget up or down one page or one"
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
msgstr ""

#: src/fe-gtk/fkeys.c:149
msgid ""
"The Set Buffer command sets the entry where the key sequence was entered to "
"the contents of Data 1"
"The Set Buffer command sets the entry where the key sequence was entered "
"to the contents of Data 1"
msgstr ""

#: src/fe-gtk/fkeys.c:151
msgid ""
"The Last Command command sets the entry to contain the last command entered "
"- the same as pressing up in a shell"
"The Last Command command sets the entry to contain the last command "
"entered - the same as pressing up in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:153
msgid ""
"The Next Command command sets the entry to contain the next command entered "
"- the same as pressing down in a shell"
"The Next Command command sets the entry to contain the next command "
"entered - the same as pressing down in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:155
msgid ""
"This command changes the text in the entry to finish an incomplete nickname "
"or command. If Data 1 is set then double-tabbing in a string will select the "
"last nick, not the next"
"or command. If Data 1 is set then double-tabbing in a string will select the"
" last nick, not the next"
msgstr ""

#: src/fe-gtk/fkeys.c:157
msgid ""
"This command scrolls up and down through the list of nicks. If Data 1 is set "
"to anything it will scroll up, else it scrolls down"
"This command scrolls up and down through the list of nicks. If Data 1 is set"
" to anything it will scroll up, else it scrolls down"
msgstr ""

#: src/fe-gtk/fkeys.c:159
Expand Down Expand Up @@ -5697,8 +5702,8 @@ msgstr ""

#: src/fe-gtk/setup.c:562
msgid ""
"Automatically include timestamps in copied lines of text. Otherwise, include "
"timestamps if the Shift key is held down while selecting."
"Automatically include timestamps in copied lines of text. Otherwise, include"
" timestamps if the Shift key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:564
Expand All @@ -5707,8 +5712,8 @@ msgstr ""

#: src/fe-gtk/setup.c:565
msgid ""
"Automatically include color information in copied lines of text. Otherwise, "
"include color information if the Ctrl key is held down while selecting."
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the Ctrl key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:570
Expand Down Expand Up @@ -5759,7 +5764,8 @@ msgstr ""

#: src/fe-gtk/setup.c:579
msgid ""
"Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr ""

#: src/fe-gtk/setup.c:586 src/fe-gtk/setup.c:1883
Expand Down Expand Up @@ -5869,8 +5875,8 @@ msgstr ""

#: src/fe-gtk/setup.c:639
msgid ""
"Asks the IRC server for your real address. Use this if you have a 192.168.*."
"* address!"
"Asks the IRC server for your real address. Use this if you have a "
"192.168.*.* address!"
msgstr ""

#: src/fe-gtk/setup.c:640
Expand Down Expand Up @@ -6106,8 +6112,7 @@ msgid ""
msgstr ""

#: src/fe-gtk/setup.c:2254
msgid ""
"The Real name option cannot be left blank. Falling back to \"realname\"."
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
msgstr ""

#: src/fe-gtk/setup.c:2261
Expand Down Expand Up @@ -6234,8 +6239,8 @@ msgstr ""
#: plugins/sysinfo/sysinfo.c:168
msgid ""
"Sysinfo: Valid settings are: announce and hide_* for each piece of "
"information. e.g. hide_os. Without a value it will show current (or default) "
"setting.\n"
"information. e.g. hide_os. Without a value it will show current (or default)"
" setting.\n"
msgstr ""

#: plugins/sysinfo/sysinfo.c:190
Expand Down
139 changes: 66 additions & 73 deletions po/ms.po
@@ -1,22 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the hexchat package.
#
#
# Translators:
# Hasbullah Bin Pit <sebol@ikhlas.com>, 2003
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-03 16:11-0400\n"
"PO-Revision-Date: 2017-09-19 14:16+0000\n"
"POT-Creation-Date: 2018-04-03 16:10-0400\n"
"PO-Revision-Date: 2018-04-03 20:10+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Malay (http://www.transifex.com/hexchat/hexchat/language/"
"ms/)\n"
"Language: ms\n"
"Language-Team: Malay (http://www.transifex.com/hexchat/hexchat/language/ms/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ms\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: data/misc/io.github.Hexchat.appdata.xml.in:4
Expand Down Expand Up @@ -298,9 +297,7 @@ msgstr ""
msgid ""
"* Running IRC as root is stupid! You should\n"
" create a User Account and use that to login.\n"
msgstr ""
"* Melaksanakan IRC sebagai root adalah bodoh! Anda sepatutnya\n"
" mencipta satu akaun pengguna dan menggunakannya untuk logmasuk\n"
msgstr "* Melaksanakan IRC sebagai root adalah bodoh! Anda sepatutnya\n mencipta satu akaun pengguna dan menggunakannya untuk logmasuk\n"

#: src/common/ignore.c:127 src/common/ignore.c:131 src/common/ignore.c:135
#: src/common/ignore.c:139 src/common/ignore.c:143 src/common/ignore.c:147
Expand Down Expand Up @@ -460,7 +457,8 @@ msgstr ""

#: src/common/outbound.c:3945
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current connection"
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr ""

#: src/common/outbound.c:3946
Expand All @@ -487,7 +485,8 @@ msgstr ""

#: src/common/outbound.c:3954
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately rejoins"
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr ""

#: src/common/outbound.c:3956
Expand Down Expand Up @@ -629,8 +628,7 @@ msgid ""
" Use -h to highlight the found string(s)\n"
" Use -m to match case\n"
" Use -r when string is a Regular Expression\n"
" Use -- (double hyphen) to end options when searching for, say, the "
"string '-r'"
" Use -- (double hyphen) to end options when searching for, say, the string '-r'"
msgstr ""

#: src/common/outbound.c:4034
Expand All @@ -648,8 +646,8 @@ msgstr ""

#: src/common/outbound.c:4041
msgid ""
"ME <action>, sends the action to the current channel (actions are written in "
"the 3rd person, like /me jumps)"
"ME <action>, sends the action to the current channel (actions are written in"
" the 3rd person, like /me jumps)"
msgstr ""

#: src/common/outbound.c:4045
Expand All @@ -667,8 +665,8 @@ msgstr ""

#: src/common/outbound.c:4051
msgid ""
"MSG <nick> <message>, sends a private message, message \".\" to send to last "
"nick or prefix with \"=\" for dcc chat"
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
" nick or prefix with \"=\" for dcc chat"
msgstr ""

#: src/common/outbound.c:4054
Expand Down Expand Up @@ -732,8 +730,8 @@ msgstr ""

#: src/common/outbound.c:4080
msgid ""
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /"
"RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as "
"/RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"reconnect to all the open servers"
msgstr ""

Expand Down Expand Up @@ -800,7 +798,8 @@ msgstr ""

#: src/common/outbound.c:4110
msgid ""
"TOPIC [<topic>], sets the topic if one is given, else shows the current topic"
"TOPIC [<topic>], sets the topic if one is given, else shows the current "
"topic"
msgstr ""

#: src/common/outbound.c:4112
Expand All @@ -827,8 +826,8 @@ msgstr ""

#: src/common/outbound.c:4123
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the "
"server."
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr ""

#: src/common/outbound.c:4124
Expand All @@ -837,7 +836,8 @@ msgstr ""

#: src/common/outbound.c:4126
msgid ""
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist"
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel "
"userlist"
msgstr ""

#: src/common/outbound.c:4129
Expand Down Expand Up @@ -867,9 +867,7 @@ msgstr "Penggunaan: %s\n"
msgid ""
"\n"
"No help available on that command.\n"
msgstr ""
"\n"
"Tiada bantuan yang ada bagi larahan itu.\n"
msgstr "\nTiada bantuan yang ada bagi larahan itu.\n"

#: src/common/outbound.c:4204
msgid "No such command.\n"
Expand Down Expand Up @@ -1113,7 +1111,8 @@ msgid "%C23*%O$tDCC CHAT to %C18$1%O aborted."
msgstr ""

#: src/common/textevents.h:145
msgid "%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:148
Expand Down Expand Up @@ -1147,8 +1146,8 @@ msgstr ""

#: src/common/textevents.h:169
msgid ""
"%C20*%O$tReceived a malformed DCC request from %C18$1%O.$a010%C23*%O"
"$tContents of packet: %C23$2%O"
"%C20*%O$tReceived a malformed DCC request from "
"%C18$1%O.$a010%C23*%O$tContents of packet: %C23$2%O"
msgstr ""

#: src/common/textevents.h:172
Expand All @@ -1169,7 +1168,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:184
msgid "%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:187
Expand All @@ -1182,7 +1182,8 @@ msgstr ""

#: src/common/textevents.h:193
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' instead."
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr ""

#: src/common/textevents.h:196
Expand All @@ -1199,7 +1200,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:205
msgid "%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:208
Expand Down Expand Up @@ -3486,10 +3488,7 @@ msgid ""
"Failed to open font:\n"
"\n"
"%s"
msgstr ""
"Gagal membuka font:\n"
"\n"
"%s"
msgstr "Gagal membuka font:\n\n%s"

#: src/fe-gtk/fe-gtk.c:715
msgid "Search buffer is empty.\n"
Expand All @@ -3507,18 +3506,18 @@ msgstr ""

#: src/fe-gtk/fkeys.c:141
msgid ""
"The Run Command action runs the data in Data 1 as if it had been typed into "
"the entry box where you pressed the key sequence. Thus it can contain text "
"(which will be sent to the channel/person), commands or user commands. When "
"run all \\n characters in Data 1 are used to deliminate separate commands so "
"it is possible to run more than one command. If you want a \\ in the actual "
"text run then enter \\\\"
"The Run Command action runs the data in Data 1 as if it had been typed "
"into the entry box where you pressed the key sequence. Thus it can contain "
"text (which will be sent to the channel/person), commands or user commands. "
"When run all \\n characters in Data 1 are used to deliminate separate "
"commands so it is possible to run more than one command. If you want a \\ "
"in the actual text run then enter \\\\"
msgstr ""

#: src/fe-gtk/fkeys.c:143
msgid ""
"The Change Page command switches between pages in the notebook. Set Data 1 "
"to the page you want to switch to. If Data 2 is set to anything then the "
"The Change Page command switches between pages in the notebook. Set Data 1"
" to the page you want to switch to. If Data 2 is set to anything then the "
"switch will be relative to the current position. Set Data 1 to auto to "
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
Expand All @@ -3533,39 +3532,39 @@ msgstr ""

#: src/fe-gtk/fkeys.c:147
msgid ""
"The Scroll Page command scrolls the text widget up or down one page or one "
"line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
"The Scroll Page command scrolls the text widget up or down one page or one"
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
msgstr ""

#: src/fe-gtk/fkeys.c:149
msgid ""
"The Set Buffer command sets the entry where the key sequence was entered to "
"the contents of Data 1"
"The Set Buffer command sets the entry where the key sequence was entered "
"to the contents of Data 1"
msgstr ""

#: src/fe-gtk/fkeys.c:151
msgid ""
"The Last Command command sets the entry to contain the last command entered "
"- the same as pressing up in a shell"
"The Last Command command sets the entry to contain the last command "
"entered - the same as pressing up in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:153
msgid ""
"The Next Command command sets the entry to contain the next command entered "
"- the same as pressing down in a shell"
"The Next Command command sets the entry to contain the next command "
"entered - the same as pressing down in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:155
msgid ""
"This command changes the text in the entry to finish an incomplete nickname "
"or command. If Data 1 is set then double-tabbing in a string will select the "
"last nick, not the next"
"or command. If Data 1 is set then double-tabbing in a string will select the"
" last nick, not the next"
msgstr ""

#: src/fe-gtk/fkeys.c:157
msgid ""
"This command scrolls up and down through the list of nicks. If Data 1 is set "
"to anything it will scroll up, else it scrolls down"
"This command scrolls up and down through the list of nicks. If Data 1 is set"
" to anything it will scroll up, else it scrolls down"
msgstr ""

#: src/fe-gtk/fkeys.c:159
Expand Down Expand Up @@ -5699,8 +5698,8 @@ msgstr ""

#: src/fe-gtk/setup.c:562
msgid ""
"Automatically include timestamps in copied lines of text. Otherwise, include "
"timestamps if the Shift key is held down while selecting."
"Automatically include timestamps in copied lines of text. Otherwise, include"
" timestamps if the Shift key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:564
Expand All @@ -5709,8 +5708,8 @@ msgstr ""

#: src/fe-gtk/setup.c:565
msgid ""
"Automatically include color information in copied lines of text. Otherwise, "
"include color information if the Ctrl key is held down while selecting."
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the Ctrl key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:570
Expand Down Expand Up @@ -5761,7 +5760,8 @@ msgstr ""

#: src/fe-gtk/setup.c:579
msgid ""
"Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr ""

#: src/fe-gtk/setup.c:586 src/fe-gtk/setup.c:1883
Expand Down Expand Up @@ -5871,8 +5871,8 @@ msgstr ""

#: src/fe-gtk/setup.c:639
msgid ""
"Asks the IRC server for your real address. Use this if you have a 192.168.*."
"* address!"
"Asks the IRC server for your real address. Use this if you have a "
"192.168.*.* address!"
msgstr ""

#: src/fe-gtk/setup.c:640
Expand Down Expand Up @@ -6108,8 +6108,7 @@ msgid ""
msgstr ""

#: src/fe-gtk/setup.c:2254
msgid ""
"The Real name option cannot be left blank. Falling back to \"realname\"."
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
msgstr ""

#: src/fe-gtk/setup.c:2261
Expand Down Expand Up @@ -6236,8 +6235,8 @@ msgstr ""
#: plugins/sysinfo/sysinfo.c:168
msgid ""
"Sysinfo: Valid settings are: announce and hide_* for each piece of "
"information. e.g. hide_os. Without a value it will show current (or default) "
"setting.\n"
"information. e.g. hide_os. Without a value it will show current (or default)"
" setting.\n"
msgstr ""

#: plugins/sysinfo/sysinfo.c:190
Expand All @@ -6253,9 +6252,3 @@ msgstr ""
#, c-format
msgid "%s plugin unloaded\n"
msgstr ""

#~ msgid "Socks4"
#~ msgstr "Socks4"

#~ msgid "Socks5"
#~ msgstr "Socks5"
640 changes: 175 additions & 465 deletions po/nb.po

Large diffs are not rendered by default.

357 changes: 116 additions & 241 deletions po/nl.po

Large diffs are not rendered by default.

126 changes: 63 additions & 63 deletions po/no.po
@@ -1,22 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the hexchat package.
#
#
# Translators:
# Kjartan Maraas <kmaraas@online.no>, 1999
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-03 16:11-0400\n"
"PO-Revision-Date: 2017-09-23 17:57+0000\n"
"POT-Creation-Date: 2018-04-03 16:10-0400\n"
"PO-Revision-Date: 2018-04-03 20:10+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Norwegian (http://www.transifex.com/hexchat/hexchat/language/"
"no/)\n"
"Language: no\n"
"Language-Team: Norwegian (http://www.transifex.com/hexchat/hexchat/language/no/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: no\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: data/misc/io.github.Hexchat.appdata.xml.in:4
Expand Down Expand Up @@ -458,7 +457,8 @@ msgstr ""

#: src/common/outbound.c:3945
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current connection"
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr ""

#: src/common/outbound.c:3946
Expand All @@ -485,7 +485,8 @@ msgstr ""

#: src/common/outbound.c:3954
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately rejoins"
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr ""

#: src/common/outbound.c:3956
Expand Down Expand Up @@ -627,8 +628,7 @@ msgid ""
" Use -h to highlight the found string(s)\n"
" Use -m to match case\n"
" Use -r when string is a Regular Expression\n"
" Use -- (double hyphen) to end options when searching for, say, the "
"string '-r'"
" Use -- (double hyphen) to end options when searching for, say, the string '-r'"
msgstr ""

#: src/common/outbound.c:4034
Expand All @@ -646,8 +646,8 @@ msgstr ""

#: src/common/outbound.c:4041
msgid ""
"ME <action>, sends the action to the current channel (actions are written in "
"the 3rd person, like /me jumps)"
"ME <action>, sends the action to the current channel (actions are written in"
" the 3rd person, like /me jumps)"
msgstr ""

#: src/common/outbound.c:4045
Expand All @@ -665,8 +665,8 @@ msgstr ""

#: src/common/outbound.c:4051
msgid ""
"MSG <nick> <message>, sends a private message, message \".\" to send to last "
"nick or prefix with \"=\" for dcc chat"
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
" nick or prefix with \"=\" for dcc chat"
msgstr ""

#: src/common/outbound.c:4054
Expand Down Expand Up @@ -730,8 +730,8 @@ msgstr ""

#: src/common/outbound.c:4080
msgid ""
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /"
"RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as "
"/RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"reconnect to all the open servers"
msgstr ""

Expand Down Expand Up @@ -798,7 +798,8 @@ msgstr ""

#: src/common/outbound.c:4110
msgid ""
"TOPIC [<topic>], sets the topic if one is given, else shows the current topic"
"TOPIC [<topic>], sets the topic if one is given, else shows the current "
"topic"
msgstr ""

#: src/common/outbound.c:4112
Expand All @@ -825,8 +826,8 @@ msgstr ""

#: src/common/outbound.c:4123
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the "
"server."
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr ""

#: src/common/outbound.c:4124
Expand All @@ -835,7 +836,8 @@ msgstr ""

#: src/common/outbound.c:4126
msgid ""
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist"
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel "
"userlist"
msgstr ""

#: src/common/outbound.c:4129
Expand Down Expand Up @@ -1109,7 +1111,8 @@ msgid "%C23*%O$tDCC CHAT to %C18$1%O aborted."
msgstr ""

#: src/common/textevents.h:145
msgid "%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:148
Expand Down Expand Up @@ -1143,8 +1146,8 @@ msgstr ""

#: src/common/textevents.h:169
msgid ""
"%C20*%O$tReceived a malformed DCC request from %C18$1%O.$a010%C23*%O"
"$tContents of packet: %C23$2%O"
"%C20*%O$tReceived a malformed DCC request from "
"%C18$1%O.$a010%C23*%O$tContents of packet: %C23$2%O"
msgstr ""

#: src/common/textevents.h:172
Expand All @@ -1165,7 +1168,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:184
msgid "%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:187
Expand All @@ -1178,7 +1182,8 @@ msgstr ""

#: src/common/textevents.h:193
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' instead."
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr ""

#: src/common/textevents.h:196
Expand All @@ -1195,7 +1200,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:205
msgid "%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:208
Expand Down Expand Up @@ -3500,18 +3506,18 @@ msgstr ""

#: src/fe-gtk/fkeys.c:141
msgid ""
"The Run Command action runs the data in Data 1 as if it had been typed into "
"the entry box where you pressed the key sequence. Thus it can contain text "
"(which will be sent to the channel/person), commands or user commands. When "
"run all \\n characters in Data 1 are used to deliminate separate commands so "
"it is possible to run more than one command. If you want a \\ in the actual "
"text run then enter \\\\"
"The Run Command action runs the data in Data 1 as if it had been typed "
"into the entry box where you pressed the key sequence. Thus it can contain "
"text (which will be sent to the channel/person), commands or user commands. "
"When run all \\n characters in Data 1 are used to deliminate separate "
"commands so it is possible to run more than one command. If you want a \\ "
"in the actual text run then enter \\\\"
msgstr ""

#: src/fe-gtk/fkeys.c:143
msgid ""
"The Change Page command switches between pages in the notebook. Set Data 1 "
"to the page you want to switch to. If Data 2 is set to anything then the "
"The Change Page command switches between pages in the notebook. Set Data 1"
" to the page you want to switch to. If Data 2 is set to anything then the "
"switch will be relative to the current position. Set Data 1 to auto to "
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
Expand All @@ -3526,39 +3532,39 @@ msgstr ""

#: src/fe-gtk/fkeys.c:147
msgid ""
"The Scroll Page command scrolls the text widget up or down one page or one "
"line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
"The Scroll Page command scrolls the text widget up or down one page or one"
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
msgstr ""

#: src/fe-gtk/fkeys.c:149
msgid ""
"The Set Buffer command sets the entry where the key sequence was entered to "
"the contents of Data 1"
"The Set Buffer command sets the entry where the key sequence was entered "
"to the contents of Data 1"
msgstr ""

#: src/fe-gtk/fkeys.c:151
msgid ""
"The Last Command command sets the entry to contain the last command entered "
"- the same as pressing up in a shell"
"The Last Command command sets the entry to contain the last command "
"entered - the same as pressing up in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:153
msgid ""
"The Next Command command sets the entry to contain the next command entered "
"- the same as pressing down in a shell"
"The Next Command command sets the entry to contain the next command "
"entered - the same as pressing down in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:155
msgid ""
"This command changes the text in the entry to finish an incomplete nickname "
"or command. If Data 1 is set then double-tabbing in a string will select the "
"last nick, not the next"
"or command. If Data 1 is set then double-tabbing in a string will select the"
" last nick, not the next"
msgstr ""

#: src/fe-gtk/fkeys.c:157
msgid ""
"This command scrolls up and down through the list of nicks. If Data 1 is set "
"to anything it will scroll up, else it scrolls down"
"This command scrolls up and down through the list of nicks. If Data 1 is set"
" to anything it will scroll up, else it scrolls down"
msgstr ""

#: src/fe-gtk/fkeys.c:159
Expand Down Expand Up @@ -5692,8 +5698,8 @@ msgstr ""

#: src/fe-gtk/setup.c:562
msgid ""
"Automatically include timestamps in copied lines of text. Otherwise, include "
"timestamps if the Shift key is held down while selecting."
"Automatically include timestamps in copied lines of text. Otherwise, include"
" timestamps if the Shift key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:564
Expand All @@ -5702,8 +5708,8 @@ msgstr ""

#: src/fe-gtk/setup.c:565
msgid ""
"Automatically include color information in copied lines of text. Otherwise, "
"include color information if the Ctrl key is held down while selecting."
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the Ctrl key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:570
Expand Down Expand Up @@ -5754,7 +5760,8 @@ msgstr ""

#: src/fe-gtk/setup.c:579
msgid ""
"Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr ""

#: src/fe-gtk/setup.c:586 src/fe-gtk/setup.c:1883
Expand Down Expand Up @@ -5864,8 +5871,8 @@ msgstr ""

#: src/fe-gtk/setup.c:639
msgid ""
"Asks the IRC server for your real address. Use this if you have a 192.168.*."
"* address!"
"Asks the IRC server for your real address. Use this if you have a "
"192.168.*.* address!"
msgstr ""

#: src/fe-gtk/setup.c:640
Expand Down Expand Up @@ -6101,8 +6108,7 @@ msgid ""
msgstr ""

#: src/fe-gtk/setup.c:2254
msgid ""
"The Real name option cannot be left blank. Falling back to \"realname\"."
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
msgstr ""

#: src/fe-gtk/setup.c:2261
Expand Down Expand Up @@ -6229,8 +6235,8 @@ msgstr ""
#: plugins/sysinfo/sysinfo.c:168
msgid ""
"Sysinfo: Valid settings are: announce and hide_* for each piece of "
"information. e.g. hide_os. Without a value it will show current (or default) "
"setting.\n"
"information. e.g. hide_os. Without a value it will show current (or default)"
" setting.\n"
msgstr ""

#: plugins/sysinfo/sysinfo.c:190
Expand All @@ -6246,9 +6252,3 @@ msgstr ""
#, c-format
msgid "%s plugin unloaded\n"
msgstr ""

#~ msgid "Socks4"
#~ msgstr "Socks4"

#~ msgid "Socks5"
#~ msgstr "Socks5"
168 changes: 73 additions & 95 deletions po/pa.po

Large diffs are not rendered by default.

623 changes: 173 additions & 450 deletions po/pl.po

Large diffs are not rendered by default.

912 changes: 323 additions & 589 deletions po/pt.po

Large diffs are not rendered by default.

873 changes: 283 additions & 590 deletions po/pt_BR.po

Large diffs are not rendered by default.

470 changes: 143 additions & 327 deletions po/ru.po

Large diffs are not rendered by default.

120 changes: 63 additions & 57 deletions po/rw.po
@@ -1,7 +1,7 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the hexchat package.
#
#
# Translators:
# Antoine Bigirimana <antoine@e-tools.com>, 2005
# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005
Expand All @@ -16,15 +16,14 @@ msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-03 16:11-0400\n"
"PO-Revision-Date: 2017-09-19 14:16+0000\n"
"POT-Creation-Date: 2018-04-03 16:10-0400\n"
"PO-Revision-Date: 2018-04-03 20:10+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Kinyarwanda (http://www.transifex.com/hexchat/hexchat/"
"language/rw/)\n"
"Language: rw\n"
"Language-Team: Kinyarwanda (http://www.transifex.com/hexchat/hexchat/language/rw/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: rw\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: data/misc/io.github.Hexchat.appdata.xml.in:4
Expand Down Expand Up @@ -466,7 +465,8 @@ msgstr ""

#: src/common/outbound.c:3945
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current connection"
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr ""

#: src/common/outbound.c:3946
Expand All @@ -493,7 +493,8 @@ msgstr ""

#: src/common/outbound.c:3954
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately rejoins"
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr ""

#: src/common/outbound.c:3956
Expand Down Expand Up @@ -635,8 +636,7 @@ msgid ""
" Use -h to highlight the found string(s)\n"
" Use -m to match case\n"
" Use -r when string is a Regular Expression\n"
" Use -- (double hyphen) to end options when searching for, say, the "
"string '-r'"
" Use -- (double hyphen) to end options when searching for, say, the string '-r'"
msgstr ""

#: src/common/outbound.c:4034
Expand All @@ -654,8 +654,8 @@ msgstr ""

#: src/common/outbound.c:4041
msgid ""
"ME <action>, sends the action to the current channel (actions are written in "
"the 3rd person, like /me jumps)"
"ME <action>, sends the action to the current channel (actions are written in"
" the 3rd person, like /me jumps)"
msgstr ""

#: src/common/outbound.c:4045
Expand All @@ -673,8 +673,8 @@ msgstr ""

#: src/common/outbound.c:4051
msgid ""
"MSG <nick> <message>, sends a private message, message \".\" to send to last "
"nick or prefix with \"=\" for dcc chat"
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
" nick or prefix with \"=\" for dcc chat"
msgstr ""

#: src/common/outbound.c:4054
Expand Down Expand Up @@ -738,8 +738,8 @@ msgstr ""

#: src/common/outbound.c:4080
msgid ""
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /"
"RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as "
"/RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"reconnect to all the open servers"
msgstr ""

Expand Down Expand Up @@ -806,7 +806,8 @@ msgstr ""

#: src/common/outbound.c:4110
msgid ""
"TOPIC [<topic>], sets the topic if one is given, else shows the current topic"
"TOPIC [<topic>], sets the topic if one is given, else shows the current "
"topic"
msgstr ""

#: src/common/outbound.c:4112
Expand All @@ -833,8 +834,8 @@ msgstr ""

#: src/common/outbound.c:4123
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the "
"server."
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr ""

#: src/common/outbound.c:4124
Expand All @@ -843,7 +844,8 @@ msgstr ""

#: src/common/outbound.c:4126
msgid ""
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist"
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel "
"userlist"
msgstr ""

#: src/common/outbound.c:4129
Expand Down Expand Up @@ -1117,7 +1119,8 @@ msgid "%C23*%O$tDCC CHAT to %C18$1%O aborted."
msgstr ""

#: src/common/textevents.h:145
msgid "%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:148
Expand Down Expand Up @@ -1151,8 +1154,8 @@ msgstr ""

#: src/common/textevents.h:169
msgid ""
"%C20*%O$tReceived a malformed DCC request from %C18$1%O.$a010%C23*%O"
"$tContents of packet: %C23$2%O"
"%C20*%O$tReceived a malformed DCC request from "
"%C18$1%O.$a010%C23*%O$tContents of packet: %C23$2%O"
msgstr ""

#: src/common/textevents.h:172
Expand All @@ -1173,7 +1176,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:184
msgid "%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:187
Expand All @@ -1186,7 +1190,8 @@ msgstr ""

#: src/common/textevents.h:193
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' instead."
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr ""

#: src/common/textevents.h:196
Expand All @@ -1203,7 +1208,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:205
msgid "%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:208
Expand Down Expand Up @@ -3508,18 +3514,18 @@ msgstr ""

#: src/fe-gtk/fkeys.c:141
msgid ""
"The Run Command action runs the data in Data 1 as if it had been typed into "
"the entry box where you pressed the key sequence. Thus it can contain text "
"(which will be sent to the channel/person), commands or user commands. When "
"run all \\n characters in Data 1 are used to deliminate separate commands so "
"it is possible to run more than one command. If you want a \\ in the actual "
"text run then enter \\\\"
"The Run Command action runs the data in Data 1 as if it had been typed "
"into the entry box where you pressed the key sequence. Thus it can contain "
"text (which will be sent to the channel/person), commands or user commands. "
"When run all \\n characters in Data 1 are used to deliminate separate "
"commands so it is possible to run more than one command. If you want a \\ "
"in the actual text run then enter \\\\"
msgstr ""

#: src/fe-gtk/fkeys.c:143
msgid ""
"The Change Page command switches between pages in the notebook. Set Data 1 "
"to the page you want to switch to. If Data 2 is set to anything then the "
"The Change Page command switches between pages in the notebook. Set Data 1"
" to the page you want to switch to. If Data 2 is set to anything then the "
"switch will be relative to the current position. Set Data 1 to auto to "
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
Expand All @@ -3534,39 +3540,39 @@ msgstr ""

#: src/fe-gtk/fkeys.c:147
msgid ""
"The Scroll Page command scrolls the text widget up or down one page or one "
"line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
"The Scroll Page command scrolls the text widget up or down one page or one"
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
msgstr ""

#: src/fe-gtk/fkeys.c:149
msgid ""
"The Set Buffer command sets the entry where the key sequence was entered to "
"the contents of Data 1"
"The Set Buffer command sets the entry where the key sequence was entered "
"to the contents of Data 1"
msgstr ""

#: src/fe-gtk/fkeys.c:151
msgid ""
"The Last Command command sets the entry to contain the last command entered "
"- the same as pressing up in a shell"
"The Last Command command sets the entry to contain the last command "
"entered - the same as pressing up in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:153
msgid ""
"The Next Command command sets the entry to contain the next command entered "
"- the same as pressing down in a shell"
"The Next Command command sets the entry to contain the next command "
"entered - the same as pressing down in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:155
msgid ""
"This command changes the text in the entry to finish an incomplete nickname "
"or command. If Data 1 is set then double-tabbing in a string will select the "
"last nick, not the next"
"or command. If Data 1 is set then double-tabbing in a string will select the"
" last nick, not the next"
msgstr ""

#: src/fe-gtk/fkeys.c:157
msgid ""
"This command scrolls up and down through the list of nicks. If Data 1 is set "
"to anything it will scroll up, else it scrolls down"
"This command scrolls up and down through the list of nicks. If Data 1 is set"
" to anything it will scroll up, else it scrolls down"
msgstr ""

#: src/fe-gtk/fkeys.c:159
Expand Down Expand Up @@ -5700,8 +5706,8 @@ msgstr ""

#: src/fe-gtk/setup.c:562
msgid ""
"Automatically include timestamps in copied lines of text. Otherwise, include "
"timestamps if the Shift key is held down while selecting."
"Automatically include timestamps in copied lines of text. Otherwise, include"
" timestamps if the Shift key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:564
Expand All @@ -5710,8 +5716,8 @@ msgstr ""

#: src/fe-gtk/setup.c:565
msgid ""
"Automatically include color information in copied lines of text. Otherwise, "
"include color information if the Ctrl key is held down while selecting."
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the Ctrl key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:570
Expand Down Expand Up @@ -5762,7 +5768,8 @@ msgstr ""

#: src/fe-gtk/setup.c:579
msgid ""
"Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr ""

#: src/fe-gtk/setup.c:586 src/fe-gtk/setup.c:1883
Expand Down Expand Up @@ -5872,8 +5879,8 @@ msgstr ""

#: src/fe-gtk/setup.c:639
msgid ""
"Asks the IRC server for your real address. Use this if you have a 192.168.*."
"* address!"
"Asks the IRC server for your real address. Use this if you have a "
"192.168.*.* address!"
msgstr ""

#: src/fe-gtk/setup.c:640
Expand Down Expand Up @@ -6109,8 +6116,7 @@ msgid ""
msgstr ""

#: src/fe-gtk/setup.c:2254
msgid ""
"The Real name option cannot be left blank. Falling back to \"realname\"."
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
msgstr ""

#: src/fe-gtk/setup.c:2261
Expand Down Expand Up @@ -6237,8 +6243,8 @@ msgstr ""
#: plugins/sysinfo/sysinfo.c:168
msgid ""
"Sysinfo: Valid settings are: announce and hide_* for each piece of "
"information. e.g. hide_os. Without a value it will show current (or default) "
"setting.\n"
"information. e.g. hide_os. Without a value it will show current (or default)"
" setting.\n"
msgstr ""

#: plugins/sysinfo/sysinfo.c:190
Expand Down
288 changes: 103 additions & 185 deletions po/sk.po

Large diffs are not rendered by default.

319 changes: 109 additions & 210 deletions po/sl.po

Large diffs are not rendered by default.

662 changes: 177 additions & 485 deletions po/sq.po

Large diffs are not rendered by default.

343 changes: 111 additions & 232 deletions po/sr.po

Large diffs are not rendered by default.

297 changes: 105 additions & 192 deletions po/sr@latin.po

Large diffs are not rendered by default.

739 changes: 228 additions & 511 deletions po/sv.po

Large diffs are not rendered by default.

316 changes: 103 additions & 213 deletions po/th.po

Large diffs are not rendered by default.

657 changes: 185 additions & 472 deletions po/tr.po

Large diffs are not rendered by default.

371 changes: 118 additions & 253 deletions po/uk.po

Large diffs are not rendered by default.

490 changes: 137 additions & 353 deletions po/vi.po

Large diffs are not rendered by default.

130 changes: 64 additions & 66 deletions po/wa.po
@@ -1,22 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the hexchat package.
#
#
# Translators:
# Pablo Saratxaga <pablo@walon.org>, 2004
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-03 16:11-0400\n"
"PO-Revision-Date: 2017-09-19 14:16+0000\n"
"POT-Creation-Date: 2018-04-03 16:10-0400\n"
"PO-Revision-Date: 2018-04-03 20:10+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Walloon (http://www.transifex.com/hexchat/hexchat/language/"
"wa/)\n"
"Language: wa\n"
"Language-Team: Walloon (http://www.transifex.com/hexchat/hexchat/language/wa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: wa\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: data/misc/io.github.Hexchat.appdata.xml.in:4
Expand Down Expand Up @@ -298,9 +297,7 @@ msgstr ""
msgid ""
"* Running IRC as root is stupid! You should\n"
" create a User Account and use that to login.\n"
msgstr ""
"* C' est vormint biesse di s' raloyî a l' IRC dizo root!\n"
" Vos dvrîz fé on conte uzeu eyet l' eployî po vs elodjî.\n"
msgstr "* C' est vormint biesse di s' raloyî a l' IRC dizo root!\n Vos dvrîz fé on conte uzeu eyet l' eployî po vs elodjî.\n"

#: src/common/ignore.c:127 src/common/ignore.c:131 src/common/ignore.c:135
#: src/common/ignore.c:139 src/common/ignore.c:143 src/common/ignore.c:147
Expand Down Expand Up @@ -460,7 +457,8 @@ msgstr ""

#: src/common/outbound.c:3945
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current connection"
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr ""

#: src/common/outbound.c:3946
Expand All @@ -487,7 +485,8 @@ msgstr ""

#: src/common/outbound.c:3954
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately rejoins"
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr ""

#: src/common/outbound.c:3956
Expand Down Expand Up @@ -629,8 +628,7 @@ msgid ""
" Use -h to highlight the found string(s)\n"
" Use -m to match case\n"
" Use -r when string is a Regular Expression\n"
" Use -- (double hyphen) to end options when searching for, say, the "
"string '-r'"
" Use -- (double hyphen) to end options when searching for, say, the string '-r'"
msgstr ""

#: src/common/outbound.c:4034
Expand All @@ -648,8 +646,8 @@ msgstr ""

#: src/common/outbound.c:4041
msgid ""
"ME <action>, sends the action to the current channel (actions are written in "
"the 3rd person, like /me jumps)"
"ME <action>, sends the action to the current channel (actions are written in"
" the 3rd person, like /me jumps)"
msgstr ""

#: src/common/outbound.c:4045
Expand All @@ -667,8 +665,8 @@ msgstr ""

#: src/common/outbound.c:4051
msgid ""
"MSG <nick> <message>, sends a private message, message \".\" to send to last "
"nick or prefix with \"=\" for dcc chat"
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
" nick or prefix with \"=\" for dcc chat"
msgstr ""

#: src/common/outbound.c:4054
Expand Down Expand Up @@ -732,8 +730,8 @@ msgstr ""

#: src/common/outbound.c:4080
msgid ""
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /"
"RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as "
"/RECONNECT to reconnect to the current server or with /RECONNECT ALL to "
"reconnect to all the open servers"
msgstr ""

Expand Down Expand Up @@ -800,7 +798,8 @@ msgstr ""

#: src/common/outbound.c:4110
msgid ""
"TOPIC [<topic>], sets the topic if one is given, else shows the current topic"
"TOPIC [<topic>], sets the topic if one is given, else shows the current "
"topic"
msgstr ""

#: src/common/outbound.c:4112
Expand All @@ -827,8 +826,8 @@ msgstr ""

#: src/common/outbound.c:4123
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the "
"server."
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr ""

#: src/common/outbound.c:4124
Expand All @@ -837,7 +836,8 @@ msgstr ""

#: src/common/outbound.c:4126
msgid ""
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist"
"USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel "
"userlist"
msgstr ""

#: src/common/outbound.c:4129
Expand Down Expand Up @@ -1111,7 +1111,8 @@ msgid "%C23*%O$tDCC CHAT to %C18$1%O aborted."
msgstr ""

#: src/common/textevents.h:145
msgid "%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC CHAT connection established to %C18$1%C %C30[%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:148
Expand Down Expand Up @@ -1145,8 +1146,8 @@ msgstr ""

#: src/common/textevents.h:169
msgid ""
"%C20*%O$tReceived a malformed DCC request from %C18$1%O.$a010%C23*%O"
"$tContents of packet: %C23$2%O"
"%C20*%O$tReceived a malformed DCC request from "
"%C18$1%O.$a010%C23*%O$tContents of packet: %C23$2%O"
msgstr ""

#: src/common/textevents.h:172
Expand All @@ -1167,7 +1168,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:184
msgid "%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC RECV connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:187
Expand All @@ -1180,7 +1182,8 @@ msgstr ""

#: src/common/textevents.h:193
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' instead."
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr ""

#: src/common/textevents.h:196
Expand All @@ -1197,7 +1200,8 @@ msgid ""
msgstr ""

#: src/common/textevents.h:205
msgid "%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgid ""
"%C24*%O$tDCC SEND connection established to %C18$1 %C30[%O%C24$2%C30]%O"
msgstr ""

#: src/common/textevents.h:208
Expand Down Expand Up @@ -3502,18 +3506,18 @@ msgstr ""

#: src/fe-gtk/fkeys.c:141
msgid ""
"The Run Command action runs the data in Data 1 as if it had been typed into "
"the entry box where you pressed the key sequence. Thus it can contain text "
"(which will be sent to the channel/person), commands or user commands. When "
"run all \\n characters in Data 1 are used to deliminate separate commands so "
"it is possible to run more than one command. If you want a \\ in the actual "
"text run then enter \\\\"
"The Run Command action runs the data in Data 1 as if it had been typed "
"into the entry box where you pressed the key sequence. Thus it can contain "
"text (which will be sent to the channel/person), commands or user commands. "
"When run all \\n characters in Data 1 are used to deliminate separate "
"commands so it is possible to run more than one command. If you want a \\ "
"in the actual text run then enter \\\\"
msgstr ""

#: src/fe-gtk/fkeys.c:143
msgid ""
"The Change Page command switches between pages in the notebook. Set Data 1 "
"to the page you want to switch to. If Data 2 is set to anything then the "
"The Change Page command switches between pages in the notebook. Set Data 1"
" to the page you want to switch to. If Data 2 is set to anything then the "
"switch will be relative to the current position. Set Data 1 to auto to "
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
Expand All @@ -3528,39 +3532,39 @@ msgstr ""

#: src/fe-gtk/fkeys.c:147
msgid ""
"The Scroll Page command scrolls the text widget up or down one page or one "
"line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
"The Scroll Page command scrolls the text widget up or down one page or one"
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
msgstr ""

#: src/fe-gtk/fkeys.c:149
msgid ""
"The Set Buffer command sets the entry where the key sequence was entered to "
"the contents of Data 1"
"The Set Buffer command sets the entry where the key sequence was entered "
"to the contents of Data 1"
msgstr ""

#: src/fe-gtk/fkeys.c:151
msgid ""
"The Last Command command sets the entry to contain the last command entered "
"- the same as pressing up in a shell"
"The Last Command command sets the entry to contain the last command "
"entered - the same as pressing up in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:153
msgid ""
"The Next Command command sets the entry to contain the next command entered "
"- the same as pressing down in a shell"
"The Next Command command sets the entry to contain the next command "
"entered - the same as pressing down in a shell"
msgstr ""

#: src/fe-gtk/fkeys.c:155
msgid ""
"This command changes the text in the entry to finish an incomplete nickname "
"or command. If Data 1 is set then double-tabbing in a string will select the "
"last nick, not the next"
"or command. If Data 1 is set then double-tabbing in a string will select the"
" last nick, not the next"
msgstr ""

#: src/fe-gtk/fkeys.c:157
msgid ""
"This command scrolls up and down through the list of nicks. If Data 1 is set "
"to anything it will scroll up, else it scrolls down"
"This command scrolls up and down through the list of nicks. If Data 1 is set"
" to anything it will scroll up, else it scrolls down"
msgstr ""

#: src/fe-gtk/fkeys.c:159
Expand Down Expand Up @@ -5694,8 +5698,8 @@ msgstr ""

#: src/fe-gtk/setup.c:562
msgid ""
"Automatically include timestamps in copied lines of text. Otherwise, include "
"timestamps if the Shift key is held down while selecting."
"Automatically include timestamps in copied lines of text. Otherwise, include"
" timestamps if the Shift key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:564
Expand All @@ -5704,8 +5708,8 @@ msgstr ""

#: src/fe-gtk/setup.c:565
msgid ""
"Automatically include color information in copied lines of text. Otherwise, "
"include color information if the Ctrl key is held down while selecting."
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the Ctrl key is held down while selecting."
msgstr ""

#: src/fe-gtk/setup.c:570
Expand Down Expand Up @@ -5756,7 +5760,8 @@ msgstr ""

#: src/fe-gtk/setup.c:579
msgid ""
"Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr ""

#: src/fe-gtk/setup.c:586 src/fe-gtk/setup.c:1883
Expand Down Expand Up @@ -5866,8 +5871,8 @@ msgstr ""

#: src/fe-gtk/setup.c:639
msgid ""
"Asks the IRC server for your real address. Use this if you have a 192.168.*."
"* address!"
"Asks the IRC server for your real address. Use this if you have a "
"192.168.*.* address!"
msgstr ""

#: src/fe-gtk/setup.c:640
Expand Down Expand Up @@ -6103,8 +6108,7 @@ msgid ""
msgstr ""

#: src/fe-gtk/setup.c:2254
msgid ""
"The Real name option cannot be left blank. Falling back to \"realname\"."
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
msgstr ""

#: src/fe-gtk/setup.c:2261
Expand Down Expand Up @@ -6231,8 +6235,8 @@ msgstr ""
#: plugins/sysinfo/sysinfo.c:168
msgid ""
"Sysinfo: Valid settings are: announce and hide_* for each piece of "
"information. e.g. hide_os. Without a value it will show current (or default) "
"setting.\n"
"information. e.g. hide_os. Without a value it will show current (or default)"
" setting.\n"
msgstr ""

#: plugins/sysinfo/sysinfo.c:190
Expand All @@ -6248,9 +6252,3 @@ msgstr ""
#, c-format
msgid "%s plugin unloaded\n"
msgstr ""

#~ msgid "Socks4"
#~ msgstr "Socks4"

#~ msgid "Socks5"
#~ msgstr "Socks5"
610 changes: 214 additions & 396 deletions po/zh_CN.po

Large diffs are not rendered by default.

246 changes: 92 additions & 154 deletions po/zh_TW.po

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion readme.md
@@ -1,4 +1,4 @@
# HexChat [![Build Status](http://img.shields.io/travis/hexchat/hexchat/master.svg?style=flat)](https://travis-ci.org/hexchat/hexchat) [![Build Status](https://img.shields.io/appveyor/ci/TingPing/hexchat/master.svg?style=flat)](https://ci.appveyor.com/project/TingPing/hexchat)
# HexChat

HexChat is an IRC client for Windows and UNIX-like operating systems.
See [IRCHelp.org](http://irchelp.org) for information about IRC in general.
Expand Down
2 changes: 2 additions & 0 deletions src/common/chanopt.c
Expand Up @@ -58,6 +58,7 @@ typedef struct

static const channel_options chanopt[] =
{
{"alert_balloon", NULL, S_F(alert_balloon)},
{"alert_beep", "BEEP", S_F(alert_beep)},
{"alert_taskbar", NULL, S_F(alert_taskbar)},
{"alert_tray", "TRAY", S_F(alert_tray)},
Expand Down Expand Up @@ -182,6 +183,7 @@ typedef struct
{
/* Per-Channel Alerts */
/* use a byte, because we need a pointer to each element */
guint8 alert_balloon;
guint8 alert_beep;
guint8 alert_taskbar;
guint8 alert_tray;
Expand Down
2 changes: 1 addition & 1 deletion src/common/common.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>StaticLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
Expand Down
5 changes: 1 addition & 4 deletions src/common/ctcp.c
Expand Up @@ -94,9 +94,6 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip,
char outbuf[1024];
int ctcp_offset = 2;

if (serv->have_idmsg && (word[4][1] == '+' || word[4][1] == '-') )
ctcp_offset = 3;

/* consider DCC to be different from other CTCPs */
if (!g_ascii_strncasecmp (msg, "DCC", 3))
{
Expand Down Expand Up @@ -129,7 +126,7 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip,
if (ctcp_check (sess, nick, word, word_eol, word[4] + ctcp_offset))
goto generic;

inbound_action (sess, to, nick, ip, msg + 7, FALSE, id, tags_data);
inbound_action (sess, to, nick, ip, msg + 7, FALSE, tags_data->identified, tags_data);
return;
}

Expand Down
2 changes: 1 addition & 1 deletion src/common/dbus/meson.build
@@ -1,5 +1,5 @@
dbus_deps = [
dependency('dbus-glib-1')
dbus_glib_dep
]

dbus_sources = [
Expand Down
10 changes: 5 additions & 5 deletions src/common/dcc.c
Expand Up @@ -1006,7 +1006,7 @@ dcc_socks_proxy_traverse (GIOChannel *source, GIOCondition condition, struct DCC
sc.type = 1;
sc.port = htons (dcc->port);
sc.address = htonl (dcc->addr);
strncpy (sc.username, prefs.hex_irc_user_name, 9);
g_strlcpy (sc.username, prefs.hex_irc_user_name, sizeof (sc.username));
memcpy (proxy->buffer, &sc, sizeof (sc));
proxy->buffersize = 8 + strlen (sc.username) + 1;
proxy->bufferused = 0;
Expand Down Expand Up @@ -1618,13 +1618,13 @@ dcc_accept (GIOChannel *source, GIOCondition condition, struct DCC *dcc)
}

guint32
dcc_get_my_address (void) /* the address we'll tell the other person */
dcc_get_my_address (session *sess) /* the address we'll tell the other person */
{
struct hostent *dns_query;
guint32 addr = 0;

if (prefs.hex_dcc_ip_from_server && prefs.dcc_ip)
addr = prefs.dcc_ip;
if (prefs.hex_dcc_ip_from_server && sess->server->dcc_ip)
addr = sess->server->dcc_ip;
else if (prefs.hex_dcc_ip[0])
{
dns_query = gethostbyname ((const char *) prefs.hex_dcc_ip);
Expand Down Expand Up @@ -1710,7 +1710,7 @@ dcc_listen_init (struct DCC *dcc, session *sess)
/*if we have a dcc_ip, we use that, so the remote client can connect*/
/*else we try to take an address from hex_dcc_ip*/
/*if something goes wrong we tell the client to connect to our LAN ip*/
dcc->addr = dcc_get_my_address ();
dcc->addr = dcc_get_my_address (sess);

/*if nothing else worked we use the address we bound to*/
if (dcc->addr == 0)
Expand Down
2 changes: 1 addition & 1 deletion src/common/dcc.h
Expand Up @@ -124,7 +124,7 @@ void dcc_chat (session *sess, char *nick, int passive);
void handle_dcc (session *sess, char *nick, char *word[], char *word_eol[],
const message_tags_data *tags_data);
void dcc_show_list (session *sess);
guint32 dcc_get_my_address (void);
guint32 dcc_get_my_address (session *sess);
void dcc_get_with_destfile (struct DCC *dcc, char *utf8file);

#endif
17 changes: 1 addition & 16 deletions src/common/hexchat.c
Expand Up @@ -57,10 +57,6 @@
#include <glib-object.h> /* for g_type_init() */
#endif

#ifdef USE_LIBPROXY
#include <proxy.h>
#endif

GSList *popup_list = 0;
GSList *button_list = 0;
GSList *dlgbutton_list = 0;
Expand Down Expand Up @@ -111,10 +107,6 @@ struct session *current_tab;
struct session *current_sess = 0;
struct hexchatprefs prefs;

#ifdef USE_LIBPROXY
pxProxyFactory *libproxy_factory;
#endif

/*
* Update the priority queue of the "interesting sessions"
* (sess_list_by_lastact).
Expand Down Expand Up @@ -493,6 +485,7 @@ session_new (server *serv, char *from, int type, int focus)
sess->logfd = -1;
sess->type = type;

sess->alert_balloon = SET_DEFAULT;
sess->alert_beep = SET_DEFAULT;
sess->alert_taskbar = SET_DEFAULT;
sess->alert_tray = SET_DEFAULT;
Expand Down Expand Up @@ -1101,10 +1094,6 @@ main (int argc, char *argv[])
hexchat_remote ();
#endif

#ifdef USE_LIBPROXY
libproxy_factory = px_proxy_factory_new ();
#endif

#ifdef WIN32
coinit_result = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED (coinit_result))
Expand Down Expand Up @@ -1147,10 +1136,6 @@ main (int argc, char *argv[])
}
#endif

#ifdef USE_LIBPROXY
px_proxy_factory_free (libproxy_factory);
#endif

#ifdef WIN32
WSACleanup ();
#endif
Expand Down
18 changes: 12 additions & 6 deletions src/common/hexchat.h
Expand Up @@ -75,7 +75,7 @@
#define DOMAINLEN 100
#define NICKLEN 64 /* including the NULL, so 63 really */
#define CHANLEN 300
#define PDIWORDS 32
#define PDIWORDS 32
#define USERNAMELEN 10
#define HIDDEN_CHAR 8 /* invisible character for xtext */

Expand Down Expand Up @@ -301,8 +301,8 @@ struct hexchatprefs
char hex_irc_user_name[127];
char hex_net_bind_host[127];
char hex_net_proxy_host[64];
char hex_net_proxy_pass[32];
char hex_net_proxy_user[32];
char hex_net_proxy_pass[256];
char hex_net_proxy_user[256];
char hex_stamp_log_format[64];
char hex_stamp_text_format[64];
char hex_text_background[PATHLEN + 1];
Expand All @@ -313,7 +313,6 @@ struct hexchatprefs

/* these are the private variables */
guint32 local_ip;
guint32 dcc_ip;

unsigned int wait_on_exit; /* wait for logs to be flushed to disk IF we're connected */

Expand Down Expand Up @@ -364,6 +363,7 @@ typedef struct session
{
/* Per-Channel Alerts */
/* use a byte, because we need a pointer to each element */
guint8 alert_balloon;
guint8 alert_beep;
guint8 alert_taskbar;
guint8 alert_tray;
Expand Down Expand Up @@ -482,6 +482,10 @@ typedef struct server
int proxy_sok4;
int proxy_sok6;
int id; /* unique ID number (for plugin API) */

/* dcc_ip moved from hexchatprefs to make it per-server */
guint32 dcc_ip;

#ifdef USE_OPENSSL
SSL_CTX *ctx;
SSL *ssl;
Expand All @@ -499,7 +503,7 @@ typedef struct server
char servername[128]; /* what the server says is its name */
char password[86];
char nick[NICKLEN];
char linebuf[2048]; /* RFC says 512 chars including \r\n */
char linebuf[8704]; /* RFC says 512 chars including \r\n, IRCv3 message tags add 8191, plus the NUL byte */
char *last_away_reason;
int pos; /* current position in linebuf */
int nickcount;
Expand Down Expand Up @@ -563,9 +567,10 @@ typedef struct server
unsigned int have_awaynotify:1;
unsigned int have_uhnames:1;
unsigned int have_whox:1; /* have undernet's WHOX features */
unsigned int have_idmsg:1; /* freenode's IDENTIFY-MSG */
unsigned int have_idmsg:1; /* cap solanum.chat/identify-msg */
unsigned int have_accnotify:1; /* cap account-notify */
unsigned int have_extjoin:1; /* cap extended-join */
unsigned int have_account_tag:1; /* cap account-tag */
unsigned int have_server_time:1; /* cap server-time */
unsigned int have_sasl:1; /* SASL capability */
unsigned int have_except:1; /* ban exemptions +e */
Expand All @@ -575,6 +580,7 @@ typedef struct server
unsigned int sasl_mech; /* mechanism for sasl auth */
unsigned int sent_capend:1; /* have sent CAP END yet */
unsigned int waiting_on_cap:1; /* waiting on another line of CAP LS */
unsigned int waiting_on_sasl:1; /* waiting on sasl */
#ifdef USE_OPENSSL
unsigned int use_ssl:1; /* is server SSL capable? */
unsigned int accept_invalid_cert:1;/* ignore result of server's cert. verify */
Expand Down
48 changes: 34 additions & 14 deletions src/common/inbound.c
Expand Up @@ -107,7 +107,8 @@ find_session_from_nick (char *nick, server *serv)

if (serv->front_session)
{
if (userlist_find (serv->front_session, nick))
// If we are here for ChanServ, then it is usually a reply for the user
if (!g_ascii_strcasecmp(nick, "ChanServ") || userlist_find (serv->front_session, nick))
return serv->front_session;
}

Expand Down Expand Up @@ -189,7 +190,7 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,

if (ip && ip[0])
set_topic (sess, ip, ip);
inbound_chanmsg (serv, NULL, NULL, from, text, FALSE, id, tags_data);
inbound_chanmsg (serv, NULL, NULL, from, text, FALSE, tags_data->identified, tags_data);
return;
}

Expand Down Expand Up @@ -815,7 +816,9 @@ inbound_topictime (server *serv, char *chan, char *nick, time_t stamp,
if (!sess)
sess = serv->server_session;

tim[24] = 0; /* get rid of the \n */
if (tim != NULL)
tim[24] = 0; /* get rid of the \n */

EMIT_SIGNAL_TIMESTAMP (XP_TE_TOPICDATE, sess, chan, nick, tim, NULL, 0,
tags_data->timestamp);
}
Expand Down Expand Up @@ -1420,7 +1423,7 @@ inbound_foundip (session *sess, char *ip, const message_tags_data *tags_data)
HostAddr = gethostbyname (ip);
if (HostAddr)
{
prefs.dcc_ip = ((struct in_addr *) HostAddr->h_addr)->s_addr;
sess->server->dcc_ip = ((struct in_addr *) HostAddr->h_addr)->s_addr;
EMIT_SIGNAL_TIMESTAMP (XP_TE_FOUNDIP, sess->server->server_session,
inet_ntoa (*((struct in_addr *) HostAddr->h_addr)),
NULL, NULL, NULL, 0, tags_data->timestamp);
Expand Down Expand Up @@ -1489,7 +1492,7 @@ inbound_banlist (session *sess, time_t stamp, char *chan, char *mask,
server *serv = sess->server;
char *nl;

if (stamp <= 0)
if (stamp <= 0 || time_str == NULL)
{
time_str = "";
}
Expand Down Expand Up @@ -1653,7 +1656,7 @@ inbound_toggle_caps (server *serv, const char *extensions_str, gboolean enable)
{
const char *extension = extensions[i];

if (!strcmp (extension, "identify-msg"))
if (!strcmp (extension, "solanum.chat/identify-msg"))
serv->have_idmsg = enable;
else if (!strcmp (extension, "multi-prefix"))
serv->have_namesx = enable;
Expand All @@ -1669,6 +1672,8 @@ inbound_toggle_caps (server *serv, const char *extensions_str, gboolean enable)
serv->have_server_time = enable;
else if (!strcmp (extension, "away-notify"))
serv->have_awaynotify = enable;
else if (!strcmp (extension, "account-tag"))
serv->have_account_tag = enable;
else if (!strcmp (extension, "sasl"))
{
serv->have_sasl = enable;
Expand Down Expand Up @@ -1708,8 +1713,6 @@ inbound_cap_del (server *serv, char *nick, char *extensions,
}

static const char * const supported_caps[] = {
"identify-msg",

/* IRCv3.1 */
"multi-prefix",
"away-notify",
Expand All @@ -1722,13 +1725,19 @@ static const char * const supported_caps[] = {
"userhost-in-names",
"cap-notify",
"chghost",
"setname",
"invite-notify",
"account-tag",

/* ZNC */
"znc.in/server-time-iso",
"znc.in/server-time",

/* Twitch */
"twitch.tv/membership",

/* Solanum */
"solanum.chat/identify-msg",
};

static int
Expand Down Expand Up @@ -1768,7 +1777,6 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
{
char buffer[500]; /* buffer for requesting capabilities and emitting the signal */
gboolean want_cap = FALSE; /* format the CAP REQ string based on previous capabilities being requested or not */
gboolean want_sasl = FALSE; /* CAP END shouldn't be sent when SASL is requested, it needs further responses */
char **extensions;
int i;

Expand Down Expand Up @@ -1806,7 +1814,7 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
/* if the SASL password is set AND auth mode is set to SASL, request SASL auth */
if (!g_strcmp0 (extension, "sasl") &&
((serv->loginmethod == LOGIN_SASL && strlen (serv->password) != 0)
|| (serv->loginmethod == LOGIN_SASLEXTERNAL && serv->have_cert)))
|| serv->loginmethod == LOGIN_SASLEXTERNAL))
{
if (value)
{
Expand All @@ -1816,7 +1824,7 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
serv->sasl_mech = sasl_mech;
}
want_cap = TRUE;
want_sasl = TRUE;
serv->waiting_on_sasl = TRUE;
g_strlcat (buffer, "sasl ", sizeof(buffer));
continue;
}
Expand All @@ -1842,7 +1850,7 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
tags_data->timestamp);
tcp_sendf (serv, "%s\r\n", g_strchomp (buffer));
}
if (!want_sasl && !serv->waiting_on_cap)
if (!serv->waiting_on_sasl && !serv->waiting_on_cap)
{
/* if we use SASL, CAP END is dealt via raw numerics */
serv->sent_capend = TRUE;
Expand All @@ -1851,13 +1859,25 @@ inbound_cap_ls (server *serv, char *nick, char *extensions_str,
}

void
inbound_cap_nak (server *serv, const message_tags_data *tags_data)
inbound_cap_nak (server *serv, char *extensions_str, const message_tags_data *tags_data)
{
if (!serv->waiting_on_cap && !serv->sent_capend)
char **extensions;
int i;

extensions = g_strsplit (extensions_str, " ", 0);
for (i=0; extensions[i]; i++)
{
if (!g_strcmp0 (extensions[i], "sasl"))
serv->waiting_on_sasl = FALSE;
}

if (!serv->waiting_on_cap && !serv->waiting_on_sasl && !serv->sent_capend)
{
serv->sent_capend = TRUE;
tcp_send_len (serv, "CAP END\r\n", 9);
}

g_strfreev (extensions);
}

void
Expand Down
2 changes: 1 addition & 1 deletion src/common/inbound.h
Expand Up @@ -92,7 +92,7 @@ void inbound_cap_ack (server *serv, char *nick, char *extensions,
const message_tags_data *tags_data);
void inbound_cap_ls (server *serv, char *nick, char *extensions,
const message_tags_data *tags_data);
void inbound_cap_nak (server *serv, const message_tags_data *tags_data);
void inbound_cap_nak (server *serv, char *extensions, const message_tags_data *tags_data);
void inbound_cap_list (server *serv, char *nick, char *extensions,
const message_tags_data *tags_data);
void inbound_cap_del (server *serv, char *nick, char *extensions,
Expand Down
20 changes: 5 additions & 15 deletions src/common/meson.build
Expand Up @@ -28,6 +28,7 @@ common_sysinfo_deps = []

common_deps = [
libgio_dep,
libcanberra_dep,
] + global_deps

common_includes = [
Expand Down Expand Up @@ -72,31 +73,19 @@ textevents = custom_target('textevents',
# SIGACTION
# HAVE_GTK_MAC

if get_option('with-ssl')
if libssl_dep.found()
common_sources += 'ssl.c'
common_deps += libssl_dep
endif

if get_option('with-libproxy')
common_deps += dependency('libproxy-1.0')
endif

if get_option('with-libcanberra')
common_deps += dependency('libcanberra', version: '>= 0.22')
endif

if get_option('with-dbus')
if dbus_glib_dep.found()
subdir('dbus')
common_deps += hexchat_dbus_dep
common_includes += include_directories('dbus')
endif

if get_option('with-plugin')
if get_option('plugin')
common_deps += libgmodule_dep
common_cflags += '-DHEXCHATLIBDIR="@0@"'.format(join_paths(get_option('prefix'),
get_option('libdir'),
'hexchat/plugins'))

install_headers('hexchat-plugin.h')
endif

Expand All @@ -109,6 +98,7 @@ hexchat_common = static_library('hexchatcommon',
)

hexchat_common_dep = declare_dependency(
sources: [textevents] + marshal,
link_with: hexchat_common,
include_directories: common_includes,
compile_args: common_cflags,
Expand Down
137 changes: 104 additions & 33 deletions src/common/modes.c
Expand Up @@ -67,8 +67,8 @@ send_channel_modes (session *sess, char *tbuf, char *word[], int wpos,
int usable_modes, orig_len, len, wlen, i, max;
server *serv = sess->server;

/* sanity check. IRC RFC says three per line. */
if (serv->modes_per_line < 3)
/* sanity check. IRC RFC says three per line but some servers may support less. */
if (serv->modes_per_line < 1)
serv->modes_per_line = 3;
if (modes_per_line < 1)
modes_per_line = serv->modes_per_line;
Expand Down Expand Up @@ -735,6 +735,8 @@ handle_mode (server * serv, char *word[], char *word_eol[],
if (!(*word[i + offset]))
break;
num_args++;
if (word[i + offset][0] == ':')
break;
}

/* count the number of modes (without the -/+ chars */
Expand Down Expand Up @@ -765,7 +767,7 @@ handle_mode (server * serv, char *word[], char *word_eol[],
if ((all_modes_have_args || mode_has_arg (serv, sign, *modes)) && arg < (num_args + 1))
{
arg++;
argstr = word[arg + offset];
argstr = STRIP_COLON(word, word_eol, arg+offset);
}
handle_single_mode (&mr, sign, *modes, nick, chan,
argstr, numeric_324 || prefs.hex_irc_raw_modes,
Expand All @@ -783,91 +785,160 @@ handle_mode (server * serv, char *word[], char *word_eol[],
mode_print_grouped (sess, nick, &mr, tags_data);
}

static char
hex_to_chr(char chr)
{
return g_ascii_isdigit (chr) ? chr - '0' : g_ascii_tolower (chr) - 'a' + 10;
}

static void
parse_005_token (const char *token, char **name, char **value, gboolean *adding)
{
char *toksplit, *valuecurr;
size_t idx;

if (token[0] == '-')
{
*adding = FALSE;
token++;
} else
{
*adding = TRUE;
}

toksplit = strchr (token, '=');
if (toksplit && *toksplit++)
{
/* The token has a value; parse any escape codes. */
*name = g_strndup (token, toksplit - token - 1);
*value = g_malloc (strlen (toksplit) + 1);
valuecurr = *value;

while (*toksplit)
{
if (toksplit[0] == '\\')
{
/** If it's a malformed escape then just skip it. */
if (toksplit[1] == 'x' && g_ascii_isxdigit (toksplit[2]) && g_ascii_isxdigit (toksplit[3]))
*valuecurr++ = hex_to_chr (toksplit[2]) << 4 | hex_to_chr (toksplit[3]);

for (idx = 0; idx < 4; ++idx)
{
/* We need to do this to avoid jumping past the end of the array. */
if (*toksplit)
toksplit++;
}
} else
{
/** Non-escape characters can be copied as is. */
*valuecurr++ = *toksplit++;
}
}
*valuecurr++ = 0;
} else
{
/* The token has no value; store a dummy value instead. */
*name = g_strdup (token);
*value = g_strdup ("");
}
}

/* handle the 005 numeric */

void
inbound_005 (server * serv, char *word[], const message_tags_data *tags_data)
{
int w;
char *pre;
char *tokname, *tokvalue;
gboolean tokadding;

w = 4; /* start at the 4th word */
while (w < PDIWORDS && *word[w])
{
if (strncmp (word[w], "MODES=", 6) == 0)
if (word[w][0] == ':')
break; // :are supported by this server

parse_005_token(word[w], &tokname, &tokvalue, &tokadding);
if (g_strcmp0 (tokname, "MODES") == 0)
{
serv->modes_per_line = atoi (word[w] + 6);
} else if (strncmp (word[w], "CHANTYPES=", 10) == 0)
serv->modes_per_line = atoi (tokvalue);
} else if (g_strcmp0 (tokname, "CHANTYPES") == 0)
{
g_free (serv->chantypes);
serv->chantypes = g_strdup (word[w] + 10);
} else if (strncmp (word[w], "CHANMODES=", 10) == 0)
serv->chantypes = g_strdup (tokvalue);
} else if (g_strcmp0 (tokname, "CHANMODES") == 0)
{
g_free (serv->chanmodes);
serv->chanmodes = g_strdup (word[w] + 10);
} else if (strncmp (word[w], "PREFIX=", 7) == 0)
serv->chanmodes = g_strdup (tokvalue);
} else if (g_strcmp0 (tokname, "PREFIX") == 0)
{
pre = strchr (word[w] + 7, ')');
pre = strchr (tokvalue, ')');
if (pre)
{
pre[0] = 0; /* NULL out the ')' */
g_free (serv->nick_prefixes);
g_free (serv->nick_modes);
serv->nick_prefixes = g_strdup (pre + 1);
serv->nick_modes = g_strdup (word[w] + 8);
serv->nick_modes = g_strdup (tokvalue + 1);
} else
{
/* bad! some ircds don't give us the modes. */
/* in this case, we use it only to strip /NAMES */
serv->bad_prefix = TRUE;
g_free (serv->bad_nick_prefixes);
serv->bad_nick_prefixes = g_strdup (word[w] + 7);
serv->bad_nick_prefixes = g_strdup (tokvalue);
}
} else if (strncmp (word[w], "WATCH=", 6) == 0)
} else if (g_strcmp0 (tokname, "WATCH") == 0)
{
serv->supports_watch = TRUE;
} else if (strncmp (word[w], "MONITOR=", 8) == 0)
serv->supports_watch = tokadding;
} else if (g_strcmp0 (tokname, "MONITOR") == 0)
{
serv->supports_monitor = TRUE;
} else if (strncmp (word[w], "NETWORK=", 8) == 0)
serv->supports_monitor = tokadding;
} else if (g_strcmp0 (tokname, "NETWORK") == 0)
{
if (serv->server_session->type == SESS_SERVER)
if (serv->server_session->type == SESS_SERVER && strlen (tokvalue))
{
safe_strcpy (serv->server_session->channel, word[w] + 8, CHANLEN);
safe_strcpy (serv->server_session->channel, tokvalue, CHANLEN);
fe_set_channel (serv->server_session);
}

} else if (strncmp (word[w], "CASEMAPPING=", 12) == 0)
} else if (g_strcmp0 (tokname, "CASEMAPPING") == 0)
{
if (strcmp (word[w] + 12, "ascii") == 0) /* bahamut */
if (g_strcmp0 (tokvalue, "ascii") == 0)
serv->p_cmp = (void *)g_ascii_strcasecmp;
} else if (strncmp (word[w], "CHARSET=", 8) == 0)
} else if (g_strcmp0 (tokname, "CHARSET") == 0)
{
if (g_ascii_strncasecmp (word[w] + 8, "UTF-8", 5) == 0)
if (g_ascii_strcasecmp (tokvalue, "UTF-8") == 0)
{
server_set_encoding (serv, "UTF-8");
}
} else if (strcmp (word[w], "NAMESX") == 0)
} else if (g_strcmp0 (tokname, "UTF8ONLY") == 0)
{
server_set_encoding (serv, "UTF-8");
} else if (g_strcmp0 (tokname, "NAMESX") == 0)
{
/* 12345678901234567 */
tcp_send_len (serv, "PROTOCTL NAMESX\r\n", 17);
} else if (strcmp (word[w], "WHOX") == 0)
} else if (g_strcmp0 (tokname, "WHOX") == 0)
{
serv->have_whox = TRUE;
} else if (strcmp (word[w], "EXCEPTS") == 0)
serv->have_whox = tokadding;
} else if (g_strcmp0 (tokname, "EXCEPTS") == 0)
{
serv->have_except = TRUE;
} else if (strcmp (word[w], "INVEX") == 0)
serv->have_except = tokadding;
} else if (g_strcmp0 (tokname, "INVEX") == 0)
{
/* supports mode letter +I, default channel invite */
serv->have_invite = TRUE;
} else if (strncmp (word[w], "ELIST=", 6) == 0)
serv->have_invite = tokadding;
} else if (g_strcmp0 (tokname, "ELIST") == 0)
{
/* supports LIST >< min/max user counts? */
if (strchr (word[w] + 6, 'U') || strchr (word[w] + 6, 'u'))
if (strchr (tokvalue, 'U') || strchr (tokvalue, 'u'))
serv->use_listargs = TRUE;
}

g_free (tokname);
g_free (tokvalue);
w++;
}
}
39 changes: 28 additions & 11 deletions src/common/outbound.c
Expand Up @@ -3225,16 +3225,23 @@ cmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[])
else if (*word[2])
{
int offset = 0;

#ifdef USE_OPENSSL
int use_ssl = FALSE;

if (strcmp (word[2], "-ssl") == 0)
int use_ssl_noverify = FALSE;
if (g_strcmp0 (word[2], "-ssl") == 0)
{
use_ssl = TRUE;
use_ssl_noverify = FALSE;
offset++; /* args move up by 1 word */
} else if (g_strcmp0 (word[2], "-ssl-noverify") == 0)
{
use_ssl = TRUE;
use_ssl_noverify = TRUE;
offset++; /* args move up by 1 word */
}
serv->use_ssl = use_ssl;
serv->accept_invalid_cert = TRUE;
serv->accept_invalid_cert = use_ssl_noverify;
#endif

if (*word[4+offset])
Expand Down Expand Up @@ -3287,7 +3294,7 @@ cmd_send (struct session *sess, char *tbuf, char *word[], char *word_eol[])
if (!word[2][0])
return FALSE;

addr = dcc_get_my_address ();
addr = dcc_get_my_address (sess);
if (addr == 0)
{
/* use the one from our connected server socket */
Expand Down Expand Up @@ -3422,17 +3429,24 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[])
char *channel = NULL;
char *key = NULL;
int use_ssl = FALSE;
int use_ssl_noverify = FALSE;
int is_url = TRUE;
server *serv = sess->server;
ircnet *net = NULL;

#ifdef USE_OPENSSL
/* BitchX uses -ssl, mIRC uses -e, let's support both */
if (strcmp (word[2], "-ssl") == 0 || strcmp (word[2], "-e") == 0)
if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-e") == 0)
{
use_ssl = TRUE;
offset++; /* args move up by 1 word */
}
else if (g_strcmp0 (word[2], "-ssl-noverify") == 0)
{
use_ssl = TRUE;
use_ssl_noverify = TRUE;
offset++; /* args move up by 1 word */
}
#endif

if (!parse_irc_url (word[2 + offset], &server_name, &port, &channel, &key, &use_ssl))
Expand Down Expand Up @@ -3497,7 +3511,7 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[])

#ifdef USE_OPENSSL
serv->use_ssl = use_ssl;
serv->accept_invalid_cert = TRUE;
serv->accept_invalid_cert = use_ssl_noverify;
#endif

/* try to connect by Network name */
Expand Down Expand Up @@ -3528,7 +3542,7 @@ cmd_servchan (struct session *sess, char *tbuf, char *word[],
int offset = 0;

#ifdef USE_OPENSSL
if (strcmp (word[2], "-ssl") == 0)
if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-ssl-noverify") == 0)
offset++;
#endif

Expand Down Expand Up @@ -3930,7 +3944,7 @@ cmd_voice (struct session *sess, char *tbuf, char *word[], char *word_eol[])
const struct commands xc_cmds[] = {
{"ADDBUTTON", cmd_addbutton, 0, 0, 1,
N_("ADDBUTTON <name> <action>, adds a button under the user-list")},
{"ADDSERVER", cmd_addserver, 0, 0, 1, N_("ADDSERVER <NewNetwork> <newserver/6667>, adds a new network with a new server to the network list")},
{"ADDSERVER", cmd_addserver, 0, 0, 1, N_("ADDSERVER <NewNetwork> <hostname/port>, adds a new network with a new server to the network list")},
{"ALLCHAN", cmd_allchannels, 0, 0, 1,
N_("ALLCHAN <cmd>, sends a command to all channels you're in")},
{"ALLCHANL", cmd_allchannelslocal, 0, 0, 1,
Expand Down Expand Up @@ -4077,7 +4091,7 @@ const struct commands xc_cmds[] = {
N_("QUOTE <text>, sends the text in raw form to the server")},
#ifdef USE_OPENSSL
{"RECONNECT", cmd_reconnect, 0, 0, 1,
N_("RECONNECT [-ssl] [<host>] [<port>] [<password>], Can be called just as /RECONNECT to reconnect to the current server or with /RECONNECT ALL to reconnect to all the open servers")},
N_("RECONNECT [-ssl|-ssl-noverify] [<host>] [<port>] [<password>], Can be called just as /RECONNECT to reconnect to the current server or with /RECONNECT ALL to reconnect to all the open servers")},
#else
{"RECONNECT", cmd_reconnect, 0, 0, 1,
N_("RECONNECT [<host>] [<port>] [<password>], Can be called just as /RECONNECT to reconnect to the current server or with /RECONNECT ALL to reconnect to all the open servers")},
Expand All @@ -4089,14 +4103,14 @@ const struct commands xc_cmds[] = {
{"SEND", cmd_send, 0, 0, 1, N_("SEND <nick> [<file>]")},
#ifdef USE_OPENSSL
{"SERVCHAN", cmd_servchan, 0, 0, 1,
N_("SERVCHAN [-ssl] <host> <port> <channel>, connects and joins a channel")},
N_("SERVCHAN [-ssl|-ssl-noverify] <host> <port> <channel>, connects and joins a channel")},
#else
{"SERVCHAN", cmd_servchan, 0, 0, 1,
N_("SERVCHAN <host> <port> <channel>, connects and joins a channel")},
#endif
#ifdef USE_OPENSSL
{"SERVER", cmd_server, 0, 0, 1,
N_("SERVER [-ssl] <host> [<port>] [<password>], connects to a server, the default port is 6667 for normal connections, and 6697 for ssl connections")},
N_("SERVER [-ssl|-ssl-noverify] <host> [<port>] [<password>], connects to a server, the default port is 6667 for normal connections, and 6697 for ssl connections")},
#else
{"SERVER", cmd_server, 0, 0, 1,
N_("SERVER <host> [<port>] [<password>], connects to a server, the default port is 6667")},
Expand Down Expand Up @@ -4420,6 +4434,9 @@ check_special_chars (char *cmd, int do_ascii) /* check for %X */
case 'I':
buf[i] = '\035';
break;
case 'S':
buf[i] = '\036';
break;
case 'C':
buf[i] = '\003';
break;
Expand Down
119 changes: 73 additions & 46 deletions src/common/plugin.c
Expand Up @@ -115,6 +115,34 @@ enum
HOOK_DELETED = 1 << 7 /* marked for deletion */
};

enum
{
CHANNEL_FLAG_CONNECTED = 1 << 0,
CHANNEL_FLAG_CONNECING = 1 << 1,
CHANNEL_FLAG_AWAY = 1 << 2,
CHANNEL_FLAG_END_OF_MOTD = 1 << 3,
CHANNEL_FLAG_HAS_WHOX = 1 << 4,
CHANNEL_FLAG_HAS_IDMSG = 1 << 5,
CHANNEL_FLAG_HIDE_JOIN_PARTS = 1 << 6,
CHANNEL_FLAG_HIDE_JOIN_PARTS_UNSET = 1 << 7,
CHANNEL_FLAG_BEEP = 1 << 8,
CHANNEL_FLAG_BEEP_UNSET = 1 << 9,
CHANNEL_FLAG_UNUSED = 1 << 10,
CHANNEL_FLAG_LOGGING = 1 << 11,
CHANNEL_FLAG_LOGGING_UNSET = 1 << 12,
CHANNEL_FLAG_SCROLLBACK = 1 << 13,
CHANNEL_FLAG_SCROLLBACK_UNSET = 1 << 14,
CHANNEL_FLAG_STRIP_COLORS = 1 << 15,
CHANNEL_FLAG_STRIP_COLORS_UNSET = 1 << 16,
CHANNEL_FLAG_TRAY = 1 << 17,
CHANNEL_FLAG_TRAY_UNSET = 1 << 18,
CHANNEL_FLAG_TASKBAR = 1 << 19,
CHANNEL_FLAG_TASKBAR_UNSET = 1 << 20,
CHANNEL_FLAG_BALLOON = 1 << 21,
CHANNEL_FLAG_BALLOON_UNSET = 1 << 22,
CHANNEL_FLAG_COUNT = 23
};

GSList *plugin_list = NULL; /* export for plugingui.c */
static GSList *hook_list = NULL;

Expand Down Expand Up @@ -355,7 +383,8 @@ plugin_kill_all (void)
}
}

#ifdef USE_PLUGIN
#if defined(USE_PLUGIN) || defined(WIN32)
/* used for loading plugins, and in fe-gtk/notifications/notification-windows.c */

GModule *
module_load (char *filename)
Expand Down Expand Up @@ -384,6 +413,10 @@ module_load (char *filename)
return handle;
}

#endif

#ifdef USE_PLUGIN

/* load a plugin from a filename. Returns: NULL-success or an error string */

char *
Expand Down Expand Up @@ -657,11 +690,11 @@ plugin_emit_print (session *sess, char *word[], time_t server_time)
int
plugin_emit_dummy_print (session *sess, char *name)
{
char *word[32];
char *word[PDIWORDS];
int i;

word[0] = name;
for (i = 1; i < 32; i++)
for (i = 1; i < PDIWORDS; i++)
word[i] = "\000";

return plugin_hook_run (sess, name, word, NULL, NULL, HOOK_PRINT);
Expand Down Expand Up @@ -1516,7 +1549,11 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
{
guint32 hash = str_hash (name);
gpointer data = ph->context;
int tmp = 0;

int channel_flag;
int channel_flags[CHANNEL_FLAG_COUNT];
int channel_flags_used = 0;

int type = LIST_CHANNELS;

/* a NULL xlist is a shortcut to current "channels" context */
Expand Down Expand Up @@ -1577,48 +1614,38 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
case 0xd1b: /* id */
return ((struct session *)data)->server->id;
case 0x5cfee87: /* flags */
/* used if alert_taskbar is unset */ /* 20 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_taskbar; /* 19 */
tmp <<= 1;
/* used if alert_tray is unset */ /* 18 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_tray; /* 17 */
tmp <<= 1;
/* used if text_strip is unset */ /* 16 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_strip; /* 15 */
tmp <<= 1;
/* used if text_scrollback is unset */ /* 14 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_scrollback; /* 13 */
tmp <<= 1;
/* used if text_logging is unset */ /* 12 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_logging; /* 11 */
tmp <<= 1;
/* unused for historical reasons */ /* 10 */
tmp <<= 1;
/* used if alert_beep is unset */ /* 9 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_beep; /* 8 */
tmp <<= 1;
/* used if text_hidejoinpart is unset */ /* 7 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_hidejoinpart; /* 6 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->have_idmsg; /* 5 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->have_whox; /* 4 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->end_of_motd;/* 3 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->is_away; /* 2 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->connecting; /* 1 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->connected; /* 0 */
return tmp;
channel_flags[0] = ((struct session *)data)->server->connected;
channel_flags[1] = ((struct session *)data)->server->connecting;
channel_flags[2] = ((struct session *)data)->server->is_away;
channel_flags[3] = ((struct session *)data)->server->end_of_motd;
channel_flags[4] = ((struct session *)data)->server->have_whox;
channel_flags[5] = ((struct session *)data)->server->have_idmsg;
channel_flags[6] = ((struct session *)data)->text_hidejoinpart;
channel_flags[7] = ((struct session *)data)->text_hidejoinpart == SET_DEFAULT;
channel_flags[8] = ((struct session *)data)->alert_beep;
channel_flags[9] = ((struct session *)data)->alert_beep == SET_DEFAULT;
channel_flags[10] = 0; /* unused for historical reasons */
channel_flags[11] = ((struct session *)data)->text_logging;
channel_flags[12] = ((struct session *)data)->text_logging == SET_DEFAULT;
channel_flags[13] = ((struct session *)data)->text_scrollback;
channel_flags[14] = ((struct session *)data)->text_scrollback == SET_DEFAULT;
channel_flags[15] = ((struct session *)data)->text_strip;
channel_flags[16] = ((struct session *)data)->text_strip == SET_DEFAULT;
channel_flags[17] = ((struct session *)data)->alert_tray;
channel_flags[18] = ((struct session *)data)->alert_tray == SET_DEFAULT;
channel_flags[19] = ((struct session *)data)->alert_taskbar;
channel_flags[20] = ((struct session *)data)->alert_taskbar == SET_DEFAULT;
channel_flags[21] = ((struct session *)data)->alert_balloon;
channel_flags[22] = ((struct session *)data)->alert_balloon == SET_DEFAULT;

/* Set flags */
for (channel_flag = 0; channel_flag < CHANNEL_FLAG_COUNT; ++channel_flag) {
if (channel_flags[channel_flag]) {
channel_flags_used |= 1 << channel_flag;
}
}

return channel_flags_used;
case 0x1a192: /* lag */
return ((struct session *)data)->server->lag;
case 0x1916144c: /* maxmodes */
Expand Down