Compare commits

..

70 Commits

Author SHA1 Message Date
TingPing ba143b4260 Add alerts for invalid ssl certs
This patch was originally provided by dila in #xchat
but modified heavily since.

It will show an alert on invalid certs to add
temp or permanent exceptions per server.
2014-11-26 03:59:09 -05:00
TingPing 232096801b Bump updater version to 2.10.2 2014-11-25 10:37:00 -08:00
TingPing c0769397d5 Fix possible crash in SASL Blowfish mech 2014-11-22 20:56:15 -05:00
TingPing c9b63f7f9b ssl: Validate hostnames
Closes #524
2014-11-21 23:19:30 -05:00
TingPing ebaaf466bf ssl: Use more secure options
This disables ssl 2/3
2014-11-05 02:17:34 -05:00
TingPing 4b6215051f ssl: Don't use global openssl context
Fixes #789
2014-11-05 01:27:39 -05:00
Campbell Barton f83d78dd28 Warning cleanup
- ignoring const
- declarations after statements
- some C files didnt include own headers (risking them getting out of sync)

Closes #1064
2014-11-02 14:41:20 -05:00
Dan Molik 9fb4eb5107 configure: Fix checking for perl
Closes #1196
Fixes #1197
2014-10-29 17:28:04 -04:00
TingPing 3c89de48a8 Remove old config migration
Fixes #1194
2014-10-25 06:50:02 -04:00
RichardHitt 6653582f0a Fix textbox not scrolling to to bottom on resize
Set buf->scrollbar_down conditionally when vertically resizing text window
If resize to enlarge appears to go to last line, set buf->scrollbar_down to be sure.

Fixes #1151
Closes #1171
2014-10-10 13:35:00 -04:00
TingPing abaed2bda4 Fix parsing of MONITOR responses
Fixes #1157
2014-09-27 13:11:21 -04:00
Arnavion e8fb2dde56 Fixed instances of hexchat_printf that unsafely used a string parameter as a format string.
Fixes #1153
2014-09-25 00:54:38 -07:00
Mikaela Suomalainen 25c6638ce4 travis: Add clang & CPUs & fast_finish
HexChat seems to compile fine with clang so why to not test it too.
-j$(nproc) seems to work with HexChat and fast-finish marks build as
failed if one job fails.

Fast finish won't stop jobs that aren't finished at the time of failure.

Closes #1147
2014-09-21 04:31:16 -04:00
TingPing ce4e129849 Take two at fixing out of source builds 2014-09-21 03:53:30 -04:00
TingPing ecd1aa226a Fix attempting to toggle visibility when tray disabled 2014-09-21 03:37:03 -04:00
TingPing 760d18b6e7 Fix missing header
And just use g_snprintf() while at it..
2014-09-20 14:09:38 -04:00
TingPing f389257403 Increase max len of chiper names
For example ECDHE-ECRSA-AES256-GCM-SHA384
2014-09-20 13:56:09 -04:00
TingPing 84df81f336 Replace some unsafe usage of strncpy
Ensure everything is null terminated
2014-09-20 13:52:31 -04:00
Arnavion a9a6cbda4e win32: Fixed build break due to 7a4a024 2014-09-17 13:00:11 -07:00
TingPing 7a4a0243bd Fix out of source builds
Fixes #1018
2014-09-14 17:43:44 -04:00
Arnavion e209e55e59 Use PlaySoundW to play sounds on Windows.
Fixes #1133
2014-09-13 00:23:44 -07:00
Arnavion ad2300f236 Correctly open URLs with non-ASCII characters on Windows.
Fixes #1023
2014-09-13 00:22:48 -07:00
TingPing 80bdd9ce11 Detect utf8 urls
They might not be valid, but like many things they are still used
2014-09-07 19:51:59 -04:00
TingPing 5f99d34c3b Fix opening utf8 urls on OSX
- Escape hostnames with punycode
- Use proper encoding when launching open
2014-09-07 19:45:44 -04:00
TingPing 2aa3eb8cfb Escape values set via pluginpref
Fixes #790
2014-09-01 18:17:26 -04:00
LightningW d1b9118056 Fix DOMAIN and EMAIL patterns.
Closes #1107
2014-09-01 17:55:22 -04:00
Farow fd95c729d5 xtext: Add word and line selection modes
Similar to a GtkTextView if you double click you enter word selection mode
and if you triple click you enter line selection mode.
Allowing you to drag and select more than a single character.

Closes #1108
2014-09-01 17:53:03 -04:00
TingPing d1c40196e3 Fix using negative index 2014-08-23 14:13:34 -04:00
TingPing 9716185edf Use glib to get portable mode dir
This should fix any non-ascii paths
2014-08-23 12:45:02 -04:00
Arnavion a38892ff3b Use GFile API in gtkutil_check_file instead of stat/access.
The latter functions expect codepage-encoded filenames on Windows but GLib's API returns filesystem-encoded paths, which on Windows are UTF-8. GLib API should be used to deal with GLib API results.

Also fixed leaks in two of the callers of gtkutil_check_file()

Fixes #968
2014-08-20 12:50:08 -07:00
TingPing dc18e3da07 Update badges in readme 2014-08-20 15:19:57 -04:00
TingPing 9127b510f2 Update readme.md 2014-08-15 19:55:40 -04:00
TingPing 8f9ed6d942 Bump master to development release 2.11.0
To anybody confused this is not the next stable release, it is just a way to differentiate master
from the 2.10 branch and next stable will be 2.12.0 similar to Gnome's versioning scheme.
2014-08-07 16:30:28 -04:00
TingPing 422edd8812 osx: Create bundles using homebrew
Just easier to maintain than jhbuild.

See https://github.com/TingPing/homebrew-gnome for deps.
2014-08-01 04:03:54 -04:00
TingPing 345c8a29ad Stupid github editor adding newlines 2014-07-28 16:24:43 -04:00
TingPing a854234c1f Fix warning 2014-07-28 16:18:27 -04:00
TingPing 4b549eeac8 Bump updater version on Windows 2014-07-28 16:14:10 -04:00
Arnavion 7c2c8b1403 Fixed expand_homedir to handle paths like "~user" correctly. 2014-07-28 14:49:14 -04:00
TingPing c2ecb4c68c Fix various crashes with pluginpref 2014-07-28 14:47:19 -04:00
siniStar7boy ea9dafcd43 Add GeeksIRC and IRC4Fun to network list
Closes #1057
Closes #1058
2014-07-21 15:37:03 -04:00
RichardHitt 7a7b9c682d Fix apostrophe related spell check issues 2014-07-21 15:10:21 -04:00
RichardHitt 0d3706e2ee Fix possible crash in spell check
Closes #1048
2014-07-19 15:51:06 -04:00
TingPing 3c584e2cd5 win32: Update Python links 2014-07-19 10:08:12 -04:00
TingPing 9372972ad4 win32: Don't allow installing on Vista
It does not run on Vista
2014-07-19 10:06:29 -04:00
TingPing 121cb8b88d Fix formatting warnings
Found by #1059
2014-07-18 07:16:43 -04:00
Campbell Barton 93caf4c7b4 Use GNUC format attribute on print functions
Closes #1059
2014-07-18 07:09:07 -04:00
TingPing 21c0e47869 travis: update before installing deps 2014-07-17 07:33:57 -04:00
TingPing f1e853c1cb Disable tray support on Elementary
They followed Ubuntu in breaking any gtk trays..
2014-07-05 13:08:48 -04:00
hasufell aa7291fc9c configure: Improve python logic
- add checks for python3.4
- only warn once for failure to find a version
- only run pkg-config call if the .pc file was actually found
- make unsupported python version non-fatal

Closes #1006
Closes #989
2014-06-27 19:23:11 -04:00
laurinkus 3de79bca10 Update server list
Closes #1013
2014-06-27 19:19:13 -04:00
TingPing 466646f84a win32: Silent installer improvements
- Launch uninstaller as VERYSILENT
- Don't launch Python/Perl installers when silent
2014-06-27 19:10:55 -04:00
TingPing e0f80e41bf win32: Use theme shipped with gtk
No reason for us to maintain own copy. This also
makes custom theme installing easier.
2014-06-25 20:38:53 -04:00
TingPing 9a5977a9c9 Fix autotools warning 2014-06-21 23:13:05 -04:00
TingPing c3c6b46230 Clean up includes for gettext
It is always enabled.
2014-06-21 23:10:18 -04:00
TingPing 47b4b0da8a Remove unused defines 2014-06-21 22:45:21 -04:00
TingPing 45526205ab Remove broken debug code 2014-06-21 22:21:12 -04:00
TingPing 3342af4185 Make plugin-timer translatable 2014-06-21 22:11:37 -04:00
RichardHitt 7374637d34 Some problems in banlist.c are fixed 2014-06-17 17:16:45 -07:00
Berke Viktor 62209618e1 We don't ship DNS as a plugin anymore 2014-06-13 22:31:08 -04:00
Berke Viktor 7bfa2ee8a7 Fix GTK+ bundle licenses missing from installer 2014-06-13 22:31:00 -04:00
Berke Viktor 73c914cca9 Enable logging by default 2014-06-13 18:21:41 +02:00
TingPing 77d9d421fb Partial fix for out of source builds
Patch from LRN

Perl's makefile needs fixed and the relative include
of config.h needs removed from hexchat.h

Mentioned in #1018
2014-06-09 13:54:16 -04:00
TingPing 59f3a65911 Fix sending notify list to correct networks
Fixes #1015
2014-06-08 01:41:50 -04:00
TingPing 9181ea068a Fix dcc dir warning showing when not auto-accept 2014-06-04 20:55:34 -04:00
TingPing c1d9aad546 win32: Fix path in installer project 2014-06-04 14:07:43 -04:00
TingPing 3cd8556c54 Use GDir instead of dirent 2014-06-04 13:56:33 -04:00
TingPing 9c981cfc6b Fix warning 2014-06-04 13:47:09 -04:00
TingPing 11e3ecc739 Stop hardcoding plugin extensions everywhere 2014-06-04 11:15:35 -04:00
TingPing 5849a0588e Use glib to parse and launch commands for util_exec
Fixes #958
2014-06-04 10:38:23 -04:00
TingPing b8c02f71d9 win32: Use config.h instead of config-win32.h 2014-06-04 10:30:18 -04:00
96 changed files with 3679 additions and 3892 deletions
+7 -2
View File
@@ -1,14 +1,19 @@
language: c
compiler: gcc
compiler:
- gcc
- clang
before_script:
- sudo apt-get update
- sudo apt-get build-dep -qq xchat
- sudo apt-get install -qq libnotify-dev libproxy-dev libpci-dev libcanberra-dev monodevelop gnome-common
script:
- ./autogen.sh
- ./configure --enable-textfe --with-theme-manager
- make V=1
- make V=1 -j$(nproc)
notifications:
irc:
channels: "chat.freenode.net#hexchat-devel"
template: "Build #%{build_number} (%{commit}) by %{author}: %{message}"
on_success: change
matrix:
fast_finish: true
+2 -3
View File
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT([HexChat],[2.10.2])
AC_INIT([HexChat],[2.11.0])
AC_PREREQ([2.60])
AC_COPYRIGHT([Copyright (C) 1998-2010 Peter Zelezny])
@@ -216,7 +216,7 @@ dnl *********************************************************************
_gdk_tgt=`$PKG_CONFIG --variable=target gdk-2.0`
if test "x$_gdk_tgt" = xquartz; then
PKG_CHECK_MODULES(GTK_MAC, gtk-mac-integration, [
PKG_CHECK_MODULES(GTK_MAC, gtk-mac-integration-gtk2, [
GUI_LIBS="$GUI_LIBS $GTK_MAC_LIBS"
GUI_CFLAGS="$GUI_CFLAGS $GTK_MAC_CFLAGS"
AC_DEFINE(HAVE_GTK_MAC)
@@ -858,7 +858,6 @@ echo D-Bus support ......... : $dbus
echo libnotify support ..... : $libnotify
echo libcanberra support ... : $libcanberra
echo Plugin interface ...... : $plugin
echo NLS/gettext ........... : $USE_NLS
echo IPv6 support .......... : $ipv6
echo MS Proxy NTLM \(ISA\) ... : $have_ntlm
echo libproxy support ...... : $libproxy
+5 -20
View File
@@ -2,7 +2,8 @@
<app-bundle>
<meta>
<prefix name="default">${env:JHBUILD_PREFIX}</prefix>
<prefix name="default">/usr/local</prefix>
<prefix name="enchant">/usr/local/opt/enchant-applespell</prefix>
<destination overwrite="yes">${project}</destination>
<run-install-name-tool/>
@@ -21,25 +22,12 @@
</binary>
<binary>
${prefix}/lib/libenchant.dylib
${prefix:enchant}/lib/libenchant.dylib
</binary>
<binary>
${prefix}/lib/enchant/libenchant_applespell.so
${prefix:enchant}/lib/enchant/libenchant_applespell.so
</binary>
<binary dest="${bundle}/Contents/MacOS">
${prefix}/bin/python
</binary>
<binary>
${prefix}/lib/libpython2.7.dylib
</binary>
<data>
${prefix}/lib/python2.7/
</data>
<data>
${prefix}/include/python2.7/pyconfig.h
</data>
<binary>
${prefix}/lib/${gtkdir}/modules/*.so
</binary>
@@ -59,7 +47,7 @@
${prefix}/lib/pango/${pkg:pango:pango_module_version}/modules/
</binary>
<data>
${prefix}/share/themes/Mac/
${prefix}/share/themes/Mac/gtk-2.0-key/gtkrc
</data>
<translations name="gtk20">
@@ -77,7 +65,4 @@
${project}/hexchat.icns
</data>
<!-- icon-theme icons="none">
</icon-theme -->
</app-bundle>
-4
View File
@@ -36,10 +36,6 @@ export GDK_PIXBUF_MODULE_FILE="$bundle_etc/gtk-2.0/gdk-pixbuf.loaders"
export PANGO_LIBDIR="$bundle_lib"
export PANGO_SYSCONFDIR="$bundle_etc"
export PYTHON="$bundle_contents/MacOS/python"
export PYTHONHOME="$bundle_res"
export PYTHONPATH="$bundle_lib/python2.7:$bundle_lib/python2.7/site-packages"
export OPENSSL_CONF="/System/Library/OpenSSL/openssl.cnf"
export HEXCHAT_LIBDIR="$bundle_lib/hexchat/plugins"
+1 -16
View File
@@ -1,24 +1,9 @@
#!/bin/sh
if [ -z "$JHBUILD_PREFIX" ]; then
echo "You must run this within a jhbuild shell."
exit 1
fi
if [ ! -f $JHBUILD_PREFIX/bin/python ]; then
echo "You must install python with jhbuild."
exit 1
fi
rm -rf HexChat.app
rm -f *.app.zip
$JHBUILD_PREFIX/bin/python $HOME/.local/bin/gtk-mac-bundler hexchat.bundle
# These take up a lot of space in the bundle
echo "Cleaning up python files"
find ./HexChat.app/Contents/Resources/lib/python2.7 -name "*.pyc" -delete
find ./HexChat.app/Contents/Resources/lib/python2.7 -name "*.pyo" -delete
python $HOME/.local/bin/gtk-mac-bundler hexchat.bundle
echo "Compressing bundle"
#hdiutil create -format UDBZ -srcdir HexChat.app -quiet HexChat-2.9.6.1-$(git rev-parse --short master).dmg
+2 -2
View File
@@ -221,7 +221,7 @@ static int handle_setkey(char *word[], char *word_eol[], void *userdata) {
if (keystore_store_key(nick, key)) {
hexchat_printf(ph, "Stored key for %s\n", nick);
} else {
hexchat_printf(ph, "\00305Failed to store key in addon_fishlim.conf\n", nick, key);
hexchat_printf(ph, "\00305Failed to store key in addon_fishlim.conf\n");
}
return HEXCHAT_EAT_HEXCHAT;
@@ -245,7 +245,7 @@ static int handle_delkey(char *word[], char *word_eol[], void *userdata) {
if (keystore_delete_nick(nick)) {
hexchat_printf(ph, "Deleted key for %s\n", nick);
} else {
hexchat_printf(ph, "\00305Failed to delete key in addon_fishlim.conf!\n", nick);
hexchat_printf(ph, "\00305Failed to delete key in addon_fishlim.conf!\n");
}
return HEXCHAT_EAT_HEXCHAT;
+1 -1
View File
@@ -15,4 +15,4 @@ CLEANFILES = hexchat.pm.h irc.pm.h
hexchat.pm.h irc.pm.h: lib/HexChat.pm lib/Xchat.pm lib/HexChat/Embed.pm \
lib/HexChat/List/Network.pm lib/HexChat/List/Network/Entry.pm \
lib/HexChat/List/Network/AutoJoin.pm lib/IRC.pm
perl generate_header
cd $(srcdir); perl generate_header
+1 -4
View File
@@ -32,11 +32,8 @@
#endif
#undef PACKAGE
#ifdef WIN32
#include "../../config-win32.h" /* for #define OLD_PERL */
#else
#include "../../config.h"
#endif
#include "hexchat-plugin.h"
static hexchat_plugin *ph; /* plugin handle */
+30 -24
View File
@@ -52,20 +52,19 @@
*/
#include <glib.h>
#include <glib/gstdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#ifdef WIN32
#include <direct.h>
#include <glib/gstdio.h>
#include "../../src/dirent/dirent-win32.h"
#include "../../config-win32.h"
#else
#include <unistd.h>
#include <dirent.h>
#endif
#include "../../config.h"
#include "hexchat-plugin.h"
#undef _POSIX_C_SOURCE /* Avoid warning: also in /usr/include/features.h from glib.h */
#include <Python.h>
@@ -415,6 +414,9 @@ Util_BuildEOLList(char *word[])
PyObject *list;
int listsize = 31;
int i;
char *accum = NULL;
char *last = NULL;
/* Find the last valid array member; there may be intermediate NULLs that
* would otherwise cause us to drop some members. */
while (listsize > 0 &&
@@ -425,10 +427,9 @@ Util_BuildEOLList(char *word[])
PyErr_Print();
return NULL;
}
char *accum = NULL;
char *last = NULL;
for (i = listsize; i > 0; i--) {
char *part = word[i];
PyObject *uni_part;
if (accum == NULL) {
accum = g_strdup (part);
} else if (part != NULL && part[0] != 0) {
@@ -444,7 +445,7 @@ Util_BuildEOLList(char *word[])
return NULL;
}
}
PyObject *uni_part = PyUnicode_FromString(accum);
uni_part = PyUnicode_FromString(accum);
PyList_SetItem(list, i - 1, uni_part);
}
@@ -459,26 +460,31 @@ Util_BuildEOLList(char *word[])
static void
Util_Autoload_from (const char *dir_name)
{
#ifndef PATH_MAX
#define PATH_MAX 1024 /* Hurd doesn't define it */
#endif
char oldcwd[PATH_MAX];
struct dirent *ent;
DIR *dir;
if (getcwd(oldcwd, PATH_MAX) == NULL)
gchar *oldcwd;
const char *entry_name;
GDir *dir;
oldcwd = g_get_current_dir ();
if (oldcwd == NULL)
return;
if (chdir(dir_name) != 0)
if (g_chdir(dir_name) != 0)
{
g_free (oldcwd);
return;
dir = opendir(".");
if (dir == NULL)
return;
while ((ent = readdir(dir))) {
int len = strlen(ent->d_name);
if (len > 3 && strcmp(".py", ent->d_name+len-3) == 0)
Command_PyLoad(ent->d_name);
}
closedir(dir);
chdir(oldcwd);
dir = g_dir_open (".", 0, NULL);
if (dir == NULL)
{
g_free (oldcwd);
return;
}
while ((entry_name = g_dir_read_name (dir)))
{
if (g_str_has_suffix (entry_name, ".py"))
Command_PyLoad((char*)entry_name);
}
g_dir_close (dir);
g_chdir (oldcwd);
}
static void
@@ -486,7 +492,7 @@ Util_Autoload()
{
const char *xdir;
char *sub_dir;
/* we need local filesystem encoding for chdir, opendir etc */
/* we need local filesystem encoding for g_chdir, g_dir_open etc */
xdir = hexchat_get_info(ph, "configdir");
+2 -1
View File
@@ -53,8 +53,9 @@ void get_hwmon_chip_name(char *name)
void get_hwmon_temp(unsigned int *value, unsigned int *sensor)
{
char buffer[bsize];
FILE *fp;
snprintf(buffer, bsize, "/sys/class/hwmon/hwmon0/device/temp%i_input", *sensor);
FILE *fp = fopen(buffer, "r");
fp = fopen(buffer, "r");
if(fp != NULL) {
if(fgets(buffer, bsize, fp) != NULL)
*value = atoi(buffer);
+2 -2
View File
@@ -32,12 +32,12 @@ float percentage(unsigned long long *free, unsigned long long *total)
char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned long long *total_k)
{
char *result, **quantity;
char *quantities[] = { "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", 0 };
char *result, **quantity;
double free_space, total_space;
free_space = *free_k;
total_space = *total_k;
result = malloc(bsize * sizeof(char));
char *quantities[] = { "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", 0 };
if (total_space == 0)
{
snprintf(result, bsize, "%s: none", desc);
+1
View File
@@ -34,6 +34,7 @@
#include "match.h"
#include "hwmon.h"
#include "xsys.h"
#include "parse.h"
int xs_parse_cpu(char *model, char *vendor, double *freq, char *cache, unsigned int *count)
{
+2 -1
View File
@@ -115,9 +115,10 @@ void pci_find_fullname(char *fullname, char *vendor, char *device)
char devicename[bsize/2] = "";
char *position;
int cardfound = 0;
FILE *fp;
sysinfo_get_pciids (buffer);
FILE *fp = fopen (buffer, "r");
fp = fopen (buffer, "r");
if(fp == NULL) {
snprintf(fullname, bsize, "%s:%s", vendor, device);
+1 -1
View File
@@ -878,11 +878,11 @@ sysinfo_cb (char *word[], char *word_eol[], void *userdata)
int
hexchat_plugin_init (hexchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
{
char buffer[bsize];
ph = plugin_handle;
*plugin_name = name;
*plugin_desc = desc;
*plugin_version = version;
char buffer[bsize];
hexchat_hook_command (ph, "SYSINFO", HEXCHAT_PRI_NORM, sysinfo_cb, sysinfo_help, NULL);
hexchat_hook_command (ph, "NETDATA", HEXCHAT_PRI_NORM, netdata_cb, NULL, NULL);
+1
View File
@@ -10,6 +10,7 @@ src/common/inbound.c
src/common/notify.c
src/common/outbound.c
src/common/plugin.c
src/common/plugin-timer.c
src/common/server.c
src/common/servlist.c
src/common/textevents.h
+1 -1
View File
@@ -4,7 +4,7 @@
#
# Translators:
# Rostislav Raykov <zbrox@i-space.org>, 2005
# n0kS Phr33d0m <shibam@v-gz.cz.cc>, 2012
# Phr33d0m <shibam@v-gz.cz.cc>, 2012
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
+1 -1
View File
@@ -6,7 +6,7 @@
# Birger Langkjer <birger.langkjer@image.dk>, 1999
# bviktor, 2012
# Daniel Nylander <po@danielnylander.se>, 2007-2008,2010
# Dennis Skov Midjord <dennisskovhermannsen@gmail.com>, 2012-2013
# Incendia <dennisskovhermannsen@gmail.com>, 2012-2013
# Henrik Hansen <hh@mailserver.dk>, 1999
# Keld Simonsen, <keld2keldix.com>, 2011
# Morten Brix Pedersen <morten@wtf.dk>, 2001
+67 -67
View File
@@ -4,7 +4,7 @@
#
# Translators:
# SSL <albkert@gmail.com>, 2013
# Alf Gaida <agaida@siduction.org>, 2014
# agaida <agaida@siduction.org>, 2014
# Benedikt Roth <Benedikt.Roth@gmx.net>, 2000
# Christian Meyer <linux@chrisim.de>, 2000
# Aray <dataray@web.de>, 2014
@@ -13,11 +13,11 @@
# Jakob Kramer <jakob.kramer@gmx.de>, 2012-2013
# Karl Eichwalder <ke@gnu.franken.de>, 2003
# Klaas <klaasdemter@googlemail.com>, 2013
# RJ ., 2012
# Marcel Metz <mmetz@adrian-broher.net>, 2013
# subscious, 2012
# adrian_broher <mmetz@adrian-broher.net>, 2013
# Matthias Warkus <mawa@iname.com>, 1999
# RJ ., 2014
# Richard Schwab <mail@w.tf-w.tf>, 2013-2014
# subscious, 2014
# Nothing4You <mail@w.tf-w.tf>, 2013-2014
# Tamer Fahmy <e9526976@stud2.tuwien.ac.at>, 1999
# TheX <xerus@live.de>, 2013
msgid ""
@@ -25,7 +25,7 @@ msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-07-25 21:49+0000\n"
"PO-Revision-Date: 2014-06-02 04:31+0000\n"
"Last-Translator: Aray <dataray@web.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/hexchat/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -45,7 +45,7 @@ msgstr "HexChar ist ein einfach zu benutzender, aber erweiterbarer IRC-CLient. E
msgid ""
"HexChat supports features such as: DCC, SASL, proxies, spellcheck, alerts, "
"logging, custom themes, and Python/Perl scripts."
msgstr "Hexchat unterstützt Features wie: DCC, SASL, procies, Rechtschreibprüfung, Benachrichtigungen, Logging, Benutzerdesigns und Python/Perl-Scripte"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
@@ -57,11 +57,11 @@ msgstr "IRC-Client"
#: ../data/misc/hexchat.desktop.in.h:3
msgid "Chat with other people online"
msgstr "Chatte online mit anderen Leuten"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:4
msgid "IM;Chat;"
msgstr "IM;Chat;"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:5
msgid "Open Safe Mode"
@@ -299,7 +299,7 @@ msgstr "CTCP-Flut von %s, %s wird jetzt ignoriert\n"
#: ../src/common/ignore.c:410
#, c-format
msgid "You are being MSG flooded from %s, setting gui_autoopen_dialog OFF.\n"
msgstr "Du wirst gerade von %s ge\"MSGflooded\". Setze gui_autoopen_dialog auf AUS.\n"
msgstr ""
#: ../src/common/notify.c:558
#, c-format
@@ -365,7 +365,7 @@ msgstr "Unbekanntes Argument »%s« ignoriert."
#: ../src/common/outbound.c:3093 ../src/common/outbound.c:3123
msgid "Quiet is not supported by this server."
msgstr "Ruhigstellen wird von diesem Server nicht unterstützt."
msgstr ""
#. error
#: ../src/common/outbound.c:3585 ../src/common/outbound.c:3619
@@ -670,7 +670,7 @@ msgstr "QUERY [-nofocus] <Nick >, öffnet ein neues Dialogfenster [im Hintergrun
msgid ""
"QUIET <mask> [<quiettype>], quiet everyone matching the mask in the current "
"channel if supported by the server."
msgstr "QUIET <mask>[<quiettype>], stellt jeden im aktuellen Kanal ruhig, der auf diese Maske passt, wenn der Server Ruhigstellen unterstützt."
msgstr ""
#: ../src/common/outbound.c:4041
msgid "QUIT [<reason>], disconnects from the current server"
@@ -780,7 +780,7 @@ msgstr "UNLOAD <Name>, entfernt ein Plugin oder Skript"
msgid ""
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
" server."
msgstr "UNQUIET <mask> [<mask>...], hebt eine Maske auf, die für automatische Ruhigstellung benutzt wird, wenn der Server es unterstützt."
msgstr ""
#: ../src/common/outbound.c:4090
msgid "URL <url>, opens a URL in your browser"
@@ -874,27 +874,27 @@ msgstr "%C18*%O$t%C18$1%O zur Benachrichtigungsliste hinzugefügt."
#: ../src/common/textevents.h:9
msgid "%C22*%O$t%C22$1%O: %C18$2%O on %C24$4%O by %C26$3%O"
msgstr "%C22*%O$t%C22$1%O: %C18$2%O auf %C24$4%O von %C26$3%O"
msgstr ""
#: ../src/common/textevents.h:12
msgid "%C22*%O$tCannot join %C22$1 %O(%C20You are banned%O)."
msgstr "%C22*%O$t Kann nicht betreten: %C22$1 %O(%C20Du wurdest gebannt%O)."
msgstr ""
#: ../src/common/textevents.h:18
msgid "%C29*%O$tCapabilities acknowledged: %C29$2%O"
msgstr "%C29*%O$tRechte erteilt: %C29$2%O"
msgstr ""
#: ../src/common/textevents.h:21
msgid "%C23*%O$tCapabilities supported: %C29$2%O"
msgstr "%C23*%O$tRechte unterstützt: %C29$2%O"
msgstr ""
#: ../src/common/textevents.h:24
msgid "%C23*%O$tCapabilities requested: %C29$1%O"
msgstr "%C23*%O$tRechte erbeten: %C29$1%O"
msgstr ""
#: ../src/common/textevents.h:27
msgid "%C24*%O$t%C28$1%O is now known as %C18$2%O"
msgstr "%C24*%O$t%C28$1%O heißt jetzt %C18$2%O"
msgstr ""
#: ../src/common/textevents.h:36
msgid "%C22*%O$t%C26$1%O sets ban on %C18$2%O"
@@ -902,7 +902,7 @@ msgstr "%C22*%O$t%C26$1%O setzt einen Bann auf %C18$2%O"
#: ../src/common/textevents.h:39
msgid "%C22*%O$tChannel %C22$1%O created on %C24$2%O"
msgstr "%C22*%O$tKanal %C22$1%O wurde erstellt am %C24$2%O"
msgstr ""
#: ../src/common/textevents.h:42
msgid "%C22*%O$t%C26$1%O removes channel half-operator status from %C18$2%O"
@@ -918,15 +918,15 @@ msgstr "%C22*%O$t%C26$1%O entfernt Voice-Status bei%C26 $2"
#: ../src/common/textevents.h:51
msgid "%C22*%O$t%C26$1%C sets exempt on %C18$2%O"
msgstr "%C22*%O$t%C26$1%C setzt Ausnahme für %C18$2%O"
msgstr ""
#: ../src/common/textevents.h:54
msgid "%C22*%O$t%C26$1%O gives channel half-operator status to %C18$2%O"
msgstr "%C22*%O$t%C26$1%O erteilt %C18$2%O Halb-Operator-Status"
msgstr ""
#: ../src/common/textevents.h:57
msgid "%C22*%O$t%C26$1%C sets invite exempt on %C18$2%O"
msgstr "%C22*%O$t%C26$1%C setzt Invite-Ausnahme für %C18$2%O"
msgstr ""
#: ../src/common/textevents.h:60
msgid "%UChannel Users Topic"
@@ -1481,7 +1481,7 @@ msgstr "Server-Name"
#: ../src/common/text.c:1060
msgid "Acknowledged Capabilities"
msgstr "Verliehene Rechte"
msgstr ""
#: ../src/common/text.c:1065
msgid "Server Capabilities"
@@ -1489,7 +1489,7 @@ msgstr "Server-Fähigkeiten"
#: ../src/common/text.c:1069
msgid "Requested Capabilities"
msgstr "Angeforderte Rechte"
msgstr ""
#: ../src/common/text.c:1073 ../src/common/text.c:1135
msgid "Old nickname"
@@ -1637,11 +1637,11 @@ msgstr "Die Bannmaske"
#: ../src/common/text.c:1201
msgid "The nick of the person who did the quieting"
msgstr "Der Nick der Person, die ruhig stellte"
msgstr ""
#: ../src/common/text.c:1202 ../src/common/text.c:1234
msgid "The quiet mask"
msgstr "Die Ruhigstellungsmaske"
msgstr ""
#: ../src/common/text.c:1206
msgid "The nick who removed the key"
@@ -1681,7 +1681,7 @@ msgstr "Der Nick der Person, die den Bann entfernte"
#: ../src/common/text.c:1233
msgid "The nick of the person of did the unquiet'ing"
msgstr "Nick der Person, die die Ruhigstellung aufhob"
msgstr ""
#: ../src/common/text.c:1238
msgid "The nick of the person who did the exempt"
@@ -3110,11 +3110,11 @@ msgstr "Einlad."
#: ../src/fe-gtk/banlist.c:76
msgid "Quiets"
msgstr "Ruhigstellungen"
msgstr ""
#: ../src/fe-gtk/banlist.c:77
msgid "Quiet"
msgstr "Ruhigstellen"
msgstr ""
#. poor way to get which is selected but it works
#: ../src/fe-gtk/banlist.c:351 ../src/fe-gtk/banlist.c:385
@@ -3405,7 +3405,7 @@ msgstr "Plugins nicht automatisch laden"
#: ../src/fe-gtk/fe-gtk.c:83
msgid "Show plugin/script auto-load directory"
msgstr "Zeige automatisches Ladeverzeichnis für Plugins/Scripte"
msgstr ""
#: ../src/fe-gtk/fe-gtk.c:84
msgid "Show user config directory"
@@ -3475,7 +3475,7 @@ msgid ""
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
"other data)"
msgstr "Der \"Seite ändern\" Befehl wechselt zwischen den Seiten im Notizblock. Setze \"Data 1\" auf die Seite, zu der du wechseln möchtest. Wenn \"Data 2\" festgelegt wurde, wird der Wechsel relativ zur aktuellen Position erfolgen. Setze \"Data 1\", um automatisch zu der Seite mit den neuesten und wichtigsten Aktivitäten (Privatchats zuerst, dann Kanäle mit Highlight, Kanäle mit Dialog, Kanäle mit anderen Daten) zu wechseln."
msgstr ""
#: ../src/fe-gtk/fkeys.c:145
msgid ""
@@ -3487,7 +3487,7 @@ msgstr "Die Insert in Buffer Aktion fügt den Inhalt von »Data 1« in die Zei
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."
msgstr "Der Bildlauf-Befehl verschiebt das Text-Widget um eine Seite oder eine Zeile aufwärts oder abwärts. Setze \"Data 1\" Anfang, Ende oder Auf, Ab um +1 oder -1."
msgstr ""
#: ../src/fe-gtk/fkeys.c:149
msgid ""
@@ -3552,7 +3552,7 @@ msgstr "Fehler beim Laden der Tastaturkürzel-Konfiguration"
#: ../src/fe-gtk/fkeys.c:540
msgid "Select a row to get help information on its Action."
msgstr "Markiere eine Zeile, für Hilfestellung über die jeweilige Aktion."
msgstr ""
#: ../src/fe-gtk/fkeys.c:809
msgid ": Keyboard Shortcuts"
@@ -3859,7 +3859,7 @@ msgstr "Suche beendet, kein Treffer."
#: ../src/fe-gtk/maingui.c:2944
msgid "Highlight _all"
msgstr "Highlight _alle"
msgstr ""
#: ../src/fe-gtk/maingui.c:2950
msgid "Highlight all occurrences, and underline the current occurrence."
@@ -3867,7 +3867,7 @@ msgstr "Hebe alle Vorkommnisse hervor und unterstreiche das aktuelle Vorkommnis.
#: ../src/fe-gtk/maingui.c:2952
msgid "Mat_ch case"
msgstr "Groß-/Kleins_chreibung angleichen"
msgstr ""
#: ../src/fe-gtk/maingui.c:2957
msgid "Perform a case-sensitive search."
@@ -3875,7 +3875,7 @@ msgstr "Eine Case-Sensitive Suche ausführen"
#: ../src/fe-gtk/maingui.c:2959
msgid "_Regex"
msgstr "_Regulärer Ausdruck"
msgstr ""
#: ../src/fe-gtk/maingui.c:2964
msgid "Regard search string as a regular expression."
@@ -3973,7 +3973,7 @@ msgstr "Automatisches Betreten"
#: ../src/fe-gtk/menu.c:1113 ../src/fe-gtk/menu.c:1117
msgid "_Auto-Connect"
msgstr "_Automatisches Verbinden"
msgstr ""
#: ../src/fe-gtk/menu.c:1137
msgid ": User menu"
@@ -3998,7 +3998,7 @@ msgstr "Markierungslinie manuell zurücksetzen"
#: ../src/fe-gtk/menu.c:1304
msgid "Marker line reset because exceeded scrollback limit."
msgstr "Markierungslinie wurde zurückgesetzt, weil die begrenzung des Scrollbalkens überschritten wurde."
msgstr ""
#: ../src/fe-gtk/menu.c:1306
msgid "Marker line reset by CLEAR command."
@@ -4014,7 +4014,7 @@ msgstr "Empfange Channelliste …"
#: ../src/fe-gtk/menu.c:1461
msgid " has been build without plugin support."
msgstr "wurde ohne Plugin-Support erstellt"
msgstr ""
#: ../src/fe-gtk/menu.c:1469
msgid ""
@@ -4215,7 +4215,7 @@ msgstr "Grafisch"
#: ../src/fe-gtk/menu.c:1785
msgid "_Fullscreen"
msgstr "_Vollbild"
msgstr ""
#: ../src/fe-gtk/menu.c:1787
msgid "_Server"
@@ -4231,15 +4231,15 @@ msgstr "_Wiederverbinden"
#: ../src/fe-gtk/menu.c:1790
msgid "_Join a Channel..."
msgstr "_Betrete einen Kanal"
msgstr ""
#: ../src/fe-gtk/menu.c:1791
msgid "_List of Channels..."
msgstr "_Liste aller Kanäle"
msgstr ""
#: ../src/fe-gtk/menu.c:1794
msgid "Marked _Away"
msgstr "Als _Abwesend markiert"
msgstr ""
#: ../src/fe-gtk/menu.c:1796
msgid "_Usermenu"
@@ -4297,7 +4297,7 @@ msgstr "_Fenster"
#: ../src/fe-gtk/menu.c:1812
msgid "_Ban List..."
msgstr "_Bannliste"
msgstr ""
#: ../src/fe-gtk/menu.c:1813
msgid "Character Chart..."
@@ -4309,7 +4309,7 @@ msgstr "Direktchat …"
#: ../src/fe-gtk/menu.c:1815
msgid "File _Transfers..."
msgstr "Dateiüber_tragung"
msgstr ""
#: ../src/fe-gtk/menu.c:1816
msgid "Friends List..."
@@ -4321,11 +4321,11 @@ msgstr "Ignorierliste …"
#: ../src/fe-gtk/menu.c:1818
msgid "_Plugins and Scripts..."
msgstr "_Plugins und Scripte"
msgstr ""
#: ../src/fe-gtk/menu.c:1819
msgid "_Raw Log..."
msgstr "_Roher Log"
msgstr ""
#. 61
#: ../src/fe-gtk/menu.c:1820
@@ -4564,11 +4564,11 @@ msgstr "_Laden …"
#: ../src/fe-gtk/plugingui.c:270
msgid "_Unload"
msgstr "_Entladen"
msgstr ""
#: ../src/fe-gtk/plugingui.c:273
msgid "_Reload"
msgstr "_Neu laden"
msgstr ""
#: ../src/fe-gtk/rawlog.c:80 ../src/fe-gtk/rawlog.c:136
#: ../src/fe-gtk/textgui.c:479 ../src/fe-gtk/urlgrab.c:216
@@ -4694,7 +4694,7 @@ msgstr "Passwort:"
#: ../src/fe-gtk/servlistgui.c:1885
msgid "Password used for login. If in doubt, leave blank."
msgstr "Passwort zum Einloggen. Im Zweifel leer lassen."
msgstr ""
#: ../src/fe-gtk/servlistgui.c:1890
msgid "Character set:"
@@ -5106,11 +5106,11 @@ msgstr "Nickvervollständigung sortiert nach:"
#: ../src/fe-gtk/setup.c:205
msgid "Nick completion amount:"
msgstr "Anzahl Nickvervollständigung"
msgstr ""
#: ../src/fe-gtk/setup.c:205
msgid "Threshold of nicks to start listing instead of completing"
msgstr "Schwellwert zum Auflisten von Nicks anstatt Vervollständigung"
msgstr ""
#: ../src/fe-gtk/setup.c:205
msgid "nicks."
@@ -5303,7 +5303,7 @@ msgstr "Neue Reiter im Vordergrund:"
#: ../src/fe-gtk/setup.c:319
msgid "Placement of notices:"
msgstr "Plaziern von Notizen:"
msgstr ""
#: ../src/fe-gtk/setup.c:320
msgid "Show channel switcher at:"
@@ -5436,7 +5436,7 @@ msgstr "Symbol im Benachrichtigungsbereich blinken lassen bei:"
#: ../src/fe-gtk/setup.c:404
msgid "Bounce dock icon on:"
msgstr "Dock-Icon springen lassen bei:"
msgstr ""
#: ../src/fe-gtk/setup.c:407 ../src/fe-gtk/setup.c:453
msgid "Blink task bar on:"
@@ -5451,17 +5451,17 @@ msgstr "Piepsen bei:"
msgid ""
"Play the \"Instant Message Notification\" system sound upon the selected "
"events"
msgstr "Den \"Sofortnachrichten-Benachrichtigungs\"-Systemton bei folgenden Ereignissen abspielen:"
msgstr ""
#: ../src/fe-gtk/setup.c:414
msgid ""
"Play \"message-new-instant\" from the freedesktop.org sound theme upon the "
"selected events"
msgstr "Den \"message-new-instant\"-Ton aus dem freedesktop.org Soundthema bei ausgewählten Ereignissen abspielen"
msgstr ""
#: ../src/fe-gtk/setup.c:416
msgid "Play a GTK beep upon the selected events"
msgstr "einen GTK Piepton bei den ausgewählten Ereignissen abspielen"
msgstr ""
#: ../src/fe-gtk/setup.c:420 ../src/fe-gtk/setup.c:456
msgid "Omit alerts when marked as being away"
@@ -5489,7 +5489,7 @@ msgstr "Ins Infofeld schließen"
#: ../src/fe-gtk/setup.c:431
msgid "Automatically mark away/back"
msgstr "Automatisch als abwesend/zurück markieren"
msgstr ""
#: ../src/fe-gtk/setup.c:431
msgid "Automatically change status when hiding to tray."
@@ -5497,7 +5497,7 @@ msgstr "Status automatisch wechseln, wenn das Programm in den Tray geschlossen w
#: ../src/fe-gtk/setup.c:433
msgid "Only show tray balloons when hidden or iconified"
msgstr "Balloon-Tipps nur anzeigen, wenn minimiert oder im Tray"
msgstr ""
#: ../src/fe-gtk/setup.c:436 ../src/fe-gtk/setup.c:459
msgid "Highlighted Messages"
@@ -5668,7 +5668,7 @@ msgstr "Benutze Serverzeit, wenn unterstützt"
msgid ""
"Display timestamps obtained from server if it supports the time-server "
"extension."
msgstr "Zeitstempel vom Server holen, wenn die \"Time-Server\"-Erweiterung unterstützt wird."
msgstr ""
#: ../src/fe-gtk/setup.c:521
msgid "Automatically reconnect to servers on disconnect"
@@ -5684,13 +5684,13 @@ msgstr "Verzögerung beim automatischen Betreten:"
#: ../src/fe-gtk/setup.c:524
msgid "Ban Type:"
msgstr "Bannart:"
msgstr ""
#: ../src/fe-gtk/setup.c:524
msgid ""
"Attempt to use this banmask when banning or quieting. (requires "
"irc_who_join)"
msgstr "Versuchen, diese Bannmaske zu benutzen, wenn gebannt oder ruhiggestellt wird. (benötigt irc_who_join)"
msgstr ""
#: ../src/fe-gtk/setup.c:531 ../src/fe-gtk/setup.c:1817
msgid "Logging"
@@ -5795,7 +5795,7 @@ msgstr "Nur für Computer mit mehreren Adressen."
#: ../src/fe-gtk/setup.c:585
msgid "File Transfers"
msgstr "Dateiübertragungen"
msgstr ""
#: ../src/fe-gtk/setup.c:586
msgid "Get my address from the IRC server"
@@ -5997,7 +5997,7 @@ msgstr "Chatten"
#: ../src/fe-gtk/setup.c:1816
msgid "Sounds"
msgstr "Töne"
msgstr ""
#: ../src/fe-gtk/setup.c:1818
msgid "Advanced"
@@ -6062,12 +6062,12 @@ msgstr "Ignoriere Alles"
#: ../src/fe-gtk/sexy-spell-entry.c:711
msgid "Spelling Suggestions"
msgstr "Rechtschreib-Vorschläge"
msgstr ""
#: ../src/fe-gtk/sexy-spell-entry.c:1272
#, c-format
msgid "enchant error for language: %s"
msgstr "Fehler in der enchant-Bibliothek in Sprache: %s"
msgstr ""
#: ../src/fe-gtk/textgui.c:171
msgid "There was an error parsing the string"
+1 -1
View File
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Filippos Soulakis <txapollo243@gmail.com>, 2013
# txapollo243 <txapollo243@gmail.com>, 2013
# Stathis Kamperis <ekamperi@auth.gr>, 2006
# Γιάννης Ανθυμίδης <yannanth@gmail.com>, 2013
msgid ""
+11 -11
View File
@@ -3,19 +3,19 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Alfred Daw <sacarasc@gmail.com>, 2013
# sacarasc <sacarasc@gmail.com>, 2013
# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2014
# Gareth Owen <gowen72@yahoo.com>, 2004
# Ivan Srbulov <Srbulov.Ivan@gmail.com>, 2013
# Richard Hitt <rbh00@netcom.com>, 2013
# Alfred Daw <sacarasc@gmail.com>, 2012
# tea <Srbulov.Ivan@gmail.com>, 2013
# rbh00 <rbh00@netcom.com>, 2013
# sacarasc <sacarasc@gmail.com>, 2012
# TheEndermen <theendermenofdoom@gmail.com>, 2012
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-07-09 19:40+0000\n"
"PO-Revision-Date: 2014-05-21 20:52+0000\n"
"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/hexchat/language/en_GB/)\n"
"MIME-Version: 1.0\n"
@@ -126,7 +126,7 @@ msgstr "No active DCCs\n"
#: ../src/common/hexchat.c:867
msgid "_Open Dialog Window"
msgstr "_Open Dialogue Window"
msgstr "_Open Dialog Window"
#: ../src/common/hexchat.c:868
msgid "_Send a File"
@@ -3670,7 +3670,7 @@ msgstr "_Always show this dialog after connecting."
#: ../src/fe-gtk/maingui.c:397
msgid "Dialog with"
msgstr "Dialogue with"
msgstr "Dialog with"
#: ../src/fe-gtk/maingui.c:695
#, c-format
@@ -3686,7 +3686,7 @@ msgstr "No topic is set"
msgid ""
"This server still has %d channels or dialogs associated with it. Close them "
"all?"
msgstr "This server still has %d channels or dialogues associated with it. Close them all?"
msgstr "This server still has %d channels or dialogs associated with it. Close them all?"
#: ../src/fe-gtk/maingui.c:1203
msgid "Quit HexChat?"
@@ -4056,7 +4056,7 @@ msgid ""
"%s = selected nick\n"
"%t = time/date\n"
"%u = selected users account"
msgstr "Dialogue Buttons - Special codes:\n\n%a = all selected nicks\n%c = current channel\n%e = current network name\n%h = selected nick's hostname\n%m = machine info\n%n = your nick\n%s = selected nick\n%t = time/date\n%u = selected users account"
msgstr "Dialog Buttons - Special codes:\n\n%a = all selected nicks\n%c = current channel\n%e = current network name\n%h = selected nick's hostname\n%m = machine info\n%n = your nick\n%s = selected nick\n%t = time/date\n%u = selected users account"
#: ../src/fe-gtk/menu.c:1507
msgid ""
@@ -4112,7 +4112,7 @@ msgstr ": Userlist buttons"
#: ../src/fe-gtk/menu.c:1574
msgid ": Dialog buttons"
msgstr ": Dialogue buttons"
msgstr ": Dialog buttons"
#: ../src/fe-gtk/menu.c:1581
msgid ": CTCP Replies"
@@ -4428,7 +4428,7 @@ msgstr ": Friends List"
#: ../src/fe-gtk/notifygui.c:429
msgid "Open Dialog"
msgstr "Open Dialogue"
msgstr "Open Dialog"
#: ../src/fe-gtk/plugin-tray.c:264
#, c-format
+5 -7
View File
@@ -4,18 +4,16 @@
#
# Translators:
# bviktor, 2012
# bviktor, 2012
# Víctor <vegadark89@gmail.com>, 2013-2014
# Víctor <vegadark89@gmail.com>, 2012-2013
# Víctor <vegadark89@gmail.com>, 2014
# Víctor <vegadark89@gmail.com>, 2014
# Víctor منتصر <vegadark89@gmail.com>, 2013-2014
# Víctor منتصر <vegadark89@gmail.com>, 2012-2013
# Víctor منتصر <vegadark89@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-09-25 00:30+0000\n"
"Last-Translator: Gato Loko\n"
"PO-Revision-Date: 2014-05-14 17:34+0000\n"
"Last-Translator: Víctor منتصر <vegadark89@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/hexchat/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+23 -24
View File
@@ -5,14 +5,13 @@
# Translators:
# Ekke Vasli <ekke@chamber.ee>, 2001
# Ilmar Kerm <ikerm@hot.ee>, 2002
# jasva, 2014
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-09-28 09:26+0000\n"
"Last-Translator: jasva\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Estonian (http://www.transifex.com/projects/p/hexchat/language/et/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,25 +24,25 @@ msgid ""
"HexChat is an easy to use yet extensible IRC Client. It allows you to "
"securely join multiple networks and talk to users privately or in channels "
"using a customizable interface. You can even transfer files."
msgstr "HexChat on lihtne ja paljude võimalustega IRC klient. See võimaldab turvaliselt ühenduda mitme võrguda samaaegselt ja suhelda inimestega privaatselt või liituda vestluskanalitega, kasutades selleks kohandatavat rakendust. Samuti on võimalus failivahetuseks."
msgstr ""
#: ../data/misc/hexchat.appdata.xml.in.h:2
msgid ""
"HexChat supports features such as: DCC, SASL, proxies, spellcheck, alerts, "
"logging, custom themes, and Python/Perl scripts."
msgstr "HexChat toetab kasutamiseks: DCC, SASL, hoiatusi, logide koguminst, kohandatud teemasid ja Python/Perl skripte."
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
msgstr "HexChat"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:2
msgid "IRC Client"
msgstr "IRC klient"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:3
msgid "Chat with other people online"
msgstr "Vestle teiste kasutajatega internetis"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:4
msgid "IM;Chat;"
@@ -51,11 +50,11 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:5
msgid "Open Safe Mode"
msgstr "Ava turvarežiim"
msgstr ""
#: ../data/misc/htm.desktop.in.h:1
msgid "HexChat Theme Manager"
msgstr "HexChat teemahaldur"
msgstr ""
#. 0 means unlimited
#. STRINGS
@@ -122,27 +121,27 @@ msgstr "Ei ole ühtegi aktiivset DCCd\n"
#: ../src/common/hexchat.c:867
msgid "_Open Dialog Window"
msgstr "_Ava dialoogiaken"
msgstr ""
#: ../src/common/hexchat.c:868
msgid "_Send a File"
msgstr "_Saada fail"
msgstr ""
#: ../src/common/hexchat.c:869
msgid "_User Info (WhoIs)"
msgstr "_Kasutaja info (Whois)"
msgstr ""
#: ../src/common/hexchat.c:870
msgid "_Add to Friends List"
msgstr "_Lisa sõprade nimekirja"
msgstr ""
#: ../src/common/hexchat.c:871
msgid "_Ignore"
msgstr "_Ignoreeri"
msgstr ""
#: ../src/common/hexchat.c:872
msgid "O_perator Actions"
msgstr "O_peraatori toimingud"
msgstr ""
#: ../src/common/hexchat.c:874
msgid "Give Ops"
@@ -223,7 +222,7 @@ msgstr "Põhjus %s väljaviskamiseks:"
#: ../src/common/hexchat.c:920
msgid "Sendfile"
msgstr "Saada fail"
msgstr ""
#: ../src/common/hexchat.c:921
msgid "Dialog"
@@ -255,7 +254,7 @@ msgstr "Ping"
#, c-format
msgid ""
"You do not have write access to %s. Nothing from this session can be saved."
msgstr "Sul puuduvad kirjutamisõigused asukohta %s. Sellest sessioonist ei salvestata midagi."
msgstr ""
#: ../src/common/hexchat.c:1139
msgid ""
@@ -285,7 +284,7 @@ msgstr "%s ujutab sind CTCP päringutega üle, ignoreerin kasutajat %s\n"
#: ../src/common/ignore.c:410
#, c-format
msgid "You are being MSG flooded from %s, setting gui_autoopen_dialog OFF.\n"
msgstr "%s uputab sind üle massiliste sõnumitega, mistõttu lülitame gui_autoopen_dialog VÄLJA.\n"
msgstr ""
#: ../src/common/notify.c:558
#, c-format
@@ -308,12 +307,12 @@ msgstr "Pole ühendatud. Proovi /server <host> [<port>]\n"
#: ../src/common/outbound.c:280
#, c-format
msgid "Server %s already exists on network %s.\n"
msgstr "Server %s eksisteerib juba võrguloendis %s.\n"
msgstr ""
#: ../src/common/outbound.c:286
#, c-format
msgid "Added server %s to network %s.\n"
msgstr "Server %s on võrkuda nimekirja %s lisatud.\n"
msgstr ""
#: ../src/common/outbound.c:371
#, c-format
@@ -351,7 +350,7 @@ msgstr "Tundmatut parameetrit '%s' ignoreeriti."
#: ../src/common/outbound.c:3093 ../src/common/outbound.c:3123
msgid "Quiet is not supported by this server."
msgstr "Vaigistamine pole antud serveris toetatud."
msgstr ""
#. error
#: ../src/common/outbound.c:3585 ../src/common/outbound.c:3619
@@ -370,7 +369,7 @@ msgstr "ADDBUTTON <nimi> <tegevus>, lisab kasutajate nimekirja alla uue nupu"
msgid ""
"ADDSERVER <NewNetwork> <newserver/6667>, adds a new network with a new "
"server to the network list"
msgstr "ADDSERVER <UusVõrk> <uusserver/6667> lisab uue võrgu koos uue serveriga võrguloendisse."
msgstr ""
#: ../src/common/outbound.c:3904
msgid "ALLCHAN <cmd>, sends a command to all channels you're in"
@@ -378,7 +377,7 @@ msgstr "ALLCHAN <käsk>, saadab käsu kõikidele kanalitele, kus oled"
#: ../src/common/outbound.c:3906
msgid "ALLCHANL <cmd>, sends a command to all channels on the current server"
msgstr "ALLCHANL <käsk>, saadab käsu kõikidesse kanalitesse antud serveris"
msgstr ""
#: ../src/common/outbound.c:3908
msgid "ALLSERV <cmd>, sends a command to all servers you're in"
+13 -14
View File
@@ -4,15 +4,14 @@
#
# Translators:
# Mikel Olasagasti <hey_neken@euskal.org>, 2004
# Mikel Olasagasti Uranga <mikel@olasagasti.info>, 2012
# Mikel Olasagasti Uranga <mikel@olasagasti.info>, 2014
# Hey_neken <mikel@olasagasti.info>, 2012
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-10-13 08:06+0000\n"
"Last-Translator: Mikel Olasagasti Uranga <mikel@olasagasti.info>\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/hexchat/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -35,11 +34,11 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
msgstr "HexChat"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:2
msgid "IRC Client"
msgstr "IRC bezeroa"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:3
msgid "Chat with other people online"
@@ -47,7 +46,7 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:4
msgid "IM;Chat;"
msgstr "IM;Chat;Txat;"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:5
msgid "Open Safe Mode"
@@ -122,7 +121,7 @@ msgstr "Ez dago DCC aktiborik\n"
#: ../src/common/hexchat.c:867
msgid "_Open Dialog Window"
msgstr "Ir_eki elkarrizketa leihoa"
msgstr ""
#: ../src/common/hexchat.c:868
msgid "_Send a File"
@@ -1139,7 +1138,7 @@ msgstr ""
#: ../src/common/textevents.h:234
#, c-format
msgid "%C16,17 "
msgstr "%C16,17 "
msgstr ""
#: ../src/common/textevents.h:237
#, c-format
@@ -5234,7 +5233,7 @@ msgstr "Eskaria egiten den fitxetan soilik"
#: ../src/fe-gtk/setup.c:293
msgid "Automatic"
msgstr "Automatikoa"
msgstr ""
#: ../src/fe-gtk/setup.c:294
msgid "In an extra tab"
@@ -5325,7 +5324,7 @@ msgstr "Ireki DCC, ezikusi, notifikazio etab. fitxetan ala leihoetan?"
#: ../src/fe-gtk/setup.c:333
msgid "Messages"
msgstr "Mezuak"
msgstr ""
#: ../src/fe-gtk/setup.c:334
msgid "Scrollback"
@@ -5983,7 +5982,7 @@ msgstr "Elkarrizketan"
#: ../src/fe-gtk/setup.c:1816
msgid "Sounds"
msgstr "Soinuak"
msgstr ""
#: ../src/fe-gtk/setup.c:1818
msgid "Advanced"
@@ -6033,7 +6032,7 @@ msgstr ""
#: ../src/fe-gtk/sexy-spell-entry.c:559
msgid "More..."
msgstr "Gehiago..."
msgstr ""
#. + Add to Dictionary
#: ../src/fe-gtk/sexy-spell-entry.c:631
@@ -6086,7 +6085,7 @@ msgstr "Egiaztatu denak"
#: ../src/fe-gtk/textgui.c:485
msgid "OK"
msgstr "Ados"
msgstr ""
#: ../src/fe-gtk/urlgrab.c:198
msgid ": URL Grabber"
+234 -236
View File
File diff suppressed because it is too large Load Diff
+106 -108
View File
@@ -8,16 +8,14 @@
# Calinou, 2014
# Misdre <misdre@hexchat.misdre.info>, 2013
# Misdre <misdre@hexchat.misdre.info>, 2013
# Towinet, 2014
# Calinou, 2013
# Yannick Le Guen <leguen.yannick@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-11-06 16:06+0000\n"
"Last-Translator: Yannick Le Guen <leguen.yannick@gmail.com>\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: French (http://www.transifex.com/projects/p/hexchat/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,13 +28,13 @@ msgid ""
"HexChat is an easy to use yet extensible IRC Client. It allows you to "
"securely join multiple networks and talk to users privately or in channels "
"using a customizable interface. You can even transfer files."
msgstr "HexChat est un client IRC facile à utiliser et extensible. Il vous permet de rejoindre en toute sécurité plusieurs réseaux et de parler à d'autres utilisateurs en privé ou dans des canaux grâce à une interface personnalisable. Vous pouvez même transférer des fichiers."
msgstr "HexChat est un client IRC facile à utiliser et extensible. Il vous permet de rejoindre en toute sécurité plusieurs réseaux et parler à d'autres utilisateurs en privé ou dans des canaux grâce à une interface personnalisable. Vous pouvez même transférer des fichiers."
#: ../data/misc/hexchat.appdata.xml.in.h:2
msgid ""
"HexChat supports features such as: DCC, SASL, proxies, spellcheck, alerts, "
"logging, custom themes, and Python/Perl scripts."
msgstr "HexChat prend en charge des fonctionnalités telles que : DCC, SASL, serveurs mandataires, vérification orthographique, alertes, journalisation, thèmes personnalisés et scripts Python et Perl."
msgstr "HexChat prend en charge des fonctionnalités telles que : DCC, SASL, serveur mandataire, vérification orthographie, alertes, journalisation, thèmes personnalisés et scripts Python et Perl."
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
@@ -557,13 +555,13 @@ msgstr "JOIN <canal>, rejoindre le canal"
#: ../src/common/outbound.c:3989
msgid ""
"KICK <nick> [reason], kicks the nick from the current channel (needs chanop)"
msgstr "KICK <pseudo> [raison], expulse le pseudo du canal actuel (nécessite d'être opérateur [chanop])"
msgstr "KICK <pseudo> [raison], expulse le pseudo du canal actuel (opérateur requis)"
#: ../src/common/outbound.c:3991
msgid ""
"KICKBAN <nick> [reason], bans then kicks the nick from the current channel "
"(needs chanop)"
msgstr "KICKBAN <pseudo> [raison], bannit puis expulse le pseudo du canal actuel (nécessite d'être opérateur [chanop])"
msgstr "KICKBAN <pseudo> [raison], bannit puis expulse le pseudo du canal actuel (opérateur requis)"
#: ../src/common/outbound.c:3994
msgid "LAGCHECK, forces a new lag check"
@@ -693,7 +691,7 @@ msgstr "RECV <texte>, envoie des données brutes à HexChat, comme si elles éta
#: ../src/common/outbound.c:4052
msgid "RELOAD <name>, reloads a plugin or script"
msgstr "RELOAD <nom>, recharge un greffon ou script"
msgstr "RELOAD <nom>, recharge un plugin ou script"
#: ../src/common/outbound.c:4054
msgid "SAY <text>, sends the text to the object in the current window"
@@ -753,7 +751,7 @@ msgid ""
"TRAY -i <number> Blink tray with an internal icon.\n"
"TRAY -t <text> Set the tray tooltip.\n"
"TRAY -b <title> <text> Set the tray balloon."
msgstr "\nTRAY -f <délai> <fichier1> [<fichier2>] Définit les fichiers à utiliser pour faire clignoter l'icône de barre d'état.\nTRAY -f <fichier> Définit le fichier à utiliser pour l'icône de barre d'état.\nTRAY -i <numéro> Définit une icône interne pour le clignotement de la barre d'état.\nTRAY -t <texte> Définit le message d'aide de l'icône de barre d'état.\nTRAY -b <titre> <texte> Définit le message flottant de l'icône de barre d'état."
msgstr "\nTRAY -f <délai> <fichier1> [<fichier2>] Spécifie les fichiers à utiliser pour faire clignoter l'icone de barre d'état.\nTRAY -f <fichier> Spécifie le fichier à utiliser pour l'icone de barre d'état.\nTRAY -i <numéro> Spécifie un icone interne pour le clignotement de la barre d'état.\nTRAY -t <texte> Spécifie le message d'aide de l'icone de barre d'état.\nTRAY -b <titre> <texte> Spécifie le message flottant de l'icone de barre d'état."
#: ../src/common/outbound.c:4085
msgid "UNBAN <mask> [<mask>...], unbans the specified masks."
@@ -897,11 +895,11 @@ msgstr "%C22*%O$tCanal %C22$1%O créé le %C24$2%O"
#: ../src/common/textevents.h:42
msgid "%C22*%O$t%C26$1%O removes channel half-operator status from %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a enlevé l'état de semi-opérateur de canal à %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a enlevé le statut de semi-opérateur de canal à %C18$2%O"
#: ../src/common/textevents.h:45
msgid "%C22*%O$t%C26$1%O removes channel operator status from %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a enlevé l'état d'opérateur de canal à %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a enlevé le statut d'opérateur de canal à %C18$2%O"
#: ../src/common/textevents.h:48
msgid "%C22*%O$t%C26$1%O removes voice from %C18$2%O"
@@ -913,7 +911,7 @@ msgstr "%C22*%O$t%C26$1%C a mis une exception sur %C18$2%O"
#: ../src/common/textevents.h:54
msgid "%C22*%O$t%C26$1%O gives channel half-operator status to %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a donné l'état de semi-opérateur de canal à %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a donné le statut de semi-opérateur de canal à %C18$2%O"
#: ../src/common/textevents.h:57
msgid "%C22*%O$t%C26$1%C sets invite exempt on %C18$2%O"
@@ -933,7 +931,7 @@ msgstr "%C22*%O$tCanal %C22$1%O mode : %C24$2"
#: ../src/common/textevents.h:78
msgid "%C22*%O$t%C26$1%O gives channel operator status to %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a donné l'état d'opérateur de canal à %C18$2%O"
msgstr "%C22*%O$t%C26$1%O a donné le statut d'opérateur de canal à %C18$2%O"
#: ../src/common/textevents.h:81
msgid "%C22*%O$t%C26$1%O sets quiet on %C18$2%O"
@@ -981,7 +979,7 @@ msgstr "%C22*%O$t%C26$1%O a donné la parole à %C18$2%O"
#: ../src/common/textevents.h:114
msgid "%C23*%O$tConnected. Now logging in."
msgstr "%C23*%O$tConnecté. Maintenant entrons..."
msgstr "%C23*%O$tConnecté. maintenant entrons..."
#: ../src/common/textevents.h:117
msgid "%C23*%O$tConnecting to %C29$1%C (%C23$2:$3%O)"
@@ -989,7 +987,7 @@ msgstr "%C23*%O$tConnexion à %C29$1%C (%C23$2 :$3%O)"
#: ../src/common/textevents.h:120
msgid "%C20*%O$tConnection failed (%C20$1%O)"
msgstr "%C20*%O$tLa connexion a échoué (%C20$1%O)"
msgstr "%C20*%O$tLa connexion a échouée (%C20$1%O)"
#: ../src/common/textevents.h:123
msgid "%C24*%O$tReceived a CTCP %C24$1%C from %C18$2%O"
@@ -1085,7 +1083,7 @@ msgstr "%C20*%O$tDCC RECV : Impossible d'ouvrir '%C23$1%C' en écriture (%C20$2%
msgid ""
"%C23*%O$tThe file '%C24$1%C' already exists, saving it as '%C23$2%O' "
"instead."
msgstr "%C23*%O$tLe fichier '%C24$1%C' existe déjà, il sera enregistré sous « %C23$2%O » à la place."
msgstr "%C23*%O$tLe fichier '%C24$1%C' existe déjà, il sera sauvé sous '%C23$2%O' à la place."
#: ../src/common/textevents.h:192
msgid "%C24*%O$t%C18$1%C has requested to resume '%C23$2%C' from %C24$3%O."
@@ -1418,7 +1416,7 @@ msgstr "Hôte de la personne"
#: ../src/common/text.c:1035
msgid "The account of the person"
msgstr "Le compte de la personne"
msgstr ""
#: ../src/common/text.c:1039 ../src/common/text.c:1046
#: ../src/common/text.c:1053 ../src/common/text.c:1265
@@ -1943,7 +1941,7 @@ msgstr "Connexion réinitialisée à l'autre extrémité"
#: ../src/common/util.c:985
msgid "Ascension Island"
msgstr "Ascension, île"
msgstr "Île Ascension"
#: ../src/common/util.c:986
msgid "Andorra"
@@ -2371,7 +2369,7 @@ msgstr "Hong-kong"
#: ../src/common/util.c:1092
msgid "Heard and McDonald Islands"
msgstr "Heard, île et McDonald, îles"
msgstr "Heard, île et mcdonald, îles"
#: ../src/common/util.c:1093
msgid "Honduras"
@@ -3162,7 +3160,7 @@ msgstr "L'ouverture de la liste de bannissements a échoué."
#: ../src/fe-gtk/banlist.c:813
#, c-format
msgid ": Ban List (%s)"
msgstr ": Liste de bannissement (%s)"
msgstr "XChat : liste de bannissement (%s)"
#: ../src/fe-gtk/banlist.c:848 ../src/fe-gtk/notifygui.c:425
msgid "Remove"
@@ -3201,7 +3199,7 @@ msgstr "Copie le suje_t du canal"
#: ../src/fe-gtk/chanlist.c:720
#, c-format
msgid ": Channel List (%s)"
msgstr ": liste des canaux (%s)"
msgstr "XChat : liste des canaux (%s)"
#: ../src/fe-gtk/chanlist.c:794
msgid "_Search"
@@ -3213,7 +3211,7 @@ msgstr "_Télécharger"
#: ../src/fe-gtk/chanlist.c:806
msgid "Save _List..."
msgstr "Enregistrer la _Liste..."
msgstr "Sauver la _Liste"
#. =============================================================
#: ../src/fe-gtk/chanlist.c:819
@@ -3293,7 +3291,7 @@ msgstr "Impossible de reprendre le même fichier en provenance de deux personnes
#: ../src/fe-gtk/dccgui.c:798
msgid ": Uploads and Downloads"
msgstr ": envois et réceptions"
msgstr "XChat: Envois et réceptions"
#: ../src/fe-gtk/dccgui.c:815 ../src/fe-gtk/dccgui.c:1056
#: ../src/fe-gtk/notifygui.c:124
@@ -3319,7 +3317,7 @@ msgstr "Envois"
#: ../src/fe-gtk/dccgui.c:858
msgid "Downloads"
msgstr "Récupérations"
msgstr "Récupération"
#: ../src/fe-gtk/dccgui.c:863
msgid "Details"
@@ -3351,7 +3349,7 @@ msgstr "Ouvrir le dossier..."
#: ../src/fe-gtk/dccgui.c:1045
msgid ": DCC Chat List"
msgstr ": liste de Chat DCC"
msgstr "XChat : liste de Chat DCC"
#: ../src/fe-gtk/dccgui.c:1058
msgid "Recv"
@@ -3416,7 +3414,7 @@ msgstr "Ouvrir l'URL ou exécuter la commande dans un HexChat existant"
#: ../src/fe-gtk/fe-gtk.c:90
msgid "Begin minimized. Level 0=Normal 1=Iconified 2=Tray"
msgstr "Démarré minimisé. 0=Normal 1=Minimisé 2=Dans l'icône d'état"
msgstr "Démarré minimisé. 0=Normal 1=Minimisé 2=Dans l'icone d'état"
#: ../src/fe-gtk/fe-gtk.c:90
msgid "level"
@@ -3456,7 +3454,7 @@ msgid ""
"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 "La commande d'action Exécuter (Run) lance la donnée dans Data 1 telle que si elle avait été tapée dans la boîte de saisie dans laquelle vous pressez la séquence de touches. Ainsi elle peut contenir du texte (qui sera envoyé à la chaîne/personne), des commandes ou des commandes d'utilisateur. Lorsqu'elle est exécutée tous les caractères \\n dans Données 1 sont utilisés pour délimiter les commandes séparées, afin qu'il soit possible de faire fonctionner davantage qu'une commande. Si vous voulez un \\n dans le texte réel alors entrez \\\\"
msgstr ""
#: ../src/fe-gtk/fkeys.c:143
msgid ""
@@ -3466,7 +3464,7 @@ msgid ""
"switch to the page with the most recent and important activity (queries "
"first, then channels with hilight, channels with dialogue, channels with "
"other data)"
msgstr "La page changements (Change Page) commande le basculement entre les pages du carnet. Si Donnée 2 est paramétrée à n'importe quoi alors le commutateur sera relatif à la position actuelle. Paramétrer Donnée 1 à auto afin de commuter vers la page ayant l'activité la plus récente et la plus fréquente (requêtes d'abord, puis canaux mis en évidence, canaux avec des dialogues, canaux avec d'autres données)"
msgstr ""
#: ../src/fe-gtk/fkeys.c:145
msgid ""
@@ -3478,7 +3476,7 @@ msgstr "La commande Insert in Buffer insérera le contenu de Données 1 dans l
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."
msgstr "La commande Scroll Page fait défiler le widget textuel vers le haut ou vers le bas d'une page ou d'une ligne. Définir Data 1 soit à Top, Bottom, Up, Down, +1 ou -1."
msgstr ""
#: ../src/fe-gtk/fkeys.c:149
msgid ""
@@ -3543,11 +3541,11 @@ msgstr "Il y a eu une erreur au chargement de la configuration des raccourcis cl
#: ../src/fe-gtk/fkeys.c:540
msgid "Select a row to get help information on its Action."
msgstr "Sélectionner une ligne pour obtenir des informations sur son action."
msgstr "Sélectionnez une ligne pour obtenir de l'information sur son Action."
#: ../src/fe-gtk/fkeys.c:809
msgid ": Keyboard Shortcuts"
msgstr ": raccourcis clavier"
msgstr "XChat : raccourcis clavier"
#: ../src/fe-gtk/gtkutil.c:108
msgid "Cannot write to that file."
@@ -3580,7 +3578,7 @@ msgstr "DCC"
#: ../src/fe-gtk/ignoregui.c:165
msgid "Unignore"
msgstr "Ne plus ignorer"
msgstr "Ne plus exclure"
#: ../src/fe-gtk/ignoregui.c:293
msgid "Are you sure you want to remove all ignores?"
@@ -3592,7 +3590,7 @@ msgstr "Entrer le masque d'exclusion :"
#: ../src/fe-gtk/ignoregui.c:350
msgid ": Ignore list"
msgstr ": liste d'ignorance"
msgstr "XChat : liste d'ignorance"
#: ../src/fe-gtk/ignoregui.c:358
msgid "Ignore Stats:"
@@ -3628,7 +3626,7 @@ msgstr "Le nom de canal est trop court, veuillez réessayer."
#: ../src/fe-gtk/joind.c:133
msgid ": Connection Complete"
msgstr ": fin de la procédure de connexion"
msgstr "XChat : fin de la procédure de connexion"
#: ../src/fe-gtk/joind.c:161
#, c-format
@@ -3691,7 +3689,7 @@ msgstr "Ce serveur comporte déjà %d canaux ou dialogues qui lui sont associés
#: ../src/fe-gtk/maingui.c:1203
msgid "Quit HexChat?"
msgstr "Quitter HexChat ?"
msgstr "Quitter HeXChat ?"
#: ../src/fe-gtk/maingui.c:1223
msgid "Don't ask next time."
@@ -3756,7 +3754,7 @@ msgstr "_Recharger le tampon"
#: ../src/fe-gtk/maingui.c:1540
msgid "Strip _Colors"
msgstr "Enlever les _couleurs"
msgstr "Enlever les couleurs"
#: ../src/fe-gtk/maingui.c:1541
msgid "_Hide Join/Part Messages"
@@ -3776,7 +3774,7 @@ msgstr "Faire clignoter l'_icône de barre d'état"
#: ../src/fe-gtk/maingui.c:1556
msgid "Blink Task _Bar"
msgstr "Faire clignoter la _barre des tâches"
msgstr "Faire clignoter la _barre d'état"
#: ../src/fe-gtk/maingui.c:1569 ../src/fe-gtk/maingui.c:1689
#: ../src/fe-gtk/maingui.c:3386
@@ -3798,7 +3796,7 @@ msgstr "La limite d'utilisateurs doit être un nombre !\n"
#: ../src/fe-gtk/maingui.c:2066
msgid "Filter Colors"
msgstr "Filtrer les couleurs"
msgstr "Couleurs de filtre"
#: ../src/fe-gtk/maingui.c:2067
msgid "No outside messages"
@@ -3858,7 +3856,7 @@ msgstr "Mettre en surbrillance toutes les occurrences et souligner l'occurrence
#: ../src/fe-gtk/maingui.c:2952
msgid "Mat_ch case"
msgstr "Sensible à la _casse"
msgstr "Sensible à la _case"
#: ../src/fe-gtk/maingui.c:2957
msgid "Perform a case-sensitive search."
@@ -3866,11 +3864,11 @@ msgstr "Réaliser une recherche sensible à la casse."
#: ../src/fe-gtk/maingui.c:2959
msgid "_Regex"
msgstr "Expression _rationnelle"
msgstr "_Rege"
#: ../src/fe-gtk/maingui.c:2964
msgid "Regard search string as a regular expression."
msgstr "Traiter la chaîne de recherche comme une expression rationnelle."
msgstr "Voir la chaîne de recherche comme une expression régulière."
#: ../src/fe-gtk/menu.c:115
msgid "Host unknown"
@@ -3956,19 +3954,19 @@ msgstr "Cycler canal"
#: ../src/fe-gtk/menu.c:1077
msgid "_Autojoin"
msgstr "Rejoindre _automatiquement"
msgstr "Rejoindre automatiquement si expulsé"
#: ../src/fe-gtk/menu.c:1079
msgid "Autojoin Channel"
msgstr "Rejoindre le canal automatiquement"
msgstr "Joindre le canal automatiquement"
#: ../src/fe-gtk/menu.c:1113 ../src/fe-gtk/menu.c:1117
msgid "_Auto-Connect"
msgstr "Connexion _automatique"
msgstr "Connexion automatique"
#: ../src/fe-gtk/menu.c:1137
msgid ": User menu"
msgstr ": menu utilisateur"
msgstr "XChat : menu utilisateur"
#. sep
#: ../src/fe-gtk/menu.c:1146
@@ -3977,27 +3975,27 @@ msgstr "Éditer ce menu..."
#: ../src/fe-gtk/menu.c:1292
msgid "Marker line disabled."
msgstr "Ligne de repérage désactivée."
msgstr ""
#: ../src/fe-gtk/menu.c:1298
msgid "Marker line never set."
msgstr "Ligne de repérage jamais définie."
msgstr ""
#: ../src/fe-gtk/menu.c:1302
msgid "Marker line reset manually."
msgstr "Ligne de repérage repositionnée manuellement."
msgstr ""
#: ../src/fe-gtk/menu.c:1304
msgid "Marker line reset because exceeded scrollback limit."
msgstr "Ligne de repérage repositionnée à cause de la limite de défilement."
msgstr ""
#: ../src/fe-gtk/menu.c:1306
msgid "Marker line reset by CLEAR command."
msgstr "Ligne de repérage repositionnée avec la commande CLEAR."
msgstr ""
#: ../src/fe-gtk/menu.c:1308
msgid "Marker line state unknown."
msgstr "État de la ligne de repérage inconnu."
msgstr ""
#: ../src/fe-gtk/menu.c:1395
msgid "Retrieve channel list..."
@@ -4005,7 +4003,7 @@ msgstr "Récupérer la liste des canaux..."
#: ../src/fe-gtk/menu.c:1461
msgid " has been build without plugin support."
msgstr "a été compilé sans prise en charge des greffons."
msgstr "a été compilé sans prise en charge des extensions."
#: ../src/fe-gtk/menu.c:1469
msgid ""
@@ -4042,7 +4040,7 @@ msgid ""
"%s = selected nick\n"
"%t = time/date\n"
"%u = selected users account"
msgstr "Boutons de la liste d'utilisateurs - codes spéciaux :\n\n%a = tous les pseudos sélectionnés\n%c = canal actuel\n%e = nom du réseau actuel\n%h = hôte des pseudos sélectionnés\n%m = informations sur la machine\n%n = votre pseudo\n%s = pseudo sélectionné\n%t = date et heure\n%u = nom de compte des pseudos sélectionnés"
msgstr "Bouttons de la liste d'utilisateurs - codes spéciaux :\n\n%a = tous les pseudos sélectionnés\n%c = canal actuel\n%e = nom du réseau actuel\n%h = hôte des pseudos sélectionnés\n%m = information machine\n%n = votre pseudo\n%s = pseudo sélectionné\n%t = date et heure\n%u = nom de compte des pseudos sélectionnés"
#: ../src/fe-gtk/menu.c:1496
msgid ""
@@ -4057,7 +4055,7 @@ msgid ""
"%s = selected nick\n"
"%t = time/date\n"
"%u = selected users account"
msgstr "Boutons de dialogue - codes spéciaux :\n\n%a = tous les pseudos sélectionnés\n%c = canal actuel\n%e = nom du réseau actuel\n%h = hôte du pseudo sélectionné\n% = informations sur la machine\n%n = votre pseudo\n%s = pseudo sélectionné\n%t = date et heure\n%u = nom de compte du pseudo sélectionné"
msgstr "Boutons de dialogue - codes spéciaux :\n\n%a = tous les pseudos sélectionnés\n%c = canal actuel\n%e = nom du réseau actuel\n%h = hôte du pseudo sélectionné\n% = information machine\n%n = votre pseudo\n%s = pseudo sélectionné\n%t = date et heure\n%u = nom de compte du pseudo sélectionné"
#: ../src/fe-gtk/menu.c:1507
msgid ""
@@ -4089,11 +4087,11 @@ msgstr "Gestionnaire d'URL - Codes d'échappement :\n\n%s = la chaîne URL\n\n
#: ../src/fe-gtk/menu.c:1527
msgid ": User Defined Commands"
msgstr ": commandes définies par l'utilisateur"
msgstr "XChat : commandes définies par l'utilisateur"
#: ../src/fe-gtk/menu.c:1534
msgid ": Userlist Popup menu"
msgstr ": menu de la liste des utilisateurs"
msgstr "XChat : menu de la liste des utilisateurs"
#: ../src/fe-gtk/menu.c:1541
msgid "Replace with"
@@ -4101,23 +4099,23 @@ msgstr "Remplacer par"
#: ../src/fe-gtk/menu.c:1541
msgid ": Replace"
msgstr ": remplacer"
msgstr "XChat : remplacer"
#: ../src/fe-gtk/menu.c:1548
msgid ": URL Handlers"
msgstr ": gestionnaires d'URL"
msgstr "XChat : gestionnaires d'URL"
#: ../src/fe-gtk/menu.c:1567
msgid ": Userlist buttons"
msgstr ": boutons de la liste des utilisateurs"
msgstr "XChat : boutons de la liste des utilisateurs"
#: ../src/fe-gtk/menu.c:1574
msgid ": Dialog buttons"
msgstr ": boutons de dialogue"
msgstr "XChat : boutons de dialogue"
#: ../src/fe-gtk/menu.c:1581
msgid ": CTCP Replies"
msgstr ": réponses CTCP"
msgstr "XChat : réponses CTCP"
#: ../src/fe-gtk/menu.c:1743
msgid "He_xChat"
@@ -4226,15 +4224,15 @@ msgstr "Re_joindre un canal..."
#: ../src/fe-gtk/menu.c:1791
msgid "_List of Channels..."
msgstr "_Liste des canaux..."
msgstr "_Liste de canaux..."
#: ../src/fe-gtk/menu.c:1794
msgid "Marked _Away"
msgstr "Se marquer _absent"
msgstr "Marqué _absent"
#: ../src/fe-gtk/menu.c:1796
msgid "_Usermenu"
msgstr "Menu de l'_utilisateur"
msgstr "Menu de l_utilisateur"
#. 40
#: ../src/fe-gtk/menu.c:1798
@@ -4312,7 +4310,7 @@ msgstr "Liste d'ignorance..."
#: ../src/fe-gtk/menu.c:1818
msgid "_Plugins and Scripts..."
msgstr "_Greffons et scripts..."
msgstr "_Plugins et scripts..."
#: ../src/fe-gtk/menu.c:1819
msgid "_Raw Log..."
@@ -4329,7 +4327,7 @@ msgstr "Repositionner la ligne de repérage"
#: ../src/fe-gtk/menu.c:1823
msgid "Move to Marker Line"
msgstr "Aller à la ligne de repérage"
msgstr ""
#: ../src/fe-gtk/menu.c:1824
msgid "_Copy Selection"
@@ -4421,7 +4419,7 @@ msgstr "Notifier depuis les réseaux suivants :"
#: ../src/fe-gtk/notifygui.c:381
msgid "Comma separated list of networks is accepted."
msgstr "Une liste de réseaux séparés par une virgule est acceptée."
msgstr "Entrez les réseaux séparés par une virgule."
#: ../src/fe-gtk/notifygui.c:407
msgid ": Friends List"
@@ -4434,7 +4432,7 @@ msgstr "Ouvrir la fenêtre de dialogue"
#: ../src/fe-gtk/plugin-tray.c:264
#, c-format
msgid ": Connected to %u networks and %u channels"
msgstr ": Vous êtes connecté à %u réseaux et %u canaux"
msgstr "XChat : Vous êtes connecté à %u réseaux et %u canaux"
#: ../src/fe-gtk/plugin-tray.c:628
msgid "_Restore Window"
@@ -4463,7 +4461,7 @@ msgstr "Messages en surbrillance"
#. blink_item (BIT_FILEOFFER, submenu, _("File Offer"));
#: ../src/fe-gtk/plugin-tray.c:640
msgid "_Change status"
msgstr "_Changer d'état"
msgstr "_Changer l'état"
#: ../src/fe-gtk/plugin-tray.c:646
msgid "_Away"
@@ -4476,12 +4474,12 @@ msgstr "_Retour"
#: ../src/fe-gtk/plugin-tray.c:714
#, c-format
msgid ": Highlighted message from: %s (%s)"
msgstr ": Message en surbrillance de %s (%s)"
msgstr "XChat : Message en surbrillance de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:717
#, c-format
msgid ": %u highlighted messages, latest from: %s (%s)"
msgstr ": %u messages en surbrillance. Le dernier est de %s (%s)"
msgstr "XChat : %u messages en surbrillance. Le dernier est de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:722
#, c-format
@@ -4506,12 +4504,12 @@ msgstr "Message de canal de : %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:771
#, c-format
msgid ": Private message from: %s (%s)"
msgstr ": Message privé de %s (%s)"
msgstr "XChat : Message privé de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:774
#, c-format
msgid ": %u private messages, latest from: %s (%s)"
msgstr ": %u messages privés. Le dernier est de %s (%s)"
msgstr "XChat : %u messages privés. Le dernier est de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:779
#, c-format
@@ -4521,17 +4519,17 @@ msgstr "Message privé de : %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:818
#, c-format
msgid ": File offer from: %s (%s)"
msgstr ": Demande de transfert de fichier de %s (%s)"
msgstr "XChat : Demande de transfert de fichier de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:821
#, c-format
msgid ": %u file offers, latest from: %s (%s)"
msgstr ": %u demandes de transferts de fichier. Le dernier est de %s (%s)"
msgstr "XChat : %u demandes de transferts de fichier. Le dernier est de %s (%s)"
#: ../src/fe-gtk/plugin-tray.c:826
#, c-format
msgid "File offer from: %s (%s)"
msgstr ": Demande de transfert de fichier de %s (%s)"
msgstr "XChat : Demande de transfert de fichier de %s (%s)"
#: ../src/fe-gtk/plugingui.c:64
msgid "Version"
@@ -4547,7 +4545,7 @@ msgstr "Sélectionner un greffon ou un script à charger"
#: ../src/fe-gtk/plugingui.c:252
msgid ": Plugins and Scripts"
msgstr ": greffons et scripts"
msgstr "XChat : greffons et scripts"
#: ../src/fe-gtk/plugingui.c:267
msgid "_Load..."
@@ -4590,7 +4588,7 @@ msgstr "Le nom d'utilisateur ne peut être vide."
#: ../src/fe-gtk/servlistgui.c:1578
msgid "You must have two unique nick names."
msgstr "Vous devez avoir deux pseudonymes uniques."
msgstr ""
#: ../src/fe-gtk/servlistgui.c:1630
msgid ""
@@ -4693,11 +4691,11 @@ msgstr "Jeu de caractères :"
#: ../src/fe-gtk/servlistgui.c:1970
msgid ": Network List"
msgstr ": liste des réseaux"
msgstr "XChat : liste des réseaux"
#: ../src/fe-gtk/servlistgui.c:1981
msgid "User Information"
msgstr "Informations utilisateur"
msgstr "Information utilisateur"
#: ../src/fe-gtk/servlistgui.c:2005
msgid "Third choice:"
@@ -4727,7 +4725,7 @@ msgstr "_Trier"
msgid ""
"Sorts the network list in alphabetical order. Use SHIFT-UP and SHIFT-DOWN "
"keys to move a row."
msgstr "Trie les réseaux par ordre alphabétique. Utiliser MAJ + Haut et MAJ + Bas pour déplacer une ligne."
msgstr "Trie les réseaux dans l'ordre alphabétique. Utilisez Shift-Haut et Shift-Bas pour déplacer une ligne."
#: ../src/fe-gtk/servlistgui.c:2168
msgid "_Favor"
@@ -4943,7 +4941,7 @@ msgstr "Ukrainien"
#: ../src/fe-gtk/setup.c:139
msgid "Vietnamese"
msgstr "Vietnamien"
msgstr "Viétnamien"
#: ../src/fe-gtk/setup.c:140
msgid "Walloon"
@@ -5077,11 +5075,11 @@ msgstr "Dictionnaire à utiliser : "
msgid ""
"Use language codes (as in \"%LOCALAPPDATA%\\enchant\\myspell\\dicts\").\n"
"Separate multiple entries with commas."
msgstr "Utiliser des codes de langues (comme dans « %LOCALAPPDATA%\\enchant\\myspell\\dicts »).\nSéparer les entrées multiples avec des virgules."
msgstr "Utiliser des codes de langues (en tant que \"%LOCALAPPDATA%\\enchant\\myspell\\dicts\").\nSéparez les entrées par des virgules."
#: ../src/fe-gtk/setup.c:199
msgid "Use language codes. Separate multiple entries with commas."
msgstr "Utiliser des codes de langue. Séparer les entrées multiples avec des virgules."
msgstr "Entrez des codes de langue Séparer les par une virgule."
#: ../src/fe-gtk/setup.c:202
msgid "Nick Completion"
@@ -5093,7 +5091,7 @@ msgstr "Suffixe pour la complétion des pseudonymes :"
#: ../src/fe-gtk/setup.c:204
msgid "Nick completion sorted:"
msgstr "Tri de la complétion des pseudonymes :"
msgstr "Tri de la complétion des pseudo :"
#: ../src/fe-gtk/setup.c:205
msgid "Nick completion amount:"
@@ -5101,7 +5099,7 @@ msgstr "Maximum pour la complétion de pseudonymes :"
#: ../src/fe-gtk/setup.c:205
msgid "Threshold of nicks to start listing instead of completing"
msgstr "Lister les pseudonymes au lieu de les compléter au-delà de ce seuil"
msgstr "Seuil du nombre de pseudonymes à lister au lieu de compléter"
#: ../src/fe-gtk/setup.c:205
msgid "nicks."
@@ -5165,11 +5163,11 @@ msgstr "Afficher les noms d'hôtes dans la liste des utilisateurs"
#: ../src/fe-gtk/setup.c:255
msgid "Show icons for user modes"
msgstr "Afficher des icônes pour les modes utilisateurs"
msgstr "Afficher des icones pour les modes utilisateurs"
#: ../src/fe-gtk/setup.c:255
msgid "Use graphical icons instead of text symbols in the user list."
msgstr "Afficher des icônes plutôt que du texte dans la liste des utilisateurs."
msgstr "Afficher des icones plutôt que du texte dans la liste des utilisateurs."
#: ../src/fe-gtk/setup.c:256
msgid "Color nicknames in userlist"
@@ -5274,7 +5272,7 @@ msgstr "Trier les onglets par ordre alphabétique"
#: ../src/fe-gtk/setup.c:314
msgid "Show icons in the channel tree"
msgstr "Afficher des icônes dans l'arbre des canaux"
msgstr "Montrer des icones dans l'arbre des canaux"
#: ../src/fe-gtk/setup.c:315
msgid "Show dotted lines in the channel tree"
@@ -5362,7 +5360,7 @@ msgstr "Télécharger les fichiers vers :"
#: ../src/fe-gtk/setup.c:353
msgid "Move completed files to:"
msgstr "Déplacer les fichiers complets vers :"
msgstr "Déplacer les fichiers terminés vers :"
#: ../src/fe-gtk/setup.c:354
msgid "Save nick name in filenames"
@@ -5419,24 +5417,24 @@ msgstr "Alertes"
#: ../src/fe-gtk/setup.c:400 ../src/fe-gtk/setup.c:452
msgid "Show tray balloons on:"
msgstr "Afficher une fenêtre de notification pour :"
msgstr "Quand montrer une fenêtre de notification :"
#: ../src/fe-gtk/setup.c:402
msgid "Blink tray icon on:"
msgstr "Faire clignoter l'icône de barre d'état pour :"
msgstr "Faire clignoter l'icône de barre d'état"
#: ../src/fe-gtk/setup.c:404
msgid "Bounce dock icon on:"
msgstr "Faire rebondir l'icône du dock pour :"
msgstr ""
#: ../src/fe-gtk/setup.c:407 ../src/fe-gtk/setup.c:453
msgid "Blink task bar on:"
msgstr "Faire clignoter la barre des tâches pour :"
msgstr "Quand faire clignoter la barre d'état :"
#: ../src/fe-gtk/setup.c:411 ../src/fe-gtk/setup.c:414
#: ../src/fe-gtk/setup.c:416 ../src/fe-gtk/setup.c:454
msgid "Make a beep sound on:"
msgstr "Émettre un bip pour :"
msgstr "Quand émettre un bip : "
#: ../src/fe-gtk/setup.c:411
msgid ""
@@ -5452,7 +5450,7 @@ msgstr "Jouer « message-new-instant » depuis le thème de sons freedesktop.org
#: ../src/fe-gtk/setup.c:416
msgid "Play a GTK beep upon the selected events"
msgstr "Jouer un bip GTK sur les événements sélectionnés"
msgstr "Jouer un bip GTK quand le ou les événements arrivent"
#: ../src/fe-gtk/setup.c:420 ../src/fe-gtk/setup.c:456
msgid "Omit alerts when marked as being away"
@@ -5484,7 +5482,7 @@ msgstr "Gérer le statut absent/présent automatiquement"
#: ../src/fe-gtk/setup.c:431
msgid "Automatically change status when hiding to tray."
msgstr "Automatiquement changer d'état en cachant l'application dans la barre de tâches."
msgstr "Automatiquement changer de statut en cachant l'application dans la barre de tâches."
#: ../src/fe-gtk/setup.c:433
msgid "Only show tray balloons when hidden or iconified"
@@ -5505,7 +5503,7 @@ msgstr "Mots déclenchant une surbrillance :"
#: ../src/fe-gtk/setup.c:440 ../src/fe-gtk/setup.c:463
msgid "Nick names not to highlight:"
msgstr "Pseudos à ne pas mettre en surbrillance :"
msgstr "Pseudo à ne pas mettre en surbrillance :"
#: ../src/fe-gtk/setup.c:441 ../src/fe-gtk/setup.c:464
msgid "Nick names to always highlight:"
@@ -5579,7 +5577,7 @@ msgstr "Cacher les messages d'entrée/sortie par défaut."
#: ../src/fe-gtk/setup.c:485
msgid "Hide nick change messages"
msgstr "Cacher les messages de changement de pseudonyme"
msgstr ""
#: ../src/fe-gtk/setup.c:492
msgid "*!*@*.host"
@@ -5629,7 +5627,7 @@ msgstr "Ajouter automatiquement les informations de couleur"
msgid ""
"Automatically include color information in copied lines of text. Otherwise,"
" include color information if the CONTROL key is held down while selecting."
msgstr "Ajouter automatiquement les informations de couleurs dans les lignes de texte copiées. Sinon, la couleur sera ajoutée uniquement si la touche Control est appuyée lors de la sélection."
msgstr "Ajouter automatiquement les informations de couleurs dans les lignes de texte copiées. Sinon, la couleur sera ajouté uniquement si la touche Control est appuyée lors de la sélection."
#: ../src/fe-gtk/setup.c:515
msgid "Real name:"
@@ -5641,7 +5639,7 @@ msgstr "Police alternative :"
#: ../src/fe-gtk/setup.c:517
msgid "Separate multiple entries with commas without spaces before or after."
msgstr "Séparer plusieurs entrées avec des virgules sans espaces avant ou après la virgule."
msgstr "Séparez plusieurs entrées avec des virgules sans espaces avant ou après la virgule."
#: ../src/fe-gtk/setup.c:519
msgid "Display lists in compact mode"
@@ -5653,13 +5651,13 @@ msgstr "Utiliser moins d'espace entre la liste des utilisateurs et l'arbre des c
#: ../src/fe-gtk/setup.c:520
msgid "Use server time if supported"
msgstr "Utiliser le temps serveur si pris en charge"
msgstr "Utiliser le temps serveur si pris en charg"
#: ../src/fe-gtk/setup.c:520
msgid ""
"Display timestamps obtained from server if it supports the time-server "
"extension."
msgstr "Afficher les horodatages obtenus depuis le serveur s'il prend en charge l'extension serveur de temps."
msgstr "Afficher les horodatages obtenus depuis le serveur s'il supporte l'extension du temps côté serveur."
#: ../src/fe-gtk/setup.c:521
msgid "Automatically reconnect to servers on disconnect"
@@ -5860,7 +5858,7 @@ msgstr "Sélectionner une image"
#: ../src/fe-gtk/setup.c:1088
msgid "Select Download Folder"
msgstr "Choisir le dossier pour la réception de fichiers"
msgstr "Choisir le dossier pour le réception de fichiers"
#: ../src/fe-gtk/setup.c:1098
msgid "Select font"
@@ -6030,7 +6028,7 @@ msgstr "*ATTENTION*\nAccepter automatiquement les DCC dans votre répertoire per
#: ../src/fe-gtk/setup.c:2198
msgid ": Preferences"
msgstr ": préférences"
msgstr "XChat : préférences"
#: ../src/fe-gtk/sexy-spell-entry.c:545
msgid "<i>(no suggestions)</i>"
@@ -6091,11 +6089,11 @@ msgstr "Tout tester"
#: ../src/fe-gtk/textgui.c:485
msgid "OK"
msgstr "OK"
msgstr ""
#: ../src/fe-gtk/urlgrab.c:198
msgid ": URL Grabber"
msgstr ": récupération d'URL"
msgstr "XChat : récupération d'URL"
#: ../src/fe-gtk/urlgrab.c:212
msgid "Clear list"
+2 -2
View File
@@ -4,8 +4,8 @@
#
# Translators:
# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010
# Rahmat Bambang <doplank@gmx.com>, 2012-2013
# Rahmat Bambang <doplank@gmx.com>, 2013
# doplank <doplank@gmx.com>, 2012-2013
# doplank <doplank@gmx.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
+2 -3
View File
@@ -6,14 +6,13 @@
# Claudio Arseni <claudio.arseni@gmail.com>, 2013-2014
# Eros Palberti - Fabio Viola : How-Tux Team <admin@how-tux.com>, 2006
# Random_R, 2013
# Random_R, 2013
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-09-03 19:07+0000\n"
"Last-Translator: Teodoro Santoni <asbrasbra@gmail.com>\n"
"PO-Revision-Date: 2014-05-30 13:32+0000\n"
"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/hexchat/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+273 -274
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2014
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2014
# Darkcircle <darkcircle.0426@gmail.com>, 2014
# Darkcircle <darkcircle.0426@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-05-15 13:09+0000\n"
"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
"Last-Translator: Darkcircle <darkcircle.0426@gmail.com>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/hexchat/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+384 -385
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -4,8 +4,8 @@
#
# Translators:
# bviktor, 2012
# Thorne Heathenspring <thorne@null.net>, 2013
# Thorne Heathenspring <thorne@null.net>, 2012
# Thorne <thorne@null.net>, 2013
# Thorne <thorne@null.net>, 2012
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
+3 -3
View File
@@ -3,9 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Xtreme Power <neethan98@hotmail.ca>, 2013
# Thor K. H. <nitrolinken@gmail.com>, 2013
# Thor K. H. <nitrolinken@gmail.com>, 2012-2013
# xtremesmw <neethan98@hotmail.ca>, 2013
# Thor K.H. <nitrolinken@gmail.com>, 2013
# Thor K.H. <nitrolinken@gmail.com>, 2012-2013
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
+152 -153
View File
File diff suppressed because it is too large Load Diff
+156 -156
View File
File diff suppressed because it is too large Load Diff
+1304 -1306
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -4,7 +4,7 @@
#
# Translators:
# Aleksandr P <davian818@gmail.com>, 2010
# Andrey Vihrov <andrey.vihrov@gmail.com>, 2013
# andreyv <andrey.vihrov@gmail.com>, 2013
# Valek Filippov <frob@df.ru>, 2001
# Volosenkov Dmitry <_bil_@mail.ru>, 1999
msgid ""
+1 -1
View File
@@ -4,7 +4,7 @@
#
# Translators:
# o Zoltan Čala <zolika@sezampro.yu>, 1999
# Velimir Majstorov <majstorov@gmail.com>, 2013
# Ortak Velja <majstorov@gmail.com>, 2013
# Zlatan Vasović <legospace9876@gmail.com>, 2013-2014
msgid ""
msgstr ""
+1 -1
View File
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Velimir Majstorov <majstorov@gmail.com>, 2013
# Ortak Velja <majstorov@gmail.com>, 2013
# o Zoltan Čala <zolika@sezampro.yu>, 1999
# Zlatan Vasović <legospace9876@gmail.com>, 2013
msgid ""
+32 -34
View File
@@ -3,16 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Jakob <jakob@knugen.nu>, 2014
# Jakob <jakob@knugen.nu>, 2012
# Martin Jernberg <bittin@cafe8bitar.se>, 2014
# androidnisse <jakob@knugen.nu>, 2012
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-08-22 13:24+0000\n"
"Last-Translator: Martin Jernberg <bittin@cafe8bitar.se>\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/hexchat/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,7 +23,7 @@ msgid ""
"HexChat is an easy to use yet extensible IRC Client. It allows you to "
"securely join multiple networks and talk to users privately or in channels "
"using a customizable interface. You can even transfer files."
msgstr "HexChat är en lättanvänd men även utbyggbar IRC klient. Den låter dig säkert ansluta till flera nätverk och prata med användare privat eller i kanaler med ett anpassningsbart utseende. Du kan även överföra filer."
msgstr ""
#: ../data/misc/hexchat.appdata.xml.in.h:2
msgid ""
@@ -35,15 +33,15 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
msgstr "HexChat"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:2
msgid "IRC Client"
msgstr "IRC klient"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:3
msgid "Chat with other people online"
msgstr "Chatta med andra människor online"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:4
msgid "IM;Chat;"
@@ -51,11 +49,11 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:5
msgid "Open Safe Mode"
msgstr "Öppna säkert läge"
msgstr ""
#: ../data/misc/htm.desktop.in.h:1
msgid "HexChat Theme Manager"
msgstr "HexChat temahanterare "
msgstr ""
#. 0 means unlimited
#. STRINGS
@@ -130,15 +128,15 @@ msgstr "_Skicka en fil"
#: ../src/common/hexchat.c:869
msgid "_User Info (WhoIs)"
msgstr "_Användarinfo (Whois)"
msgstr "An_vändarinfo (Whois)"
#: ../src/common/hexchat.c:870
msgid "_Add to Friends List"
msgstr "_Lägg till i vänlista"
msgstr "_Lägg till i vännerlista"
#: ../src/common/hexchat.c:871
msgid "_Ignore"
msgstr "_Ignorera"
msgstr ""
#: ../src/common/hexchat.c:872
msgid "O_perator Actions"
@@ -214,7 +212,7 @@ msgstr "Ta bort op"
#: ../src/common/hexchat.c:918
msgid "bye"
msgstr "hej då"
msgstr "hejdå"
#: ../src/common/hexchat.c:919
#, c-format
@@ -255,7 +253,7 @@ msgstr "Ping"
#, c-format
msgid ""
"You do not have write access to %s. Nothing from this session can be saved."
msgstr "Du har inte skrivrättigheter till %s. Ingenting från den här sessionen kan bli sparat"
msgstr ""
#: ../src/common/hexchat.c:1139
msgid ""
@@ -2446,7 +2444,7 @@ msgstr "Jordanien"
#: ../src/common/util.c:1112
msgid "Company Jobs"
msgstr "Företags jobb"
msgstr ""
#: ../src/common/util.c:1113
msgid "Japan"
@@ -2554,7 +2552,7 @@ msgstr "Moldavien"
#: ../src/common/util.c:1139
msgid "Montenegro"
msgstr "Montenegro"
msgstr ""
#: ../src/common/util.c:1140
msgid "United States Medical"
@@ -2622,7 +2620,7 @@ msgstr "Mauritius"
#: ../src/common/util.c:1156
msgid "Museums"
msgstr "Museum"
msgstr ""
#: ../src/common/util.c:1157
msgid "Maldives"
@@ -2786,7 +2784,7 @@ msgstr "Gammaldags ARPAnet"
#: ../src/common/util.c:1197
msgid "Serbia"
msgstr "Serbien"
msgstr ""
#: ../src/common/util.c:1198
msgid "Russian Federation"
@@ -2858,7 +2856,7 @@ msgstr "Surinam"
#: ../src/common/util.c:1215
msgid "South Sudan"
msgstr "Syd Sudan"
msgstr ""
#: ../src/common/util.c:1216
msgid "Sao Tome and Principe"
@@ -3088,7 +3086,7 @@ msgstr ""
#: ../src/fe-gtk/banlist.c:67
msgid "Invites"
msgstr "Inbjudningar"
msgstr ""
#: ../src/fe-gtk/banlist.c:68 ../src/fe-gtk/ignoregui.c:164
msgid "Invite"
@@ -3723,7 +3721,7 @@ msgstr "<u>Understruken</u>"
#: ../src/fe-gtk/maingui.c:1475
msgid "<i>Italic</i>"
msgstr "<i>kursiv</i>"
msgstr ""
#: ../src/fe-gtk/maingui.c:1476
msgid "Normal"
@@ -3837,7 +3835,7 @@ msgstr "Ange nytt smeknamn:"
#: ../src/fe-gtk/maingui.c:2832
msgid "No results found."
msgstr "Inga resultat funna."
msgstr ""
#: ../src/fe-gtk/maingui.c:2928
msgid "Search hit end or not found."
@@ -3895,7 +3893,7 @@ msgstr "Användare:"
#: ../src/fe-gtk/menu.c:637
msgid "Account:"
msgstr "Konto:"
msgstr ""
#: ../src/fe-gtk/menu.c:647
msgid "Country:"
@@ -4116,7 +4114,7 @@ msgstr "XChat: CTCP-svar"
#: ../src/fe-gtk/menu.c:1743
msgid "He_xChat"
msgstr "He_xChat"
msgstr ""
#: ../src/fe-gtk/menu.c:1744
msgid "Network Li_st..."
@@ -4201,7 +4199,7 @@ msgstr "Diagram"
#: ../src/fe-gtk/menu.c:1785
msgid "_Fullscreen"
msgstr "_Fullskärm"
msgstr ""
#: ../src/fe-gtk/menu.c:1787
msgid "_Server"
@@ -5959,7 +5957,7 @@ msgstr "Gränssnitt"
#: ../src/fe-gtk/setup.c:1807
msgid "Appearance"
msgstr "Utseende "
msgstr ""
#: ../src/fe-gtk/setup.c:1808
msgid "Input box"
@@ -5983,7 +5981,7 @@ msgstr "Chattande"
#: ../src/fe-gtk/setup.c:1816
msgid "Sounds"
msgstr "Ljud"
msgstr ""
#: ../src/fe-gtk/setup.c:1818
msgid "Advanced"
@@ -6025,7 +6023,7 @@ msgstr "*VARNING*\nAtt automatiskt acceptera DCC till din\nhemkatalog kan vara f
#: ../src/fe-gtk/setup.c:2198
msgid ": Preferences"
msgstr ": Inställningar"
msgstr "XChat: Inställningar"
#: ../src/fe-gtk/sexy-spell-entry.c:545
msgid "<i>(no suggestions)</i>"
@@ -6033,7 +6031,7 @@ msgstr ""
#: ../src/fe-gtk/sexy-spell-entry.c:559
msgid "More..."
msgstr "Mer..."
msgstr ""
#. + Add to Dictionary
#: ../src/fe-gtk/sexy-spell-entry.c:631
@@ -6044,11 +6042,11 @@ msgstr ""
#. - Ignore All
#: ../src/fe-gtk/sexy-spell-entry.c:676
msgid "Ignore All"
msgstr "Ignorera alla"
msgstr ""
#: ../src/fe-gtk/sexy-spell-entry.c:711
msgid "Spelling Suggestions"
msgstr "Stavningsförslag"
msgstr ""
#: ../src/fe-gtk/sexy-spell-entry.c:1272
#, c-format
@@ -6086,7 +6084,7 @@ msgstr "Testa allt"
#: ../src/fe-gtk/textgui.c:485
msgid "OK"
msgstr "OK"
msgstr ""
#: ../src/fe-gtk/urlgrab.c:198
msgid ": URL Grabber"
+47 -48
View File
@@ -3,19 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Atilla Öntaş <tarakbumba@gmail.com>, 2014
# Demiray Muhterem <mdemiray@msn.com>, 2014
# tulliana <mdemiray@msn.com>, 2014
# ifthenelse <ifthenelse@gmx.com>, 2013
# osmanos <osman.erkan@yandex.com>, 2014
# TingPing <tingping@tingping.se>, 2014
# Ufuk UYUMAZ <ufukuyumaz@gmail.com>, 2013
# Ufuk Uyumaz <ufukuyumaz@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-10-06 16:54+0000\n"
"Last-Translator: Demiray Muhterem <mdemiray@msn.com>\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/hexchat/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -38,27 +37,27 @@ msgstr ""
#: ../data/misc/hexchat.desktop.in.h:1
msgid "HexChat"
msgstr "HexChat"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:2
msgid "IRC Client"
msgstr "IRC Client"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:3
msgid "Chat with other people online"
msgstr "İnsanlar ile çevrimiçi sohbet"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:4
msgid "IM;Chat;"
msgstr "IM;Chat;"
msgstr ""
#: ../data/misc/hexchat.desktop.in.h:5
msgid "Open Safe Mode"
msgstr "Güvenli Modda Aç"
msgstr ""
#: ../data/misc/htm.desktop.in.h:1
msgid "HexChat Theme Manager"
msgstr "Hexchat Tema Yöneticisi"
msgstr ""
#. 0 means unlimited
#. STRINGS
@@ -404,13 +403,13 @@ msgstr "BAN <maske> [<yasaktipi>], maskeye uygun herkesi kanalda yasaklar. Zaten
#: ../src/common/outbound.c:3913
msgid "CHANOPT [-quiet] <variable> [<value>]"
msgstr "CHANOPT [-quiet] <değişken> [<değer>]"
msgstr ""
#: ../src/common/outbound.c:3914
msgid ""
"CHARSET [<encoding>], get or set the encoding used for the current "
"connection"
msgstr "CHARSET [<kodlama>], geçerli bağlantı için kullanılan kodlamayı getir veya ayarla"
msgstr ""
#: ../src/common/outbound.c:3915
msgid ""
@@ -424,19 +423,19 @@ msgstr ""
#: ../src/common/outbound.c:3919
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
msgstr "COUNTRY [-s] <kodlama/değişken ifade>, bir ülke kodlaması bulur, mesela: au = australia"
msgstr ""
#: ../src/common/outbound.c:3921
msgid ""
"CTCP <nick> <message>, send the CTCP message to nick, common messages are "
"VERSION and USERINFO"
msgstr "CTCP <rumuz> <ileti>,CTCP iletisinii rumuza gönder, ortak iletiler VERSION ve USERINFO' dur"
msgstr ""
#: ../src/common/outbound.c:3923
msgid ""
"CYCLE [<channel>], parts the current or given channel and immediately "
"rejoins"
msgstr "CYCLE [<kanall>], geçerli olan veya verilen kanalı böler ve hemen yeniden katılır"
msgstr ""
#: ../src/common/outbound.c:3925
msgid ""
@@ -1407,7 +1406,7 @@ msgstr "Katılan kişinin adı"
#: ../src/common/text.c:1033
msgid "The channel being joined"
msgstr "Kanala girildi."
msgstr ""
#: ../src/common/text.c:1034 ../src/common/text.c:1097
#: ../src/common/text.c:1148
@@ -1416,7 +1415,7 @@ msgstr "Kişinin bilgisayarı"
#: ../src/common/text.c:1035
msgid "The account of the person"
msgstr "Kişinin hesabı"
msgstr ""
#: ../src/common/text.c:1039 ../src/common/text.c:1046
#: ../src/common/text.c:1053 ../src/common/text.c:1265
@@ -1470,7 +1469,7 @@ msgstr "Sunucu Adı"
#: ../src/common/text.c:1060
msgid "Acknowledged Capabilities"
msgstr "Sunucu Özellikleri"
msgstr ""
#: ../src/common/text.c:1065
msgid "Server Capabilities"
@@ -1578,7 +1577,7 @@ msgstr ""
#: ../src/common/text.c:1171
msgid "The nick of the person who set the key"
msgstr "Kilidi ayarlayan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1172
msgid "The key"
@@ -1586,7 +1585,7 @@ msgstr "Anahtar"
#: ../src/common/text.c:1176
msgid "The nick of the person who set the limit"
msgstr "Limiti ayarlayan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1177
msgid "The limit"
@@ -1594,31 +1593,31 @@ msgstr "Sınır"
#: ../src/common/text.c:1181
msgid "The nick of the person who did the op'ing"
msgstr "Op veren kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1182
msgid "The nick of the person who has been op'ed"
msgstr "Op olan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1186
msgid "The nick of the person who has been halfop'ed"
msgstr "Yarım Op olan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1187
msgid "The nick of the person who did the halfop'ing"
msgstr "Yarım Op veren kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1191
msgid "The nick of the person who did the voice'ing"
msgstr "Konuşma izni veren kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1192
msgid "The nick of the person who has been voice'ed"
msgstr "Konuşma izni alan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1196
msgid "The nick of the person who did the banning"
msgstr "Banlayan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1197 ../src/common/text.c:1229
msgid "The ban mask"
@@ -1626,7 +1625,7 @@ msgstr "Yasak maskesi"
#: ../src/common/text.c:1201
msgid "The nick of the person who did the quieting"
msgstr "Konuşma iznini alan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1202 ../src/common/text.c:1234
msgid "The quiet mask"
@@ -1634,43 +1633,43 @@ msgstr "Sessiz maske"
#: ../src/common/text.c:1206
msgid "The nick who removed the key"
msgstr "Kilidi kaldıranın rumuzu"
msgstr ""
#: ../src/common/text.c:1210
msgid "The nick who removed the limit"
msgstr "Limiti kaldıranın rumuzu"
msgstr ""
#: ../src/common/text.c:1214
msgid "The nick of the person of did the deop'ing"
msgstr "Op alan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1215
msgid "The nick of the person who has been deop'ed"
msgstr "Op'u alınan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1218
msgid "The nick of the person of did the dehalfop'ing"
msgstr "Yarım Op'u alan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1219
msgid "The nick of the person who has been dehalfop'ed"
msgstr "Yarım Op'u elinden alınan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1223
msgid "The nick of the person of did the devoice'ing"
msgstr "Konuşma iznini alan kişini rumuzu"
msgstr ""
#: ../src/common/text.c:1224
msgid "The nick of the person who has been devoice'ed"
msgstr "Konuşma izni alınan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1228
msgid "The nick of the person of did the unban'ing"
msgstr "Yasağı kaldıran kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1233
msgid "The nick of the person of did the unquiet'ing"
msgstr "Konuşma yasağını kaldıran kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1238
msgid "The nick of the person who did the exempt"
@@ -1686,7 +1685,7 @@ msgstr "Kişinin kullanıcı adı serbest bırakıldı."
#: ../src/common/text.c:1248
msgid "The nick of the person who did the invite"
msgstr "Davet eden kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1249 ../src/common/text.c:1254
msgid "The invite mask"
@@ -1694,15 +1693,15 @@ msgstr "Davet maskesi"
#: ../src/common/text.c:1253
msgid "The nick of the person removed the invite"
msgstr "Daveti kaldıran kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1258
msgid "The nick of the person setting the mode"
msgstr "Mod ayarlarını yapan kişinin rumuzu"
msgstr ""
#: ../src/common/text.c:1259
msgid "The mode's sign (+/-)"
msgstr "Mod'lar imza (+/-)"
msgstr ""
#: ../src/common/text.c:1260
msgid "The mode letter"
@@ -1710,7 +1709,7 @@ msgstr "Mektup Modu"
#: ../src/common/text.c:1261
msgid "The channel it's being set on"
msgstr "Bu şu anda kanal ayarlanıyor"
msgstr ""
#: ../src/common/text.c:1268
msgid "Full name"
@@ -2893,7 +2892,7 @@ msgstr "Chad"
#: ../src/common/util.c:1223
msgid "Internet Communication Services"
msgstr "İnternet İletişim Hizmetleri"
msgstr ""
#: ../src/common/util.c:1224
msgid "French Southern Territories"
@@ -2937,7 +2936,7 @@ msgstr "Türkiye"
#: ../src/common/util.c:1235
msgid "Travel and Tourism"
msgstr "Seyahat ve Turizm"
msgstr ""
#: ../src/common/util.c:1236
msgid "Trinidad and Tobago"
@@ -3017,7 +3016,7 @@ msgstr "Samoa"
#: ../src/common/util.c:1255
msgid "Adult Entertainment"
msgstr "Yetişkin Eğlence"
msgstr ""
#: ../src/common/util.c:1256
msgid "Yemen"
@@ -3053,7 +3052,7 @@ msgstr ""
#: ../src/common/dbus/dbus-client.c:114 ../src/common/dbus/dbus-client.c:128
msgid "Failed to complete Command"
msgstr "Komut başarısız"
msgstr ""
#: ../src/common/dbus/dbus-plugin.c:30
msgid "remote access"
+22 -24
View File
@@ -5,16 +5,14 @@
# Translators:
# Aron Xu <happyaron.xu@gmail.com>, 2010
# Dalin <ayi880@hotmail.com>, 2003
# Eleanor Chen <chenyueg@gmail.com>, 2010
# highwind <highwindmx@126.com>, 2014
# bababababanana1, 2014
# Michael Jay Tong <michaeljayt@gmail.com>, 2014
# chenyueg <chenyueg@gmail.com>, 2010
# michaeljayt <michaeljayt@gmail.com>, 2014
# Minor revision by Walte <webmaster@www.linuxfans.org>, 2003
# Rongjun Mu <elanmu@sina.com>, 2003
# Rongjun Mu <rongjunmu+i18n@gmail.com>, 2004
# Sarah Smith <sarahs@redhat.com>, 2003
# SEPTEM <septeman@gmail.com>, 2006
# Tong Hui <tonghuix@gmail.com>, 2014
# tonghuix <tonghuix@gmail.com>, 2014
# Zhuyuan Liu <gtkdict@yahoo.com.cn>, 2005
# Zong Yaotang <zong@cosix.com.au>, 2002
msgid ""
@@ -22,8 +20,8 @@ msgstr ""
"Project-Id-Version: HexChat\n"
"Report-Msgid-Bugs-To: www.hexchat.org\n"
"POT-Creation-Date: 2014-05-14 13:20-0400\n"
"PO-Revision-Date: 2014-11-02 15:21+0000\n"
"Last-Translator: Michael Jay Tong <michaeljayt@gmail.com>\n"
"PO-Revision-Date: 2014-05-14 17:20+0000\n"
"Last-Translator: TingPing <tingping@tingping.se>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/hexchat/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -291,12 +289,12 @@ msgstr "否 "
#: ../src/common/ignore.c:385
#, c-format
msgid "You are being CTCP flooded from %s, ignoring %s\n"
msgstr "您正受到来自 %s 的洗屏攻击,忽略 %s\n"
msgstr "您正受到来自 %s 的 CTCP 洪水攻击,忽略 %s\n"
#: ../src/common/ignore.c:410
#, c-format
msgid "You are being MSG flooded from %s, setting gui_autoopen_dialog OFF.\n"
msgstr "您正受到来自 %s 的 MSG 洪水攻击,设置图形化自动对话框为关闭。\n"
msgstr "您正受到来自 %s 的 MSG 洪水攻击,自动打开图形化对话框参数gui_autoopen_dialog 将设置为关闭。\n"
#: ../src/common/notify.c:558
#, c-format
@@ -310,7 +308,7 @@ msgstr " %-20s 离线\n"
#: ../src/common/outbound.c:72
msgid "No channel joined. Try /join #<channel>\n"
msgstr "没有进入任何频道。请尝试输入 /join #<channel>\n"
msgstr "没有进入任何频道。请尝试 /join #<channel>\n"
#: ../src/common/outbound.c:78
msgid "Not connected. Try /server <host> [<port>]\n"
@@ -987,7 +985,7 @@ msgstr "%C22*%O$t%C26$1%O 给了 %C18$2%O 发言权"
#: ../src/common/textevents.h:114
msgid "%C23*%O$tConnected. Now logging in."
msgstr "%C23*%O$t 已连接。正在登录..."
msgstr "%C23*%O$tC 已连接。正在登录..."
#: ../src/common/textevents.h:117
msgid "%C23*%O$tConnecting to %C29$1%C (%C23$2:$3%O)"
@@ -1424,7 +1422,7 @@ msgstr "此人的主机名"
#: ../src/common/text.c:1035
msgid "The account of the person"
msgstr "这个人的帐号"
msgstr ""
#: ../src/common/text.c:1039 ../src/common/text.c:1046
#: ../src/common/text.c:1053 ../src/common/text.c:1265
@@ -3983,27 +3981,27 @@ msgstr "编辑此菜单..."
#: ../src/fe-gtk/menu.c:1292
msgid "Marker line disabled."
msgstr "标记线已禁用."
msgstr ""
#: ../src/fe-gtk/menu.c:1298
msgid "Marker line never set."
msgstr "标记线永不设置."
msgstr ""
#: ../src/fe-gtk/menu.c:1302
msgid "Marker line reset manually."
msgstr "标记线手动重设."
msgstr ""
#: ../src/fe-gtk/menu.c:1304
msgid "Marker line reset because exceeded scrollback limit."
msgstr "因超越回滚限制重设标记线."
msgstr ""
#: ../src/fe-gtk/menu.c:1306
msgid "Marker line reset by CLEAR command."
msgstr "使用CLEAR命令重设标记线."
msgstr ""
#: ../src/fe-gtk/menu.c:1308
msgid "Marker line state unknown."
msgstr "标记线状态未知."
msgstr ""
#: ../src/fe-gtk/menu.c:1395
msgid "Retrieve channel list..."
@@ -4335,7 +4333,7 @@ msgstr "重置标记线"
#: ../src/fe-gtk/menu.c:1823
msgid "Move to Marker Line"
msgstr "移动至标记线"
msgstr ""
#: ../src/fe-gtk/menu.c:1824
msgid "_Copy Selection"
@@ -4596,7 +4594,7 @@ msgstr "用户名不可留空。"
#: ../src/fe-gtk/servlistgui.c:1578
msgid "You must have two unique nick names."
msgstr "您必须拥有两个昵称."
msgstr ""
#: ../src/fe-gtk/servlistgui.c:1630
msgid ""
@@ -4737,7 +4735,7 @@ msgstr "按字母顺序排练网络列表。使用SHIFT+上下方向键来移动
#: ../src/fe-gtk/servlistgui.c:2168
msgid "_Favor"
msgstr "收藏(_F)"
msgstr "收藏 (_F)"
#: ../src/fe-gtk/servlistgui.c:2169
msgid "Mark or unmark this network as a favorite."
@@ -5433,7 +5431,7 @@ msgstr "托盘图标闪烁于:"
#: ../src/fe-gtk/setup.c:404
msgid "Bounce dock icon on:"
msgstr "弹跳托盘图标于:"
msgstr ""
#: ../src/fe-gtk/setup.c:407 ../src/fe-gtk/setup.c:453
msgid "Blink task bar on:"
@@ -5585,7 +5583,7 @@ msgstr "默认隐藏频道里的进入/离开信息"
#: ../src/fe-gtk/setup.c:485
msgid "Hide nick change messages"
msgstr "隐藏昵称变更信息"
msgstr ""
#: ../src/fe-gtk/setup.c:492
msgid "*!*@*.host"
@@ -6097,7 +6095,7 @@ msgstr "测试全部"
#: ../src/fe-gtk/textgui.c:485
msgid "OK"
msgstr "确认"
msgstr ""
#: ../src/fe-gtk/urlgrab.c:198
msgid ": URL Grabber"
+1 -1
View File
@@ -1,4 +1,4 @@
# HexChat [![Build Status](https://travis-ci.org/hexchat/hexchat.png)](https://travis-ci.org/hexchat/hexchat) [![Build Status](http://nekomimi.cloudapp.net:8080/job/hexchat/badge/icon)](http://nekomimi.cloudapp.net:8080/job/hexchat/) [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/hexchat/hexchat/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
# HexChat [![Build Status](http://img.shields.io/travis/hexchat/hexchat.svg?style=flat)](https://travis-ci.org/hexchat/hexchat) [![Build Status](http://img.shields.io/jenkins/s/http/nekomimi.cloudapp.net:8080/hexchat.svg?style=flat)](http://nekomimi.cloudapp.net:8080/job/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.
+7 -7
View File
@@ -2,7 +2,7 @@
noinst_LIBRARIES = libhexchatcommon.a
AM_CPPFLAGS = $(COMMON_CFLAGS)
AM_CPPFLAGS = $(COMMON_CFLAGS) -I$(top_srcdir)
EXTRA_DIST = \
cfgfiles.h \
@@ -69,14 +69,14 @@ libhexchatcommon_a_CFLAGS = $(LIBPROXY_CFLAGS)
textenums.h: textevents.h
textevents.h: textevents.in make-te
$(AM_V_GEN) ./make-te < textevents.in > textevents.h 2> textenums.h
textevents.h: $(srcdir)/textevents.in make-te
$(AM_V_GEN) ./make-te < $< > $@ 2> textenums.h
marshal.h: marshalers.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --header $(srcdir)/marshalers.list > $@
marshal.h: $(srcdir)/marshalers.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --header $< > $@
marshal.c: marshalers.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --body $(srcdir)/marshalers.list > $@
marshal.c: $(srcdir)/marshalers.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --body $< > $@
BUILT_SOURCES = textenums.h textevents.h marshal.c marshal.h
+2 -5
View File
@@ -57,10 +57,6 @@ list_addentry (GSList ** list, char *cmd, char *name)
size_t name_len;
size_t cmd_len = 1;
/* remove <2.8.0 stuff */
if (!strcmp (cmd, "away") && !strcmp (name, "BACK"))
return;
if (cmd)
cmd_len = strlen (cmd) + 1;
name_len = strlen (name) + 1;
@@ -782,6 +778,7 @@ load_default_config(void)
prefs.hex_input_tray_hilight = 1;
prefs.hex_input_tray_priv = 1;
prefs.hex_irc_cap_server_time = 1;
prefs.hex_irc_logging = 1;
prefs.hex_irc_who_join = 1; /* Can kick with inordinate amount of channels, required for some of our features though, TODO: add cap like away check? */
prefs.hex_irc_whois_front = 1;
prefs.hex_net_auto_reconnect = 1;
@@ -1314,7 +1311,7 @@ cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[])
}
int
hexchat_open_file (char *file, int flags, int mode, int xof_flags)
hexchat_open_file (const char *file, int flags, int mode, int xof_flags)
{
char *buf;
int fd;
+1 -1
View File
@@ -48,7 +48,7 @@ void list_loadconf (char *file, GSList ** list, char *defaultconf);
int list_delentry (GSList ** list, char *name);
void list_addentry (GSList ** list, char *cmd, char *name);
int cmd_set (session *sess, char *tbuf, char *word[], char *word_eol[]);
int hexchat_open_file (char *file, int flags, int mode, int xof_flags);
int hexchat_open_file (const char *file, int flags, int mode, int xof_flags);
FILE *hexchat_fopen_file (const char *file, const char *mode, int xof_flags);
#define XOF_DOMODE 1
+5 -5
View File
@@ -77,8 +77,8 @@
<ClCompile Include="hexchat.c" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\config-win32.h.tt" />
<ClInclude Include="..\..\config-win32.h" />
<None Include="..\..\win32\config.h.tt" />
<ClInclude Include="..\..\config.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{87554B59-006C-4D94-9714-897B27067BA3}</ProjectGuid>
@@ -125,7 +125,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
@@ -142,7 +142,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
@@ -160,7 +160,7 @@
<PreBuildEvent>
<Command><![CDATA[
SET SOLUTIONDIR=$(SolutionDir)..\
powershell -File "$(SolutionDir)..\version-template.ps1" "$(SolutionDir)..\config-win32.h.tt" "$(SolutionDir)..\config-win32.h"
powershell -File "$(SolutionDir)..\win32\version-template.ps1" "$(SolutionDir)..\win32\config.h.tt" "$(SolutionDir)..\config.h"
"$(DepsRoot)\bin\glib-genmarshal.exe" --prefix=_hexchat_marshal --header "$(ProjectDir)marshalers.list" > "$(ProjectDir)marshal.h"
"$(DepsRoot)\bin\glib-genmarshal.exe" --prefix=_hexchat_marshal --body "$(ProjectDir)marshalers.list" > "$(ProjectDir)marshal.c"
+2 -2
View File
@@ -104,7 +104,7 @@
<ClInclude Include="hexchat-plugin.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\config-win32.h">
<ClInclude Include="..\..\config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="typedef.h">
@@ -195,6 +195,6 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\config-win32.h.tt" />
<None Include="..\..\win32\config.h.tt" />
</ItemGroup>
</Project>
+1 -1
View File
@@ -15,7 +15,7 @@ BUILT_SOURCES = \
CLEANFILES = $(BUILT_SOURCES)
AM_CPPFLAGS = $(COMMON_CFLAGS) $(DBUS_CFLAGS)
AM_CPPFLAGS = $(COMMON_CFLAGS) $(DBUS_CFLAGS) -I$(top_srcdir)/src/common
noinst_PROGRAMS = example
example_SOURCES = example.c
+2 -2
View File
@@ -22,8 +22,8 @@
#define GLIB_DISABLE_DEPRECATION_WARNINGS
#include <dbus/dbus-glib.h>
#include "dbus-client.h"
#include "../hexchat.h"
#include "../hexchatc.h"
#include "hexchat.h"
#include "hexchatc.h"
#define DBUS_SERVICE "org.hexchat.service"
#define DBUS_REMOTE "/org/hexchat/Remote"
+2 -1
View File
@@ -25,7 +25,8 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <glib/gi18n.h>
#include "../hexchat-plugin.h"
#include "hexchat-plugin.h"
#include "dbus-plugin.h"
#define PNAME _("remote access")
#define PDESC _("plugin for remote access using DBUS")
+1 -1
View File
@@ -33,7 +33,7 @@ guint command_id;
guint server_id;
static void
write_error (char *message,
write_error (const char *message,
GError **error)
{
if (error == NULL || *error == NULL) {
+1
View File
@@ -103,6 +103,7 @@ void fe_dcc_remove (struct DCC *dcc);
int fe_dcc_open_recv_win (int passive);
int fe_dcc_open_send_win (int passive);
int fe_dcc_open_chat_win (int passive);
void fe_sslalert_open (struct server *serv, void (*callback)(int, void *), void *callback_data);
void fe_clear_channel (struct session *sess);
void fe_session_callback (struct session *sess);
void fe_server_callback (struct server *serv);
+20 -4
View File
@@ -88,11 +88,19 @@ struct _hexchat_plugin
void (*hexchat_print) (hexchat_plugin *ph,
const char *text);
void (*hexchat_printf) (hexchat_plugin *ph,
const char *format, ...);
const char *format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 2, 3)))
#endif
;
void (*hexchat_command) (hexchat_plugin *ph,
const char *command);
void (*hexchat_commandf) (hexchat_plugin *ph,
const char *format, ...);
const char *format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 2, 3)))
#endif
;
int (*hexchat_nickcmp) (hexchat_plugin *ph,
const char *s1,
const char *s2);
@@ -254,7 +262,11 @@ hexchat_print (hexchat_plugin *ph,
void
hexchat_printf (hexchat_plugin *ph,
const char *format, ...);
const char *format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 2, 3)))
#endif
;
void
hexchat_command (hexchat_plugin *ph,
@@ -262,7 +274,11 @@ hexchat_command (hexchat_plugin *ph,
void
hexchat_commandf (hexchat_plugin *ph,
const char *format, ...);
const char *format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 2, 3)))
#endif
;
int
hexchat_nickcmp (hexchat_plugin *ph,
+1 -35
View File
@@ -933,6 +933,7 @@ xchat_init (void)
defaultconf_urlhandlers);
servlist_init (); /* load server list */
_SSL_certlist_init (); /* load known certificate fingerprints */
/* if we got a URL, don't open the server list GUI */
if (!prefs.hex_gui_slist_skip && !arg_url && !arg_urls)
@@ -982,47 +983,12 @@ hexchat_exit (void)
fe_exit ();
}
#ifndef WIN32
static int
child_handler (gpointer userdata)
{
int pid = GPOINTER_TO_INT (userdata);
if (waitpid (pid, 0, WNOHANG) == pid)
return 0; /* remove timeout handler */
return 1; /* keep the timeout handler */
}
#endif
void
hexchat_exec (const char *cmd)
{
#ifdef WIN32
util_exec (cmd);
#else
int pid = util_exec (cmd);
if (pid != -1)
/* zombie avoiding system. Don't ask! it has to be like this to work
with zvt (which overrides the default handler) */
fe_timeout_add (1000, child_handler, GINT_TO_POINTER (pid));
#endif
}
void
hexchat_execv (char * const argv[])
{
#ifdef WIN32
util_execv (argv);
#else
int pid = util_execv (argv);
if (pid != -1)
/* zombie avoiding system. Don't ask! it has to be like this to work
with zvt (which overrides the default handler) */
fe_timeout_add (1000, child_handler, GINT_TO_POINTER (pid));
#endif
}
static void
set_locale (void)
+4 -32
View File
@@ -17,14 +17,11 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifdef WIN32
#include "../../config-win32.h"
#else
#include "../../config.h"
#endif
#include "config.h"
#include <glib.h>
#include <glib/gstdio.h>
#include <glib/gi18n.h>
#include <time.h> /* need time_t */
@@ -48,17 +45,6 @@
#define vsnprintf _vsnprintf
#endif
#ifdef USE_DEBUG
#define malloc(n) hexchat_malloc(n, __FILE__, __LINE__)
#define realloc(n, m) hexchat_realloc(n, m, __FILE__, __LINE__)
#define free(n) hexchat_dfree(n, __FILE__, __LINE__)
#define strdup(n) hexchat_strdup(n, __FILE__, __LINE__)
void *hexchat_malloc (int size, char *file, int line);
void *hexchat_strdup (char *str, char *file, int line);
void hexchat_dfree (void *buf, char *file, int line);
void *hexchat_realloc (char *old, int len, char *file, int line);
#endif
#ifdef SOCKS
#ifdef __sgi
#include <sys/time.h>
@@ -69,6 +55,7 @@ void *hexchat_realloc (char *old, int len, char *file, int line);
#ifdef USE_OPENSSL
#include <openssl/ssl.h> /* SSL_() */
#include "ssl.h"
#endif
#ifdef __EMX__ /* for o/s 2 */
@@ -80,9 +67,7 @@ void *hexchat_realloc (char *old, int len, char *file, int line);
#endif
/* force a 32bit CMP.L */
#define CMPL(a, c0, c1, c2, c3) (a == (guint32)(c0 | (c1 << 8) | (c2 << 16) | (c3 << 24)))
#define WORDL(c0, c1, c2, c3) (guint32)(c0 | (c1 << 8) | (c2 << 16) | (c3 << 24))
#define WORDW(c0, c1) (guint16)(c0 | (c1 << 8))
#ifdef WIN32 /* for win32 */
#define OFLAGS O_BINARY
@@ -109,20 +94,6 @@ void *hexchat_realloc (char *old, int len, char *file, int line);
#define USERNAMELEN 10
#define HIDDEN_CHAR 8 /* invisible character for xtext */
#if defined(ENABLE_NLS) && !defined(_)
# include <libintl.h>
# define _(x) gettext(x)
# ifdef gettext_noop
# define N_(String) gettext_noop (String)
# else
# define N_(String) (String)
# endif
#endif
#if !defined(_)
# define N_(String) (String)
# define _(x) (x)
#endif
struct nbexec
{
int myfd;
@@ -627,6 +598,7 @@ typedef struct server
#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 */
struct cert_info *cert_info;
#endif
} server;
-1
View File
@@ -57,6 +57,5 @@ void session_free (session *killsess);
void lag_check (void);
void hexchat_exit (void);
void hexchat_exec (const char *cmd);
void hexchat_execv (char * const argv[]);
#endif
+1 -1
View File
@@ -47,7 +47,7 @@
#else
#include "../../config-win32.h"
#include "../../config.h"
#ifdef USE_IPV6
#include <winsock2.h>
#include <ws2tcpip.h>
+1 -1
View File
@@ -42,7 +42,7 @@
#include <string.h>
#include <stdlib.h>
int main()
int main(void)
{
char name[512];
char num[512];
+2 -4
View File
@@ -23,12 +23,10 @@
#include <stdio.h>
#include <glib.h>
#ifdef WIN32
#include "../../config-win32.h" /* grab USE_IPV6 and LOOKUPD defines */
#else
#ifndef WIN32
#include <unistd.h>
#include "../../config.h"
#endif
#include "../../config.h"
#define WANTSOCKET
#define WANTARPA
+10 -43
View File
@@ -56,9 +56,6 @@
#include "outbound.h"
#include "chanopt.h"
#ifdef USE_DEBUG
extern int current_mem_usage;
#endif
#define TBUFSIZE 4096
static void help (session *sess, char *tbuf, char *helpcmd, int quiet);
@@ -922,10 +919,6 @@ cmd_debug (struct session *sess, char *tbuf, char *word[], char *word_eol[])
"current_tab: %p\n\n",
sess->server->front_session, current_tab);
PrintText (sess, tbuf);
#ifdef USE_DEBUG
sprintf (tbuf, "current mem: %d\n\n", current_mem_usage);
PrintText (sess, tbuf);
#endif /* !MEMORY_DEBUG */
return TRUE;
}
@@ -1841,8 +1834,10 @@ cmd_exec (struct session *sess, char *tbuf, char *word[], char *word_eol[])
char **argv;
int argc;
my_poptParseArgvString (cmd, &argc, &argv);
g_shell_parse_argv (cmd, &argc, &argv, NULL);
execvp (argv[0], argv);
g_strfreev (argv);
}
/* not reached unless error */
/*printf("exec error\n");*/
@@ -2539,7 +2534,6 @@ cmd_load (struct session *sess, char *tbuf, char *word[], char *word_eol[])
char *file, *buf;
#ifdef USE_PLUGIN
char *error, *arg;
int len;
#endif
if (!word[2][0])
@@ -2560,16 +2554,7 @@ cmd_load (struct session *sess, char *tbuf, char *word[], char *word_eol[])
}
#ifdef USE_PLUGIN
len = strlen (word[2]);
#ifdef WIN32
if (len > 4 && g_ascii_strcasecmp (".dll", word[2] + len - 4) == 0)
#else
#if defined(__hpux)
if (len > 3 && g_ascii_strcasecmp (".sl", word[2] + len - 3) == 0)
#else
if (len > 3 && g_ascii_strcasecmp (".so", word[2] + len - 3) == 0)
#endif
#endif
if (g_str_has_suffix (word[2], "."G_MODULE_SUFFIX))
{
arg = NULL;
if (word_eol[3][0])
@@ -3565,18 +3550,9 @@ static int
cmd_unload (struct session *sess, char *tbuf, char *word[], char *word_eol[])
{
#ifdef USE_PLUGIN
int len, by_file = FALSE;
gboolean by_file = FALSE;
len = strlen (word[2]);
#ifdef WIN32
if (len > 4 && g_ascii_strcasecmp (word[2] + len - 4, ".dll") == 0)
#else
#if defined(__hpux)
if (len > 3 && g_ascii_strcasecmp (word[2] + len - 3, ".sl") == 0)
#else
if (len > 3 && g_ascii_strcasecmp (word[2] + len - 3, ".so") == 0)
#endif
#endif
if (g_str_has_suffix (word[2], "."G_MODULE_SUFFIX))
by_file = TRUE;
switch (plugin_kill (word[2], by_file))
@@ -3599,18 +3575,9 @@ static int
cmd_reload (struct session *sess, char *tbuf, char *word[], char *word_eol[])
{
#ifdef USE_PLUGIN
int len, by_file = FALSE;
gboolean by_file = FALSE;
len = strlen (word[2]);
#ifdef WIN32
if (len > 4 && g_ascii_strcasecmp (word[2] + len - 4, ".dll") == 0)
#else
#if defined(__hpux)
if (len > 3 && g_ascii_strcasecmp (word[2] + len - 3, ".sl") == 0)
#else
if (len > 3 && g_ascii_strcasecmp (word[2] + len - 3, ".so") == 0)
#endif
#endif
if (g_str_has_suffix (word[2], "."G_MODULE_SUFFIX))
by_file = TRUE;
switch (plugin_reload (sess, word[2], by_file))
@@ -3746,8 +3713,8 @@ userlist_cb (struct User *user, session *sess)
else
lt = time (0) - user->lasttalk;
PrintTextf (sess,
"\00306%s\t\00314[\00310%-38s\00314] \017ov\0033=\017%d%d away=%u lt\0033=\017%d\n",
user->nick, user->hostname, user->op, user->voice, user->away, lt);
"\00306%s\t\00314[\00310%-38s\00314] \017ov\0033=\017%d%d away=%u lt\0033=\017%ld\n",
user->nick, user->hostname, user->op, user->voice, user->away, (long)lt);
return TRUE;
}
+9 -7
View File
@@ -26,6 +26,8 @@
#define g_ascii_strcasecmp stricmp
#endif
#define _(x) hexchat_gettext(ph,x)
static hexchat_plugin *ph; /* plugin handle */
static GSList *timer_list = NULL;
@@ -68,13 +70,13 @@ timer_del_ref (int ref, int quiet)
{
timer_del (tim);
if (!quiet)
hexchat_printf (ph, "Timer %d deleted.\n", ref);
hexchat_printf (ph, _("Timer %d deleted.\n"), ref);
return;
}
list = list->next;
}
if (!quiet)
hexchat_print (ph, "No such ref number found.\n");
hexchat_print (ph, _("No such ref number found.\n"));
}
static int
@@ -138,17 +140,17 @@ timer_showlist (void)
if (timer_list == NULL)
{
hexchat_print (ph, "No timers installed.\n");
hexchat_print (ph, HELP);
hexchat_print (ph, _("No timers installed.\n"));
hexchat_print (ph, _(HELP));
return;
}
/* 00000 00000000 0000000 abc */
hexchat_print (ph, "\026 Ref# Seconds Repeat Command \026\n");
hexchat_print (ph, _("\026 Ref# Seconds Repeat Command \026\n"));
list = timer_list;
while (list)
{
tim = list->data;
hexchat_printf (ph, "%5d %8.1f %7d %s\n", tim->ref, tim->timeout,
hexchat_printf (ph, _("%5d %8.1f %7d %s\n"), tim->ref, tim->timeout,
tim->repeat, tim->command);
list = list->next;
}
@@ -221,7 +223,7 @@ hexchat_plugin_init
*plugin_desc = "IrcII style /TIMER command";
*plugin_version = "";
hexchat_hook_command (ph, "TIMER", HEXCHAT_PRI_NORM, timer_cb, HELP, 0);
hexchat_hook_command (ph, "TIMER", HEXCHAT_PRI_NORM, timer_cb, _(HELP), 0);
return 1; /* return 1 for success */
}
+21 -15
View File
@@ -460,17 +460,11 @@ plugin_auto_load (session *sess)
for_files (lib_dir, "hcupd.dll", plugin_auto_load_cb);
for_files (lib_dir, "hcwinamp.dll", plugin_auto_load_cb);
for_files (lib_dir, "hcsysinfo.dll", plugin_auto_load_cb);
#else
for_files (lib_dir, "*."G_MODULE_SUFFIX, plugin_auto_load_cb);
#endif
for_files (sub_dir, "*.dll", plugin_auto_load_cb);
#else
#if defined(__hpux)
for_files (lib_dir, "*.sl", plugin_auto_load_cb);
for_files (sub_dir, "*.sl", plugin_auto_load_cb);
#else
for_files (lib_dir, "*.so", plugin_auto_load_cb);
for_files (sub_dir, "*.so", plugin_auto_load_cb);
#endif
#endif
for_files (sub_dir, "*."G_MODULE_SUFFIX, plugin_auto_load_cb);
g_free (sub_dir);
}
@@ -1757,6 +1751,7 @@ hexchat_pluginpref_set_str_real (hexchat_plugin *pl, const char *var, const char
int prevSetting;
char *confname;
char *confname_tmp;
char *escaped_value;
char *buffer;
char *buffer_tmp;
char line_buffer[512]; /* the same as in cfg_put_str */
@@ -1782,7 +1777,9 @@ hexchat_pluginpref_set_str_real (hexchat_plugin *pl, const char *var, const char
{
if (mode)
{
buffer = g_strdup_printf ("%s = %s\n", var, value);
escaped_value = g_strescape (value, NULL);
buffer = g_strdup_printf ("%s = %s\n", var, escaped_value);
g_free (escaped_value);
write (fhOut, buffer, strlen (buffer));
g_free (buffer);
close (fhOut);
@@ -1830,7 +1827,9 @@ hexchat_pluginpref_set_str_real (hexchat_plugin *pl, const char *var, const char
{
if (mode) /* overwrite the existing matching setting if we are in save mode */
{
buffer = g_strdup_printf ("%s = %s\n", var, value);
escaped_value = g_strescape (value, NULL);
buffer = g_strdup_printf ("%s = %s\n", var, escaped_value);
g_free (escaped_value);
}
else /* erase the setting in delete mode */
{
@@ -1854,7 +1853,9 @@ hexchat_pluginpref_set_str_real (hexchat_plugin *pl, const char *var, const char
if (!prevSetting && mode) /* var doesn't exist currently, append if we're in save mode */
{
buffer = g_strdup_printf ("%s = %s\n", var, value);
escaped_value = g_strescape (value, NULL);
buffer = g_strdup_printf ("%s = %s\n", var, escaped_value);
g_free (escaped_value);
write (fhOut, buffer, strlen (buffer));
g_free (buffer);
}
@@ -1894,7 +1895,8 @@ hexchat_pluginpref_set_str (hexchat_plugin *pl, const char *var, const char *val
static int
hexchat_pluginpref_get_str_real (hexchat_plugin *pl, const char *var, char *dest, int dest_len)
{
char *confname, *canon, *cfg;
char *confname, *canon, *cfg, *unescaped_value;
char buf[512];
canon = g_strdup (pl->name);
canonalize_key (canon);
@@ -1909,12 +1911,16 @@ hexchat_pluginpref_get_str_real (hexchat_plugin *pl, const char *var, char *dest
g_free (confname);
if (!cfg_get_str (cfg, var, dest, dest_len))
if (!cfg_get_str (cfg, var, buf, sizeof(buf)))
{
g_free (cfg);
return 0;
}
unescaped_value = g_strcompress (buf);
g_strlcpy (dest, unescaped_value, dest_len);
g_free (unescaped_value);
g_free (cfg);
return 1;
}
+121 -148
View File
@@ -272,7 +272,7 @@ tcp_send (server *serv, char *buf)
}*/
void
tcp_sendf (server *serv, char *fmt, ...)
tcp_sendf (server *serv, const char *fmt, ...)
{
va_list args;
/* keep this buffer in BSS. Converting UTF-8 to ISO-8859-x might make the
@@ -587,43 +587,76 @@ server_stopconnecting (server * serv)
static void
ssl_cb_info (SSL * s, int where, int ret)
{
/* char buf[128];*/
return; /* FIXME: make debug level adjustable in serverlist or settings */
/* snprintf (buf, sizeof (buf), "%s (%d)", SSL_state_string_long (s), where);
if (g_sess)
EMIT_SIGNAL (XP_TE_SSLMESSAGE, g_sess, buf, NULL, NULL, NULL, 0);
else
fprintf (stderr, "%s\n", buf);*/
return;
}
static int
ssl_cb_verify (int ok, X509_STORE_CTX * ctx)
{
char subject[256];
char issuer[256];
char buf[512];
return TRUE; /* always ok */
}
static void
ssl_do_connect_finish (server *serv, int success, int verify_error)
{
/*
we land here after ssl_do_connect(). possible execution flows are:
ssl_do_connect -> ssl_do_connect_finish (with no user interaction)
ssl_do_connect -> sslalert.c -> ssl_do_connect_finish (prompt user to accept/reject certificate)
*/
X509_NAME_oneline (X509_get_subject_name (ctx->current_cert), subject,
sizeof (subject));
X509_NAME_oneline (X509_get_issuer_name (ctx->current_cert), issuer,
sizeof (issuer));
if (success)
{
/* connection has been established */
server_stopconnecting (serv);
server_connected (serv); /* activate gtk poll */
}
else
{
/*
the connection failed. most likely because the certificate is invalid
and the user hit the cancel button to reject the connection
*/
char buf[128];
snprintf (buf, sizeof (buf), "%s.? (%d)",
X509_verify_cert_error_string (verify_error),
verify_error);
EMIT_SIGNAL (XP_TE_CONNFAIL, serv->server_session, buf, NULL, NULL,
NULL, 0);
server_cleanup (serv);
}
}
snprintf (buf, sizeof (buf), "* Subject: %s", subject);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, g_sess, buf, NULL, NULL, NULL, 0);
snprintf (buf, sizeof (buf), "* Issuer: %s", issuer);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, g_sess, buf, NULL, NULL, NULL, 0);
return (TRUE); /* always ok */
static void
ssl_alert_cb (int user_action, void *callback_data)
{
/* interpret the user response and possibly abandon the connection */
ssl_alert_context *context = callback_data;
switch (user_action)
{
case SSLALERT_RESPONSE_ABORT: /* user wants to abandon connection */
ssl_do_connect_finish (context->serv, FALSE, context->verify_error);
break;
case SSLALERT_RESPONSE_ACCEPT: /* user wants to accept the certificate ONLY this time */
ssl_do_connect_finish (context->serv, TRUE, context->verify_error);
break;
case SSLALERT_RESPONSE_SAVE: /* user wants to accept the certificate AND remember it for next time */
_SSL_certlist_cert_add (context->serv, &context->cert);
_SSL_certlist_save ();
ssl_do_connect_finish (context->serv, TRUE, context->verify_error);
break;
}
free (context);
}
static int
ssl_do_connect (server * serv)
{
char buf[128];
struct cert_info cert_info;
ssl_alert_context *cb_context;
int cert_error, verify_result;
g_sess = serv->server_session;
if (SSL_connect (serv->ssl) <= 0)
@@ -647,132 +680,12 @@ ssl_do_connect (server * serv)
if (prefs.hex_net_auto_reconnectonfail)
auto_reconnect (serv, FALSE, -1);
return (0); /* remove it (0) */
return 0; /* remove it (0) */
}
}
g_sess = NULL;
if (SSL_is_init_finished (serv->ssl))
{
struct cert_info cert_info;
struct chiper_info *chiper_info;
int verify_error;
int i;
if (!_SSL_get_cert_info (&cert_info, serv->ssl))
{
snprintf (buf, sizeof (buf), "* Certification info:");
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
snprintf (buf, sizeof (buf), " Subject:");
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
for (i = 0; cert_info.subject_word[i]; i++)
{
snprintf (buf, sizeof (buf), " %s", cert_info.subject_word[i]);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
}
snprintf (buf, sizeof (buf), " Issuer:");
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
for (i = 0; cert_info.issuer_word[i]; i++)
{
snprintf (buf, sizeof (buf), " %s", cert_info.issuer_word[i]);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
}
snprintf (buf, sizeof (buf), " Public key algorithm: %s (%d bits)",
cert_info.algorithm, cert_info.algorithm_bits);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
/*if (cert_info.rsa_tmp_bits)
{
snprintf (buf, sizeof (buf),
" Public key algorithm uses ephemeral key with %d bits",
cert_info.rsa_tmp_bits);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
}*/
snprintf (buf, sizeof (buf), " Sign algorithm %s",
cert_info.sign_algorithm/*, cert_info.sign_algorithm_bits*/);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
snprintf (buf, sizeof (buf), " Valid since %s to %s",
cert_info.notbefore, cert_info.notafter);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
} else
{
snprintf (buf, sizeof (buf), " * No Certificate");
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
}
chiper_info = _SSL_get_cipher_info (serv->ssl); /* static buffer */
snprintf (buf, sizeof (buf), "* Cipher info:");
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL, NULL,
0);
snprintf (buf, sizeof (buf), " Version: %s, cipher %s (%u bits)",
chiper_info->version, chiper_info->chiper,
chiper_info->chiper_bits);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL, NULL,
0);
verify_error = SSL_get_verify_result (serv->ssl);
switch (verify_error)
{
case X509_V_OK:
{
X509 *cert = SSL_get_peer_certificate (serv->ssl);
int hostname_err;
if ((hostname_err = _SSL_check_hostname(cert, serv->hostname)) != 0)
{
snprintf (buf, sizeof (buf), "* Verify E: Failed to validate hostname? (%d)%s",
hostname_err, serv->accept_invalid_cert ? " -- Ignored" : "");
if (serv->accept_invalid_cert)
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL, NULL, 0);
else
goto conn_fail;
}
break;
}
/* snprintf (buf, sizeof (buf), "* Verify OK (?)"); */
/* EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL, NULL, 0); */
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
case X509_V_ERR_CERT_HAS_EXPIRED:
if (serv->accept_invalid_cert)
{
snprintf (buf, sizeof (buf), "* Verify E: %s.? (%d) -- Ignored",
X509_verify_cert_error_string (verify_error),
verify_error);
EMIT_SIGNAL (XP_TE_SSLMESSAGE, serv->server_session, buf, NULL, NULL,
NULL, 0);
break;
}
default:
snprintf (buf, sizeof (buf), "%s.? (%d)",
X509_verify_cert_error_string (verify_error),
verify_error);
conn_fail:
EMIT_SIGNAL (XP_TE_CONNFAIL, serv->server_session, buf, NULL, NULL,
NULL, 0);
server_cleanup (serv);
return (0);
}
server_stopconnecting (serv);
/* activate gtk poll */
server_connected (serv);
return (0); /* remove it (0) */
} else
if (!SSL_is_init_finished (serv->ssl))
{
if (serv->ssl->session && serv->ssl->session->time + SSLTMOUT < time (NULL))
{
@@ -784,11 +697,71 @@ conn_fail:
if (prefs.hex_net_auto_reconnectonfail)
auto_reconnect (serv, FALSE, -1);
return (0); /* remove it (0) */
return 0; /* remove it (0) */
}
return (1); /* call it more (1) */
return 1; /* call it more (1) */
}
cert_error = _SSL_get_cert_info (&cert_info, serv->ssl);
serv->cert_info = &cert_info;
/* at this point we check the certificate to make sure it is valid */
verify_result = SSL_get_verify_result (serv->ssl);
switch (verify_result)
{
/* 1) certificate is valid. finish connecting */
case X509_V_OK:
{
X509 *cert = SSL_get_peer_certificate (serv->ssl);
int hostname_err;
if ((hostname_err = _SSL_check_hostname(cert, serv->hostname)) == 0)
{
ssl_do_connect_finish (serv, TRUE, verify_result);
return 0;
}
break;
}
/* 2) certificate has a problem but the user might want to accept it */
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
case X509_V_ERR_CERT_HAS_EXPIRED:
#if 0
if (serv->accept_invalid_cert)
{
ssl_do_connect_finish (serv, TRUE, verify_result);
return 0;
}
#endif
break;
/* 3) certificate has a problem and we should disconnect */
default:
ssl_do_connect_finish (serv, FALSE, verify_result); /* disconnect */
return 0;
}
/* check if this INVALID certificate is on the users whitelist */
if (_SSL_certlist_cert_check (serv, &cert_info))
{
ssl_do_connect_finish (serv, TRUE, verify_result);
return 0;
}
/* this INVALID certificate is not on the whitelist. ask the user what to do */
cb_context = malloc (sizeof (ssl_alert_context));
cb_context->serv = serv;
memcpy (&cb_context->cert, &cert_info, sizeof (cert_info));
cb_context->verify_error = verify_result;
fe_sslalert_open (serv, ssl_alert_cb, cb_context); /* bring up GUI alert */
return 0;
}
#endif
+1 -1
View File
@@ -25,7 +25,7 @@ extern GSList *serv_list;
/* eventually need to keep the tcp_* functions isolated to server.c */
int tcp_send_len (server *serv, char *buf, int len);
int tcp_send (server *serv, char *buf);
void tcp_sendf (server *serv, char *fmt, ...);
void tcp_sendf (server *serv, const char *fmt, ...) G_GNUC_PRINTF (2, 3);
int tcp_send_real (void *ssl, int sok, char *encoding, int using_irc, char *buf, int len);
server *server_new (void);
+226 -13
View File
@@ -28,12 +28,12 @@
#include <openssl/x509v3.h>
#ifdef WIN32
#include <openssl/rand.h> /* RAND_seed() */
#include "../../config-win32.h" /* HAVE_SNPRINTF */
#else
#include "../../config.h"
#endif
#include "../../config.h"
#include <time.h> /* asctime() */
#include <string.h> /* strncpy() */
#include "hexchat.h"
#include "cfgfiles.h"
#include "ssl.h" /* struct cert_info */
#include <glib.h>
@@ -163,12 +163,15 @@ _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl)
/* EVP_PKEY *tmp_pkey; */
char notBefore[64];
char notAfter[64];
unsigned char digest[EVP_MAX_MD_SIZE]; /* SHA-256 fingerprint of the certificate */
int digest_length;
int alg;
int sign_alg;
int i;
if (!(peer_cert = SSL_get_peer_certificate (ssl)))
return (1); /* FATAL? */
return 1; /* FATAL? */
X509_NAME_oneline (X509_get_subject_name (peer_cert), cert_info->subject,
sizeof (cert_info->subject));
@@ -200,6 +203,17 @@ _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl)
EVP_PKEY_free (peer_pkey);
/* compute the fingerprint and make it pretty */
X509_digest (peer_cert, EVP_sha256(), digest, &digest_length);
cert_info->fingerprint[0] = '\0';
for (i = 0; i < digest_length; ++i)
{
char digits[4];
g_snprintf (digits, sizeof(digits), (i?":%02x":"%02x"), digest[i]);
g_strlcat (cert_info->fingerprint, digits, sizeof(cert_info->fingerprint));
}
/* SSL_SESSION_print_fp(stdout, SSL_get_session(ssl)); */
/*
if (ssl->session->sess_cert->peer_rsa_tmp) {
@@ -214,7 +228,7 @@ _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl)
X509_free (peer_cert);
return (0);
return 0;
}
@@ -231,10 +245,62 @@ _SSL_get_cipher_info (SSL * ssl)
sizeof (chiper_info.chiper));
SSL_CIPHER_get_bits (c, &chiper_info.chiper_bits);
return (&chiper_info);
return &chiper_info;
}
/*
* returns zero on success, non-zero on failure.
* "*.freenode.com" matches "ssl.freenode.com" and "irc.freenode.com" but not "chat.irc.freenode.com"
*/
int
_SSL_verify_cert_hostname (struct server *serv, struct cert_info *cert)
{
int i;
for (i = 0; cert->subject_word[i]; i++)
{
char *cname = cert->subject_word[i];
if (strstr (cname, "CN=") == cname)
{
char *host = serv->hostname;
cname += strlen ("CN=");
while (*host && *cname)
{
switch (*cname)
{
case '*': /* wildcard matching */
switch (*host)
{
case '.':
cname++; /* wildcard ends */
break;
default:
host++; /* wildcard continues */
if (!*host)
{
cname++; /* wildcard ends */
}
break;
}
break;
default: /* regular strcmp */
if (*host++ != *cname++)
{
return 1; /* error: mismatch */
}
break;
}
}
if (*host || *cname)
{
return 1; /* error: failed to process both strings completely */
}
return 0; /* success: match */
}
}
return 1; /* error: no CNAME field */
}
int
_SSL_send (SSL * ssl, char *buf, int len)
{
@@ -259,7 +325,7 @@ _SSL_send (SSL * ssl, char *buf, int len)
break;
}
return (num);
return num;
}
@@ -288,7 +354,7 @@ _SSL_recv (SSL * ssl, char *buf, int len)
break;
}
return (num);
return num;
}
@@ -308,7 +374,7 @@ _SSL_socket (SSL_CTX *ctx, int sd)
else
SSL_set_accept_state(ssl);
return (ssl);
return ssl;
}
@@ -318,7 +384,7 @@ _SSL_set_verify (SSL_CTX *ctx, void *verify_callback, char *cacert)
if (!SSL_CTX_set_default_verify_paths (ctx))
{
__SSL_fill_err_buf ("SSL_CTX_set_default_verify_paths");
return (err_buf);
return err_buf;
}
/*
if (cacert)
@@ -326,13 +392,13 @@ _SSL_set_verify (SSL_CTX *ctx, void *verify_callback, char *cacert)
if (!SSL_CTX_load_verify_locations (ctx, cacert, NULL))
{
__SSL_fill_err_buf ("SSL_CTX_load_verify_locations");
return (err_buf);
return err_buf;
}
}
*/
SSL_CTX_set_verify (ctx, SSL_VERIFY_PEER, verify_callback);
return (NULL);
return NULL;
}
@@ -344,6 +410,7 @@ _SSL_close (SSL * ssl)
ERR_remove_state (0); /* free state buffer */
}
/* Hostname validation code based on OpenBSD's libtls. */
static int
@@ -543,4 +610,150 @@ _SSL_check_hostname (X509 *cert, const char *host)
return rv;
return _SSL_check_common_name (cert, host);
}
}
/* Cert list */
static GSList *ssl_certlist = NULL; /* loaded at startup, saved on shutdown */
typedef struct ssl_certlist_item {
char *hostname;
char *fingerprint;
} ssl_certlist_item;
static void
_SSL_certlist_item_free (ssl_certlist_item *item)
{
g_return_if_fail (item != NULL);
if (item->hostname)
g_free (item->hostname);
if (item->fingerprint)
g_free (item->fingerprint);
g_free (item);
}
/* append a new hostname+fingerprint to the certificate list */
static void
_SSL_certlist_item_add (char *hostname, char *fingerprint)
{
int hn_length = strlen (hostname);
int fp_length = strlen (fingerprint);
ssl_certlist_item *item = g_malloc0 (sizeof (ssl_certlist_item));
if (item)
{
item->hostname = g_malloc0 (hn_length + 1);
item->fingerprint = g_malloc0 (fp_length + 1);
if (!item->hostname || !item->fingerprint)
{
_SSL_certlist_item_free (item);
return;
}
g_strlcpy (item->hostname, hostname, hn_length);
g_strlcpy (item->fingerprint, fingerprint, fp_length);
ssl_certlist = g_slist_append (ssl_certlist, item);
}
}
/*
* parse a simple new-line/whitepsace delimited text file of hostname+fingerprint combinations.
* it is not a problem if the file does not exist - we just end up with a empty list.
* it should be pretty safe against corrupted input. example file contents follows:
*
* irc.something.com 01:22:1a:c3:43:e6:35:ff:73:76:17:98:68:2f:2c:00:07:ae:1b:b8:81:a3:8d:0f:a6:a5:bd:dc:80:03:6c:33
* ssl.someircserver.com 02:22:1a:c3:43:e6:35:ff:73:76:17:98:68:2f:2c:00:07:ae:1b:b8:81:a3:8d:0f:a6:a5:bd:dc:80:03:6c:33
* another.com 03:22:1a:c3:43:e6:35:ff:73:76:17:98:68:2f:2c:00:07:ae:1b:b8:81:a3:8d:0f:a6:a5:bd:dc:80:03:6c:33
*/
void
_SSL_certlist_init ()
{
char buf[1024];
char *space, *host, *fp;
FILE *fh;
fh = hexchat_fopen_file ("sslcerts.conf", "r", 0);
if (!fh)
return;
while (fgets (buf, sizeof(buf), fh))
{
space = strchr (buf, ' ');
if (!space)
continue;
*space = '\0';
host = buf;
fp = g_strchomp (space + 1);
if (host[0] && fp[0])
_SSL_certlist_item_add (host, fp);
}
fclose (fh);
}
void
_SSL_certlist_save ()
{
/* write the list back out to disk. if there are no items an empty file is created. */
GSList *list;
ssl_certlist_item *item;
FILE *fh;
fh = hexchat_fopen_file ("sslcerts.conf", "w", 0);
if (fh)
{
list = ssl_certlist;
while (list)
{
item = (ssl_certlist_item*)list->data;
fprintf (fh, "%s %s\n", item->hostname, item->fingerprint);
list = g_slist_next (list);
}
fclose (fh);
}
}
/*
* a "computer" is a hostname + certificate combination. we extract these details
* from the input structures and make an O(n) (worst-case) pass over the list to find
* a match. if the computer is known to us we return 1, and 0 otherwise.
*/
int
_SSL_certlist_cert_check (struct server *serv, struct cert_info *cert)
{
GSList *list;
ssl_certlist_item *item;
if (serv && cert)
{
list = ssl_certlist;
while (list)
{
item = (ssl_certlist_item*)list->data;
if (!g_ascii_strcasecmp (serv->hostname, item->hostname)
&& !g_ascii_strcasecmp (cert->fingerprint, item->fingerprint))
{
return 1; /* the user trusts this computer */
}
list = g_slist_next (list);
}
}
return 0; /* the user does NOT trust this computer */
}
void
_SSL_certlist_cert_add (struct server *serv, struct cert_info *cert)
{
/* called from server.c when the user decides that they want to remember a computer */
_SSL_certlist_item_add (serv->hostname, cert->fingerprint);
}
+22
View File
@@ -31,10 +31,25 @@ struct cert_info {
int sign_algorithm_bits;
char notbefore[32];
char notafter[32];
char fingerprint[128];
int rsa_tmp_bits;
};
enum
{
SSLALERT_RESPONSE_ABORT = 0,
SSLALERT_RESPONSE_ACCEPT = 1,
SSLALERT_RESPONSE_SAVE = 2
};
typedef struct ssl_alert_context
{
struct server *serv;
struct cert_info cert;
int verify_error;
} ssl_alert_context;
struct chiper_info {
char version[16];
char chiper[48];
@@ -55,6 +70,7 @@ void _SSL_close (SSL * ssl);
int _SSL_check_hostname(X509 *cert, const char *host);
int _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl);
struct chiper_info *_SSL_get_cipher_info (SSL * ssl);
int _SSL_verify_cert_hostname (struct server *serv, struct cert_info *cert);
/*char *_SSL_add_keypair (SSL_CTX *ctx, char *privkey, char *cert);*/
/*void _SSL_add_random_keypair(SSL_CTX *ctx, int bits);*/
@@ -82,4 +98,10 @@ int _SSL_recv (SSL * ssl, char *buf, int len);
/*int _SSL_verify_x509(X509 *x509);*/
/* functions for managing the SSL certificate/fingerprint cache */
void _SSL_certlist_init ();
void _SSL_certlist_save ();
int _SSL_certlist_cert_check (struct server *serv, struct cert_info *cert);
void _SSL_certlist_cert_add (struct server *serv, struct cert_info *cert);
#endif
+2 -2
View File
@@ -927,7 +927,7 @@ PrintText (session *sess, char *text)
}
void
PrintTextf (session *sess, char *format, ...)
PrintTextf (session *sess, const char *format, ...)
{
va_list args;
char *buf;
@@ -941,7 +941,7 @@ PrintTextf (session *sess, char *format, ...)
}
void
PrintTextTimeStampf (session *sess, time_t timestamp, char *format, ...)
PrintTextTimeStampf (session *sess, time_t timestamp, const char *format, ...)
{
va_list args;
char *buf;
+2 -2
View File
@@ -43,8 +43,8 @@ void scrollback_load (session *sess);
int text_word_check (char *word, int len);
void PrintText (session *sess, char *text);
void PrintTextTimeStamp (session *sess, char *text, time_t timestamp);
void PrintTextf (session *sess, char *format, ...);
void PrintTextTimeStampf (session *sess, time_t timestamp, char *format, ...);
void PrintTextf (session *sess, const char *format, ...) G_GNUC_PRINTF (2, 3);
void PrintTextTimeStampf (session *sess, time_t timestamp, const char *format, ...) G_GNUC_PRINTF (3, 4);
void log_close (session *sess);
void log_open_or_close (session *sess);
void load_text_events (void);
+1 -1
View File
@@ -429,7 +429,7 @@ regex_match (const GRegex *re, const char *word, int *start, int *end)
#define OPT_PORT "(" PORT ")?"
static GRegex *
make_re (char *grist)
make_re (const char *grist)
{
GRegex *ret;
GError *err = NULL;
+14 -360
View File
@@ -34,17 +34,14 @@
#include <process.h>
#include <io.h>
#include <VersionHelpers.h>
#include "../dirent/dirent-win32.h"
#include "../../config-win32.h"
#else
#include <unistd.h>
#include <pwd.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <dirent.h>
#include "../../config.h"
#endif
#include "../../config.h"
#include <fcntl.h>
#include <errno.h>
#include "hexchat.h"
@@ -74,187 +71,6 @@
#define snprintf g_snprintf
#endif
#ifdef USE_DEBUG
#undef free
#undef malloc
#undef realloc
#undef strdup
int current_mem_usage;
struct mem_block
{
char *file;
void *buf;
int size;
int line;
int total;
struct mem_block *next;
};
struct mem_block *mroot = NULL;
void *
hexchat_malloc (int size, char *file, int line)
{
void *ret;
struct mem_block *new;
current_mem_usage += size;
ret = malloc (size);
if (!ret)
{
printf ("Out of memory! (%d)\n", current_mem_usage);
exit (255);
}
new = malloc (sizeof (struct mem_block));
new->buf = ret;
new->size = size;
new->next = mroot;
new->line = line;
new->file = strdup (file);
mroot = new;
printf ("%s:%d Malloc'ed %d bytes, now \033[35m%d\033[m\n", file, line,
size, current_mem_usage);
return ret;
}
void *
hexchat_realloc (char *old, int len, char *file, int line)
{
char *ret;
ret = hexchat_malloc (len, file, line);
if (ret)
{
strcpy (ret, old);
hexchat_dfree (old, file, line);
}
return ret;
}
void *
hexchat_strdup (char *str, char *file, int line)
{
void *ret;
struct mem_block *new;
int size;
size = strlen (str) + 1;
current_mem_usage += size;
ret = malloc (size);
if (!ret)
{
printf ("Out of memory! (%d)\n", current_mem_usage);
exit (255);
}
strcpy (ret, str);
new = malloc (sizeof (struct mem_block));
new->buf = ret;
new->size = size;
new->next = mroot;
new->line = line;
new->file = strdup (file);
mroot = new;
printf ("%s:%d strdup (\"%-.40s\") size: %d, total: \033[35m%d\033[m\n",
file, line, str, size, current_mem_usage);
return ret;
}
void
hexchat_mem_list (void)
{
struct mem_block *cur, *p;
GSList *totals = 0;
GSList *list;
cur = mroot;
while (cur)
{
list = totals;
while (list)
{
p = list->data;
if (p->line == cur->line &&
strcmp (p->file, cur->file) == 0)
{
p->total += p->size;
break;
}
list = list->next;
}
if (!list)
{
cur->total = cur->size;
totals = g_slist_prepend (totals, cur);
}
cur = cur->next;
}
fprintf (stderr, "file line size num total\n");
list = totals;
while (list)
{
cur = list->data;
fprintf (stderr, "%-15.15s %6d %6d %6d %6d\n", cur->file, cur->line,
cur->size, cur->total/cur->size, cur->total);
list = list->next;
}
}
void
hexchat_dfree (void *buf, char *file, int line)
{
struct mem_block *cur, *last;
if (buf == NULL)
{
printf ("%s:%d \033[33mTried to free NULL\033[m\n", file, line);
return;
}
last = NULL;
cur = mroot;
while (cur)
{
if (buf == cur->buf)
break;
last = cur;
cur = cur->next;
}
if (cur == NULL)
{
printf ("%s:%d \033[31mTried to free unknown block %lx!\033[m\n",
file, line, (unsigned long) buf);
/* abort(); */
free (buf);
return;
}
current_mem_usage -= cur->size;
printf ("%s:%d Free'ed %d bytes, usage now \033[35m%d\033[m\n",
file, line, cur->size, current_mem_usage);
if (last)
last->next = cur->next;
else
mroot = cur->next;
free (cur->file);
free (cur);
}
#define malloc(n) hexchat_malloc(n, __FILE__, __LINE__)
#define realloc(n, m) hexchat_realloc(n, m, __FILE__, __LINE__)
#define free(n) hexchat_dfree(n, __FILE__, __LINE__)
#define strdup(n) hexchat_strdup(n, __FILE__, __LINE__)
#endif /* MEMORY_DEBUG */
char *
file_part (char *file)
{
@@ -935,27 +751,26 @@ break_while:
void
for_files (char *dirname, char *mask, void callback (char *file))
{
DIR *dir;
struct dirent *ent;
GDir *dir;
const gchar *entry_name;
char *buf;
dir = opendir (dirname);
dir = g_dir_open (dirname, 0, NULL);
if (dir)
{
while ((ent = readdir (dir)))
while ((entry_name = g_dir_read_name (dir)))
{
if (strcmp (ent->d_name, ".") && strcmp (ent->d_name, ".."))
if (strcmp (entry_name, ".") && strcmp (entry_name, ".."))
{
if (match (mask, ent->d_name))
if (match (mask, entry_name))
{
buf = malloc (strlen (dirname) + strlen (ent->d_name) + 2);
sprintf (buf, "%s" G_DIR_SEPARATOR_S "%s", dirname, ent->d_name);
buf = g_build_filename (dirname, entry_name, NULL);
callback (buf);
free (buf);
g_free (buf);
}
}
}
closedir (dir);
g_dir_close (dir);
}
}
@@ -1299,171 +1114,10 @@ country_search (char *pattern, void *ud, void (*print)(void *, char *, ...))
}
}
/* I think gnome1.0.x isn't necessarily linked against popt, ah well! */
/* !!! For now use this inlined function, or it would break fe-text building */
/* .... will find a better solution later. */
/*#ifndef USE_GNOME*/
/* this is taken from gnome-libs 1.2.4 */
#define POPT_ARGV_ARRAY_GROW_DELTA 5
int my_poptParseArgvString(const char * s, int * argcPtr, char *** argvPtr) {
char * buf, * bufStart, * dst;
const char * src;
char quote = '\0';
int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA;
char ** argv = malloc(sizeof(*argv) * argvAlloced);
const char ** argv2;
int argc = 0;
int i, buflen;
buflen = strlen(s) + 1;
/* bufStart = buf = alloca(buflen);*/
bufStart = buf = malloc (buflen);
memset(buf, '\0', buflen);
src = s;
argv[argc] = buf;
while (*src) {
if (quote == *src) {
quote = '\0';
} else if (quote) {
if (*src == '\\') {
src++;
if (!*src) {
free(argv);
free(bufStart);
return 1;
}
if (*src != quote) *buf++ = '\\';
}
*buf++ = *src;
/*} else if (isspace((unsigned char) *src)) {*/
} else if (*src == ' ') {
if (*argv[argc]) {
buf++, argc++;
if (argc == argvAlloced) {
char **temp;
argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
temp = realloc(argv, sizeof(*argv) * argvAlloced);
if (temp)
argv = temp;
else
{
free(argv);
free(bufStart);
return 1;
}
}
argv[argc] = buf;
}
} else switch (*src) {
case '"':
case '\'':
quote = *src;
break;
case '\\':
src++;
if (!*src) {
free(argv);
free(bufStart);
return 1;
}
/* fallthrough */
default:
*buf++ = *src;
}
src++;
}
if (strlen(argv[argc])) {
argc++, buf++;
}
dst = malloc((argc + 1) * sizeof(*argv) + (buf - bufStart));
argv2 = (void *) dst;
dst += (argc + 1) * sizeof(*argv);
memcpy((void *)argv2, argv, argc * sizeof(*argv));
argv2[argc] = NULL;
memcpy(dst, bufStart, buf - bufStart);
for (i = 0; i < argc; i++) {
argv2[i] = dst + (argv[i] - bufStart);
}
free(argv);
*argvPtr = (char **)argv2; /* XXX don't change the API */
*argcPtr = argc;
free (bufStart);
return 0;
}
int
void
util_exec (const char *cmd)
{
char **argv;
int argc;
#ifndef WIN32
int pid;
int fd;
#endif
if (my_poptParseArgvString (cmd, &argc, &argv) != 0)
return -1;
#ifndef WIN32
pid = fork ();
if (pid == -1)
{
free (argv);
return -1;
}
if (pid == 0)
{
/* Now close all open file descriptors except stdin, stdout and stderr */
for (fd = 3; fd < 1024; fd++) close(fd);
execvp (argv[0], argv);
_exit (0);
} else
{
free (argv);
return pid;
}
#else
spawnvp (_P_DETACH, argv[0], argv);
free (argv);
return 0;
#endif
}
int
util_execv (char * const argv[])
{
#ifndef WIN32
int pid, fd;
pid = fork ();
if (pid == -1)
return -1;
if (pid == 0)
{
/* Now close all open file descriptors except stdin, stdout and stderr */
for (fd = 3; fd < 1024; fd++) close(fd);
execv (argv[0], argv);
_exit (0);
} else
{
return pid;
}
#else
spawnv (_P_DETACH, argv[0], argv);
return 0;
#endif
g_spawn_command_line_async (cmd, NULL);
}
unsigned long
@@ -1872,7 +1526,7 @@ canonalize_key (char *key)
}
int
portable_mode ()
portable_mode (void)
{
#ifdef WIN32
if ((_access( "portable-mode", 0 )) != -1)
@@ -1889,7 +1543,7 @@ portable_mode ()
}
int
unity_mode ()
unity_mode (void)
{
#ifdef G_OS_UNIX
const char *env = g_getenv("XDG_CURRENT_DESKTOP");
+3 -5
View File
@@ -37,7 +37,6 @@
extern const unsigned char rfc_tolowertab[];
int my_poptParseArgvString(const char * s, int * argcPtr, char *** argvPtr);
char *expand_homedir (char *file);
void path_part (char *file, char *path, int pathlen);
int match (const char *mask, const char *string);
@@ -50,8 +49,7 @@ char *nocasestrstr (const char *text, const char *tofind);
char *country (char *);
void country_search (char *pattern, void *ud, void (*print)(void *, char *, ...));
char *get_sys_str (int with_cpu);
int util_exec (const char *cmd);
int util_execv (char * const argv[]);
void util_exec (const char *cmd);
#define STRIP_COLOR 1
#define STRIP_ATTRIB 2
#define STRIP_HIDDEN 4
@@ -75,8 +73,8 @@ guint32 str_hash (const char *key);
guint32 str_ihash (const unsigned char *key);
void safe_strcpy (char *dest, const char *src, int bytes_left);
void canonalize_key (char *key);
int portable_mode ();
int unity_mode ();
int portable_mode (void);
int unity_mode (void);
char *encode_sasl_pass_plain (char *user, char *pass);
char *encode_sasl_pass_blowfish (char *user, char *pass, char *data);
char *encode_sasl_pass_aes (char *user, char *pass, char *data);
+4 -3
View File
@@ -30,7 +30,8 @@ hexchat_SOURCES = ascii.c banlist.c chanlist.c chanview.c custom-list.c \
dccgui.c editlist.c fe-gtk.c fkeys.c gtkutil.c ignoregui.c joind.c menu.c \
maingui.c notifygui.c palette.c pixmaps.c plugin-tray.c $(plugingui_c) \
rawlog.c resources.c servlistgui.c setup.c $(iso_codes_c) \
sexy-spell-entry.c textgui.c urlgrab.c userlistgui.c xtext.c
sslalert.c sexy-spell-entry.c textgui.c urlgrab.c userlistgui.c xtext.c
hexchat_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_builddir)/src/common
resources.c: ../../data/hexchat.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=../../data --generate-dependencies ../../data/hexchat.gresource.xml)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=../../data --generate-source $<
resources.c: $(top_srcdir)/data/hexchat.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(top_srcdir)/data --generate-dependencies $(top_srcdir)/data/hexchat.gresource.xml)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(top_srcdir)/data --generate-source $<
+2 -1
View File
@@ -62,12 +62,13 @@ cv_tabs_sizerequest (GtkWidget *viewport, GtkRequisition *requisition, chanview
static void
cv_tabs_sizealloc (GtkWidget *widget, GtkAllocation *allocation, chanview *cv)
{
GdkWindow *parent_win;
GtkAdjustment *adj;
GtkWidget *inner;
gint viewport_size;
inner = ((tabview *)cv)->inner;
GdkWindow *parent_win = gtk_widget_get_window (gtk_widget_get_parent (inner));
parent_win = gtk_widget_get_window (gtk_widget_get_parent (inner));
if (cv->vertical)
{
+1 -19
View File
@@ -20,11 +20,7 @@
#ifndef HEXCHAT_FE_GTK_H
#define HEXCHAT_FE_GTK_H
#ifdef WIN32
#include "../../config-win32.h"
#else
#include "../../config.h"
#endif
#define DISPLAY_NAME "HexChat"
@@ -32,21 +28,7 @@
#include <sys/types.h>
#endif
#if defined(ENABLE_NLS) && !defined(_)
# include <libintl.h>
# define _(x) gettext(x)
# ifdef gettext_noop
# define N_(String) gettext_noop (String)
# else
# define N_(String) (String)
# endif
#endif
#if !defined(ENABLE_NLS) && defined(_)
# undef _
# define N_(String) (String)
# define _(x) (x)
#endif
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#ifdef HAVE_GTK_MAC
+4 -3
View File
@@ -60,7 +60,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
@@ -81,7 +81,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
@@ -99,7 +99,7 @@
<PreBuildEvent>
<Command><![CDATA[
SET SOLUTIONDIR=$(SolutionDir)..\
powershell -File "$(SolutionDir)..\version-template.ps1" "$(SolutionDir)..\src\fe-gtk\hexchat.rc.tt" "$(SolutionDir)..\src\fe-gtk\hexchat.rc.utf8"
powershell -File "$(SolutionDir)..\win32\version-template.ps1" "$(SolutionDir)..\src\fe-gtk\hexchat.rc.tt" "$(SolutionDir)..\src\fe-gtk\hexchat.rc.utf8"
REM hexchat.rc needs to be in UCS-2 or Resource Compiler will complain
powershell "Get-Content -Encoding UTF8 '$(SolutionDir)..\src\fe-gtk\hexchat.rc.utf8' | Out-File '$(SolutionDir)..\src\fe-gtk\hexchat.rc'; Remove-Item '$(SolutionDir)..\src\fe-gtk\hexchat.rc.utf8'"
"$(DepsRoot)\bin\glib-compile-resources.exe" --generate-source --sourcedir "$(DataDir)" --target "$(ProjectDir)resources.c" "$(DataDir)hexchat.gresource.xml"
@@ -161,6 +161,7 @@ powershell "Get-Content -Encoding UTF8 '$(SolutionDir)..\src\fe-gtk\hexchat.rc.u
<ClCompile Include="setup.c" />
<ClCompile Include="sexy-iso-codes.c" />
<ClCompile Include="sexy-spell-entry.c" />
<ClCompile Include="sslalert.c" />
<ClCompile Include="textgui.c" />
<ClCompile Include="urlgrab.c" />
<ClCompile Include="userlistgui.c" />
+4 -1
View File
@@ -182,6 +182,9 @@
<ClCompile Include="resources.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="sslalert.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Manifest Include="hexchat.exe.manifest">
@@ -202,4 +205,4 @@
<ItemGroup>
<Xml Include="..\..\data\hexchat.gresource.xml" />
</ItemGroup>
</Project>
</Project>
+1 -1
View File
@@ -1,5 +1,5 @@
#include <winver.h>
#include "../../config-win32.h"
#include "../../config.h"
#define COMMA_VERSION <#= [string]::Join(',', $versionParts) #>,0
+14 -11
View File
@@ -403,8 +403,10 @@ toggle_cb (GtkWidget *item, char *pref_name)
static int
is_in_path (char *cmd)
{
char *prog = strdup (cmd + 1); /* 1st char is "!" */
char *space, *path, *orig;
char *prog = g_strdup (cmd + 1); /* 1st char is "!" */
char *path, *orig;
char **argv;
int argc;
orig = prog; /* save for free()ing */
/* special-case these default entries. */
@@ -413,16 +415,17 @@ is_in_path (char *cmd)
/* don't check for gnome-terminal, but the thing it's executing! */
prog += 18;
space = strchr (prog, ' '); /* this isn't 100% but good enuf */
if (space)
*space = 0;
path = g_find_program_in_path (prog);
if (path)
if (g_shell_parse_argv (prog, &argc, &argv, NULL))
{
g_free (path);
g_free (orig);
return 1;
path = g_find_program_in_path (argv[0]);
if (path)
{
g_free (path);
g_free (orig);
g_strfreev (argv);
return 1;
}
g_strfreev (argv);
}
g_free (orig);
+2 -1
View File
@@ -186,9 +186,10 @@ fe_tray_set_balloon (const char *title, const char *text)
if (!notify_is_initted())
{
GList* server_caps;
notify_init(PACKAGE_NAME);
GList* server_caps = notify_get_server_caps ();
server_caps = notify_get_server_caps ();
if (g_list_find_custom (server_caps, "body-markup", (GCompareFunc)strcmp))
{
notify_text_strip_flags |= STRIP_ESCMARKUP;
+2 -16
View File
@@ -161,11 +161,7 @@ plugingui_load (void)
sub_dir = g_build_filename (get_xdir(), "addons", NULL);
gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb, current_sess,
#ifdef WIN32
sub_dir, "*.dll;*.lua;*.pl;*.py;*.tcl;*.js", FRF_FILTERISINITIAL|FRF_EXTENSIONS);
#else
sub_dir, "*.so;*.lua;*.pl;*.py;*.tcl;*.js", FRF_FILTERISINITIAL|FRF_EXTENSIONS);
#endif
sub_dir, "*."G_MODULE_SUFFIX";*.lua;*.pl;*.py;*.tcl;*.js", FRF_FILTERISINITIAL|FRF_EXTENSIONS);
g_free (sub_dir);
}
@@ -179,7 +175,6 @@ plugingui_loadbutton_cb (GtkWidget * wid, gpointer unused)
static void
plugingui_unload (GtkWidget * wid, gpointer unused)
{
int len;
char *modname, *file, *buf;
GtkTreeView *view;
GtkTreeIter iter;
@@ -189,16 +184,7 @@ plugingui_unload (GtkWidget * wid, gpointer unused)
FILE_COLUMN, &file, -1))
return;
len = strlen (file);
#ifdef WIN32
if (len > 4 && g_ascii_strcasecmp (file + len - 4, ".dll") == 0)
#else
#if defined(__hpux)
if (len > 3 && g_ascii_strcasecmp (file + len - 3, ".sl") == 0)
#else
if (len > 3 && g_ascii_strcasecmp (file + len - 3, ".so") == 0)
#endif
#endif
if (g_str_has_suffix (file, "."G_MODULE_SUFFIX))
{
if (plugin_kill (modname, FALSE) == 2)
fe_message (_("That plugin is refusing to unload.\n"), FE_MSG_ERROR);
+12 -10
View File
@@ -1866,33 +1866,35 @@ servlist_open_edit (GtkWidget *parent, ircnet *net)
#ifndef USE_OPENSSL
gtk_widget_set_sensitive (check, FALSE);
#endif
#if 0
check = servlist_create_check (5, net->flags & FLAG_ALLOW_INVALID, table3, 4, 0, _("Accept invalid SSL certificates"));
#ifndef USE_OPENSSL
gtk_widget_set_sensitive (check, FALSE);
#endif
servlist_create_check (1, net->flags & FLAG_USE_GLOBAL, table3, 5, 0, _("Use global user information"));
#endif
servlist_create_check (1, net->flags & FLAG_USE_GLOBAL, table3, 4, 0, _("Use global user information"));
edit_entry_nick = servlist_create_entry (table3, _("_Nick name:"), 6, net->nick, &edit_label_nick, 0);
edit_entry_nick2 = servlist_create_entry (table3, _("Second choice:"), 7, net->nick2, &edit_label_nick2, 0);
edit_entry_real = servlist_create_entry (table3, _("Rea_l name:"), 8, net->real, &edit_label_real, 0);
edit_entry_user = servlist_create_entry (table3, _("_User name:"), 9, net->user, &edit_label_user, 0);
edit_entry_nick = servlist_create_entry (table3, _("_Nick name:"), 5, net->nick, &edit_label_nick, 0);
edit_entry_nick2 = servlist_create_entry (table3, _("Second choice:"), 6, net->nick2, &edit_label_nick2, 0);
edit_entry_real = servlist_create_entry (table3, _("Rea_l name:"), 7, net->real, &edit_label_real, 0);
edit_entry_user = servlist_create_entry (table3, _("_User name:"), 8, net->user, &edit_label_user, 0);
label_logintype = gtk_label_new (_("Login method:"));
gtk_table_attach (GTK_TABLE (table3), label_logintype, 0, 1, 10, 11, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), SERVLIST_X_PADDING, SERVLIST_Y_PADDING);
gtk_table_attach (GTK_TABLE (table3), label_logintype, 0, 1, 9, 10, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), SERVLIST_X_PADDING, SERVLIST_Y_PADDING);
gtk_misc_set_alignment (GTK_MISC (label_logintype), 0, 0.5);
combobox_logintypes = servlist_create_logintypecombo (notebook);
gtk_table_attach (GTK_TABLE (table3), combobox_logintypes, 1, 2, 10, 11, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2);
gtk_table_attach (GTK_TABLE (table3), combobox_logintypes, 1, 2, 9, 10, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2);
edit_entry_pass = servlist_create_entry (table3, _("Password:"), 11, net->pass, 0, _("Password used for login. If in doubt, leave blank."));
edit_entry_pass = servlist_create_entry (table3, _("Password:"), 10, net->pass, 0, _("Password used for login. If in doubt, leave blank."));
gtk_entry_set_visibility (GTK_ENTRY (edit_entry_pass), FALSE);
if (selected_net && selected_net->logintype == LOGIN_SASLEXTERNAL)
gtk_widget_set_sensitive (edit_entry_pass, FALSE);
label34 = gtk_label_new (_("Character set:"));
gtk_table_attach (GTK_TABLE (table3), label34, 0, 1, 12, 13, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), SERVLIST_X_PADDING, SERVLIST_Y_PADDING);
gtk_table_attach (GTK_TABLE (table3), label34, 0, 1, 11, 12, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), SERVLIST_X_PADDING, SERVLIST_Y_PADDING);
gtk_misc_set_alignment (GTK_MISC (label34), 0, 0.5);
comboboxentry_charset = servlist_create_charsetcombo ();
gtk_table_attach (GTK_TABLE (table3), comboboxentry_charset, 1, 2, 12, 13, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2);
gtk_table_attach (GTK_TABLE (table3), comboboxentry_charset, 1, 2, 11, 12, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2);
/* Rule and Close button */
-5
View File
@@ -22,12 +22,7 @@
#include "sexy-iso-codes.h"
#include <libintl.h>
#include <string.h>
#ifdef G_OS_WIN32
#include "../../config-win32.h"
#else
#include "../../config.h"
#endif
#define ISO_639_DOMAIN "iso_639"
#define ISO_3166_DOMAIN "iso_3166"
+2 -5
View File
@@ -153,11 +153,8 @@ initialize_enchant ()
GModule *enchant;
gpointer funcptr;
#ifdef WIN32
enchant = g_module_open("libenchant.dll", 0);
#else
enchant = g_module_open("libenchant", 0);
#endif
enchant = g_module_open("libenchant."G_MODULE_SUFFIX, 0);
if (enchant == NULL)
{
#ifndef WIN32
+144
View File
@@ -0,0 +1,144 @@
/* X-Chat
* Copyright (C) 1998 Peter Zelezny.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fe-gtk.h"
#include <gtk/gtk.h>
#include "../common/hexchat.h"
#include "../common/util.h"
#include "palette.h"
#include "pixmaps.h"
#include "gtkutil.h"
void (*server_callback)(int, void *) = 0;
static void
sslalert_cb (GtkDialog *dialog, gint response, gpointer data)
{
if (response < 0) /* Such as window deleted */
server_callback (SSLALERT_RESPONSE_ABORT, data);
else
server_callback (response, data);
gtk_widget_destroy (GTK_WIDGET (dialog));
}
void
fe_sslalert_open (struct server *serv, void (*callback)(int, void *), void *callback_data)
{
GtkWidget *sslalert;
GtkWidget *wid;
GtkWidget *dialog_vbox;
GtkWidget *expander;
GtkWidget *hbox1, *vbox1, *vbox2;
GtkWidget *img_vbox;
char *cert_buf;
char buf[256];
char buf2[256];
server_callback = callback;
sslalert = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (sslalert), _ (DISPLAY_NAME": Security Alert"));
gtk_window_set_type_hint (GTK_WINDOW (sslalert), GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_position (GTK_WINDOW (sslalert), GTK_WIN_POS_CENTER_ON_PARENT);
gtk_window_set_transient_for (GTK_WINDOW (sslalert), GTK_WINDOW (serv->front_session->gui->window));
gtk_window_set_modal (GTK_WINDOW (sslalert), TRUE);
gtk_window_set_resizable (GTK_WINDOW (sslalert), FALSE);
dialog_vbox = gtk_dialog_get_content_area (GTK_DIALOG (sslalert));
vbox1 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (dialog_vbox), vbox1, TRUE, TRUE, 0);
hbox1 = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
img_vbox = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (img_vbox), 6);
gtk_box_pack_start (GTK_BOX (hbox1), img_vbox, TRUE, TRUE, 0);
wid = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_DIALOG);
gtk_box_pack_start (GTK_BOX (img_vbox), wid, FALSE, TRUE, 24);
gtk_misc_set_alignment (GTK_MISC (wid), 0.5f, 0.06f);
vbox2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (vbox2), 6);
gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0);
snprintf (buf2, sizeof (buf2), _ ("Connecting to %s (+%d)"),
serv->hostname, serv->port);
snprintf (buf, sizeof (buf), "\n<b>%s</b>", buf2);
wid = gtk_label_new (buf);
gtk_box_pack_start (GTK_BOX (vbox2), wid, FALSE, FALSE, 0);
gtk_label_set_use_markup (GTK_LABEL (wid), TRUE);
gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5);
wid = gtk_label_new (_ ("This server has presented an invalid certificate, and is self-signed, expired, or has another problem."));
gtk_box_pack_start (GTK_BOX (vbox2), wid, FALSE, FALSE, 0);
gtk_label_set_line_wrap (GTK_LABEL (wid), TRUE);
gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5);
wid = gtk_label_new (_ ("If you are certain that your connection is not being tampered with, you can continue and your connection will be secure."));
gtk_box_pack_start (GTK_BOX (vbox2), wid, FALSE, FALSE, 0);
gtk_label_set_line_wrap (GTK_LABEL (wid), TRUE);
gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5);
if (serv->cert_info)
{
char *subject;
char *issuer;
expander = gtk_expander_new (_ ("More details:"));
gtk_widget_set_can_focus (expander, FALSE);
gtk_container_set_border_width (GTK_CONTAINER (expander), 10);
gtk_box_pack_start (GTK_BOX (vbox1), expander, FALSE, FALSE, 0);
wid = gtk_label_new (NULL);
gtk_label_set_use_markup (GTK_LABEL (wid), TRUE);
gtk_label_set_justify (GTK_LABEL (wid), GTK_JUSTIFY_LEFT);
gtk_container_add (GTK_CONTAINER (expander), wid);
issuer = g_strjoinv ("\n\t\t", serv->cert_info->issuer_word);
subject = g_strjoinv ("\n\t\t", serv->cert_info->subject_word);
cert_buf = g_markup_printf_escaped ("<b>Issuer:</b>\t%s\n\n"\
"<b>Subject:</b> %s\n\n"\
"<b>Valid:</b>\tAfter: %s\n\t\tBefore: %s\n\n"\
"<b>Algorithm:</b> %s (%d bits)",
issuer, subject,
serv->cert_info->notbefore, serv->cert_info->notafter,
serv->cert_info->algorithm, serv->cert_info->algorithm_bits);
gtk_label_set_markup (GTK_LABEL (wid), cert_buf);
g_free (cert_buf);
g_free (issuer);
g_free (subject);
}
gtk_dialog_add_buttons (GTK_DIALOG (sslalert), _ ("Abort"), SSLALERT_RESPONSE_ABORT,
_("Accept Once"), SSLALERT_RESPONSE_ACCEPT,
_("Always Accept"), SSLALERT_RESPONSE_SAVE, NULL);
gtk_dialog_set_default_response (GTK_DIALOG (sslalert), SSLALERT_RESPONSE_ABORT);
g_signal_connect (G_OBJECT (sslalert), "response", G_CALLBACK (sslalert_cb), callback_data);
gtk_widget_show_all (sslalert);
}
+81 -84
View File
@@ -31,12 +31,7 @@
#include <stdlib.h>
#include <time.h>
#ifdef WIN32
#include "../../config-win32.h"
#else
#include "../../config.h"
#endif
#include "../common/hexchat.h"
#include "../common/fe.h"
#include "../common/util.h"
@@ -143,6 +138,7 @@ static void gtk_xtext_search_textentry_del (xtext_buffer *, textentry *);
static void gtk_xtext_search_textentry_fini (gpointer, gpointer);
static void gtk_xtext_search_fini (xtext_buffer *);
static gboolean gtk_xtext_search_init (xtext_buffer *buf, const gchar *text, gtk_xtext_search_flags flags, GError **perr);
static char * gtk_xtext_get_word (GtkXText * xtext, int x, int y, textentry ** ret_ent, int *ret_off, int *ret_len, GSList **slp);
/* Avoid warning messages for this unused function */
#if 0
@@ -942,7 +938,7 @@ gtk_xtext_find_x (GtkXText * xtext, int x, textentry * ent, int subline,
static textentry *
gtk_xtext_find_char (GtkXText * xtext, int x, int y, int *off,
int *out_of_bounds)
int *out_of_bounds, int *ret_subline)
{
textentry *ent;
int line;
@@ -960,6 +956,9 @@ gtk_xtext_find_char (GtkXText * xtext, int x, int y, int *off,
if (off)
*off = gtk_xtext_find_x (xtext, x, ent, subline, line, out_of_bounds);
if (ret_subline)
*ret_subline = subline;
return ent;
}
@@ -1053,14 +1052,14 @@ gtk_xtext_paint (GtkWidget *widget, GdkRectangle *area)
return;
}
ent_start = gtk_xtext_find_char (xtext, area->x, area->y, NULL, NULL);
ent_start = gtk_xtext_find_char (xtext, area->x, area->y, NULL, NULL, NULL);
if (!ent_start)
{
xtext_draw_bg (xtext, area->x, area->y, area->width, area->height);
goto xit;
}
ent_end = gtk_xtext_find_char (xtext, area->x + area->width,
area->y + area->height, NULL, NULL);
area->y + area->height, NULL, NULL, NULL);
if (!ent_end)
ent_end = xtext->buffer->text_last;
@@ -1305,84 +1304,95 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
textentry *ent_start;
int offset_start;
int offset_end;
int low_x;
int low_y;
int high_x;
int high_y;
int tmp;
int subline_start;
int subline_end;
int oob;
int marking_up;
int marking_up = FALSE;
int len_start;
int len_end;
if (xtext->select_start_y > xtext->select_end_y)
{
low_x = xtext->select_end_x;
low_y = xtext->select_end_y;
marking_up = TRUE;
high_x = xtext->select_start_x;
high_y = xtext->select_start_y;
} else
{
low_x = xtext->select_start_x;
low_y = xtext->select_start_y;
high_x = xtext->select_end_x;
high_y = xtext->select_end_y;
marking_up = FALSE;
}
ent_start = gtk_xtext_find_char (xtext, xtext->select_start_x, xtext->select_start_y, &offset_start, &oob, &subline_start);
ent_end = gtk_xtext_find_char (xtext, xtext->select_end_x, xtext->select_end_y, &offset_end, &oob, &subline_end);
ent_start = gtk_xtext_find_char (xtext, low_x, low_y, &offset_start, &oob);
if (!ent_start)
if ((!ent_start || !ent_end) && !xtext->buffer->text_last && xtext->adj->value != xtext->buffer->old_value)
{
if (xtext->adj->value != xtext->buffer->old_value)
gtk_xtext_render_page (xtext);
gtk_xtext_render_page (xtext);
return;
}
else if (oob)
if (!ent_start)
{
offset_start = marking_up == TRUE? 0: xtext->buffer->last_offset_start;
ent_start = xtext->buffer->text_last;
offset_start = ent_start->str_len;
}
ent_end = gtk_xtext_find_char (xtext, high_x, high_y, &offset_end, &oob);
if (!ent_end)
{
ent_end = xtext->buffer->text_last;
if (!ent_end)
{
if (xtext->adj->value != xtext->buffer->old_value)
gtk_xtext_render_page (xtext);
return;
}
offset_end = ent_end->str_len;
}
else if (oob)
if ((ent_start != ent_end && xtext->select_start_y > xtext->select_end_y) || /* different entries */
(ent_start == ent_end && subline_start > subline_end) || /* different lines */
(ent_start == ent_end && subline_start == subline_end && xtext->select_start_x > xtext->select_end_x)) /* marking to the left */
{
offset_end = marking_up == FALSE? ent_end->str_len: xtext->buffer->last_offset_end;
marking_up = TRUE;
}
/* marking less than a complete line? */
/* make sure "start" is smaller than "end" (swap them if need be) */
if (ent_start == ent_end && offset_start > offset_end)
/* word selection */
if (xtext->word_select)
{
tmp = offset_start;
/* a word selection cannot be started if the cursor is out of bounds in gtk_xtext_button_press */
gtk_xtext_get_word (xtext, xtext->select_start_x, xtext->select_start_y, NULL, &offset_start, &len_start, NULL);
/* in case the cursor is out of bounds we keep offset_end from gtk_xtext_find_char and fix the length */
if (gtk_xtext_get_word (xtext, xtext->select_end_x, xtext->select_end_y, NULL, &offset_end, &len_end, NULL) == NULL)
len_end = offset_end == ent_end->str_len? 0: -1; /* -1 for the space, 0 if at the end */
if (!marking_up)
offset_end += len_end;
else
offset_start += len_start;
}
/* line/ent selection */
else if (xtext->line_select)
{
offset_start = marking_up? ent_start->str_len: 0;
offset_end = marking_up? 0: ent_end->str_len;
}
if (marking_up)
{
int temp;
/* ensure ent_start is above ent_end */
if (ent_start != ent_end)
{
ent = ent_start;
ent_start = ent_end;
ent_end = ent;
}
/* switch offsets as well */
temp = offset_start;
offset_start = offset_end;
offset_end = tmp;
offset_end = temp;
}
/* set all the old mark_ fields to -1 */
gtk_xtext_selection_clear (xtext->buffer);
ent_start->mark_start = offset_start;
ent_start->mark_end = offset_end;
/* set the default values */
ent_start->mark_end = ent_start->str_len;
ent_end->mark_start = 0;
/* set the calculated values (this overwrites the default values if we're on the same ent) */
ent_start->mark_start = offset_start;
ent_end->mark_end = offset_end;
/* set all the mark_ fields of the ents within the selection */
if (ent_start != ent_end)
{
ent_start->mark_end = ent_start->str_len;
if (offset_end != 0)
{
ent_end->mark_start = 0;
ent_end->mark_end = offset_end;
}
/* set all the mark_ fields of the ents within the selection */
ent = ent_start->next;
while (ent && ent != ent_end)
{
@@ -1391,11 +1401,6 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
ent = ent->next;
}
}
else
{
if (xtext->mark_stamp)
offset_start = 0;
}
if (render)
gtk_xtext_selection_render (xtext, ent_start, ent_end);
@@ -1530,7 +1535,7 @@ gtk_xtext_get_word (GtkXText * xtext, int x, int y, textentry ** ret_ent,
int out_of_bounds = 0;
int len_to_offset = 0;
ent = gtk_xtext_find_char (xtext, x, y, &offset, &out_of_bounds);
ent = gtk_xtext_find_char (xtext, x, y, &offset, &out_of_bounds, NULL);
if (ent == NULL || out_of_bounds || offset < 0 || offset >= ent->str_len)
return NULL;
@@ -1915,13 +1920,6 @@ gtk_xtext_button_release (GtkWidget * widget, GdkEventButton * event)
return FALSE;
}
if (xtext->word_or_line_select)
{
xtext->word_or_line_select = FALSE;
xtext->button_down = FALSE;
return FALSE;
}
if (event->button == 1)
{
xtext->button_down = FALSE;
@@ -1946,6 +1944,13 @@ gtk_xtext_button_release (GtkWidget * widget, GdkEventButton * event)
}
}
if (xtext->word_select || xtext->line_select)
{
xtext->word_select = FALSE;
xtext->line_select = FALSE;
return FALSE;
}
if (xtext->select_start_x == event->x &&
xtext->select_start_y == event->y &&
xtext->buffer->last_ent_start)
@@ -2006,11 +2011,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
ent->mark_start = offset;
ent->mark_end = offset + len;
gtk_xtext_selection_render (xtext, ent, ent);
xtext->word_or_line_select = TRUE;
if (prefs.hex_text_autocopy_text)
{
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
}
xtext->word_select = TRUE;
}
return FALSE;
@@ -2025,11 +2026,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
ent->mark_start = 0;
ent->mark_end = ent->str_len;
gtk_xtext_selection_render (xtext, ent, ent);
xtext->word_or_line_select = TRUE;
if (prefs.hex_text_autocopy_text)
{
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
}
xtext->line_select = TRUE;
}
return FALSE;
@@ -3260,7 +3257,7 @@ gtk_xtext_render_stamp (GtkXText * xtext, textentry * ent,
{
textentry tmp_ent;
int jo, ji, hs;
int xsize, y;
int xsize, y, emphasis;
/* trashing ent here, so make a backup first */
memcpy (&tmp_ent, ent, sizeof (tmp_ent));
@@ -3270,7 +3267,7 @@ gtk_xtext_render_stamp (GtkXText * xtext, textentry * ent,
xtext->jump_out_offset = 0;
xtext->jump_in_offset = 0;
xtext->hilight_start = 0xffff; /* temp disable */
int emphasis = 0;
emphasis = 0;
if (xtext->mark_stamp)
{
+2 -1
View File
@@ -216,7 +216,8 @@ struct _GtkXText
/* various state information */
unsigned int moving_separator:1;
unsigned int word_or_line_select:1;
unsigned int word_select:1;
unsigned int line_select:1;
unsigned int button_down:1;
unsigned int hilighting:1;
unsigned int dont_render:1;
+5
View File
@@ -922,3 +922,8 @@ fe_get_default_font (void)
{
return NULL;
}
void
fe_sslalert_open (struct server *serv, void (*callback)(int, void *), void *callback_data)
{
callback (SSLALERT_RESPONSE_ACCEPT, callback_data);
}
+2 -2
View File
@@ -62,7 +62,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
@@ -81,7 +81,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_CONSOLE;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)..;$(DepsRoot)\include;$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
-5
View File
@@ -80,11 +80,6 @@
</ItemDefinitionGroup>
<ItemGroup>
<None Include="changelog.url" />
<None Include="etc\download.png" />
<None Include="etc\gtk-2.0\gtkrc" />
<None Include="etc\gtkpref.png" />
<None Include="etc\music.png" />
<None Include="etc\system.png" />
<None Include="readme.url" />
<None Include="share\xml\iso-codes\iso_3166.xml" />
<None Include="share\xml\iso-codes\iso_639.xml" />
-69
View File
@@ -1,69 +0,0 @@
gtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32"
gtk-toolbar-icon-size = small-toolbar
# disable images in buttons. i've only seen ugly delphi apps use this feature.
gtk-button-images = 0
# enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly.
# the office apps use them heavily, though.
gtk-menu-images = 1
# use the win32 button ordering instead of the GNOME HIG one, where applicable
gtk-alternative-button-order = 1
# use the win32 sort indicators direction, as in Explorer
gtk-alternative-sort-arrows = 1
# Windows users don't expect the PC Speaker beeping at them when they backspace in an empty textview and stuff like that
gtk-error-bell = 0
# hide mnemonic underlines until the Alt key is pressed
gtk-auto-mnemonics = 1
style "msw-default"
{
GtkWidget::interior-focus = 1
GtkOptionMenu::indicator-size = { 9, 5 }
GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 }
GtkSpinButton::shadow-type = in
# Owen and I disagree that these should be themable
#GtkUIManager::add-tearoffs = 0
#GtkComboBox::add-tearoffs = 0
GtkComboBox::appears-as-list = 1
GtkComboBox::focus-on-click = 0
GOComboBox::add_tearoffs = 0
GtkTreeView::allow-rules = 0
GtkTreeView::expander-size = 12
GtkExpander::expander-size = 12
GtkScrolledWindow::scrollbar_spacing = 1
GtkSeparatorMenuItem::horizontal-padding = 2
engine "wimp"
{
}
}
class "*" style "msw-default"
binding "ms-windows-tree-view"
{
bind "Right" { "expand-collapse-cursor-row" (1,1,0) }
bind "Left" { "expand-collapse-cursor-row" (1,0,0) }
}
class "GtkTreeView" binding "ms-windows-tree-view"
style "msw-combobox-thickness" = "msw-default"
{
xthickness = 0
ythickness = 0
}
widget_class "*TreeView*ComboBox*" style "msw-combobox-thickness"
widget_class "*ComboBox*GtkFrame*" style "msw-combobox-thickness"
+1 -1
View File
@@ -75,10 +75,10 @@ copy "$(DepsRoot)\bin\pixman-1.dll" "$(HexChatRel)"
copy "$(DepsRoot)\bin\ssleay32.dll" "$(HexChatRel)"
copy "$(DepsRoot)\bin\zlib1.dll" "$(HexChatRel)"
xcopy /q /s /i "$(DepsRoot)\lib\gtk-2.0\i686-pc-vs10\engines" "$(HexChatRel)\lib\gtk-2.0\i686-pc-vs10\engines"
xcopy /q /s /i etc "$(HexChatRel)\etc"
xcopy /q /s /i share "$(HexChatRel)\share"
xcopy /q /s /i "..\..\COPYING" "$(HexChatRel)\share\doc\hexchat\"
xcopy /q /s /i "$(DepsRoot)\share\doc" "$(HexChatRel)\share\doc"
xcopy /q /s /i "$(DepsRoot)\share\themes\MS-Windows" "$(HexChatRel)\share\themes\MS-Windows"
xcopy /q /s /i "$(DepsRoot)\lib\enchant\libenchant_myspell.dll" "$(HexChatRel)\lib\enchant\"
xcopy /q /s /i "$(HexChatBin)hcchecksum.dll" "$(HexChatRel)\plugins\"
copy "$(HexChatBin)hcdoat.dll" "$(HexChatRel)\plugins"
+3 -4
View File
@@ -58,7 +58,6 @@ Name: "custom"; Description: "Custom Installation"; Flags: iscustom
[Components]
Name: "libs"; Description: "HexChat"; Types: normal minimal custom; Flags: fixed
Name: "gtktheme"; Description: "GTK+ Theme (Native Windows look)"; Types: normal minimal custom; Flags: disablenouninstallwarning
Name: "xctext"; Description: "HexChat-Text"; Types: custom; Flags: disablenouninstallwarning
Name: "xtm"; Description: "HexChat Theme Manager"; Types: normal custom; Flags: disablenouninstallwarning
Name: "translations"; Description: "Translations"; Types: normal custom; Flags: disablenouninstallwarning
@@ -111,9 +110,9 @@ Source: "portable-mode"; DestDir: "{app}"; Tasks: portable
Source: "changelog.url"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
Source: "readme.url"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
Source: "cert.pem"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
Source: "etc\gtk-2.0\gtkrc"; DestDir: "{app}\etc\gtk-2.0"; Flags: ignoreversion; Components: gtktheme
Source: "share\xml\*"; DestDir: "{app}\share\xml"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: libs
Source: "share\doc\*"; DestDir: "{app}\share\doc"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: libs
Source: "share\themes\MS-Windows\*"; DestDir: "{app}\share\themes\MS-Windows"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: libs
Source: "share\locale\*"; DestDir: "{app}\share\locale"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: translations
Source: "atk-1.0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs
@@ -246,10 +245,10 @@ begin
if(CurPageID = wpReady) then
begin
idpClearFiles;
if not IsTaskSelected('portable') then
begin
#if APPARCH == "x64"
REDIST := 'http://dl.hexchat.net/misc/vcredist_2013_x64.exe';
PERL := 'http://dl.hexchat.net/misc/perl/Perl%205.20.0%20x64.msi';
+1 -1
View File
@@ -64,7 +64,7 @@
<Command>
<![CDATA[
SET SOLUTIONDIR=$(SolutionDir)..\
powershell -File "$(SolutionDir)..\version-template.ps1" "$(SolutionDir)..\win32\installer\hexchat.iss.tt" "$(SolutionDir)..\win32\installer\hexchat.iss"
powershell -File "$(SolutionDir)..\win32\version-template.ps1" "$(SolutionDir)..\win32\installer\hexchat.iss.tt" "$(SolutionDir)..\win32\installer\hexchat.iss"
del "$(OutDir)hexchat.iss"
type hexchat.iss >> "$(OutDir)hexchat.iss"
$(IsccPath) /dPROJECTDIR="$(ProjectDir)" /dAPPARCH="$(Platform)" "$(OutDir)hexchat.iss"
+1 -1
View File
@@ -1 +1 @@
2.10.0
2.10.2