1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-15 07:34:46 +02:00

Compare commits

..

73 Commits

Author SHA1 Message Date
Sebastien Helleu dfea9b208c Version 0.2.5 2007-06-07 15:13:15 +00:00
Sebastien Helleu 263f15cf2e Fixed french XML files for doc 2007-06-07 14:32:46 +00:00
Sebastien Helleu 36f0aab4d4 Fixed QUOTE command: now allowed when socket is ok (even if IRC connection to server is not ok) (bug #20113) 2007-06-07 13:26:54 +00:00
Sebastien Helleu 1f77a51ddc Updated czech translations 2007-06-06 11:39:33 +00:00
Sebastien Helleu c96eea0f54 Updated russian translations 2007-06-06 10:58:45 +00:00
Sebastien Helleu 87fa5c8b52 Updated translations 2007-06-06 10:35:16 +00:00
Sebastien Helleu 6f83c33ed9 Added missing IRC commands 378 and 379 (bug #20091) 2007-06-06 10:13:25 +00:00
Sebastien Helleu 23ff266816 Added missing IRC command 327 2007-06-06 09:08:00 +00:00
Sebastien Helleu 8affe52ee4 Fixed hotlist when exiting search mode: current buffer is removed from hotlist 2007-06-05 21:31:43 +00:00
Sebastien Helleu 162565466e Fixed german XML files for doc 2007-06-05 21:21:53 +00:00
Sebastien Helleu a2384b3514 Updated some XML files for doc 2007-06-05 20:13:53 +00:00
Sebastien Helleu 219621b8cc Updated czech translations 2007-06-05 20:12:24 +00:00
Sebastien Helleu a3d7bcf804 Updated russian translations 2007-06-05 20:10:09 +00:00
Sebastien Helleu 8978b9c4b9 Added "weechat.log" name in error message when WeeChat log file is locked 2007-06-05 14:00:47 +00:00
Sebastien Helleu b605e52d0f Updated german doc 2007-06-01 13:47:46 +00:00
Sebastien Helleu c554ed2da5 Updated german translations 2007-06-01 13:44:39 +00:00
Julien Louis dde12565e7 Fix libintl.h issue on FreeBSD 2007-05-26 19:15:46 +00:00
Sebastien Helleu 34e220df56 Fixed bug with PART command parsing (":" not skipped, problem with some IRC servers) 2007-05-25 16:49:25 +00:00
Sebastien Helleu 537e1781a6 Fixed nick completion bug: now self nick is always at the end of completion list 2007-05-24 12:59:16 +00:00
Sebastien Helleu d66bfc2458 Added "%M" for completion with nicks of current server (nicks on open channels) (task #6931) 2007-05-24 12:43:18 +00:00
Sebastien Helleu fb3fd5b0eb Improved key bindings: now possible to bind a key on many commands, separated by semicolon (task #5444) 2007-05-23 16:07:31 +00:00
Sebastien Helleu c0762e3b13 Updated russian translations 2007-05-23 12:47:47 +00:00
Sebastien Helleu 4519707904 Fixed minor typo in translations 2007-05-23 11:50:28 +00:00
Sebastien Helleu 30e194e41f Updated translations 2007-05-23 08:08:21 +00:00
Sebastien Helleu 5e4f45e2a2 Improved IRC long message split: use word boundary (task #6685) 2007-05-22 16:37:11 +00:00
Sebastien Helleu e339e9020d Fixed "%C" completion: now completes with all channels of all servers 2007-05-22 14:46:59 +00:00
Sebastien Helleu 5332d2ba27 Removed ":" for unknown IRC commands before arguments (bug #19929) 2007-05-22 13:11:58 +00:00
Sebastien Helleu 058c026e10 Fixed bug with "/buffer query_name", added server and channel completion for /buffer command (bug #19928) 2007-05-22 13:02:39 +00:00
Julien Louis dd79c6b8bf Only check ncurses.h if ncursesw/ncurses.h is not found
Signed-off-by: Julien Louis <ptitlouis@sysif.net>
2007-05-21 22:26:17 +00:00
Julien Louis e867f2dd35 Fix ncurses detection.
We now provide a FindNcurses.cmake to find the library used
and we define the right cpp variable when we compile the curses gui.

Signed-off-by: Julien Louis <ptitlouis@sysif.net>
2007-05-21 22:20:13 +00:00
Sebastien Helleu ba468f2234 Added cmake for weechat compile (patch #5943) 2007-05-21 21:46:51 +00:00
Sebastien Helleu 6c67b97fb7 Added date.xml.in, file needed by cmake 2007-05-21 16:58:37 +00:00
Sebastien Helleu 9f5d99f57e Added cmake for weechat compile 2007-05-21 16:30:04 +00:00
Sebastien Helleu c79becdc85 Removed compile warning in Perl script plugin 2007-05-21 16:11:27 +00:00
Sebastien Helleu 7405588a6e Updated man page 2007-05-21 16:09:24 +00:00
Sebastien Helleu 4061f0641d Fixed IRC mode parsing when receiving modes with arguments (bug #19902) 2007-05-20 10:41:51 +00:00
Sebastien Helleu 5787acad2c Fixed crash with IRC JOIN malformed message (bug #19891) 2007-05-18 09:13:25 +00:00
Sebastien Helleu 5e29f17620 Updated script urlgrab.py 2007-05-18 06:35:52 +00:00
Sebastien Helleu 4950d462d0 Minor cleanup in german doc: removed some unneeded spaces 2007-05-15 07:48:43 +00:00
Sebastien Helleu 20b567c3df Added charset plugin in doc 2007-05-14 21:09:08 +00:00
Sebastien Helleu d395846fb7 Removed "prefix" data for server info in plugin API (oups, why did I add that ?) 2007-05-11 15:04:56 +00:00
Sebastien Helleu bee62989f6 Code cleanup: renamed IRC functions to have uniform name (with prefix based on source name), moved some functions 2007-05-11 14:59:12 +00:00
Sebastien Helleu 7579529d94 Fixed bug with nick prefixes on some IRC servers (bug #19854) 2007-05-11 12:06:20 +00:00
Sebastien Helleu a8fc49bd79 Fixed IRC server message display, case insensitive test for nick in message 2007-05-11 10:13:38 +00:00
Sebastien Helleu d617f1d154 New version of awl.py 2007-05-11 08:22:39 +00:00
Sebastien Helleu 82b3f86c43 Fixed channel search for display of IRC error messages (case insensitive search for nick) 2007-05-11 08:17:57 +00:00
Sebastien Helleu 812ab4129f Added mpd.py script 2007-05-10 14:39:23 +00:00
Sebastien Helleu d6925c982e Fixed bug with PING answer: removed one colon at beginning of PONG arguments (bug #19846) 2007-05-10 09:22:28 +00:00
Sebastien Helleu c3e9858d55 Improved setup file save: now writes temporary file, then rename it (task #6847) 2007-05-09 16:43:01 +00:00
Sebastien Helleu 7290f0f1ab Fixed bug with $nick/$channel/$server variables in commands 2007-05-09 13:12:12 +00:00
Sebastien Helleu 0093bf0849 Updated french doc 2007-05-09 11:54:55 +00:00
Sebastien Helleu 3bf3f22928 Forget current nick when user manually disconnects from server 2007-05-09 11:14:59 +00:00
Sebastien Helleu 880e10b6d6 Fixed nick display in input window 2007-05-09 11:13:41 +00:00
Sebastien Helleu 054abdff85 Fixed bug with erroneous nickname when connecting to server (bug #19812), fixed display bugs in IRC error messages 2007-05-09 11:00:11 +00:00
Sebastien Helleu 860e9a08f3 Added forcenick.rb script 2007-05-04 12:33:38 +00:00
Sebastien Helleu 148e74d2c3 Added protocol priority for gnutls (patch #5915) 2007-05-04 09:48:33 +00:00
Julien Louis f5fadd9c12 Remove uneeded calls to the python interpreter.
Scripts are executed by an embedded interpreter.
2007-05-03 17:02:05 +00:00
Sebastien Helleu 0abe6f0322 Added channel admin mode '!' for some IRC servers 2007-05-02 09:41:19 +00:00
Sebastien Helleu c74cf01b63 Fixed bug with iso2022jp locale (bug #18719) 2007-05-02 09:19:35 +00:00
Sebastien Helleu eb2e8891cb Fixed string format bug when displaying string thru plugin script API 2007-04-25 08:41:29 +00:00
Sebastien Helleu 97a3d47650 Added /reconnect command (task #5448) 2007-04-24 12:18:36 +00:00
Sebastien Helleu 4ed02bbdcf Added "-all" option for /connect and /disconnect commands (task #6232) 2007-04-24 11:28:41 +00:00
Sebastien Helleu 63244d9a30 Added browse.rb script 2007-04-24 08:57:12 +00:00
Sebastien Helleu fcc885eff0 New version of ctcp.py 2007-04-24 08:56:27 +00:00
Sebastien Helleu 7feb775299 Nick completion: completes with self nick at the end of completion list 2007-04-15 08:04:53 +00:00
Sebastien Helleu 8da229fd9d Updated doc 2007-04-14 13:28:27 +00:00
Sebastien Helleu 398e056029 Removed debug message when highlight is forced by a plugin 2007-04-14 13:16:23 +00:00
Sebastien Helleu f30fb21175 Improved nick completion: completes with last speakers first (task #5896), fixed nick completion (bugs #19590 and #19589) 2007-04-14 13:14:05 +00:00
Sebastien Helleu a89ca83306 Fixed minor refresh bug with input when searching text 2007-04-04 14:23:33 +00:00
Sebastien Helleu 0e785fe106 Added color for input text not found in buffer history 2007-04-04 14:04:42 +00:00
Sebastien Helleu 3e6e347d13 Added question about copy/paste and nicklist in FAQ 2007-04-03 09:24:04 +00:00
Sebastien Helleu 8d014d66da Fixed USER message when connecting to IRC server (patch #5835) 2007-04-02 09:23:41 +00:00
Sebastien Helleu f07c42fff3 Version 0.2.5-cvs 2007-03-29 18:22:18 +00:00
213 changed files with 26242 additions and 19508 deletions
+53
View File
@@ -0,0 +1,53 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
PROJECT(weechat)
SET(CMAKE_VERBOSE_MAKEFILE OFF)
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
SET(CMAKE_SKIP_RPATH ON)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W")
IF(PREFIX)
SET(CMAKE_INSTALL_PREFIX ${PREFIX} CACHE PATH "Install path prefix" FORCE)
ENDIF(PREFIX)
SET(VERSION 0.2.5-cvs)
SET(PKG_STRING "${PROJECT_NAME} ${VERSION}")
SET(LIBDIR ${CMAKE_INSTALL_PREFIX}/lib/weechat)
SET(SHAREDIR ${CMAKE_INSTALL_PREFIX}/share/weechat)
SET(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale)
STRING(REPLACE "\";\"" "\ " PKG_STRING ${PKG_STRING})
OPTION(DISABLE_NCURSES "Disable Ncurses interface")
OPTION(DISABLE_NLS "Disable Native Language Support")
OPTION(DISABLE_GNUTLS "Disable SSLv3/TLS connection support")
OPTION(DISABLE_PLUGINS "Disable Plugins support")
OPTION(DISABLE_PERL "Disable Perl scripting language")
OPTION(DISABLE_PYTHON "Disable Python scripting language")
OPTION(DISABLE_RUBY "Disable Ruby scripting language")
OPTION(DISABLE_LUA "Disable Lua scripting language")
OPTION(DISABLE_ASPELL "Disable Aspell plugin")
OPTION(DISABLE_CHARSET "Disable Charset plugin")
OPTION(DISABLE_DOC "Disable Doc")
ADD_SUBDIRECTORY( po )
ADD_SUBDIRECTORY( src )
IF(NOT DISABLE_DOC)
ADD_SUBDIRECTORY( doc )
ENDIF(NOT DISABLE_DOC)
CONFIGURE_FILE(config.h.cmake config.h @ONLY)
+42 -1
View File
@@ -1,9 +1,50 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2007-03-29
ChangeLog - 2007-06-07
Version 0.2.5 (2007-06-07):
* fixed QUOTE command: now allowed when socket is ok (even if IRC
connection to server is not ok) (bug #20113)
* added missing IRC commands (327, 378, 379) (bug #20091)
* fixed hotlist when exiting search mode: current buffer is removed from
hotlist
* added "%M" for completion with nicks of current server (nicks on open
channels) (task #6931)
* improved key bindings: now possible to bind a key on many commands,
separated by semicolon (task #5444)
* improved IRC long message split: use word boundary (task #6685)
* removed ":" for unknown IRC commands before arguments (bug #19929)
* fixed "%C" completion: now completes with all channels of all servers
* fixed bug with "/buffer query_name", added server and channel completion
for /buffer command (bug #19928)
* added cmake for weechat compile (patch #5943)
* fixed IRC mode parsing when receiving modes with arguments (bug #19902)
* fixed crash with IRC JOIN malformed message (bug #19891)
* fixed bug with nick prefixes on some IRC servers (bug #19854)
* improved setup file save: now writes temporary file, then rename it
(task #6847)
* fixed bug with $nick/$channel/$server variables in commands
* forget current nick when user manually disconnects from server
* fixed nick display in input window
* fixed bug with erroneous nickname when connecting to server (bug #19812)
* fixed display bugs in IRC error messages
* added protocol priority for gnutls (patch #5915)
* added channel admin mode '!' for some IRC servers
* fixed bug with iso2022jp locale (bug #18719)
* fixed string format bug when displaying string thru plugin script API
* added /reconnect command (task #5448)
* added "-all" option for /connect and /disconnect commands (task #6232)
* improved nick completion: completion with last speakers first and self
nick at the end; added option look_nick_completion_smart, enabled by
default (task #5896)
* fixed nick completion in command arguments (bug #19590)
* fixed possible crash with nick completion when a nick leaves channel
(bug #19589)
* added color for input text not found in buffer history
* fixed USER message when connecting to IRC server (patch #5835)
Version 0.2.4 (2007-03-29):
* fixed color bug with IRC messages displayed by plugins (bug #19442)
* fixed topic charset, now using channel charset if defined (bug #19386)
+11 -1
View File
@@ -1,4 +1,4 @@
WeeChat FAQ, 2007-03-29
WeeChat FAQ, 2007-06-07
=======================
Intended audience:
@@ -179,6 +179,16 @@ A: Yes, you have to use python script shell.py (available on WeeChat
users, you can issue: /shell setenv LANG=en_US)
2.12
================================================================================
Q: With Curses GUI, how can I copy/paste text without pasting nicklist ?
A: You can use a terminal with rectangular selection (like rxvt-unicode,
konsole, ...).
Other solution is to move nicklist to top or bottom, for example:
/set look_nicklist_position = top
3.1
================================================================================
Q: How should I report bugs?
+13 -1
View File
@@ -1,4 +1,4 @@
WeeChat FAQ, 2007-03-29
WeeChat FAQ, 2007-06-07
=======================
Public concerné :
@@ -188,6 +188,18 @@ R: Oui, il faut utiliser le script python shell.py (disponible sur le site
/shell setenv LANG=en_US)
2.12
================================================================================
Q: Avec l'interface Curses, comment puis-je copier/coller du texte sans
coller la liste des pseudos ?
R: Vous pouvez utiliser un terminal qui propose la sélection rectangulaire
(comme rxvt-unicode, konsole, etc...).
Une autre solution est de déplacer la liste des pseudos en haut ou en
bas, par exemple :
/set look_nicklist_position = top
3.1
================================================================================
Q: Comment dois-je reporter les bugs ?
+4
View File
@@ -1,6 +1,10 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
* FlashCode, 2007-06-07
WeeChat 0.2.5 released.
* FlashCode, 2007-03-29
WeeChat 0.2.4 released.
+49
View File
@@ -0,0 +1,49 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Aspell
# This module finds if libaspell is installed and determines where
# the include files and libraries are.
#
# This code sets the following variables:
#
# ASPELL_INCLUDE_PATH = path to where aspell.h can be found
# ASPELL_LIBRARY = path to where libaspell.so* can be found
IF (ASPELL_FOUND)
# Already in cache, be silent
SET(ASPELL_FIND_QUIETLY TRUE)
ENDIF (ASPELL_FOUND)
FIND_PATH(ASPELL_INCLUDE_PATH
NAMES aspell.h
PATHS /usr/include /usr/local/include /usr/pkg/include
)
FIND_LIBRARY(ASPELL_LIBRARY
NAMES aspell aspell-15
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
IF (ASPELL_INCLUDE_PATH AND ASPELL_LIBRARY)
SET(ASPELL_FOUND TRUE)
ENDIF (ASPELL_INCLUDE_PATH AND ASPELL_LIBRARY)
MARK_AS_ADVANCED(
ASPELL_INCLUDE_PATH
ASPELL_LIBRARY
)
+61
View File
@@ -0,0 +1,61 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Gettext
# This module finds if gettext is installed and determines where
# the include files and libraries are.
#
# This code sets the following variables:
#
# GETTEXT_FOUND = is gettext usable on system?
IF(GETTEXT_FOUND)
# Already in cache, be silent
SET(GETTEXT_FIND_QUIETLY TRUE)
ENDIF(GETTEXT_FOUND)
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
INCLUDE(CheckFunctionExists)
FIND_PATH(LIBINTL_INCLUDE
NAMES libintl.h
PATH /usr/local/include /usr/pkg/include /usr/include
)
SET(CMAKE_REQUIRED_INCLUDES ${LIBINTL_INCLUDE})
CHECK_INCLUDE_FILES(libintl.h HAVE_LIBINTL_H)
IF(HAVE_LIBINTL_H)
CHECK_FUNCTION_EXISTS(dgettext LIBC_HAS_DGETTEXT)
IF(LIBC_HAS_DGETTEXT)
SET(GETTEXT_FOUND TRUE)
ELSE(LIBC_HAS_DGETTEXT)
FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl libintl
PATHS
/usr/local/lib
/usr/lib
)
IF(LIBINTL_LIBRARY)
CHECK_LIBRARY_EXISTS(${LIBINTL_LIBRARY} "dgettext" "" LIBINTL_HAS_DGETTEXT)
IF(LIBINTL_HAS_DGETTEXT)
SET(GETTEXT_FOUND TRUE)
ENDIF(LIBINTL_HAS_DGETTEXT)
ENDIF(LIBINTL_LIBRARY)
ENDIF(LIBC_HAS_DGETTEXT)
ENDIF(HAVE_LIBINTL_H)
+70
View File
@@ -0,0 +1,70 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find GnuTLS
# This module finds if libgnutls is installed and determines where
# the include files and libraries are.
#
# This code sets the following variables:
#
# GNUTLS_INCLUDE_PATH = path to where <gnutls/gnutls.h> can be found
# GNUTLS_LIBRARY = path to where libgnutls.so* can be found
# GNUTLS_CFLAGS = cflags to use to compile
# GNUTLS_LDFLAGS = ldflags to use to compile
IF(GNUTLS_INCLUDE_PATH AND GNUTLS_LIBRARY)
# Already in cache, be silent
set(GNUTLS_FIND_QUIETLY TRUE)
ENDIF(GNUTLS_INCLUDE_PATH AND GNUTLS_LIBRARY)
FIND_PROGRAM(GNUTLS_CONFIG_EXECUTABLE NAMES libgnutls-config)
EXECUTE_PROCESS(COMMAND ${GNUTLS_CONFIG_EXECUTABLE} --prefix
OUTPUT_VARIABLE GNUTLS_PREFIX
)
EXECUTE_PROCESS(COMMAND ${GNUTLS_CONFIG_EXECUTABLE} --cflags
OUTPUT_VARIABLE GNUTLS_CFLAGS
)
EXECUTE_PROCESS(COMMAND ${GNUTLS_CONFIG_EXECUTABLE} --libs
OUTPUT_VARIABLE GNUTLS_LDFLAGS
)
SET(GNUTLS_POSSIBLE_INCLUDE_PATH "${GNUTLS_PREFIX}/include")
SET(GNUTLS_POSSIBLE_LIB_DIR "${GNUTLS_PREFIX}/lib")
FIND_PATH(GNUTLS_INCLUDE_PATH
NAMES gnutls/gnutls.h
PATHS GNUTLS_POSSIBLE_INCLUDE_PATH
)
FIND_LIBRARY(GNUTLS_LIBRARY
NAMES gnutls
PATHS GNUTLS_POSSIBLE_LIB_DIR
)
IF (GNUTLS_INCLUDE_PATH AND GNUTLS_LIBRARY)
SET(GNUTLS_FOUND TRUE)
ENDIF (GNUTLS_INCLUDE_PATH AND GNUTLS_LIBRARY)
MARK_AS_ADVANCED(
GNUTLS_INCLUDE_PATH
GNUTLS_LIBRARY
GNUTLS_CFLAGS
GNUTLS_LDFLAGS
)
+80
View File
@@ -0,0 +1,80 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Iconv
# This module finds if libiconv is installed and determines where
# the include files and libraries are.
#
# This code sets the following variables:
#
# ICONV_INCLUDE_PATH = path to where <iconv.h> can be found
# ICONV_LIBRARY = path to where libiconv.so* can be found (on non glibc based systems)
#
# ICONV_FOUND = is iconv usable on system?
IF(ICONV_FOUND)
# Already in cache, be silent
set(ICONV_FIND_QUIETLY TRUE)
ENDIF(ICONV_FOUND)
FIND_PATH(ICONV_INCLUDE_PATH
NAMES iconv.h
PATHS /usr/include /usr/local/include /usr/pkg/include
)
FIND_LIBRARY(ICONV_LIBRARY
NAMES iconv
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
IF(ICONV_INCLUDE_PATH)
IF(ICONV_LIBRARY)
STRING(REGEX REPLACE "/[^/]*$" "" ICONV_LIB_PATH "${ICONV_LIBRARY}")
CHECK_LIBRARY_EXISTS(iconv libiconv_open ${ICONV_LIB_PATH} ICONV_FOUND)
IF(NOT ICONV_FOUND)
CHECK_LIBRARY_EXISTS(iconv iconv_open ${ICONV_LIB_PATH} ICONV_FOUND)
ENDIF(NOT ICONV_FOUND)
ELSE(ICONV_LIBRARY)
CHECK_FUNCTION_EXISTS(iconv_open ICONV_FOUND)
ENDIF(ICONV_LIBRARY)
ENDIF(ICONV_INCLUDE_PATH)
include(CheckCSourceCompiles)
IF(ICONV_LIBRARY)
SET(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARY})
SET(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_PATH})
ENDIF(ICONV_LIBRARY)
SET(CMAKE_REQUIRED_FLAGS -Werror)
check_c_source_compiles("
#include <iconv.h>
int main(){
iconv_t conv = 0;
const char* in = 0;
size_t ilen = 0;
char* out = 0;
size_t olen = 0;
iconv(conv, &in, &ilen, &out, &olen);
return 0;
}
" ICONV_2ARG_IS_CONST)
MARK_AS_ADVANCED(
ICONV_INCLUDE_PATH
ICONV_LIBRARY
ICONV_FOUND
)
+82
View File
@@ -0,0 +1,82 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Lua
# This module finds if liblua is installed and determines where
# the include files and libraries are.
#
# This code sets the following variables:
#
# LUA_INCLUDE_PATH = path to where <lua.h> can be found
# LUA_LIBRARY = path to where liblua.so* (and liblualib.so* for lua <can be found (on non glibc based systems)
#
# LUA_FOUND = is liblua usable on system?
IF(LUA_FOUND)
# Already in cache, be silent
SET(LUA_FIND_QUIETLY TRUE)
ENDIF(LUA_FOUND)
FIND_PATH(
LUA51_INCLUDE_PATH lua.h
PATHS /usr/include /usr/local/include /usr/pkg/include
PATH_SUFFIXES lua51 lua5.1 lua-5.1
)
FIND_LIBRARY(
LUA51_LIBRARY NAMES lua51 lua5.1 lua-5.1
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
IF(LUA51_INCLUDE_PATH AND LUA51_LIBRARY)
SET(LUA_INCLUDE_PATH "${LUA51_INCLUDE_PATH}")
SET(LUA_LIBRARY "${LUA51_LIBRARY}")
SET(LUA_VERSION "5.1")
SET(LUA_FOUND TRUE)
ELSE(LUA51_INCLUDE_PATH AND LUA51_LIBRARY)
FIND_PATH(
LUA50_INCLUDE_PATH lua.h
PATHS /usr/include /usr/local/include /usr/pkg/include
PATH_SUFFIXES lua50 lua5.0 lua-5.0 lua
)
FIND_LIBRARY(
LUA50_LIBRARY NAMES lua50 lua5.0 lua-5.0 lua
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
FIND_LIBRARY(
LUALIB50_LIBRARY NAMES lualib50 lualib5.0 lualib-5.0 lualib
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
IF(LUA50_INCLUDE_PATH AND LUA50_LIBRARY AND LUALIB50_LIBRARY)
SET(LUA_INCLUDE_PATH "${LUA50_INCLUDE_PATH}")
SET(LUA_LIBRARY "${LUA50_LIBRARY}")
SET(LUALIB_LIBRARY "${LUALIB50_LIBRARY}")
SET(LUA_VERSION "5.0")
SET(LUA_FOUND TRUE)
ENDIF(LUA50_INCLUDE_PATH AND LUA50_LIBRARY AND LUALIB50_LIBRARY)
ENDIF(LUA51_INCLUDE_PATH AND LUA51_LIBRARY)
MARK_AS_ADVANCED(
LUA_INCLUDE_PATH
LUA_LIBRARY
LUALIB_LIBRARY
# LUA_VERSION
)
+23
View File
@@ -0,0 +1,23 @@
IF(NCURSES_FOUND)
SET(NCURSES_FIND_QUIETLY TRUE)
ENDIF(NCURSES_FOUND)
FIND_PATH(NCURSES_INCLUDE_PATH
NAMES ncurses.h curses.h
PATHS /usr/include /usr/local/include /usr/pkg/include
)
FIND_LIBRARY(NCURSES_LIBRARY
NAMES ncursesw ncurses
PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib
)
IF (NCURSES_INCLUDE_PATH AND NCURSES_LIBRARY)
SET(NCURSES_FOUND TRUE)
ENDIF(NCURSES_INCLUDE_PATH AND NCURSES_LIBRARY)
MARK_AS_ADVANCED(
NCURSES_INCLUDE_PATH
NCURSES_LIBRARY
)
+83
View File
@@ -0,0 +1,83 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Perl libraries
# This module finds if Perl is installed and determines where the include files
# and libraries are. It also determines what the name of the library is. This
# code sets the following variables:
#
# PERL_EXECUTABLE = full path to the perl binary
# PERL_INCLUDE_PATH = path to where perl.h can be found
# PERL_LIBRARY = path to where libperl.so* can be found
# PERL_CFLAGS = perl compiler options for compiling
# PERL_LFLAGS = perl compiler options for linking
IF(PERL_FOUND)
# Already in cache, be silent
SET(PERL_FIND_QUIETLY TRUE)
ENDIF(PERL_FOUND)
FIND_PROGRAM(PERL_EXECUTABLE
NAMES perl perl5
PATHS /usr/bin /usr/local/bin /usr/pkg/bin
)
IF(PERL_EXECUTABLE)
EXECUTE_PROCESS(
COMMAND ${PERL_EXECUTABLE} -MConfig -e "print \"\$Config{archlibexp}/CORE\""
OUTPUT_VARIABLE PERL_INTERNAL_DIR
)
EXECUTE_PROCESS(
COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ccopts
OUTPUT_VARIABLE PERL_CFLAGS
)
EXECUTE_PROCESS(
COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ldopts
OUTPUT_VARIABLE PERL_LFLAGS
)
# remove the new lines from the output by replacing them with empty strings
STRING(REPLACE "\n" "" PERL_INTERNAL_DIR "${PERL_INTERNAL_DIR}")
STRING(REPLACE "\n" "" PERL_CFLAGS "${PERL_CFLAGS}")
STRING(REPLACE "\n" "" PERL_LFLAGS "${PERL_LFLAGS}")
FIND_PATH(PERL_INCLUDE_PATH
NAMES perl.h
PATHS ${PERL_INTERNAL_DIR}
)
FIND_LIBRARY(PERL_LIBRARY
NAMES perl
PATHS /usr/lib /usr/local/lib /usr/pkg/lib ${PERL_INTERNAL_DIR}
)
IF(PERL_LIBRARY AND PERL_INCLUDE_PATH)
SET(PERL_FOUND TRUE)
ENDIF(PERL_LIBRARY AND PERL_INCLUDE_PATH)
MARK_AS_ADVANCED(
PERL_EXECUTABLE
PERL_INCLUDE_PATH
PERL_LIBRARY
PERL_CFLAGS
PERL_LFLAGS
)
ENDIF(PERL_EXECUTABLE)
+80
View File
@@ -0,0 +1,80 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Python
# This module finds if Python is installed and determines where the include files
# and libraries are. It also determines what the name of the library is. This
# code sets the following variables:
#
# PYTHON_EXECUTABLE = full path to the python binary
# PYTHON_INCLUDE_PATH = path to where python.h can be found
# PYTHON_LIBRARY = path to where libpython.so* can be found
# PYTHON_LFLAGS = python compiler options for linking
IF(PYTHON_FOUND)
# Already in cache, be silent
SET(PYTHON_FIND_QUIETLY TRUE)
ENDIF(PYTHON_FOUND)
FIND_PROGRAM(PYTHON_EXECUTABLE
NAMES python python2.5 python2.4 python2.3 python2.2
PATHS /usr/bin /usr/local/bin /usr/pkg/bin
)
IF(PYTHON_EXECUTABLE)
EXECUTE_PROCESS(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_config_var('CONFINCLUDEPY')"
OUTPUT_VARIABLE PYTHON_INC_DIR
)
EXECUTE_PROCESS(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_config_var('LIBPL')"
OUTPUT_VARIABLE PYTHON_POSSIBLE_LIB_PATH
)
EXECUTE_PROCESS(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_config_var('LINKFORSHARED')"
OUTPUT_VARIABLE PYTHON_LFLAGS
)
# remove the new lines from the output by replacing them with empty strings
STRING(REPLACE "\n" "" PYTHON_INC_DIR "${PYTHON_INC_DIR}")
STRING(REPLACE "\n" "" PYTHON_POSSIBLE_LIB_PATH "${PYTHON_POSSIBLE_LIB_PATH}")
STRING(REPLACE "\n" "" PYTHON_LFLAGS "${PYTHON_LFLAGS}")
FIND_PATH(PYTHON_INCLUDE_PATH
NAMES Python.h
PATHS ${PYTHON_INC_DIR}
)
FIND_LIBRARY(PYTHON_LIBRARY
NAMES python python2.5 python2.4 python2.3 python2.2
PATHS ${PYTHON_POSSIBLE_LIB_PATH}
)
IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_PATH)
SET(PYTHON_FOUND TRUE)
ENDIF(PYTHON_LIBRARY AND PYTHON_INCLUDE_PATH)
MARK_AS_ADVANCED(
PYTHON_EXECUTABLE
PYTHON_INCLUDE_PATH
PYTHON_LIBRARY
PYTHON_LFLAGS
)
ENDIF(PYTHON_EXECUTABLE)
+78
View File
@@ -0,0 +1,78 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# - Find Ruby
# This module finds if Ruby is installed and determines where the include files
# and libraries are. It also determines what the name of the library is. This
# code sets the following variables:
#
# RUBY_EXECUTABLE = full path to the ruby binary
# RUBY_INCLUDE_PATH = path to where ruby.h can be found
# RUBY_LIBRARY = path to where libruby.so* can be found
IF(RUBY_FOUND)
# Already in cache, be silent
SET(RUBY_FIND_QUIETLY TRUE)
ENDIF(RUBY_FOUND)
FIND_PROGRAM(RUBY_EXECUTABLE
NAMES ruby ruby1.9 ruby19 ruby1.8 ruby18 ruby1.6 ruby16
PATHS /usr/bin /usr/local/bin /usr/pkg/bin
)
IF(RUBY_EXECUTABLE)
EXECUTE_PROCESS(
COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "puts Config::CONFIG['archdir']"
OUTPUT_VARIABLE RUBY_ARCH_DIR
)
EXECUTE_PROCESS(
COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "puts Config::CONFIG['libdir']"
OUTPUT_VARIABLE RUBY_POSSIBLE_LIB_PATH
)
EXECUTE_PROCESS(
COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "puts Config::CONFIG['rubylibdir']"
OUTPUT_VARIABLE RUBY_RUBY_LIB_PATH
)
# remove the new lines from the output by replacing them with empty strings
STRING(REPLACE "\n" "" RUBY_ARCH_DIR "${RUBY_ARCH_DIR}")
STRING(REPLACE "\n" "" RUBY_POSSIBLE_LIB_PATH "${RUBY_POSSIBLE_LIB_PATH}")
STRING(REPLACE "\n" "" RUBY_RUBY_LIB_PATH "${RUBY_RUBY_LIB_PATH}")
FIND_PATH(RUBY_INCLUDE_PATH
NAMES ruby.h
PATHS ${RUBY_ARCH_DIR}
)
FIND_LIBRARY(RUBY_LIBRARY
NAMES ruby ruby1.6 ruby16 ruby1.8 ruby18 ruby1.9 ruby19
PATHS ${RUBY_POSSIBLE_LIB_PATH} ${RUBY_RUBY_LIB_PATH}
)
IF(RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
SET(RUBY_FOUND TRUE)
ENDIF(RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
MARK_AS_ADVANCED(
RUBY_EXECUTABLE
RUBY_LIBRARY
RUBY_INCLUDE_PATH
)
ENDIF(RUBY_EXECUTABLE)
+29
View File
@@ -0,0 +1,29 @@
#cmakedefine HAVE_ARPA_INET_H
#cmakedefine HAVE_LIBINTL_H
#cmakedefine HAVE_LIMITS_H
#cmakedefine HAVE_LOCALE_H
#cmakedefine HAVE_NETDB_H
#cmakedefine HAVE_NETINET_IN_H
#cmakedefine HAVE_STDLIB_H
#cmakedefine HAVE_STRING_H
#cmakedefine HAVE_SYS_SOCKET_H
#cmakedefine HAVE_SYS_TIME_H
#cmakedefine HAVE_SYS_TYPES_H
#cmakedefine HAVE_UNISTD_H
#cmakedefine HAVE_PWD_H
#cmakedefine HAVE_ERRNO_H
#cmakedefine HAVE_REGEX_H
#cmakedefine HAVE_WCHAR_H
#cmakedefine HAVE_SYS_FILE_H
#cmakedefine HAVE_FLOCK
#cmakedefine HAVE_LANGINFO_CODESET
#cmakedefine HAVE_STRNDUP
#cmakedefine ICONV_2ARG_IS_CONST 1
#define PACKAGE_VERSION "@VERSION@"
#define PACKAGE "@PROJECT_NAME@"
#define PACKAGE_NAME "@PROJECT_NAME@"
#define PACKAGE_STRING "@PKG_STRING@"
#define WEECHAT_LIBDIR "@LIBDIR@"
#define WEECHAT_SHAREDIR "@SHAREDIR@"
#define LOCALEDIR "@LOCALEDIR@"
#define _GNU_SOURCE 1
+2 -2
View File
@@ -19,10 +19,10 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.56)
AC_INIT(WeeChat, 0.2.4, flashcode@flashtux.org)
AC_INIT(WeeChat, 0.2.5, flashcode@flashtux.org)
AC_CONFIG_SRCDIR([src/common/weechat.c])
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([weechat], [0.2.4])
AM_INIT_AUTOMAKE([weechat], [0.2.5])
# Checks for programs
AC_PROG_CC
+167
View File
@@ -0,0 +1,167 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(DOC_LANGS
cs
de
en
fr
pl
ru
sco
)
FIND_PROGRAM(
COPY cp
PATHS /bin /usr/bin /usr/local/bin /usr/pkg/bin
)
FIND_PROGRAM(
XSLTPROC xsltproc
PATHS /bin /usr/bin /usr/local/bin /usr/pkg/bin
)
FIND_PROGRAM(
DBLATEX dblatex
PATHS /bin /usr/bin /usr/local/bin /usr/pkg/bin
)
FIND_FILE(DOC_XSL_PREFIX chunk.xsl PATHS
/usr/share/xml/docbook/stylesheet/nwalsh/
/usr/share/xml/docbook/xsl-stylesheets-1.69/
PATH_SUFFIXES html
DOC "Path to nwalsh xsl stylesheet"
)
STRING(REPLACE "/html/chunk.xsl" "" DOC_XSL_PREFIX "${DOC_XSL_PREFIX}")
IF(XSLTPROC AND DOC_XSL_PREFIX AND COPY)
SET(BUILD_HTML TRUE)
ENDIF(XSLTPROC AND DOC_XSL_PREFIX AND COPY)
IF(DBLATEX AND COPY)
SET(BUILD_PDF TRUE)
ENDIF(DBLATEX AND COPY)
IF(BUILD_HTML)
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/weechat-html.xsl.in
${CMAKE_CURRENT_BINARY_DIR}/weechat-html.xsl
@ONLY
)
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/weechat-html-one.xsl.in
${CMAKE_CURRENT_BINARY_DIR}/weechat-html-one.xsl
@ONLY
)
ENDIF(BUILD_HTML)
IF(BUILD_HTML OR BUILD_PDF)
EXECUTE_PROCESS(
COMMAND date "+%F %T"
OUTPUT_VARIABLE DOC_DATE
)
STRING(REPLACE "\n" "" DOC_DATE "${DOC_DATE}")
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/date.xml.in
${CMAKE_CURRENT_BINARY_DIR}/date.xml
@ONLY
)
FOREACH(dlang ${DOC_LANGS})
IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml)
IF(BUILD_HTML)
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang})
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build)
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html-one/${dlang})
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}/index.html ${CMAKE_CURRENT_BINARY_DIR}/html-one/${dlang}/weechat.${dlang}.html
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/config.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/irc_commands.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/key_functions.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_commands.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_BINARY_DIR}/date.xml" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/weechat-doc.css" "${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/weechat-doc.css" "${CMAKE_CURRENT_BINARY_DIR}/html-one/${dlang}"
COMMAND ${XSLTPROC} ARGS -o ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}/ ${CMAKE_CURRENT_BINARY_DIR}/weechat-html.xsl ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build/weechat.${dlang}.xml
COMMAND ${XSLTPROC} ARGS -o ${CMAKE_CURRENT_BINARY_DIR}/html-one/${dlang}/weechat.${dlang}.html ${CMAKE_CURRENT_BINARY_DIR}/weechat-html-one.xsl ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}-build/weechat.${dlang}.xml
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/config.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/irc_commands.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/key_functions.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_commands.xml
${CMAKE_CURRENT_SOURCE_DIR}/date.xml.in
${CMAKE_CURRENT_SOURCE_DIR}/weechat-html-one.xsl.in
${CMAKE_CURRENT_SOURCE_DIR}/weechat-html.xsl.in
${CMAKE_CURRENT_SOURCE_DIR}/date.xml.in
${CMAKE_CURRENT_SOURCE_DIR}/weechat-doc.css
COMMENT "Building html doc (${dlang})"
)
ADD_CUSTOM_TARGET(doc-html-${dlang} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang}/index.html)
ADD_CUSTOM_TARGET(doc-html-one-${dlang} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html-one/${dlang}/weechat.${dlang}.html)
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/${dlang} DESTINATION share/doc/${PROJECT_NAME}/html)
ENDIF(BUILD_HTML)
IF(BUILD_PDF)
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang})
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}/weechat.${dlang}.pdf
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/config.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/irc_commands.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/key_functions.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_commands.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${COPY} ARGS "${CMAKE_CURRENT_BINARY_DIR}/date.xml" "${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build"
COMMAND ${DBLATEX} ARGS -c ${CMAKE_CURRENT_SOURCE_DIR}/dblatex.conf -o ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}/weechat.${dlang}.pdf ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}-build/weechat.${dlang}.xml
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/config.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/irc_commands.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/key_functions.xml
${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_commands.xml
${CMAKE_CURRENT_SOURCE_DIR}/date.xml.in
${CMAKE_CURRENT_SOURCE_DIR}/weechat-html-one.xsl.in
${CMAKE_CURRENT_SOURCE_DIR}/date.xml.in
COMMENT "Building pdf doc (${dlang})"
)
ADD_CUSTOM_TARGET(doc-pdf-${dlang} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}/weechat.${dlang}.pdf)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pdf/${dlang}/weechat.${dlang}.pdf DESTINATION share/doc/${PROJECT_NAME})
ENDIF(BUILD_PDF)
ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat.${dlang}.xml)
ENDFOREACH(dlang ${DOC_LANGS})
ENDIF(BUILD_HTML OR BUILD_PDF)
FOREACH(dlang ${DOC_LANGS})
IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_quickstart.${dlang}.txt)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_quickstart.${dlang}.txt DESTINATION share/doc/${PROJECT_NAME})
ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dlang}/weechat_quickstart.${dlang}.txt)
ENDFOREACH(dlang ${DOC_LANGS})
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/weechat-curses.1 DESTINATION share/man/man1)
+1
View File
@@ -0,0 +1 @@
<pubdate>@DOC_DATE@</pubdate>
+14
View File
@@ -194,6 +194,13 @@
<entry>'[]-^'</entry>
<entry>Zeichen, die bei der Nickvervollständigung ignoriert werden</entry>
</row>
<row>
<entry><option>look_nick_completion_smart</option></entry>
<entry>Boolean</entry>
<entry>eine beliebige Zeichenfolge</entry>
<entry>'on'</entry>
<entry>Intelligente vervollständigung der Nicknamen (vervollständigt zuerst mit dem letzten Nick, der einen angesprochen hat)</entry>
</row>
<row>
<entry><option>look_nick_complete_first</option></entry>
<entry>Boolean</entry>
@@ -551,6 +558,13 @@
<entry>'cyan'</entry>
<entry>Farbe des Trennzeichens in der Eingabezeile</entry>
</row>
<row>
<entry><option>col_input_text_not_found</option></entry>
<entry>Farbe</entry>
<entry>Curses- oder Gtk-Farben</entry>
<entry>'red'</entry>
<entry>Farbe fĂĽr den Text nicht gefunden</entry>
</row>
<row>
<entry><option>col_input_bg</option></entry>
<entry>Farbe</entry>
+177 -60
View File
@@ -36,7 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<bookinfo>
<title>WeeChat 0.2.4 - User guide</title>
<title>WeeChat 0.2.5 - User guide</title>
<subtitle>Schneller, leichter und erweiterbarer IRC Client</subtitle>
<author>
@@ -95,14 +95,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<!-- =========================== Introduction =========================== -->
<chapter id="chapIntroduction">
<title> EinfĂĽhrung </title>
<title>EinfĂĽhrung</title>
<para>
Dieses Kapitel beschreibt WeeChat und die Vorraussetzungen fĂĽr die Installation.
</para>
<section id="secDescription">
<title> Beschreibung </title>
<title>Beschreibung</title>
<para>
WeeChat (Wee Enhanced Environment for Chat) ist ein freier
@@ -166,10 +166,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secPreRequis">
<title> Vorraussetzungen </title>
<title>Vorraussetzungen</title>
<para>
Um WeeChat zu installieren, werden <emphasis> gebraucht </emphasis>:
Um WeeChat zu installieren, werden <emphasis>gebraucht</emphasis>:
<itemizedlist>
<listitem>
<para>
@@ -224,7 +224,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</para>
<section id="secBinaryPackages">
<title> Binäre Pakete </title>
<title>Binäre Pakete</title>
<para>
Binäre Pakete sind für die folgenden Distributionen verfügbar:
@@ -257,7 +257,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secSourcePackage">
<title> Quellcode-Pakete </title>
<title>Quellcode-Pakete</title>
<para>
Alles was sie tun mĂĽssen, ist in einer Konsole oder einem Terminal aufzurufen:
@@ -303,7 +303,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<!-- ============================== Usage =============================== -->
<chapter id="chapUsage">
<title> Nutzung </title>
<title>Nutzung</title>
<para>
Dieses Kapitel erklärt, wie Weechat zu starten ist, die zu verwendenden
@@ -452,15 +452,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secKeyboardShortcuts">
<title> Tastenkombinationen </title>
<title>Tastenkombinationen</title>
<para>
<informaltable colsep="0" frame="none">
<tgroup cols="2">
<thead>
<row>
<entry> Tastenkombination </entry>
<entry> Wirkung </entry>
<entry>Tastenkombination</entry>
<entry>Wirkung</entry>
</row>
</thead>
<tbody>
@@ -596,19 +596,19 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</entry>
</row>
<row>
<entry>Alt + Seite hoch / Alt + Seite runter </entry>
<entry>Alt + Seite hoch / Alt + Seite runter</entry>
<entry>
Ein paar Zeilen hoch / runter im Verlauf des Buffers
</entry>
</row>
<row>
<entry> Alt + Pos1 / Alt + Ende </entry>
<entry>Alt + Pos1 / Alt + Ende</entry>
<entry>
Gehe zum Anfang / Ende des Puffers
</entry>
</row>
<row>
<entry> F5 / Alt + Links </entry>
<entry>F5 / Alt + Links</entry>
<entry>
Gehe zum vorherigen Puffer
</entry>
@@ -782,7 +782,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secCommandLine">
<title> Kommandozeile </title>
<title>Kommandozeile</title>
<para>
Die WeeChat Kommandozeile (am Ende des Fensters) lässt sie Nachrichten an einen
@@ -899,11 +899,11 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</row>
<row>
<entry>03</entry>
<entry>dunkles GrĂĽn </entry>
<entry>dunkles GrĂĽn</entry>
</row>
<row>
<entry>04</entry>
<entry>helles Rot </entry>
<entry>helles Rot</entry>
</row>
<row>
<entry>05</entry>
@@ -911,43 +911,43 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</row>
<row>
<entry>06</entry>
<entry> Magenta </entry>
<entry>Magenta</entry>
</row>
<row>
<entry>07</entry>
<entry> Orange </entry>
<entry>Orange</entry>
</row>
<row>
<entry>08</entry>
<entry> Gelb </entry>
<entry>Gelb</entry>
</row>
<row>
<entry>09</entry>
<entry> helles GrĂĽn</entry>
<entry>helles GrĂĽn</entry>
</row>
<row>
<entry>10</entry>
<entry> Cyan </entry>
<entry>Cyan</entry>
</row>
<row>
<entry>11</entry>
<entry> helles Cyan</entry>
<entry>helles Cyan</entry>
</row>
<row>
<entry>12</entry>
<entry> helles Blau </entry>
<entry>helles Blau</entry>
</row>
<row>
<entry>13</entry>
<entry> helles Magenta </entry>
<entry>helles Magenta</entry>
</row>
<row>
<entry>14</entry>
<entry> Grau </entry>
<entry>Grau</entry>
</row>
<row>
<entry>15</entry>
<entry> helles Grau (Weiss)</entry>
<entry>helles Grau (Weiss)</entry>
</row>
</tbody>
</tgroup>
@@ -964,14 +964,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secWeeChatIRCCommands">
<title>WeeChat / IRC Kommandos </title>
<title>WeeChat / IRC Kommandos</title>
<para>
Dieses Kapitel listet alle WeeChat- und IRC-Kommandos auf.
</para>
<section id="secWeeChatCommands">
<title> WeeChat Kommandos </title>
<title>WeeChat Kommandos</title>
<para>
&weechat_commands.xml;
@@ -980,15 +980,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secKeyFunctions">
<title> Funktionen </title>
<title>Funktionen</title>
<para>
<informaltable colsep="0" frame="none">
<tgroup cols="2">
<thead>
<row>
<entry> Funktion </entry>
<entry> Beschreibung </entry>
<entry>Funktion</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
@@ -1003,7 +1003,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secIRCCommands">
<title> IRC Kommandos </title>
<title>IRC Kommandos</title>
<para>
&irc_commands.xml;
@@ -1014,7 +1014,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secConfigurationFile">
<title> Konfigurationsdatei </title>
<title>Konfigurationsdatei</title>
<para>
Liste der Optionen fĂĽr die Konfigurationsdatei:
@@ -1022,11 +1022,11 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<tgroup cols="5">
<thead>
<row>
<entry> Option </entry>
<entry> Typ </entry>
<entry> Wert </entry>
<entry> Default </entry>
<entry> Beschreibung </entry>
<entry>Option</entry>
<entry>Typ</entry>
<entry>Wert</entry>
<entry>Default</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
@@ -1044,8 +1044,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<tgroup cols="2">
<thead>
<row>
<entry> SchlĂĽsselwort </entry>
<entry> Farbe </entry>
<entry>SchlĂĽsselwort</entry>
<entry>Farbe</entry>
</row>
</thead>
<tbody>
@@ -1055,59 +1055,59 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</row>
<row>
<entry><literal>black</literal></entry>
<entry> Schwarz </entry>
<entry>Schwarz</entry>
</row>
<row>
<entry><literal>red</literal></entry>
<entry> dunkles Rot </entry>
<entry>dunkles Rot</entry>
</row>
<row>
<entry><literal>lightred</literal></entry>
<entry> helles Rot </entry>
<entry>helles Rot</entry>
</row>
<row>
<entry><literal>green</literal></entry>
<entry> dunkles GrĂĽn </entry>
<entry>dunkles GrĂĽn</entry>
</row>
<row>
<entry><literal>lightgreen</literal></entry>
<entry> helles GrĂĽn </entry>
<entry>helles GrĂĽn</entry>
</row>
<row>
<entry><literal>brown</literal></entry>
<entry> Braun </entry>
<entry>Braun</entry>
</row>
<row>
<entry><literal>yellow</literal></entry>
<entry> Gelb </entry>
<entry>Gelb</entry>
</row>
<row>
<entry><literal>blue</literal></entry>
<entry> dunkles Blau </entry>
<entry>dunkles Blau</entry>
</row>
<row>
<entry><literal>lightblue</literal></entry>
<entry> helles Blau </entry>
<entry>helles Blau</entry>
</row>
<row>
<entry><literal>magenta</literal></entry>
<entry> dunkles Magenta </entry>
<entry>dunkles Magenta</entry>
</row>
<row>
<entry><literal>lightmagenta</literal></entry>
<entry> helles Magenta </entry>
<entry>helles Magenta</entry>
</row>
<row>
<entry><literal>cyan</literal></entry>
<entry> dunkles Cyan </entry>
<entry>dunkles Cyan</entry>
</row>
<row>
<entry><literal>lightcyan</literal></entry>
<entry> helles Cyan </entry>
<entry>helles Cyan</entry>
</row>
<row>
<entry><literal>white</literal></entry>
<entry> Weiss </entry>
<entry>Weiss</entry>
</row>
</tbody>
</tgroup>
@@ -1116,8 +1116,119 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secCharset">
<title>Zeichensatz Plugin</title>
<para>
Das Zeichensatz-Plugin ermöglicht das Ver- und Entschlüsseln von Daten
auf 3 Ebenen: Global, pro Server oder pro Channel.
Das Plugin ist optional, wird jedoch empfohlen: wenn es nicht geladen ist,
kann WeeChat nur UTF-8-Daten lesen und schreiben.
</para>
<para>
Das Zeichensatz-Plugin sollte beim Start von WeeChat automatisch geladen
werden.
Um sicherzustellen, dass das Plugin geladen wurde, versuchen Sie:
"<literal>/charset</literal>".
Wenn der Befehl nicht gefunden wird, laden Sie das Plugin manuell mit dem Befehl:
<screen>/plugin load charset</screen>
Wenn das Plugin nicht gefunden wird, kompilieren Sie WeeChat erneut mit Plugin-
und Zeichensatz-Support
</para>
<para>
Wenn das Zeichensatz-Plugin startet, zeigt es den Terminalzeichensatz
und den internen Zeichensatz an. Der Terminalzeichensatz hängt von
den LOCALE-Einstellungen ab, der interne ist UTF-8.
Zum Beispiel:
<screen>
-P- Charset plugin starting, terminal charset: ISO-8859-15 (WeeChat internal: UTF-8)
</screen>
</para>
<section id="secCharsetSettings">
<title>Einstellungen</title>
<itemizedlist>
<listitem>
<para>
Um den globalen Zeichensatz zum Kodieren und Dekodieren festzulegen, benutzen Sie den
"<literal>/setp</literal>" Befehl.
Zum Beispiel:
<screen>
/setp charset.global.decode = ISO-8859-15
/setp charset.global.encode = ISO-8859-15
</screen>
Wenn der Zeichensatz zum Dekodieren nicht gesetzt ist (z.B. beim ersten
Start des Plugins), wird es automatisch auf den Terminalzeichensatz
eingestellt (wenn es nicht UTF-8 ist) oder als Voreinstellung auf
"<literal>ISO-8859-1</literal>" gesetzt.
Der voreingestellte Enkodierungszeichensatz ist leer, so dass in der
Voreinstellung mit dem internen Zeichensatz (UTF-8) enkodiert wird.
</para>
</listitem>
<listitem>
<para>
Um den Serverzeichensatz festzulegen, benutzen Sie den
"<literal>/charset</literal>"-Befehl im Server-Puffer.
Wenn Sie nur einen Zeichensatz vorgeben, wird dieser automatisch
zum Enkodieren und Dekodieren verwendet.
Zum Beispiel:
<screen>/charset ISO-8859-15</screen>
Das ist gleichbedeutend mit:
<screen>
/charset decode ISO-8859-15
/charset encode ISO-8859-15
</screen>
</para>
</listitem>
<listitem>
<para>
Um den zeichensatz im Channel (oder einem privatem Chat) festzulegen,
mĂĽssen Sie den gleichen Befehl wie fĂĽr den Server benutzen, jedoch in
dem Channel-Puffer (oder Query-Puffer)
</para>
</listitem>
</itemizedlist>
</section>
<section id="secCharsetFAQ">
<title>FAQ</title>
<para>
Wenn Sie Probleme mit den Zeichen oder dem Zeichensatz-Plugin haben:
<itemizedlist>
<listitem>
<para>
ĂĽberprĂĽfen Sie, ob weechat-curses zu libcursesw gelinkt ist
(Achtung: Wird bei den meisten, jedoch nicht bei allen Distributionen benötigt):
<screen>ldd /pfad/zu/weechat-curses</screen>
</para>
</listitem>
<listitem>
<para>
ĂĽberprĂĽfen Sie die Zeichensatz-Zeile im Server-Puffer, dort sollten ISO-XXXXXX
oder UTF-8 fĂĽr den Terminal-Zeichensatz stehen. Wenn Sie dort ANSI_X3.4-1968
oder andere Werte sehen, sind Ihre LOCALES eventuell falsch eingestellt.
</para>
</listitem>
<listitem>
<para>
Setze die globalen Dekodier-Einstellungen, z.B.:
<screen>/setp charset.global.decode = ISO-8859-15</screen>
</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>
<section id="secFIFOpipe">
<title> Remote-Schnittstelle (FIFO pipe) </title>
<title>Remote-Schnittstelle (FIFO pipe)</title>
<para>
Sie können WeeChat auch extern steuern, indem sie Kommandos oder Text
@@ -1224,7 +1335,7 @@ fi
</section>
<section id="secWriteAPlugin">
<title> Ein Plugin schreiben </title>
<title>Ein Plugin schreiben</title>
<para>
Das Plugin muss die Datei "weechat-plugin.h" einbinden (verfĂĽgbar
@@ -1241,7 +1352,7 @@ fi
<thead>
<row>
<entry>Variable</entry>
<entry> Beschreibung </entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
@@ -2169,7 +2280,7 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
</row>
<row>
<entry><literal>%C</literal></entry>
<entry>Channels des gegenwärtigen Servers</entry>
<entry>alle channels (inklusive Queries)</entry>
</row>
<row>
<entry><literal>%f</literal></entry>
@@ -2195,6 +2306,12 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
<entry><literal>%m</literal></entry>
<entry>Nicknamen des gegenwärtigen Servers</entry>
</row>
<row>
<entry><literal>%M</literal></entry>
<entry>
Nicks auf dem gegenwärtigen Server (in allen offenen Channeln)
</entry>
</row>
<row>
<entry><literal>%n</literal></entry>
<entry>Nicknamen des gegenwärtigen Channels</entry>
@@ -3058,7 +3175,7 @@ plugin->exec_command (plugin, "freenode", "#weechat", "hello");
</row>
<row>
<entry><literal>weechat_libdir</literal></entry>
<entry>WeeChat-Systemverzeichnis (Bibliotheken) </entry>
<entry>WeeChat-Systemverzeichnis (Bibliotheken)</entry>
</row>
<row>
<entry><literal>weechat_sharedir</literal></entry>
+16 -6
View File
@@ -49,18 +49,20 @@ Fenster leeren
Nummer: lösche den Puffer mit der angegebenen Nummer
</programlisting>
<command>connect [Servername]</command>
<command>connect [-all | Servername [Servername ...]]</command>
<programlisting>
mit einem Server verbinden
mit Server verbinden
Servername: Zielserver
-all: verbinde mit allen Servern
servername: Servername, mit dem verbunden werden soll
</programlisting>
<command>disconnect [Servername]</command>
<command>disconnect [-all | Servername [Servername ...]]</command>
<programlisting>
Serververbindung trennen
Serververbindung(en) trennen
Servername: Name des zu trennenden Servers
-all: Trenne von allen Servern
servername: Servername, von dem getrennt werden soll
</programlisting>
<command>dcc Aktion [Nickname [Datei]]</command>
@@ -134,6 +136,14 @@ autoload: lade automatisch alle Plugins im System- oder Benutzerverzeichnis
Ohne Argument, listet /plugin alle geladenen Plugins auf.
</programlisting>
<command>reconnect [-all | Servername [Servername ...]]</command>
<programlisting>
mit einem Server oder mehreren Servern neu verbinden
-all: Verbinde mit allen Servern neu
servername: Servername, mit dem verbunden werden soll
</programlisting>
<command>server [Servername] | [Servername Hostname Port [-auto | -noauto] [-ipv6] [-ssl] [-pwd Passwort] [-nicks Nick1 Nick2 Nick3] [-username Benutzername] [-realname Name] [-command Befehl] [-autojoin Channel[,Channel]] ] | [del Servername]</command>
<programlisting>
+14
View File
@@ -194,6 +194,13 @@
<entry>'[]-^'</entry>
<entry>Chars ignored for nick completion</entry>
</row>
<row>
<entry><option>look_nick_completion_smart</option></entry>
<entry>boolean</entry>
<entry>'on' or 'off'</entry>
<entry>'on'</entry>
<entry>Smart completion for nicks (completes with last speakers first)</entry>
</row>
<row>
<entry><option>look_nick_complete_first</option></entry>
<entry>boolean</entry>
@@ -551,6 +558,13 @@
<entry>'cyan'</entry>
<entry>Color for input text (delimiters)</entry>
</row>
<row>
<entry><option>col_input_text_not_found</option></entry>
<entry>color</entry>
<entry>Curses or Gtk color</entry>
<entry>'red'</entry>
<entry>Color for text not found</entry>
</row>
<row>
<entry><option>col_input_bg</option></entry>
<entry>color</entry>
+116 -2
View File
@@ -36,7 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<bookinfo>
<title>WeeChat 0.2.4 - User guide</title>
<title>WeeChat 0.2.5 - User guide</title>
<subtitle>Fast, light and extensible IRC client</subtitle>
<author>
@@ -1111,6 +1111,114 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</section>
<section id="secCharset">
<title>Charset plugin</title>
<para>
Charset plugin lets you encode or decode data using charsets, with 3
levels: global, by server, or by channel.
This plugin is optional, but recommended: if it's not loaded, WeeChat
can only read/write UTF-8 data.
</para>
<para>
Charset plugin should be autoloaded by WeeChat at startup.
To be sure plugin is loaded, try:
"<literal>/charset</literal>".
If command is not found, then load plugin with command:
<screen>/plugin load charset</screen>
If plugin is not found, then you should compile again WeeChat with
plugins and Charset support.
</para>
<para>
When Charset plugin starts, it displays terminal and internal charsets.
Terminal charset depends on your locale, and internal is UTF-8.
For example :
<screen>
-P- Charset plugin starting, terminal charset: ISO-8859-15 (WeeChat internal: UTF-8)
</screen>
</para>
<section id="secCharsetSettings">
<title>Settings</title>
<itemizedlist>
<listitem>
<para>
To set global decode and encode charsets, use
"<literal>/setp</literal>" command.
For example:
<screen>
/setp charset.global.decode = ISO-8859-15
/setp charset.global.encode = ISO-8859-15
</screen>
If global decode charset is not set (for example during first
load of Charset plugin), it will be automatically set to terminal
charset (if it's different from UTF-8), or by default to
"<literal>ISO-8859-1</literal>".
Default encode value is empty, so it sends by default with
internal charset (UTF-8).
</para>
</listitem>
<listitem>
<para>
To set server charset, use "<literal>/charset</literal>" command
on server buffer.
If you give only charset, then it will set "decode" and "encode"
values.
For example:
<screen>/charset ISO-8859-15</screen>
It's equivalent to:
<screen>
/charset decode ISO-8859-15
/charset encode ISO-8859-15
</screen>
</para>
</listitem>
<listitem>
<para>
To set channel (or private) charset, use same commands as server,
but on channel (or private) buffer.
</para>
</listitem>
</itemizedlist>
</section>
<section id="secCharsetFAQ">
<title>FAQ</title>
<para>
If you have problems with chars or accents using Charset plugin:
<itemizedlist>
<listitem>
<para>
check that weechat-curses is linked to libncursesw (warning:
needed on most distributions but not all) :
<screen>ldd /path/to/weechat-curses</screen>
</para>
</listitem>
<listitem>
<para>
check charset line (on server buffer), you should see
ISO-XXXXXX or UTF-8 for terminal charset. If you see
ANSI_X3.4-1968 or other values, probably your locale is wrong.
</para>
</listitem>
<listitem>
<para>
setup global decode value, for example:
<screen>/setp charset.global.decode = ISO-8859-15</screen>
</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>
<section id="secFIFOpipe">
<title>FIFO pipe</title>
@@ -2186,7 +2294,7 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
</row>
<row>
<entry><literal>%C</literal></entry>
<entry>channels of current server</entry>
<entry>all channels (including queries)</entry>
</row>
<row>
<entry><literal>%f</literal></entry>
@@ -2212,6 +2320,12 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
<entry><literal>%m</literal></entry>
<entry>nick on current server</entry>
</row>
<row>
<entry><literal>%M</literal></entry>
<entry>
nicks on current server (on all open channels)
</entry>
</row>
<row>
<entry><literal>%n</literal></entry>
<entry>nicks of current channel</entry>
+14 -4
View File
@@ -49,17 +49,19 @@ clear window(s)
number: clear buffer by number
</programlisting>
<command>connect [servername]</command>
<command>connect [-all | servername [servername ...]]</command>
<programlisting>
connect to a server
connect to server(s)
-all: connect to all servers
servername: server name to connect
</programlisting>
<command>disconnect [servername]</command>
<command>disconnect [-all | servername [servername ...]]</command>
<programlisting>
disconnect from a server
disconnect from server(s)
-all: disconnect from all servers
servername: server name to disconnect
</programlisting>
@@ -133,6 +135,14 @@ autoload: autoload plugins in system or user directory
Without argument, /plugin command lists loaded plugins.
</programlisting>
<command>reconnect [-all | servername [servername ...]]</command>
<programlisting>
reconnect to server(s)
-all: reconnect to all servers
servername: server name to reconnect
</programlisting>
<command>server [servername] | [servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 nick2 nick3] [-username username] [-realname realname] [-command command] [-autojoin channel[,channel]] ] | [del servername]</command>
<programlisting>
+27 -13
View File
@@ -87,28 +87,28 @@
<entry>booléen</entry>
<entry>'on' ou 'off'</entry>
<entry>'on'</entry>
<entry>Afficher la fenĂŞtre des utilisateurs (pour les fenĂŞtres de canaux)</entry>
<entry>Afficher la fenĂŞtre des pseudos (pour les fenĂŞtres de canaux)</entry>
</row>
<row>
<entry><option>look_nicklist_position</option></entry>
<entry>chaîne</entry>
<entry>'left', 'right', 'top', 'bottom'</entry>
<entry>'right'</entry>
<entry>Position de la fenêtre d'utilisateurs (haut (top), gauche (left), droite (right, par défaut), bas (bottom))</entry>
<entry>Position de la fenêtre des pseudos (haut (top), gauche (left), droite (right, par défaut), bas (bottom))</entry>
</row>
<row>
<entry><option>look_nicklist_min_size</option></entry>
<entry>entier</entry>
<entry>entre 0 et 100</entry>
<entry>0</entry>
<entry>Taille minimum pour la fenĂŞtre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille minimum))</entry>
<entry>Taille minimum pour la fenĂŞtre des pseudos (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille minimum))</entry>
</row>
<row>
<entry><option>look_nicklist_max_size</option></entry>
<entry>entier</entry>
<entry>entre 0 et 100</entry>
<entry>0</entry>
<entry>Taille maximum pour la fenĂŞtre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille maximum; si min == max et &gt; 0, alors la taille est fixe))</entry>
<entry>Taille maximum pour la fenĂŞtre des pseudos (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille maximum; si min == max et &gt; 0, alors la taille est fixe))</entry>
</row>
<row>
<entry><option>look_nicklist_separator</option></entry>
@@ -122,21 +122,21 @@
<entry>chaîne</entry>
<entry>toute chaîne</entry>
<entry>'-cmd-'</entry>
<entry>Texte Ă  afficher en lieu et place du nom d'utilisateur lorsque la connexion n'est pas active</entry>
<entry>Texte Ă  afficher en lieu et place du pseudo lorsque la connexion n'est pas active</entry>
</row>
<row>
<entry><option>look_nickmode</option></entry>
<entry>booléen</entry>
<entry>'on' ou 'off'</entry>
<entry>'on'</entry>
<entry>Afficher le mode de l'utilisateur ((half)op/voice) devant chaque utilisateur</entry>
<entry>Afficher le mode du pseudo ((half)op/voice) devant chaque utilisateur</entry>
</row>
<row>
<entry><option>look_nickmode_empty</option></entry>
<entry>booléen</entry>
<entry>'on' ou 'off'</entry>
<entry>'off'</entry>
<entry>Afficher un espace si le mode utilisateur n'est pas (half)op/voice</entry>
<entry>Afficher un espace si le mode du pseudo n'est pas (half)op/voice</entry>
</row>
<row>
<entry><option>look_nick_prefix</option></entry>
@@ -194,6 +194,13 @@
<entry>'[]-^'</entry>
<entry>Caractères à ignorer pour la complétion des pseudos</entry>
</row>
<row>
<entry><option>look_nick_completion_smart</option></entry>
<entry>booléen</entry>
<entry>'on' ou 'off'</entry>
<entry>'on'</entry>
<entry>Complétion intelligente pour les pseudos (complète d'abord avec les personnes qui ont parlé récemment)</entry>
</row>
<row>
<entry><option>look_nick_complete_first</option></entry>
<entry>booléen</entry>
@@ -304,7 +311,7 @@
<entry>couleur</entry>
<entry>couleur Curses ou Gtk</entry>
<entry>'lightmagenta'</entry>
<entry>Couleur pour les '+' lors du scroll sur le titre</entry>
<entry>Couleur pour les '+' lors du défilement du titre</entry>
</row>
<row>
<entry><option>col_title_bg</option></entry>
@@ -374,14 +381,14 @@
<entry>couleur</entry>
<entry>couleur Curses ou Gtk</entry>
<entry>'lightcyan'</entry>
<entry>Couleur pour les noms d'utilisateurs dans les actions (fenĂŞtre de discussion)</entry>
<entry>Couleur pour les pseudos dans les actions (fenĂŞtre de discussion)</entry>
</row>
<row>
<entry><option>col_chat_host</option></entry>
<entry>couleur</entry>
<entry>couleur Curses ou Gtk</entry>
<entry>'cyan'</entry>
<entry>Couleur pour les noms de machines (fenĂŞtre de discussion)</entry>
<entry>Couleur pour les hĂ´tes (fenĂŞtre de discussion)</entry>
</row>
<row>
<entry><option>col_chat_channel</option></entry>
@@ -551,6 +558,13 @@
<entry>'cyan'</entry>
<entry>Couleur pour le texte saisi (délimiteurs)</entry>
</row>
<row>
<entry><option>col_input_text_not_found</option></entry>
<entry>couleur</entry>
<entry>couleur Curses ou Gtk</entry>
<entry>'red'</entry>
<entry>Couleur pour le texte non trouvé</entry>
</row>
<row>
<entry><option>col_input_bg</option></entry>
<entry>couleur</entry>
@@ -612,7 +626,7 @@
<entry>couleur</entry>
<entry>couleur Curses ou Gtk</entry>
<entry>'lightmagenta'</entry>
<entry>Couleur pour les '+' lors du scroll sur les pseudos</entry>
<entry>Couleur pour les '+' lors du défilement des pseudos</entry>
</row>
<row>
<entry><option>col_nick_sep</option></entry>
@@ -1025,7 +1039,7 @@
<entry>booléen</entry>
<entry>'on' ou 'off'</entry>
<entry>'on'</entry>
<entry>Continuer automatiquement les transferts dcc si la connexion avec la machine distante a été perdue</entry>
<entry>Continuer automatiquement les transferts dcc si la connexion avec l'hôte a été perdue</entry>
</row>
<row>
<entry><option>proxy_use</option></entry>
@@ -1053,7 +1067,7 @@
<entry>chaîne</entry>
<entry>toute chaîne</entry>
<entry>''</entry>
<entry>Adresse du serveur proxy (IP ou nom)</entry>
<entry>Adresse du serveur proxy (IP ou nom de machine)</entry>
</row>
<row>
<entry><option>proxy_port</option></entry>
+30 -30
View File
@@ -36,17 +36,17 @@ message: message pour l'absence (si pas de message donn
</programlisting>
<command>ban [canal] [pseudo [pseudo ...]]</command>
<programlisting>
bannit des pseudos ou masques
bannit des pseudos ou hĂ´tes
canal: nom du canal pour le bannissement
pseudo: pseudo ou masque pour le bannissement
pseudo: pseudo ou hĂ´te pour le bannissement
</programlisting>
<command>ctcp cible type [arguments]</command>
<programlisting>
envoyer un message CTCP (Client-To-Client Protocol)
cible: utilisateur Ă  qui envoyer le CTCP
cible: pseudo Ă  qui envoyer le CTCP
type: type de CTCP (exemples: "version", "ping", etc...)
arguments: arguments pour le CTCP
@@ -61,12 +61,12 @@ message_de_fin: message de fin (affich
</programlisting>
<command>dehalfop [pseudo [pseudo]]</command>
<programlisting>
retire le statut de demi-opérateur du canal à/aux nick(s)
retire le statut de demi-opérateur du canal à/aux pseudo(s)
</programlisting>
<command>deop [pseudo [pseudo]]</command>
<programlisting>
retire le statut d'opérateur du canal à/aux nick(s)
retire le statut d'opérateur du canal à/aux pseudo(s)
</programlisting>
<command>devoice [pseudo [pseudo]]</command>
@@ -81,7 +81,7 @@ arr
</programlisting>
<command>halfop [pseudo [pseudo]]</command>
<programlisting>
donner le statut de demi-opérateur à un/des utilisateur(s)
donner le statut de demi-opérateur à un/des pseudo(s)
</programlisting>
<command>info [cible]</command>
@@ -93,15 +93,15 @@ cible: nom du serveur
</programlisting>
<command>invite pseudo canal</command>
<programlisting>
inviter un utilisateur sur un canal
inviter un pseudo sur un canal
pseudo: utilisateur Ă  inviter
pseudo: pseudo Ă  inviter
channel: canal pour l'invitation
</programlisting>
<command>ison pseudo [pseudo ...]</command>
<programlisting>
vérifier si un utilisateur est actuellement sur IRC
vérifier si un pseudo est actuellement sur IRC
pseudo: pseudo
@@ -119,16 +119,16 @@ canal: nom du canal
retirer par la force un utilisateur d'un canal
canal: canal oĂą l'utilisateur se trouve
pseudo: utilisateur à éliminer
pseudo: pseudo à éliminer
commentaire: commentaire pour l'élimination
</programlisting>
<command>kickban [canal] pseudo [commentaire]</command>
<programlisting>
retirer par la force un utilisateur d'un canal et le bannir
retirer par la force un pseudo d'un canal et le bannir
canal: canal oĂą l'utilisateur se trouve
pseudo: utilisateur à éliminer et bannir
pseudo: pseudo à éliminer et bannir
commentaire: commentaire pour l'élimination
</programlisting>
@@ -136,7 +136,7 @@ commentaire: commentaire pour l'
<programlisting>
fermer la connexion client-serveur
pseudo: utilisateur
pseudo: pseudo
commentaire: commentaire pour la mort
</programlisting>
@@ -171,7 +171,7 @@ envoyer une action CTCP au canal courant
message: message Ă  envoyer
</programlisting>
<command>mode { canal {[+|-]|o|p|s|i|t|n|b|v} [limite] [utilisateur] [masque de banissement] } | { nick {[+|-]|i|w|s|o} }</command>
<command>mode { canal {[+|-]|o|p|s|i|t|n|b|v} [limite] [utilisateur] [masque de banissement] } | { pseudo {[+|-]|i|w|s|o} }</command>
<programlisting>
changer le mode du canal ou de l'utilisateur
@@ -190,7 +190,7 @@ modes de canaux :
v: donner/reprendre la possibilité de parler sur un canal modéré
k: définir une clé (mot de passe) pour accéder au canal
modes utilisateur :
pseudo: utilisateur Ă  modifier
pseudo: pseudo Ă  modifier
i: marquer un utilisateur comme invisible
s: marquer un utilisateur pour recevoir les notices du serveur
w: l'utilisateur reçoit les wallops
@@ -206,15 +206,15 @@ cible: nom du serveur
</programlisting>
<command>msg cible[,cible] texte</command>
<programlisting>
envoyer un message Ă  un utilisateur ou canal
envoyer un message Ă  un pseudo ou canal
cible: utilisateur ou canal (peut-ĂŞtre un masque, '*' = canal courant)
cible: pseudo ou canal (peut-ĂŞtre un masque, '*' = canal courant)
texte: texte Ă  envoyer
</programlisting>
<command>names [canal[,canal]]</command>
<programlisting>
lister les utilisateurs sur des canaux
lister les pseudos sur des canaux
canal: nom du canal
@@ -231,13 +231,13 @@ pseudo: nouveau pseudo
<programlisting>
envoyer un message notice Ă  un utilisateur
pseudo: utilisateur cible pour la notice
pseudo: pseudo cible pour la notice
texte: texte Ă  envoyer
</programlisting>
<command>op pseudo [pseudo]</command>
<programlisting>
donner le statut opérateur à un/des utilisateur(s)
donner le statut opérateur à un/des pseudo(s)
</programlisting>
<command>oper utilisateur mot_de_passe</command>
@@ -273,9 +273,9 @@ d
</programlisting>
<command>query pseudo [texte]</command>
<programlisting>
envoyer un message privé à un utilisateur
envoyer un message privé à un pseudo
pseudo: utilisateur pour la conversation privée
pseudo: pseudo pour la conversation privée
texte: texte Ă  envoyer
</programlisting>
@@ -376,15 +376,15 @@ cible: serveur
</programlisting>
<command>unban [canal] pseudo [pseudo ...]</command>
<programlisting>
supprime le bannissement sur des pseudos ou masques
supprime le bannissement sur des pseudos ou hĂ´tes
canal: nom du canal pour supprimer le bannissement
pseudo: pseudo ou masque pour supprimer le bannissement
pseudo: pseudo ou hĂ´te pour supprimer le bannissement
</programlisting>
<command>userhost pseudo [pseudo ...]</command>
<programlisting>
retourne une liste d'informations sur des utilisateurs
retourne une liste d'informations sur des pseudos
pseudo: pseudo
@@ -398,15 +398,15 @@ cible: serveur
</programlisting>
<command>version [serveur | pseudo]</command>
<programlisting>
retourne la version de l'utilisateur ou du serveur (courant ou spécifié)
retourne la version du pseudo ou du serveur (courant ou spécifié)
serveur: nom du serveur
pseudo: utilisateur
pseudo: pseudo
</programlisting>
<command>voice [pseudo [pseudo]]</command>
<programlisting>
donne la voix Ă /aux utilisateur(s)
donne la voix Ă /aux pseudo(s)
</programlisting>
<command>wallops texte</command>
@@ -429,12 +429,12 @@ masque: information qui correspond
demande les informations sur le(s) utilisateur(s)
serveur: nom du serveur
pseudo: utilisateur (peut ĂŞtre un masque)
pseudo: pseudo (peut ĂŞtre un masque)
</programlisting>
<command>whowas pseudo [,pseudo [,pseudo ...]] [nombre [cible]]</command>
<programlisting>
demander de l'information sur un nick qui n'existe plus
demander de l'information sur un pseudo qui n'existe plus
pseudo: pseudo Ă  chercher
nombre: nombre de réponses à retourner (recherche complète si nombre négatif)
+3 -3
View File
@@ -171,15 +171,15 @@
</row>
<row>
<entry><literal>scroll_previous_highlight</literal></entry>
<entry>scroller jusqu'au highlight précédent du tampon</entry>
<entry>faire défiler jusqu'au highlight précédent du tampon</entry>
</row>
<row>
<entry><literal>scroll_next_highlight</literal></entry>
<entry>scroller jusqu'au highlight suivant du tampon</entry>
<entry>faire défiler jusqu'au highlight suivant du tampon</entry>
</row>
<row>
<entry><literal>scroll_unread</literal></entry>
<entry>scroller jusqu'à la première ligne non lue du tampon</entry>
<entry>faire défiler jusqu'à la première ligne non lue du tampon</entry>
</row>
<row>
<entry><literal>hotlist_clear</literal></entry>
+127 -2
View File
@@ -36,7 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<bookinfo>
<title>WeeChat 0.2.4 - Guide utilisateur</title>
<title>WeeChat 0.2.5 - Guide utilisateur</title>
<subtitle>Client IRC rapide, léger et extensible</subtitle>
<author>
@@ -1124,6 +1124,124 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</para>
</section>
<section id="secCharset">
<title>Extension Charset</title>
<para>
L'extension Charset vous permet d'encoder et décoder les données en
utilisant un jeu de caractères, avec 3 niveaux : global, par serveur,
ou par canal.
Cette extension est facultative, mais recommandée : si elle n'est pas
chargée, WeeChat pourra uniquement lire/écrire des données UTF-8.
</para>
<para>
L'extension Charset devrait être automatiquement chargée par WeeChat
au démarrage.
Pour s'assurer que l'extension est bien chargée, essayez :
"<literal>/charset</literal>".
Si la commande n'est pas trouvée, alors chargez l'extension avec la
commande :
<screen>/plugin load charset</screen>
Si l'extension n'est pas trouvée, alors vous devriez recompiler
WeeChat avec les extensions et le support de Charset.
</para>
<para>
Lorsque l'extension Charset démarre, elle affiche le jeu de caractères
du terminal et l'interne.
Le jeu de caractères du terminal dépend de votre locale, et l'interne
est UTF-8.
Par exemple :
<screen>
-P- Charset plugin starting, terminal charset: ISO-8859-15 (WeeChat internal: UTF-8)
</screen>
</para>
<section id="secCharsetSettings">
<title>Configuration</title>
<itemizedlist>
<listitem>
<para>
Pour modifier les jeux de caractères de décodage et d'encodage
globaux, utilisez la commande "<literal>/setp</literal>".
Par exemple :
<screen>
/setp charset.global.decode = ISO-8859-15
/setp charset.global.encode = ISO-8859-15
</screen>
Si le jeu de caractères de décodage global n'est pas renseigné
(par exemple pendant le premier chargement de Charset), il sera
renseigné automatiquement avec le jeu de caractères du terminal
(s'il est différent de UTF-8) ou par défaut à
"<literal>ISO-8859-1</literal>".
La valeur d'encodage par défaut est vide, donc WeeChat envoie par
défaut avec le jeu de caractères interne (UTF-8).
</para>
</listitem>
<listitem>
<para>
Pour modifier le jeu de caractères d'un serveur, utilisez la
commande "<literal>/charset</literal>" sur le tampon serveur.
Si vous donnez seulement le jeu de caractères, alors vous
modifiez en même temps les valeurs de décodage et d'encodage.
Par exemple :
<screen>/charset ISO-8859-15</screen>
Ce qui est équivalent à :
<screen>
/charset decode ISO-8859-15
/charset encode ISO-8859-15
</screen>
</para>
</listitem>
<listitem>
<para>
Pour modifier le jeu de caractères d'un canal (ou d'une
conversation privée), utilisez la même commande que pour le
serveur, mais sur le tampon du canal (ou du privé).
</para>
</listitem>
</itemizedlist>
</section>
<section id="secCharsetFAQ">
<title>FAQ</title>
<para>
Si vous avez des problèmes avec certains caractères ou les accents en
utilisant l'extension Charset :
<itemizedlist>
<listitem>
<para>
vérifiez que weechat-curses est lié avec libncursesw
(attention : nécessaire sur beaucoup de distributions, mais pas
toutes) :
<screen>ldd /chemin/vers/weechat-curses</screen>
</para>
</listitem>
<listitem>
<para>
vérifiez la ligne charset (sur le tampon serveur), vous devriez
voir ISO-XXXXXX ou UTF-8 pour le charset du terminal. Si vous
voyez ANSI_X3.4-1968 ou d'autres valeurs, votre locale est
probablement erronée.
</para>
</listitem>
<listitem>
<para>
affectez la valeur pour le décodage global, par exemple :
<screen>/setp charset.global.decode = ISO-8859-15</screen>
</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>
<section id="secTubeFIFO">
<title>Tube FIFO</title>
@@ -2233,7 +2351,7 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
</row>
<row>
<entry><literal>%C</literal></entry>
<entry>canaux du serveur courant</entry>
<entry>tous les canaux (y compris les privés)</entry>
</row>
<row>
<entry><literal>%f</literal></entry>
@@ -2259,6 +2377,13 @@ msg_handler = plugin->msg_handler_add (plugin, "KICK",
<entry><literal>%m</literal></entry>
<entry>pseudo sur le serveur courant</entry>
</row>
<row>
<entry><literal>%M</literal></entry>
<entry>
pseudos sur le serveur courant
(tous les canaux ouverts)
</entry>
</row>
<row>
<entry><literal>%n</literal></entry>
<entry>pseudos du canal courant</entry>
+18 -8
View File
@@ -49,17 +49,19 @@ effacer la/les fen
nombre: effacer un tampon par son numéro
</programlisting>
<command>connect [nom_serveur]</command>
<command>connect [-all | nom_serveur [nom_serveur...]]</command>
<programlisting>
se connecter Ă  un serveur
se connecter Ă  un/plusieurs serveur(s)
-all: se connecter Ă  tous les serveurs
nom_serveur: nom du serveur pour se connecter
</programlisting>
<command>disconnect [nom_serveur]</command>
<command>disconnect [-all | nom_serveur [nom_serveur...]]</command>
<programlisting>
se déconnecter d'un serveur
se déconnecter d'un/plusieurs serveur(s)
-all: se déconnecter de tous les serveurs
nom_serveur: nom du serveur pour se déconnecter
</programlisting>
@@ -97,9 +99,9 @@ valeur: nombre d'entr
</programlisting>
<command>ignore [masque [[type | commande] [canal [serveur]]]]</command>
<programlisting>
ignorer des messages IRC et/ou des masques
ignorer des messages IRC et/ou des hĂ´tes
masque: pseudo ou masque Ă  ignorer
masque: pseudo ou hĂ´te Ă  ignorer
type: type de message Ă  ignorer (action, ctcp, dcc, pv)
commande: commande IRC
canal: nom du canal pour le ignore
@@ -133,6 +135,14 @@ autoload: charger automatiquement les extensions dans un r
Sans paramètre, la commande /plugin liste les extensions chargées.
</programlisting>
<command>reconnect [-all | nom_serveur [nom_serveur...]]</command>
<programlisting>
se reconnecter Ă  un/plusieurs serveur(s)
-all: se reconnecter Ă  tous les serveurs
nom_serveur: nom du serveur pour se reconnecter
</programlisting>
<command>server [nom_serveur] | [nom_serveur nom/IP port [-auto | -noauto] [-ipv6] [-ssl] [-pwd mot_de_passe] [-nicks pseudo1 pseudo2 pseudo3] [-username nom_utilisateur] [-realname nom_réel] [-command commande] [-autojoin canal[,canal]] ] | [del nom_serveur]</command>
<programlisting>
@@ -187,10 +197,10 @@ nom_alias: nom de l'alias
</programlisting>
<command>unignore [nombre | [masque [[type | commande] [canal [serveur]]]]]</command>
<programlisting>
supprimer le ignore des messages IRC et/ou des masques
supprimer le ignore des messages IRC et/ou des hĂ´tes
nombre: numéro de ignore à supprimer (le nombre est affiché sur la liste des ignore)
masque: pseudo ou masque Ă  ignorer
masque: pseudo ou hĂ´te Ă  ignorer
type: type de message Ă  ignorer (action, ctcp, dcc, pv)
commande: commande IRC
canal: nom du canal pour le ignore
+3 -3
View File
@@ -1,4 +1,4 @@
.TH WEECHAT 1 "March 2007" "FlashCode"
.TH WEECHAT 1 "June 2007" "FlashCode"
.SH NAME
weechat-curses \- Wee Enhanced Environment for Chat (Curses version)
@@ -14,7 +14,7 @@ or
Fast, light and extensible IRC client for many operating systems.
.br
Everything can be done with a keyboard. It is customizable and extensible with scripts.
Many GUIs are available (Curses, Gtk, Qt, and text).
Many GUIs are or will be available (Curses, Gtk and Qt).
It is compliant with RFCs 1459, 2810, 2811, 2812, and 2813.
.SH OPTIONS
@@ -85,7 +85,7 @@ WeeChat is written by FlashCode <flashcode@flashtux.org>
.br
WeeChat on the web:
.UR
http://weechat.flashtux.org
http://weechat.flashtux.org/
.br
Get support there:
.UR
+77
View File
@@ -0,0 +1,77 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(PO_FILES
fr.po
es.po
cs.po
hu.po
de.po
ru.po
)
SET(COPYRIGHT_HOLDER "WeeChat Team")
SET(BUGS_ADDRESS "flashcode@flashtux.org")
SET(POT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pot)
INCLUDE(srcfiles.cmake)
# Looking for xgettext, msgmerge and msgfmt
FIND_PROGRAM(XGETTEXT_EXECUTABLE xgettext)
FIND_PROGRAM(MSGMERGE_EXECUTABLE msgmerge)
FIND_PROGRAM(MSGFMT_EXECUTABLE msgfmt)
IF(XGETTEXT_EXECUTABLE AND MSGMERGE_EXECUTABLE AND MSGFMT_EXECUTABLE)
# Create PO template file weechat.pot
SET(SRC_FILES)
SET(POT_DEPENDS)
FOREACH(srcfile ${WEECHAT_SOURCES})
SET(SRC_FILES ${SRC_FILES} ${srcfile})
SET(POT_DEPENDS ${POT_DEPENDS} ${CMAKE_SOURCE_DIR}/${srcfile})
ENDFOREACH(srcfile ${WEECHAT_SOURCES})
ADD_CUSTOM_COMMAND(
OUTPUT ${POT_FILE}
COMMAND ${XGETTEXT_EXECUTABLE}
ARGS -o ${POT_FILE} --keyword='_' --keyword='N_' --directory=${CMAKE_SOURCE_DIR} --omit-header --msgid-bugs-address=${BUGS_ADDRESS} --copyright-holder=${COPYRIGHT_HOLDER} ${SRC_FILES}
DEPENDS ${POT_DEPENDS}
COMMENT "Generating PO template file"
)
# Update .po files and compile them to binary .gmo files
SET(GMO_FILES)
FOREACH(pofile ${PO_FILES})
GET_FILENAME_COMPONENT(polang ${pofile} NAME_WE)
SET(gmofile ${CMAKE_CURRENT_BINARY_DIR}/${polang}.gmo)
ADD_CUSTOM_COMMAND(
OUTPUT ${gmofile}
COMMAND ${MSGMERGE_EXECUTABLE} ARGS --quiet -s -o ${CMAKE_CURRENT_BINARY_DIR}/${pofile} ${CMAKE_CURRENT_SOURCE_DIR}/${pofile} ${POT_FILE}
COMMAND ${MSGFMT_EXECUTABLE} ARGS -o ${gmofile} ${CMAKE_CURRENT_BINARY_DIR}/${pofile}
DEPENDS ${POT_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}
COMMENT "Compiling locales (${polang})"
)
INSTALL(FILES ${gmofile} DESTINATION share/locale/${polang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
SET(GMO_FILES ${GMO_FILES} ${gmofile})
ENDFOREACH(pofile ${PO_FILES})
ADD_CUSTOM_TARGET(translations ALL DEPENDS ${GMO_FILES})
ENDIF(XGETTEXT_EXECUTABLE AND MSGMERGE_EXECUTABLE AND MSGFMT_EXECUTABLE)
+970 -923
View File
File diff suppressed because it is too large Load Diff
+974 -923
View File
File diff suppressed because it is too large Load Diff
+986 -921
View File
File diff suppressed because it is too large Load Diff
+1784 -1739
View File
File diff suppressed because it is too large Load Diff
+978 -921
View File
File diff suppressed because it is too large Load Diff
+976 -923
View File
File diff suppressed because it is too large Load Diff
+82
View File
@@ -0,0 +1,82 @@
SET(WEECHAT_SOURCES
src/irc/irc-mode.c
src/irc/irc-nick.c
src/irc/irc-server.c
src/irc/irc-channel.c
src/irc/irc-commands.c
src/irc/irc-display.c
src/irc/irc-send.c
src/irc/irc-recv.c
src/irc/irc-dcc.c
src/irc/irc-ignore.c
src/irc/irc.h
src/plugins/plugins.c
src/plugins/plugins.h
src/plugins/plugins-config.c
src/plugins/plugins-config.h
src/plugins/plugins-interface.c
src/plugins/weechat-plugin.h
src/gui/curses/gui-curses-chat.c
src/gui/curses/gui-curses-color.c
src/gui/curses/gui-curses-infobar.c
src/gui/curses/gui-curses-input.c
src/gui/curses/gui-curses-keyboard.c
src/gui/curses/gui-curses-main.c
src/gui/curses/gui-curses-nicklist.c
src/gui/curses/gui-curses-panel.c
src/gui/curses/gui-curses-status.c
src/gui/curses/gui-curses-window.c
src/gui/curses/gui-curses.h
src/gui/gtk/gui-gtk-chat.c
src/gui/gtk/gui-gtk-color.c
src/gui/gtk/gui-gtk-infobar.c
src/gui/gtk/gui-gtk-input.c
src/gui/gtk/gui-gtk-keyboard.c
src/gui/gtk/gui-gtk-main.c
src/gui/gtk/gui-gtk-nicklist.c
src/gui/gtk/gui-gtk-panel.c
src/gui/gtk/gui-gtk-status.c
src/gui/gtk/gui-gtk-window.c
src/gui/gtk/gui-gtk.h
src/gui/gui-action.c
src/gui/gui-buffer.c
src/gui/gui-common.c
src/gui/gui-keyboard.c
src/gui/gui-log.c
src/gui/gui-panel.c
src/gui/gui-window.c
src/gui/gui.h
src/gui/gui-buffer.h
src/gui/gui-color.h
src/gui/gui-keyboard.h
src/gui/gui-panel.h
src/gui/gui-window.h
src/common/alias.c
src/common/alias.h
src/common/backtrace.c
src/common/backtrace.h
src/common/command.c
src/common/command.h
src/common/completion.c
src/common/completion.h
src/common/fifo.c
src/common/fifo.h
src/common/history.c
src/common/history.h
src/common/hotlist.c
src/common/hotlist.h
src/common/log.c
src/common/log.h
src/common/session.c
src/common/session.h
src/common/utf8.c
src/common/utf8.h
src/common/util.c
src/common/util.h
src/common/weechat.c
src/common/weechat.h
src/common/weeconfig.c
src/common/weeconfig.h
src/common/weelist.c
src/common/weelist.h
)
+977 -938
View File
File diff suppressed because it is too large Load Diff
+37 -8
View File
@@ -5,22 +5,42 @@
The script is in the public domain.
Leonid Evdokimov (weechat at darkk dot net dot ru)
http://darkk.net.ru/weechat/awl.py
0.1 - initial commit
0.2 - added `show_servers` option
0.3 - infobar is actually redrawed only if that's necessary
"""
#######################################################################
import weechat
from itertools import ifilter
version = "0.1"
VERSION = "0.3"
NAME = "awl"
# how often to refresh infobar
timer_interval = 1
blist = ()
def cleanup():
weechat.remove_infobar(-1)
return weechat.PLUGIN_RC_OK
def cfg_boolean(key, default = False):
map = {True: 'ON', False: 'OFF'}
value = weechat.get_plugin_config(key).upper()
if not value in map.values():
if value:
weechat.prnt("[%s]: invalid %s value (%s), resetting to %s" % (NAME, key, value, map[default]))
weechat.set_plugin_config(key, map[default])
value = default
else:
value = ifilter(lambda p: p[1] == value, map.iteritems()).next()[0]
return value
def update_channels():
the_string = [];
global blist
names = ()
buffers = weechat.get_buffer_info()
if buffers != None:
for index, buffer in buffers.iteritems():
@@ -29,19 +49,28 @@ def update_channels():
if len(buffer['channel']):
name = buffer['channel']
elif len(buffer['server']):
name = "[" + buffer['server'] + "]"
if cfg_boolean('show_servers'):
name = "[" + buffer['server'] + "]"
else:
continue
else:
name = "?"
the_string.append("%i:%s" % (index, name))
the_string = " ".join(the_string)
weechat.remove_infobar(-1)
weechat.print_infobar(0, the_string);
names += ("%i:%s" % (index, name), )
if (names != blist):
the_string = " ".join(names)
blist = names
weechat.remove_infobar(-1)
weechat.print_infobar(0, the_string);
def on_timer():
update_channels()
return weechat.PLUGIN_RC_OK
if weechat.register("awl", version, "cleanup", "bufferlist in infobar"):
if weechat.register(NAME, VERSION, "cleanup", "bufferlist in infobar"):
#message handlers are called __before__ buflist is changed, so we don't use them
weechat.add_timer_handler(timer_interval, "on_timer")
cfg_boolean('show_servers', False)
update_channels()
# vim:set tabstop=4 softtabstop=4 shiftwidth=4:
# vim:set expandtab:
-2
View File
@@ -1,5 +1,3 @@
#!/usr/bin/env python
# Catapult v0.2 - less ordinary abuse generator
# Copyright (C) 2007 Pavel Shevchuk <stlwrt@gmail.com>
+8 -2
View File
@@ -18,7 +18,7 @@
-- Leonid Evdokimov (weechat at darkk dot net one more dot ru)
"""
version = "0.9"
version = "0.10"
history = """
0.1 initial
0.2
@@ -38,6 +38,8 @@ history = """
- fixed on_msg (occasionally caused a minor fault)
0.9
- added dump_to_servchan and dump_to_current setting
0.10
- added SILENT (asmanian)
"""
short_syntax = """[REQUEST ANSWER]"""
@@ -46,7 +48,8 @@ syntax = """ Examples:
/set_ctcp
show settings for common CTCP-Requests.
where "OFF" means "use weechat default behaviour.
where "OFF" means "use weechat default behaviour,
"SILENT" means: "dont answer at all".
/set_ctcp VERSION I prefer using weechat $version
Reply with a fancy message.
@@ -121,6 +124,9 @@ def on_msg(server, args):
if not ans or ans == "OFF":
raise ValueError
if ans == "SILENT":
return wc.PLUGIN_RC_OK_IGNORE_ALL
info = {
"version": wc.get_info("version"),
"nick": wc.get_info("nick"),
+66
View File
@@ -0,0 +1,66 @@
# Author: Skippy the Kangoo <Skippythekangoo AT yahoo DOT fr>
# This script manages basic controls of mpd (play/pause, next song, previous song, increase volume, decrease volume, display current song)
# Usage: /mpd toggle|next|prev|volume_up|volume_down|status
# Released under GNU GPL v2 or newer
import weechat
from os import popen
weechat.register ('mpd', '0.0.2', '', 'mpd control script')
weechat.add_command_handler('mpd', 'mpd', 'mpd control', 'toggle|next|prev|volume_up|volume_down|status', '', 'toggle|next|prev|volume_up|volume_down|status')
def toggle (server, args,):
popen('mpc toggle')
return weechat.PLUGIN_RC_OK
def next (server, args,):
popen('mpc next')
return weechat.PLUGIN_RC_OK
def prev (server, args,):
popen('mpc prev')
return weechat.PLUGIN_RC_OK
def volume_up (server, args,):
popen('mpc volume +10')
return weechat.PLUGIN_RC_OK
def volume_down (server, args,):
volume_down = popen('mpc volume -10')
return weechat.PLUGIN_RC_OK
def status (server, args,):
status = popen('mpc').readline().rstrip()
weechat.print_infobar(3, status)
return weechat.PLUGIN_RC_OK
def mpd(server, args):
largs = args.split(" ")
#strip spaces
while '' in largs:
largs.remove('')
while ' ' in largs:
largs.remove(' ')
if len(largs) == 0:
weechat.command("/help mpd")
return weechat.PLUGIN_RC_OK
else:
inchan = False
if largs[0] == 'toggle':
toggle(" ".join(largs[1:]), inchan)
elif largs[0] == 'next':
next(" ".join(largs[1:]), inchan)
elif largs[0] == 'prev':
prev(' '.join(largs[1:]), inchan)
elif largs[0] == 'volume_up':
volume_up(' '.join(largs[1:]), inchan)
elif largs[0] == 'volume_down':
volume_down(' '.join(largs[1:]), inchan)
elif largs[0] == 'status':
status(" ".join(largs[1:]), inchan)
return weechat.PLUGIN_RC_OK
-1
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python
"""
Theme manager for WeeChat.
It loads configuration parameters from file
-1
View File
@@ -1,4 +1,3 @@
#!/bin/env python
#
# TinyUrl, version 3.3, for weechat version 0.1.9
#
+103 -88
View File
@@ -1,5 +1,5 @@
#
# UrlGrab, version 1.0, for weechat version 0.1.6
# UrlGrab, version 1.1, for weechat version 0.2.4
#
# Listens to all channels for URLs, collects them in a list, and launches
# them in your favourite web server on the local host or a remote server.
@@ -59,9 +59,13 @@
# The file where the command output (if any) is saved. Overwritten
# each time you launch a new URL. Default is ~/.weechat/urllaunch.log
#
# default
# The command that will be run if no arguemnts to /url are given.
# Default is help
#
# Requirements:
#
# - Designed to run with weechat version 1.0.6 or better.
# - Designed to run with weechat version 0.2.4 or better.
# http://weechat.flashtux.org/
#
# Acknowlegements:
@@ -70,6 +74,13 @@
# irc.freenode.net/#weechat Honestly, I just cleaned up the code a bit and
# made the settings a little more useful (to me).
#
# - With changes by Leonid Evdokimov (weechat at darkk dot net another dot ru):
# http://darkk.net.ru/weechat/urlgrab.py
# v1.1: added better handling of dead zombie-childs
# added parsing of private messages
# added default command setting
# added parsing of scrollback buffers on load
#
# Copyright (C) 2005 Jim Ramsay <i.am@jimramsay.com>
#
# This program is free software; you can redistribute it and/or
@@ -88,16 +99,13 @@
# USA.
#
import sys
import os
import weechat
import subprocess
UC_NAME="UrlGrab"
UC_VERSION="1.0"
weechat.register (UC_NAME, UC_VERSION, "", "Url collector/launcher for weechat")
weechat.add_message_handler("privmsg", "urlGrabCheck")
weechat.add_command_handler("url", "urlGrabMain",
"Controls UrlGrab -> '/url help' for usage")
UC_VERSION="1.1"
def urlGrabPrint(message):
weechat.prnt("-[%s]- %s" % ( UC_NAME, message ) )
@@ -114,6 +122,8 @@ class WeechatSetting:
class UrlGrabSettings:
def __init__(self):
self.settings = {
'default':WeechatSetting('default', 'help',
"default command to /url to run if none given" ),
'historysize':WeechatSetting('historysize', '10',
"Number of URLs to keep per channel" ),
'method':WeechatSetting('method', 'local',
@@ -276,15 +286,22 @@ class UrlGrabber:
if not found:
urlGrabPrint(channel + "@" + server + ": no entries")
def urlGrabParsemsg(command):
infos = command.split(" ")
chan = infos[2]
message = " ".join(infos[3:])[1:]
return (chan, message)
def urlGrabParsemsg(server, command):
# :nick!ident@host PRIVMSG dest :foobarbaz
l = command.split(' ')
mask = l[0][1:]
dest = l[2]
message = ' '.join(l[3:])[1:]
###########################################
#nothing, info, message = command.split(":", 2)
#info = info.split(' ')
if dest == weechat.get_info('nick', server):
source = mask.split("!")[0]
else:
source = dest
return (source, message)
def urlGrabCheck(server, args):
global urlGrab
chan, message = urlGrabParsemsg(args)
def urlGrabCheckMsgline(server, chan, message):
# Ignore output from 'tinyurl.py'
if message.startswith( "[AKA] http://tinyurl.com" ):
return weechat.PLUGIN_RC_OK
@@ -294,17 +311,20 @@ def urlGrabCheck(server, args):
word[0:8] == "https://" or \
word[0:6] == "ftp://":
urlGrab.addUrl(word, chan, server)
# check for any dead children and clean them up
while True:
try:
mypid, status = os.waitpid(0, os.WNOHANG)
except:
break
else:
if mypid <= 0:
break
def urlGrabCheck(server, args):
global urlGrab
chan, message = urlGrabParsemsg(server, args)
urlGrabCheckMsgline(server, chan, message)
return weechat.PLUGIN_RC_OK
def urlGrabCheckOnload():
for buf in weechat.get_buffer_info().itervalues():
if len(buf['channel']):
lines = weechat.get_buffer_data(buf['server'], buf['channel'])
for line in reversed(lines):
urlGrabCheckMsgline(buf['server'], buf['channel'], line['data'])
def urlGrabOpen(index, channel = None):
global urlGrab, urlGrabSettings
@@ -336,30 +356,22 @@ def urlGrabOpen(index, channel = None):
except:
urlGrabPrint("Fork failed!")
if childpid == 0:
# in the child- Detach from tty and Exec the command
logfile = os.path.expanduser( urlGrabSettings.get( 'cmdlog' ) )
din = open("/dev/null", "r")
dout = open(logfile, "a")
try:
# Redirect IO for the child
os.dup2(din.fileno(), 0)
os.dup2(dout.fileno(), 1)
os.dup2(dout.fileno(), 2)
subprocess.Popen(
argl,
stdin = open('/dev/null', 'r'),
stdout = open(logfile, 'a'),
stderr = subprocess.STDOUT)
except:
dout.write( "UrlGrab: IO Redirection failed\n" )
dout.close()
din.close()
sys.exit(1)
try:
# Actually run the command
os.execvp( argl[0], argl )
except:
dout.write( "UrlGrab: Exec failed" )
dout.close()
din.close()
sys.exit(1)
urlGrabPrint(traceback.format_exc(None))
sys.exit(0)
else:
# In the parent - Don't wait now, wait later.
# In the parent - we may wait for stub to fork again and let the init kill grand-child
try:
os.waitpid(childpid, 0)
except:
pass
return
def urlGrabList( args ):
@@ -398,50 +410,53 @@ def urlGrabMain(server, args):
while ' ' in largs:
largs.remove(' ')
if len(largs) == 0:
largs = [urlGrabSettings.get('default')]
if largs[0] == 'help':
urlGrabHelp()
else:
if largs[0] == 'help':
urlGrabHelp()
elif largs[0] == 'list':
urlGrabList( largs[1:] )
elif largs[0] == 'set':
try:
if (len(largs) == 1):
urlGrabPrint( "Available settings:" )
urlGrabSettings.prntall()
elif (len(largs) == 2):
name = largs[1]
urlGrabPrint( "Get %s" % name )
urlGrabSettings.prnt( name )
elif (len(largs) > 2):
name = largs[1]
value = None
if( largs[2] != "="):
value = " ".join(largs[2:])
elif( largs > 3 and largs[2] == "=" ):
value = " ".join(largs[3:])
urlGrabPrint( "set %s = \'%s\'" % (name, value) )
if value is not None:
try:
urlGrabSettings.set( name, value )
urlGrabSettings.prnt( name, verbose=False )
except ValueError, msg:
weechat.prnt( " Failed: %s" % msg )
else:
weechat.prnt( " Failed: No value given" )
except KeyError:
weechat.prnt( " Failed: Unrecognized parameter '%s'" % name )
else:
try:
no = int(largs[0])
if len(largs) > 1:
urlGrabOpen(no, largs[1])
elif largs[0] == 'list':
urlGrabList( largs[1:] )
elif largs[0] == 'set':
try:
if (len(largs) == 1):
urlGrabPrint( "Available settings:" )
urlGrabSettings.prntall()
elif (len(largs) == 2):
name = largs[1]
urlGrabPrint( "Get %s" % name )
urlGrabSettings.prnt( name )
elif (len(largs) > 2):
name = largs[1]
value = None
if( largs[2] != "="):
value = " ".join(largs[2:])
elif( largs > 3 and largs[2] == "=" ):
value = " ".join(largs[3:])
urlGrabPrint( "set %s = \'%s\'" % (name, value) )
if value is not None:
try:
urlGrabSettings.set( name, value )
urlGrabSettings.prnt( name, verbose=False )
except ValueError, msg:
weechat.prnt( " Failed: %s" % msg )
else:
urlGrabOpen(no)
except ValueError:
urlGrabPrint( "Unknown command '%s'. Try '/url help' for usage" % largs[0])
weechat.prnt( " Failed: No value given" )
except KeyError:
weechat.prnt( " Failed: Unrecognized parameter '%s'" % name )
else:
try:
no = int(largs[0])
if len(largs) > 1:
urlGrabOpen(no, largs[1])
else:
urlGrabOpen(no)
except ValueError:
urlGrabPrint( "Unknown command '%s'. Try '/url help' for usage" % largs[0])
return weechat.PLUGIN_RC_OK
# Initialize global variables
urlGrabSettings = UrlGrabSettings()
urlGrab = UrlGrabber( urlGrabSettings.get('historysize') )
if weechat.register (UC_NAME, UC_VERSION, "", "Url collector/launcher for weechat"):
urlGrabSettings = UrlGrabSettings()
urlGrab = UrlGrabber( urlGrabSettings.get('historysize') )
urlGrabCheckOnload()
weechat.add_message_handler("privmsg", "urlGrabCheck")
weechat.add_command_handler("url", "urlGrabMain", "Controls UrlGrab -> '/url help' for usage")
+127
View File
@@ -0,0 +1,127 @@
# Copyright (c) 2007 by Javier Valencia <jvalencia@log01.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
def weechat_init
Weechat.register("browse", "0.1", "", "Fast url browsing for Weechat.")
Weechat.add_command_handler(
"browse",
"do_browse",
"Use your preferred browser to navigate an url.",
"[number of url] (-1 to browse all) (leave empty to browse first one)")
Weechat.add_command_handler(
"webbrowser",
"set_browser",
"Get/Set browser command",
"[command] (leavy empty to get current command)")
Weechat.add_command_handler(
"urls",
"get_url_list",
"Get a list of urls in a channel.")
Weechat.print("")
Weechat.print("See help for 'browse', 'webbrowser' and 'urls' commands.")
if Weechat.get_plugin_config("webbrowser").empty?
Weechat.print("")
Weechat.print("WARNING: you must define a web browser with the command /webbrowser.")
end
return Weechat::PLUGIN_RC_OK
end
def set_browser(server, args)
if args.empty?
Weechat.print("current web browser -> #{Weechat.get_plugin_config('webbrowser')}")
else
Weechat.set_plugin_config("webbrowser", args)
Weechat.print("web browser set to -> #{args}")
end
return Weechat::PLUGIN_RC_OK
end
def get_url_array(buffer_data)
urls = Array.new
buffer_data.each do |line|
line["data"].split.each do |word|
if word =~ /^http\:\/\/.*/
urls << word
end
end
end
return urls.uniq.reverse
end
def get_url_list(server,args)
channel = Weechat.get_info("channel")
if channel.empty?
Weechat.print("You must be inside a channel.")
return Weechat::PLUGIN_RC_KO
end
buffer = Weechat.get_buffer_data(server, channel)
unless buffer
Weechat.print("Error retrieving window buffer, may be a bug?.")
return Weechat::PLUGIN_RC_KO
end
Weechat.print("")
Weechat.print("URL listing:")
pos = 0
get_url_array(buffer).each do |url|
Weechat.print("#{pos}) #{url}")
pos += 1
end
return Weechat::PLUGIN_RC_OK
end
def do_browse(server, args)
num = args.to_i
channel = Weechat.get_info("channel")
if channel.empty?
Weechat.print("You must be inside a channel.")
return Weechat::PLUGIN_RC_KO
end
buffer = Weechat.get_buffer_data(server, channel)
unless buffer
Weechat.print("Error retrieving window buffer, may be a bug?.")
return Weechat::PLUGIN_RC_KO
end
browser = Weechat.get_plugin_config("webbrowser")
if browser.empty?
Weechat.print("")
Weechat.print("WARNING: you must define a web browser with the command /webbrowser.")
return Weechat::PLUGIN_RC_KO
end
urls = get_url_array(buffer)
if urls.empty?
Weechat.print("No urls in current channel.")
else
if num == -1
Weechat.print("Starting browser...")
fork do # only for unix/posix
exec("#{browser} #{urls.join(' ')} &> /dev/null")
end
else
if urls[num]
Weechat.print("Starting browser...")
fork do # only for unix/posix
exec("#{browser} #{urls[num]} &> /dev/null")
end
else
Weechat.print("Invalid url number.")
end
end
end
return Weechat::PLUGIN_RC_OK
end
+35
View File
@@ -0,0 +1,35 @@
# Forcenick v1.0 - forces your original nickname
# Copyright (C) 2007 Pavel Shevchuk <stlwrt@gmail.com>
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
def weechat_init
Weechat.register("forcenick", "1.0", "", "Forces your original nickname, wipes out ghosts and nick stealers")
Weechat.add_command_handler("forcenick", "forcenick", "Forces server_nick1, identifies to nickserv using server_password. Useful to call from server_command if your connection is unstable")
end
def forcenick(server, args)
server_info = Weechat.get_server_info[server]
cur_nick = server_info['nick']
forced_nick = server_info['nick1']
password = server_info['password']
if cur_nick != forced_nick
Weechat.command("/msg nickserv ghost #{forced_nick} #{password}", "", server)
Weechat.command("/nick #{forced_nick}", "", server)
Weechat.command("/msg nickserv identify #{password}", "", server)
end
return Weechat::PLUGIN_RC_OK
end
+95
View File
@@ -0,0 +1,95 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckFunctionExists)
CHECK_INCLUDE_FILES("arpa/inet.h" HAVE_ARPA_INET_H)
#CHECK_INCLUDE_FILES("libintl.h" HAVE_LIBINTL_H)
CHECK_INCLUDE_FILES("limits.h" HAVE_LIMITS_H)
CHECK_INCLUDE_FILES("locale.h" HAVE_LOCALE_H)
CHECK_INCLUDE_FILES("netdb.h" HAVE_NETDB_H)
CHECK_INCLUDE_FILES("netinet/in.h" HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILES("stdlib.h" HAVE_STDLIB_H)
CHECK_INCLUDE_FILES("string.h" HAVE_STRING_H)
CHECK_INCLUDE_FILES("sys/socket.h" HAVE_SYS_SOCKET_H)
CHECK_INCLUDE_FILES("sys/time.h" HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILES("sys/types.h" HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILES("unistd.h" HAVE_UNISTD_H)
CHECK_INCLUDE_FILES("pwd.h" HAVE_PWD_H)
CHECK_INCLUDE_FILES("errno.h" HAVE_ERRNO_H)
CHECK_INCLUDE_FILES("wchar.h" HAVE_WCHAR_H)
CHECK_INCLUDE_FILES("langinfo.h" HAVE_LANGINFO_CODESET)
CHECK_FUNCTION_EXISTS(gethostbyname HAVE_GETHOSTBYNAME)
CHECK_FUNCTION_EXISTS(gethostname HAVE_GETHOSTNAME)
CHECK_FUNCTION_EXISTS(getsockname HAVE_GETSOCKNAME)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(inet_ntoa HAVE_INET_NTOA)
CHECK_FUNCTION_EXISTS(memset HAVE_MEMSET)
CHECK_FUNCTION_EXISTS(mkdir HAVE_MKDIR)
CHECK_FUNCTION_EXISTS(select HAVE_SELECT)
CHECK_FUNCTION_EXISTS(setlocale HAVE_SETLOCALE)
CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET)
CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
CHECK_FUNCTION_EXISTS(strchr HAVE_STRCHR)
CHECK_FUNCTION_EXISTS(strdup HAVE_STRDUP)
CHECK_FUNCTION_EXISTS(strndup HAVE_STRNDUP)
CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
CHECK_FUNCTION_EXISTS(strpbrk HAVE_STRPBRK)
CHECK_FUNCTION_EXISTS(strrchr HAVE_STRRCHR)
CHECK_FUNCTION_EXISTS(strstr HAVE_STRSTR)
#needs to be splitted in subdirectories
# FIXME: weechat_gui_common MUST be the first lib in the list
SET(STATIC_LIBS weechat_gui_common)
# Check for Gettext
IF(NOT DISABLE_NLS)
FIND_PACKAGE(Gettext)
IF(GETTEXT_FOUND)
ADD_DEFINITIONS(-DENABLE_NLS)
ENDIF(GETTEXT_FOUND)
ENDIF(NOT DISABLE_NLS)
# Check for GnuTLS
IF(NOT DISABLE_GNUTLS)
FIND_PACKAGE(GnuTLS)
IF(GNUTLS_FOUND)
STRING(REGEX REPLACE "/[^/]*$" "" GNUTLS_LIBRARY_PATH "${GNUTLS_LIBRARY}")
ADD_DEFINITIONS(-DHAVE_GNUTLS)
INCLUDE_DIRECTORIES(${GNUTLS_INCLUDE_PATH})
SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -L${GNUTLS_LIBRARY_PATH}")
LIST(APPEND EXTRA_LIBS gnutls)
ENDIF(GNUTLS_FOUND)
ENDIF(NOT DISABLE_GNUTLS)
IF(NOT DISABLE_PLUGINS)
ADD_DEFINITIONS(-DPLUGINS)
LIST(APPEND STATIC_LIBS weechat_plugins)
ADD_SUBDIRECTORY( plugins )
ENDIF(NOT DISABLE_PLUGINS)
ADD_SUBDIRECTORY( common )
List(APPEND STATIC_LIBS weechat_main)
ADD_SUBDIRECTORY( irc )
LIST(APPEND STATIC_LIBS weechat_irc)
ADD_SUBDIRECTORY( gui )
+33
View File
@@ -0,0 +1,33 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(LIB_MAIN_SRC weechat.c weechat.h alias.c alias.h backtrace.c backtrace.h
command.c command.h completion.c completion.h weelist.c weelist.h weeconfig.c
weeconfig.h history.c history.h hotlist.c hotlist.h log.c log.h fifo.c fifo.h
session.c session.h utf8.c utf8.h util.c util.h)
# Check for flock support
INCLUDE(CheckSymbolExists)
CHECK_INCLUDE_FILES("sys/file.h" HAVE_SYS_FILE_H)
CHECK_SYMBOL_EXISTS(flock "sys/file.h" HAVE_FLOCK)
IF(ICONV_FOUND)
ADD_DEFINITIONS( -DHAVE_ICONV )
ENDIF(ICONV_FOUND)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
ADD_LIBRARY(weechat_main STATIC ${LIB_MAIN_SRC})
+12 -16
View File
@@ -299,40 +299,36 @@ alias_replace_args (char *alias_args, char *user_args)
*/
char *
alias_replace_vars (char *string)
alias_replace_vars (t_irc_server *server, t_irc_channel *channel, char *string)
{
char *nick, *channel, *server;
char *var_nick, *var_channel, *var_server;
char empty_string[1] = { '\0' };
char *res, *temp;
nick = (SERVER(gui_current_window->buffer)
&& SERVER(gui_current_window->buffer)->nick) ?
SERVER(gui_current_window->buffer)->nick : empty_string;
channel = (CHANNEL(gui_current_window->buffer)) ?
CHANNEL(gui_current_window->buffer)->name : empty_string;
server = (SERVER(gui_current_window->buffer)) ?
SERVER(gui_current_window->buffer)->name : empty_string;
var_nick = (server && server->nick) ? server->nick : empty_string;
var_channel = (channel) ? channel->name : empty_string;
var_server = (server) ? server->name : empty_string;
/* replace nick */
temp = weechat_strreplace (string, "$nick", nick);
temp = weechat_strreplace (string, "$nick", var_nick);
if (!temp)
return NULL;
res = temp;
/* replace channel */
temp = weechat_strreplace (res, "$channel", channel);
temp = weechat_strreplace (res, "$channel", var_channel);
free (res);
if (!temp)
return NULL;
res = temp;
/* replace server */
temp = weechat_strreplace (res, "$server", server);
temp = weechat_strreplace (res, "$server", var_server);
free (res);
if (!temp)
return NULL;
res = temp;
/* return result */
return res;
}
+3 -1
View File
@@ -21,6 +21,8 @@
#ifndef __WEECHAT_ALIAS_H
#define __WEECHAT_ALIAS_H 1
#include "../irc/irc.h"
typedef struct t_weechat_alias t_weechat_alias;
struct t_weechat_alias
@@ -39,7 +41,7 @@ extern t_weechat_alias *alias_search (char *);
extern t_weechat_alias *alias_new (char *, char *);
extern char *alias_get_final_command (t_weechat_alias *);
extern char *alias_replace_args (char *, char *);
extern char *alias_replace_vars (char *);
extern char *alias_replace_vars (t_irc_server *, t_irc_channel *, char *);
extern void alias_free (t_weechat_alias *);
extern void alias_free_all ();
+369 -176
View File
@@ -71,7 +71,7 @@ t_weechat_command weechat_commands[] =
"server,\n"
"channel: jump to buffer by server and/or channel name\n"
" number: jump to buffer by number"),
"move|close|list|notify", 0, MAX_ARGS, 0, NULL, weechat_cmd_buffer },
"move|close|list|notify|%S|%C %S|%C", 0, MAX_ARGS, 0, NULL, weechat_cmd_buffer },
{ "builtin", N_("launch WeeChat/IRC builtin command (do not look at plugins handlers or aliases)"),
N_("command"),
N_("command: command to execute (a '/' is automatically added if not found at beginning of command)\n"),
@@ -81,14 +81,16 @@ t_weechat_command weechat_commands[] =
N_(" -all: clear all buffers\n"
"number: clear buffer by number"),
"-all", 0, 1, 0, weechat_cmd_clear, NULL },
{ "connect", N_("connect to a server"),
N_("[servername]"),
N_("servername: server name to connect"),
"%S", 0, 1, 0, weechat_cmd_connect, NULL },
{ "disconnect", N_("disconnect from a server"),
N_("[servername]"),
N_("servername: server name to disconnect"),
"%S", 0, 1, 0, weechat_cmd_disconnect, NULL },
{ "connect", N_("connect to server(s)"),
N_("[-all | servername [servername ...]]"),
N_(" -all: connect to all servers\n"
"servername: server name to connect"),
"%S|-all", 0, MAX_ARGS, 0, weechat_cmd_connect, NULL },
{ "disconnect", N_("disconnect from server(s)"),
N_("[-all | servername [servername ...]]"),
N_(" -all: disconnect from all servers\n"
"servername: server name to disconnect"),
"%S|-all", 0, MAX_ARGS, 0, weechat_cmd_disconnect, NULL },
{ "dcc", N_("starts DCC (file or chat) or close chat"),
N_("action [nickname [file]]"),
N_(" action: 'send' (file) or 'chat' or 'close' (chat)\n"
@@ -149,6 +151,11 @@ t_weechat_command weechat_commands[] =
" unload: unload one or all plugins\n\n"
"Without argument, /plugin command lists loaded plugins."),
"list|listfull|load|autoload|reload|unload %P", 0, 2, 0, weechat_cmd_plugin, NULL },
{ "reconnect", N_("reconnect to server(s)"),
N_("[-all | servername [servername ...]]"),
N_(" -all: reconnect to all servers\n"
"servername: server name to reconnect"),
"%S|-all", 0, MAX_ARGS, 0, weechat_cmd_reconnect, NULL },
{ "server", N_("list, add or remove servers"),
N_("[servername] | "
"[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 "
@@ -251,7 +258,8 @@ command_index_build ()
while (weechat_commands[i].command_name)
{
(void) weelist_add (&index_commands, &last_index_command,
weechat_commands[i].command_name);
weechat_commands[i].command_name,
WEELIST_POS_SORT);
i++;
}
i = 0;
@@ -259,7 +267,8 @@ command_index_build ()
{
if (irc_commands[i].cmd_function_args || irc_commands[i].cmd_function_1arg)
(void) weelist_add (&index_commands, &last_index_command,
irc_commands[i].command_name);
irc_commands[i].command_name,
WEELIST_POS_SORT);
i++;
}
}
@@ -370,7 +379,7 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string
rc = -1;
else
{
vars_replaced = alias_replace_vars (ptr_args);
vars_replaced = alias_replace_vars (server, channel, ptr_args);
rc = plugin_cmd_handler_exec ((server) ? server->name : "", command + 1,
(vars_replaced) ? vars_replaced : ptr_args);
if (vars_replaced)
@@ -420,7 +429,7 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string
ptr_next_cmd = ptr_cmd;
ptr_next_cmd++;
vars_replaced = alias_replace_vars (*ptr_cmd);
vars_replaced = alias_replace_vars (server, channel, *ptr_cmd);
new_ptr_cmd = (vars_replaced) ? vars_replaced : *ptr_cmd;
args_replaced = alias_replace_args (new_ptr_cmd, ptr_args);
if (args_replaced)
@@ -658,7 +667,7 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string
if (cfg_irc_send_unknown_commands)
{
if (ptr_args)
unknown_command = (char *)malloc (strlen (command + 1) + 2 + strlen (ptr_args) + 1);
unknown_command = (char *)malloc (strlen (command + 1) + 1 + strlen (ptr_args) + 1);
else
unknown_command = (char *)malloc (strlen (command + 1) + 1);
@@ -667,10 +676,10 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string
strcpy (unknown_command, command + 1);
if (ptr_args)
{
strcat (unknown_command, " :");
strcat (unknown_command, " ");
strcat (unknown_command, ptr_args);
}
irc_cmd_send_quote (server, channel, unknown_command);
irc_send_cmd_quote (server, channel, unknown_command);
free (unknown_command);
}
}
@@ -716,7 +725,7 @@ user_message_display (t_irc_server *server, t_gui_buffer *buffer, char *text)
}
else
{
ptr_nick = nick_search (CHANNEL(buffer), server->nick);
ptr_nick = irc_nick_search (CHANNEL(buffer), server->nick);
if (ptr_nick)
{
irc_display_nick (buffer, ptr_nick, NULL,
@@ -748,33 +757,42 @@ void
user_message (t_irc_server *server, t_gui_buffer *buffer, char *text)
{
int max_length;
char *pos, *pos_next, *pos_max, *next, saved_char;
char *pos, *pos_next, *pos_max, *next, saved_char, *last_space;
if (!text || !text[0])
return;
next = NULL;
last_space = NULL;
saved_char = '\0';
max_length = 512 - 16 - 65 - 10 - strlen (server->nick) -
strlen (CHANNEL(buffer)->name);
next = NULL;
saved_char = '\0';
if ((int)strlen (text) > max_length)
if (max_length > 0)
{
pos = text;
pos_max = text + max_length;
while (pos && pos[0])
if ((int)strlen (text) > max_length)
{
pos_next = utf8_next_char (pos);
if (pos_next > pos_max)
break;
pos = pos_next;
pos = text;
pos_max = text + max_length;
while (pos && pos[0])
{
if (pos[0] == ' ')
last_space = pos;
pos_next = utf8_next_char (pos);
if (pos_next > pos_max)
break;
pos = pos_next;
}
if (last_space && (last_space < pos))
pos = last_space + 1;
saved_char = pos[0];
pos[0] = '\0';
next = pos;
}
saved_char = pos[0];
pos[0] = '\0';
next = pos;
}
server_sendf_queued (server, "PRIVMSG %s :%s", CHANNEL(buffer)->name, text);
irc_server_sendf_queued (server, "PRIVMSG %s :%s", CHANNEL(buffer)->name, text);
user_message_display (server, buffer, text);
if (next)
@@ -845,7 +863,7 @@ user_command (t_irc_server *server, t_irc_channel *channel, char *command, int o
if (pos)
pos[0] = '\0';
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
if (is_command (ptr_cmd))
{
@@ -872,9 +890,9 @@ user_command (t_irc_server *server, t_irc_channel *channel, char *command, int o
}
else
{
dcc_chat_sendf ((t_irc_dcc *)(CHANNEL(buffer)->dcc_chat),
"%s\r\n",
(command_with_colors) ? command_with_colors : ptr_cmd);
irc_dcc_chat_sendf ((t_irc_dcc *)(CHANNEL(buffer)->dcc_chat),
"%s\r\n",
(command_with_colors) ? command_with_colors : ptr_cmd);
user_message_display (server, buffer,
(command_with_colors) ?
command_with_colors : ptr_cmd);
@@ -945,7 +963,8 @@ weechat_cmd_alias (t_irc_server *server, t_irc_channel *channel,
}
if (!alias_new (arguments, pos))
return -1;
if (weelist_add (&index_commands, &last_index_command, arguments))
if (weelist_add (&index_commands, &last_index_command, arguments,
WEELIST_POS_SORT))
{
irc_display_prefix (NULL, NULL, PREFIX_INFO);
gui_printf (NULL, _("Alias \"%s\" => \"%s\" created\n"),
@@ -1080,7 +1099,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
char *error, *pos, **argv;
int argc, target_buffer, count;
irc_find_context (server, channel, &window, &buffer);
gui_buffer_find_context (server, channel, &window, &buffer);
argv = explode_string (arguments, " ", 0, &argc);
@@ -1170,7 +1189,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
free_exploded_string (argv);
return -1;
}
server_disconnect (SERVER(buffer), 0);
irc_server_disconnect (SERVER(buffer), 0);
ptr_server = SERVER(buffer);
if (!buffer->all_servers)
{
@@ -1195,7 +1214,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
ptr_server = SERVER(buffer);
ptr_channel = CHANNEL(buffer);
gui_buffer_free (ptr_channel->buffer, 1);
channel_free (ptr_server, ptr_channel);
irc_channel_free (ptr_server, ptr_channel);
gui_status_draw (gui_current_window->buffer, 1);
gui_input_draw (gui_current_window->buffer, 1);
}
@@ -1211,7 +1230,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
if (pos)
pos += 6;
CHANNEL(buffer)->close = 1;
irc_cmd_send_part (SERVER(buffer),
irc_send_cmd_part (SERVER(buffer),
CHANNEL(buffer),
pos);
}
@@ -1221,7 +1240,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
ptr_server = SERVER(buffer);
gui_buffer_free (buffer, 1);
if (ptr_channel)
channel_free (ptr_server, ptr_channel);
irc_channel_free (ptr_server, ptr_channel);
}
}
else
@@ -1246,7 +1265,7 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
{
gui_printf (NULL, " %s:%d",
ptr_server->name,
server_get_default_notify_level (ptr_server));
irc_server_get_default_notify_level (ptr_server));
count++;
}
}
@@ -1305,8 +1324,8 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
}
if (BUFFER_IS_SERVER(buffer))
{
server_set_default_notify_level (SERVER(buffer),
number);
irc_server_set_default_notify_level (SERVER(buffer),
number);
irc_display_prefix (NULL, NULL, PREFIX_INFO);
gui_printf (NULL, _("New default notify level for server %s%s%s: %s%d %s"),
GUI_COLOR(COLOR_WIN_CHAT_SERVER),
@@ -1318,9 +1337,9 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
}
else
{
channel_set_notify_level (SERVER(buffer),
CHANNEL(buffer),
number);
irc_channel_set_notify_level (SERVER(buffer),
CHANNEL(buffer),
number);
irc_display_prefix (NULL, NULL, PREFIX_INFO);
gui_printf (NULL, _("New notify level for %s%s%s: %s%d %s"),
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL),
@@ -1408,10 +1427,11 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
ptr_buffer = gui_buffer_search (argv[0], argv[1]);
else
{
if (string_is_channel (argv[0]))
ptr_buffer = gui_buffer_search (NULL, argv[0]);
else
ptr_server = irc_server_search (argv[0]);
if (ptr_server)
ptr_buffer = gui_buffer_search (argv[0], NULL);
else
ptr_buffer = gui_buffer_search (NULL, argv[0]);
}
if (ptr_buffer)
{
@@ -1502,7 +1522,7 @@ weechat_cmd_clear (t_irc_server *server, t_irc_channel *channel,
}
else
{
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
gui_buffer_clear (buffer);
}
@@ -1510,7 +1530,48 @@ weechat_cmd_clear (t_irc_server *server, t_irc_channel *channel,
}
/*
* weechat_cmd_connect: connect to a server
* weechat_cmd_connect_one_server: connect to one server
* return 0 if error, 1 if ok
*/
int
weechat_cmd_connect_one_server (t_irc_server *server, t_gui_window *window)
{
if (server->is_connected)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
_("%s already connected to server \"%s\"!\n"),
WEECHAT_ERROR, server->name);
return 0;
}
if (server->child_pid > 0)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
_("%s currently connecting to server \"%s\"!\n"),
WEECHAT_ERROR, server->name);
return 0;
}
if (!server->buffer)
{
if (!gui_buffer_new (window, server, NULL,
BUFFER_TYPE_STANDARD, 1))
return 0;
}
if (irc_server_connect (server))
{
server->reconnect_start = 0;
server->reconnect_join = (server->channels) ? 1 : 0;
gui_status_draw (server->buffer, 1);
}
/* connect ok */
return 1;
}
/*
* weechat_cmd_connect: connect to server(s)
*/
int
@@ -1520,51 +1581,52 @@ weechat_cmd_connect (t_irc_server *server, t_irc_channel *channel,
t_gui_window *window;
t_gui_buffer *buffer;
t_irc_server *ptr_server;
int i, connect_ok;
irc_find_context (server, channel, &window, &buffer);
gui_buffer_find_context (server, channel, &window, &buffer);
if (argc == 1)
ptr_server = server_search (argv[0]);
if (argc == 0)
connect_ok = weechat_cmd_connect_one_server (server, window);
else
ptr_server = server;
if (ptr_server)
{
if (ptr_server->is_connected)
connect_ok = 1;
if (ascii_strcasecmp (argv[0], "-all") == 0)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
_("%s already connected to server \"%s\"!\n"),
WEECHAT_ERROR, ptr_server->name);
return -1;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (!ptr_server->is_connected && (ptr_server->child_pid == 0))
{
if (!weechat_cmd_connect_one_server (ptr_server, window))
connect_ok = 0;
}
}
}
if (ptr_server->child_pid > 0)
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
_("%s currently connecting to server \"%s\"!\n"),
WEECHAT_ERROR, ptr_server->name);
return -1;
}
if (!ptr_server->buffer)
{
if (!gui_buffer_new (window, ptr_server, NULL,
BUFFER_TYPE_STANDARD, 1))
return -1;
}
if (server_connect (ptr_server))
{
ptr_server->reconnect_start = 0;
ptr_server->reconnect_join = (ptr_server->channels) ? 1 : 0;
gui_status_draw (ptr_server->buffer, 1);
for (i = 0; i < argc; i++)
{
ptr_server = irc_server_search (argv[i]);
if (ptr_server)
{
if (!weechat_cmd_connect_one_server (ptr_server, window))
connect_ok = 0;
}
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL, _("%s server \"%s\" not found\n"),
WEECHAT_ERROR, argv[i]);
connect_ok = 0;
}
}
}
}
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL, _("%s server not found\n"), WEECHAT_ERROR);
if (!connect_ok)
return -1;
}
return 0;
}
@@ -1579,7 +1641,7 @@ weechat_cmd_dcc (t_irc_server *server, t_irc_channel *channel,
t_gui_buffer *buffer;
char *pos_nick, *pos_file;
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
/* DCC SEND file */
if (strncasecmp (arguments, "send", 4) == 0)
@@ -1610,7 +1672,7 @@ weechat_cmd_dcc (t_irc_server *server, t_irc_channel *channel,
while (pos_file[0] == ' ')
pos_file++;
dcc_send_request (server, DCC_FILE_SEND, pos_nick, pos_file);
irc_dcc_send_request (server, DCC_FILE_SEND, pos_nick, pos_file);
}
/* DCC CHAT */
else if (strncasecmp (arguments, "chat", 4) == 0)
@@ -1627,7 +1689,7 @@ weechat_cmd_dcc (t_irc_server *server, t_irc_channel *channel,
while (pos_nick[0] == ' ')
pos_nick++;
dcc_send_request (server, DCC_CHAT_SEND, pos_nick, NULL);
irc_dcc_send_request (server, DCC_CHAT_SEND, pos_nick, NULL);
}
/* close DCC CHAT */
else if (ascii_strcasecmp (arguments, "close") == 0)
@@ -1635,8 +1697,8 @@ weechat_cmd_dcc (t_irc_server *server, t_irc_channel *channel,
if (BUFFER_IS_PRIVATE(buffer) &&
CHANNEL(buffer)->dcc_chat)
{
dcc_close ((t_irc_dcc *)(CHANNEL(buffer)->dcc_chat), DCC_ABORTED);
dcc_redraw (1);
irc_dcc_close ((t_irc_dcc *)(CHANNEL(buffer)->dcc_chat), DCC_ABORTED);
irc_dcc_redraw (1);
}
}
/* unknown DCC action */
@@ -1729,7 +1791,7 @@ weechat_cmd_debug (t_irc_server *server, t_irc_channel *channel,
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
server_outqueue_free_all (ptr_server);
irc_server_outqueue_free_all (ptr_server);
}
gui_printf_nolog (NULL, "\n");
gui_printf_nolog (NULL, "DEBUG: outqueue DELETED for all servers.\n");
@@ -1747,7 +1809,38 @@ weechat_cmd_debug (t_irc_server *server, t_irc_channel *channel,
}
/*
* weechat_cmd_disconnect: disconnect from a server
* weechat_cmd_disconnect_one_server: disconnect from a server
* return 0 if error, 1 if ok
*/
int
weechat_cmd_disconnect_one_server (t_irc_server *server)
{
if ((!server->is_connected) && (server->child_pid == 0)
&& (server->reconnect_start == 0))
{
irc_display_prefix (NULL, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer,
_("%s not connected to server \"%s\"!\n"),
WEECHAT_ERROR, server->name);
return 0;
}
if (server->reconnect_start > 0)
{
irc_display_prefix (NULL, server->buffer, PREFIX_INFO);
gui_printf (server->buffer,
_("Auto-reconnection is cancelled\n"));
}
irc_send_quit_server (server, NULL);
irc_server_disconnect (server, 0);
gui_status_draw (server->buffer, 1);
/* disconnect ok */
return 1;
}
/*
* weechat_cmd_disconnect: disconnect from server(s)
*/
int
@@ -1756,41 +1849,53 @@ weechat_cmd_disconnect (t_irc_server *server, t_irc_channel *channel,
{
t_gui_buffer *buffer;
t_irc_server *ptr_server;
int i, disconnect_ok;
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
if (argc == 1)
ptr_server = server_search (argv[0]);
if (argc == 0)
disconnect_ok = weechat_cmd_disconnect_one_server (server);
else
ptr_server = server;
if (ptr_server)
{
if ((!ptr_server->is_connected) && (ptr_server->child_pid == 0)
&& (ptr_server->reconnect_start == 0))
disconnect_ok = 1;
if (ascii_strcasecmp (argv[0], "-all") == 0)
{
irc_display_prefix (NULL, ptr_server->buffer, PREFIX_ERROR);
gui_printf (ptr_server->buffer,
_("%s not connected to server \"%s\"!\n"),
WEECHAT_ERROR, ptr_server->name);
return -1;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if ((ptr_server->is_connected) || (ptr_server->child_pid != 0)
|| (ptr_server->reconnect_start != 0))
{
if (!weechat_cmd_disconnect_one_server (ptr_server))
disconnect_ok = 0;
}
}
}
if (ptr_server->reconnect_start > 0)
else
{
irc_display_prefix (NULL, ptr_server->buffer, PREFIX_INFO);
gui_printf (ptr_server->buffer,
_("Auto-reconnection is cancelled\n"));
for (i = 0; i < argc; i++)
{
ptr_server = irc_server_search (argv[i]);
if (ptr_server)
{
if (!weechat_cmd_disconnect_one_server (ptr_server))
disconnect_ok = 0;
}
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL, _("%s server \"%s\" not found\n"),
WEECHAT_ERROR, argv[i]);
disconnect_ok = 0;
}
}
}
irc_send_quit_server (ptr_server, NULL);
server_disconnect (ptr_server, 0);
gui_status_draw (buffer, 1);
}
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL, _("%s server not found\n"), WEECHAT_ERROR);
if (!disconnect_ok)
return -1;
}
return 0;
}
@@ -1977,7 +2082,7 @@ weechat_cmd_history (t_irc_server *server, t_irc_channel *channel,
int n_total;
int n_user;
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
n_user = cfg_history_display_default;
@@ -2053,7 +2158,7 @@ weechat_cmd_ignore (t_irc_server *server, t_irc_channel *channel,
t_irc_ignore *ptr_ignore;
int i;
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
ptr_ignore = NULL;
switch (argc)
@@ -2085,22 +2190,22 @@ weechat_cmd_ignore (t_irc_server *server, t_irc_channel *channel,
return 0;
break;
case 1:
ptr_ignore = ignore_add (argv[0], "*", "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
ptr_ignore = irc_ignore_add (argv[0], "*", "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 2:
ptr_ignore = ignore_add (argv[0], argv[1], "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
ptr_ignore = irc_ignore_add (argv[0], argv[1], "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 3:
ptr_ignore = ignore_add (argv[0], argv[1], argv[2],
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
ptr_ignore = irc_ignore_add (argv[0], argv[1], argv[2],
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 4:
ptr_ignore = ignore_add (argv[0], argv[1], argv[2], argv[3]);
ptr_ignore = irc_ignore_add (argv[0], argv[1], argv[2], argv[3]);
break;
}
if (ptr_ignore)
@@ -2158,7 +2263,7 @@ weechat_cmd_key (t_irc_server *server, t_irc_channel *channel,
t_gui_key *ptr_key;
void (*ptr_function)(t_gui_window *, char *);
irc_find_context (server, channel, &window, &buffer);
gui_buffer_find_context (server, channel, &window, &buffer);
if (arguments)
{
@@ -2644,6 +2749,94 @@ weechat_cmd_plugin (t_irc_server *server, t_irc_channel *channel,
return 0;
}
/*
* weechat_cmd_reconnect_one_server: reconnect to a server
* return 0 if error, 1 if ok
*/
int
weechat_cmd_reconnect_one_server (t_irc_server *server)
{
if ((!server->is_connected) && (server->child_pid == 0))
{
irc_display_prefix (NULL, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer,
_("%s not connected to server \"%s\"!\n"),
WEECHAT_ERROR, server->name);
return 0;
}
irc_send_quit_server (server, NULL);
irc_server_disconnect (server, 0);
if (irc_server_connect (server))
{
server->reconnect_start = 0;
server->reconnect_join = (server->channels) ? 1 : 0;
}
gui_status_draw (server->buffer, 1);
/* reconnect ok */
return 1;
}
/*
* weechat_cmd_reconnect: reconnect to server(s)
*/
int
weechat_cmd_reconnect (t_irc_server *server, t_irc_channel *channel,
int argc, char **argv)
{
t_gui_buffer *buffer;
t_irc_server *ptr_server;
int i, reconnect_ok;
gui_buffer_find_context (server, channel, NULL, &buffer);
if (argc == 0)
reconnect_ok = weechat_cmd_reconnect_one_server (server);
else
{
reconnect_ok = 1;
if (ascii_strcasecmp (argv[0], "-all") == 0)
{
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if ((ptr_server->is_connected) || (ptr_server->child_pid != 0))
{
if (!weechat_cmd_reconnect_one_server (ptr_server))
reconnect_ok = 0;
}
}
}
else
{
for (i = 0; i < argc; i++)
{
ptr_server = irc_server_search (argv[i]);
if (ptr_server)
{
if (!weechat_cmd_reconnect_one_server (ptr_server))
reconnect_ok = 0;
}
else
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL, _("%s server \"%s\" not found\n"),
WEECHAT_ERROR, argv[i]);
reconnect_ok = 0;
}
}
}
}
if (!reconnect_ok)
return -1;
return 0;
}
/*
* weechat_cmd_save: save WeeChat and plugins options to disk
*/
@@ -2700,7 +2893,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
t_gui_buffer *ptr_buffer;
char *server_name;
irc_find_context (server, channel, &window, &buffer);
gui_buffer_find_context (server, channel, &window, &buffer);
if ((argc == 0) || (argc == 1))
{
@@ -2723,7 +2916,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
}
else
{
ptr_server = server_search (argv[0]);
ptr_server = irc_server_search (argv[0]);
if (ptr_server)
irc_display_server (ptr_server);
else
@@ -2754,7 +2947,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
}
/* look for server by name */
server_found = server_search (argv[1]);
server_found = irc_server_search (argv[1]);
if (!server_found)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
@@ -2784,7 +2977,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
server_name = strdup (server_found->name);
server_free (server_found);
irc_server_free (server_found);
irc_display_prefix (NULL, NULL, PREFIX_INFO);
gui_printf (NULL, _("Server %s%s%s has been deleted\n"),
@@ -2800,7 +2993,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
}
/* init server struct */
server_init (&server_tmp);
irc_server_init (&server_tmp);
if (argc < 3)
{
@@ -2808,17 +3001,17 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing parameters for \"%s\" command\n"),
WEECHAT_ERROR, "server");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
if (server_name_already_exists (argv[0]))
if (irc_server_name_already_exists (argv[0]))
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
_("%s server \"%s\" already exists, can't create it!\n"),
WEECHAT_ERROR, argv[0]);
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
@@ -2847,7 +3040,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing password for \"%s\" parameter\n"),
WEECHAT_ERROR, "-pwd");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.password = strdup (argv[++i]);
@@ -2860,7 +3053,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing nick(s) for \"%s\" parameter\n"),
WEECHAT_ERROR, "-nicks");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.nick1 = strdup (argv[++i]);
@@ -2875,7 +3068,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing password for \"%s\" parameter\n"),
WEECHAT_ERROR, "-username");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.username = strdup (argv[++i]);
@@ -2888,7 +3081,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing password for \"%s\" parameter\n"),
WEECHAT_ERROR, "-realname");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.realname = strdup (argv[++i]);
@@ -2901,7 +3094,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing command for \"%s\" parameter\n"),
WEECHAT_ERROR, "-command");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.command = strdup (argv[++i]);
@@ -2914,7 +3107,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s missing password for \"%s\" parameter\n"),
WEECHAT_ERROR, "-autojoin");
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
server_tmp.autojoin = strdup (argv[++i]);
@@ -2923,16 +3116,16 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
}
/* create new server */
new_server = server_new (server_tmp.name, server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
0, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
server_tmp.username, server_tmp.realname,
server_tmp.hostname,
server_tmp.command, 1, server_tmp.autojoin, 1, NULL);
new_server = irc_server_new (server_tmp.name, server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
0, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
server_tmp.username, server_tmp.realname,
server_tmp.hostname,
server_tmp.command, 1, server_tmp.autojoin, 1, NULL);
if (new_server)
{
irc_display_prefix (NULL, NULL, PREFIX_INFO);
@@ -2947,7 +3140,7 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
gui_printf (NULL,
_("%s unable to create server\n"),
WEECHAT_ERROR);
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
return -1;
}
@@ -2955,10 +3148,10 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
{
(void) gui_buffer_new (window, new_server, NULL,
BUFFER_TYPE_STANDARD, 1);
server_connect (new_server);
irc_server_connect (new_server);
}
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
}
return 0;
}
@@ -3015,7 +3208,7 @@ weechat_cmd_set_display_option (t_config_option *option, char *prefix, void *val
{
if (cfg_log_hide_nickserv_pwd)
{
irc_hide_password (value2, 1);
irc_display_hide_password (value2, 1);
if (strcmp (*((char **)value), value2) != 0)
gui_printf (NULL, _("%s(password hidden) "),
GUI_COLOR(COLOR_WIN_CHAT));
@@ -3111,7 +3304,7 @@ weechat_cmd_set (t_irc_server *server, t_irc_channel *channel,
{
/* server config option modification */
pos[0] = '\0';
ptr_server = server_search (option);
ptr_server = irc_server_search (option);
if (!ptr_server)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
@@ -3571,7 +3764,7 @@ weechat_cmd_unignore (t_irc_server *server, t_irc_channel *channel,
char *error;
int number, ret;
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
ret = 0;
switch (argc)
@@ -3585,24 +3778,24 @@ weechat_cmd_unignore (t_irc_server *server, t_irc_channel *channel,
error = NULL;
number = strtol (argv[0], &error, 10);
if ((error) && (error[0] == '\0'))
ret = ignore_search_free_by_number (number);
ret = irc_ignore_search_free_by_number (number);
else
ret = ignore_search_free (argv[0], "*", "*",
ret = irc_ignore_search_free (argv[0], "*", "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 2:
ret = irc_ignore_search_free (argv[0], argv[1], "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 2:
ret = ignore_search_free (argv[0], argv[1], "*",
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 3:
ret = ignore_search_free (argv[0], argv[1], argv[2],
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
ret = irc_ignore_search_free (argv[0], argv[1], argv[2],
(SERVER(buffer)) ?
SERVER(buffer)->name : "*");
break;
case 4:
ret = ignore_search_free (argv[0], argv[1], argv[2], argv[3]);
ret = irc_ignore_search_free (argv[0], argv[1], argv[2], argv[3]);
break;
}
@@ -3751,7 +3944,7 @@ weechat_cmd_uptime (t_irc_server *server, t_irc_channel *channel,
int day, hour, min, sec;
char string[256];
irc_find_context (server, channel, NULL, &buffer);
gui_buffer_find_context (server, channel, NULL, &buffer);
running_time = time (NULL) - weechat_start_time;
day = running_time / (60 * 60 * 24);
@@ -3815,7 +4008,7 @@ weechat_cmd_window (t_irc_server *server, t_irc_channel *channel,
char *error;
long number;
irc_find_context (server, channel, &window, &buffer);
gui_buffer_find_context (server, channel, &window, &buffer);
if ((argc == 0) || ((argc == 1) && (ascii_strcasecmp (argv[0], "list") == 0)))
{
+1
View File
@@ -73,6 +73,7 @@ extern int weechat_cmd_ignore (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_key (t_irc_server *, t_irc_channel *, char *);
extern int weechat_cmd_panel (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_plugin (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_reconnect (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_save (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_server (t_irc_server *, t_irc_channel *, int, char **);
extern int weechat_cmd_set (t_irc_server *, t_irc_channel *, char *);
+327 -142
View File
@@ -95,12 +95,14 @@ completion_free (t_completion *completion)
free (completion->args);
completion->args = NULL;
while (completion->completion_list)
weelist_remove (&completion->completion_list,
&completion->last_completion,
completion->completion_list);
weelist_remove_all (&completion->completion_list,
&completion->last_completion);
completion->completion_list = NULL;
completion->last_completion = NULL;
if (completion->word_found)
free (completion->word_found);
completion->word_found = NULL;
}
/*
@@ -203,20 +205,96 @@ completion_get_command_infos (t_completion *completion,
return;
}
/*
* completion_is_only_alphanum: return 1 if there is only alpha/num chars
* in a string
*/
int
completion_is_only_alphanum (char *string)
{
while (string[0])
{
if (strchr (cfg_look_nick_completion_ignore, string[0]))
return 0;
string++;
}
return 1;
}
/*
* completion_strdup_alphanum: duplicate alpha/num chars in a string
*/
char *
completion_strdup_alphanum (char *string)
{
char *result, *pos;
result = (char *)malloc (strlen (string) + 1);
pos = result;
while (string[0])
{
if (!strchr (cfg_look_nick_completion_ignore, string[0]))
{
pos[0] = string[0];
pos++;
}
string++;
}
pos[0] = '\0';
return result;
}
/*
* completion_nickncmp: locale and case independent string comparison
* with max length for nicks (alpha or digits only)
*/
int
completion_nickncmp (char *base_word, char *nick, int max)
{
char *base_word2, *nick2;
int return_cmp;
if (!cfg_look_nick_completion_ignore
|| !cfg_look_nick_completion_ignore[0]
|| !base_word || !nick || !base_word[0] || !nick[0]
|| (!completion_is_only_alphanum (base_word)))
return ascii_strncasecmp (base_word, nick, max);
base_word2 = completion_strdup_alphanum (base_word);
nick2 = completion_strdup_alphanum (nick);
return_cmp = ascii_strncasecmp (base_word2, nick2, strlen (base_word2));
free (base_word2);
free (nick2);
return return_cmp;
}
/*
* completion_list_add: add a word to completion word list
*/
void
completion_list_add (t_completion *completion, char *word)
completion_list_add (t_completion *completion, char *word,
int nick_completion, int position)
{
if (!word || !word[0])
return;
if (!completion->base_word || !completion->base_word[0]
|| (ascii_strncasecmp (completion->base_word, word,
strlen (completion->base_word)) == 0))
|| (nick_completion && (completion_nickncmp (completion->base_word, word,
strlen (completion->base_word)) == 0))
|| (!nick_completion && (ascii_strncasecmp (completion->base_word, word,
strlen (completion->base_word)) == 0)))
{
weelist_add (&completion->completion_list,
&completion->last_completion,
word);
word,
position);
}
}
@@ -231,7 +309,8 @@ completion_list_add_alias (t_completion *completion)
for (ptr_alias = weechat_alias; ptr_alias; ptr_alias = ptr_alias->next_alias)
{
completion_list_add (completion, ptr_alias->alias_name);
completion_list_add (completion, ptr_alias->alias_name,
0, WEELIST_POS_SORT);
}
}
@@ -246,7 +325,7 @@ completion_list_add_alias_cmd (t_completion *completion)
for (ptr_list = index_commands; ptr_list; ptr_list = ptr_list->next_weelist)
{
completion_list_add (completion, ptr_list->data);
completion_list_add (completion, ptr_list->data, 0, WEELIST_POS_SORT);
}
}
@@ -259,24 +338,31 @@ completion_list_add_channel (t_completion *completion)
{
if (completion->channel)
completion_list_add (completion,
((t_irc_channel *)(completion->channel))->name);
((t_irc_channel *)(completion->channel))->name,
0, WEELIST_POS_SORT);
}
/*
* completion_list_add_server_channels: add server channels to completion list
* completion_list_add_channels: add server channels to completion list
*/
void
completion_list_add_server_channels (t_completion *completion)
completion_list_add_channels (t_completion *completion)
{
t_irc_server *ptr_server;
t_irc_channel *ptr_channel;
if (completion->server)
{
for (ptr_channel = ((t_irc_server *)(completion->server))->channels;
ptr_channel; ptr_channel = ptr_channel->next_channel)
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
completion_list_add (completion, ptr_channel->name);
for (ptr_channel = ptr_server->channels;
ptr_channel; ptr_channel = ptr_channel->next_channel)
{
completion_list_add (completion, ptr_channel->name,
0, WEELIST_POS_SORT);
}
}
}
}
@@ -361,7 +447,8 @@ completion_list_add_filename (t_completion *completion)
entry->d_name,
S_ISDIR(statbuf.st_mode) ? DIR_SEPARATOR : "");
completion_list_add (completion, buffer);
completion_list_add (completion, buffer,
0, WEELIST_POS_SORT);
}
}
}
@@ -392,7 +479,8 @@ completion_list_add_plugin_cmd (t_completion *completion)
ptr_handler; ptr_handler = ptr_handler->next_handler)
{
if (ptr_handler->type == PLUGIN_HANDLER_COMMAND)
completion_list_add (completion, ptr_handler->command);
completion_list_add (completion, ptr_handler->command,
0, WEELIST_POS_SORT);
}
}
#else
@@ -413,7 +501,8 @@ completion_list_add_irc_cmd_sent (t_completion *completion)
for (i = 0; irc_commands[i].command_name; i++)
{
if (irc_commands[i].cmd_function_args || irc_commands[i].cmd_function_1arg)
completion_list_add (completion, irc_commands[i].command_name);
completion_list_add (completion, irc_commands[i].command_name,
0, WEELIST_POS_SORT);
}
}
@@ -429,7 +518,8 @@ completion_list_add_irc_cmd_recv (t_completion *completion)
for (i = 0; irc_commands[i].command_name; i++)
{
if (irc_commands[i].recv_function)
completion_list_add(completion, irc_commands[i].command_name);
completion_list_add(completion, irc_commands[i].command_name,
0, WEELIST_POS_SORT);
}
}
@@ -444,7 +534,8 @@ completion_list_add_key_cmd (t_completion *completion)
for (i = 0; gui_key_functions[i].function_name; i++)
{
completion_list_add (completion, gui_key_functions[i].function_name);
completion_list_add (completion, gui_key_functions[i].function_name,
0, WEELIST_POS_SORT);
}
}
@@ -455,9 +546,62 @@ completion_list_add_key_cmd (t_completion *completion)
void
completion_list_add_self_nick (t_completion *completion)
{
if (completion->server)
completion_list_add (completion,
((t_irc_server *)(completion->server))->nick,
0, WEELIST_POS_SORT);
}
/*
* completion_list_add_server_nicks: add server nicks to completion list
*/
void
completion_list_add_server_nicks (t_completion *completion)
{
t_irc_server *ptr_server;
t_irc_channel *ptr_channel;
t_irc_nick *ptr_nick;
if (completion->server)
{
completion_list_add (completion, ((t_irc_server *)(completion->server))->nick);
for (ptr_server = (t_irc_server *)(completion->server); ptr_server;
ptr_server = ptr_server->next_server)
{
for (ptr_channel = ptr_server->channels; ptr_channel;
ptr_channel = ptr_channel->next_channel)
{
if ((!completion->channel || (t_irc_channel *)(completion->channel) != ptr_channel)
&& (ptr_channel->type == CHANNEL_TYPE_CHANNEL))
{
for (ptr_nick = ptr_channel->nicks; ptr_nick;
ptr_nick = ptr_nick->next_nick)
{
completion_list_add (completion, ptr_nick->nick,
1, WEELIST_POS_SORT);
}
}
}
}
/* add current channel nicks at beginning */
if (completion->channel && (((t_irc_channel *)(completion->channel))->type == CHANNEL_TYPE_CHANNEL))
{
for (ptr_nick = ((t_irc_channel *)(completion->channel))->nicks;
ptr_nick; ptr_nick = ptr_nick->next_nick)
{
completion_list_add (completion, ptr_nick->nick,
1, WEELIST_POS_BEGINNING);
}
}
/* add self nick at the end */
if (completion->server)
completion_list_add (completion,
((t_irc_server *)(completion->server))->nick,
1, WEELIST_POS_END);
completion->arg_is_nick = 1;
}
}
@@ -469,22 +613,45 @@ void
completion_list_add_channel_nicks (t_completion *completion)
{
t_irc_nick *ptr_nick;
t_weelist *ptr_weelist;
if (completion->channel)
{
if (((t_irc_channel *)(completion->channel))->type == CHANNEL_TYPE_CHANNEL)
{
/* add channel nicks */
for (ptr_nick = ((t_irc_channel *)(completion->channel))->nicks;
ptr_nick; ptr_nick = ptr_nick->next_nick)
{
completion_list_add (completion, ptr_nick->nick);
completion_list_add (completion, ptr_nick->nick,
1, WEELIST_POS_SORT);
}
/* add nicks speaking recently on this channel */
if (cfg_look_nick_completion_smart)
{
for (ptr_weelist = ((t_irc_channel *)(completion->channel))->nicks_speaking;
ptr_weelist; ptr_weelist = ptr_weelist->next_weelist)
{
if (irc_nick_search ((t_irc_channel *)(completion->channel),
ptr_weelist->data))
completion_list_add (completion, ptr_weelist->data,
1, WEELIST_POS_BEGINNING);
}
}
/* add self nick at the end */
if (completion->server)
completion_list_add (completion,
((t_irc_server *)(completion->server))->nick,
1, WEELIST_POS_END);
}
if ((((t_irc_channel *)(completion->channel))->type == CHANNEL_TYPE_PRIVATE)
|| (((t_irc_channel *)(completion->channel))->type == CHANNEL_TYPE_DCC_CHAT))
{
completion_list_add (completion,
((t_irc_channel *)(completion->channel))->name);
((t_irc_channel *)(completion->channel))->name,
1, WEELIST_POS_SORT);
}
completion->arg_is_nick = 1;
}
@@ -508,7 +675,8 @@ completion_list_add_channel_nicks_hosts (t_completion *completion)
for (ptr_nick = ((t_irc_channel *)(completion->channel))->nicks;
ptr_nick; ptr_nick = ptr_nick->next_nick)
{
completion_list_add (completion, ptr_nick->nick);
completion_list_add (completion, ptr_nick->nick,
1, WEELIST_POS_SORT);
if (ptr_nick->host)
{
length = strlen (ptr_nick->nick) + 1 +
@@ -518,7 +686,8 @@ completion_list_add_channel_nicks_hosts (t_completion *completion)
{
snprintf (buf, length, "%s!%s",
ptr_nick->nick, ptr_nick->host);
completion_list_add (completion, buf);
completion_list_add (completion, buf,
1, WEELIST_POS_SORT);
free (buf);
}
}
@@ -528,7 +697,8 @@ completion_list_add_channel_nicks_hosts (t_completion *completion)
|| (((t_irc_channel *)(completion->channel))->type == CHANNEL_TYPE_PRIVATE))
{
completion_list_add (completion,
((t_irc_channel *)(completion->channel))->name);
((t_irc_channel *)(completion->channel))->name,
1, WEELIST_POS_SORT);
}
completion->arg_is_nick = 1;
}
@@ -553,7 +723,8 @@ completion_list_add_option (t_completion *completion)
for (j = 0; weechat_options[i][j].option_name; j++)
{
completion_list_add (completion,
weechat_options[i][j].option_name);
weechat_options[i][j].option_name,
0, WEELIST_POS_SORT);
}
}
}
@@ -565,7 +736,7 @@ completion_list_add_option (t_completion *completion)
snprintf (option_name, sizeof (option_name), "%s.%s",
ptr_server->name,
weechat_options[CONFIG_SECTION_SERVER][i].option_name);
completion_list_add (completion, option_name);
completion_list_add (completion, option_name, 0, WEELIST_POS_SORT);
}
}
}
@@ -583,7 +754,7 @@ completion_list_add_plugin_option (t_completion *completion)
for (ptr_option = plugin_options; ptr_option;
ptr_option = ptr_option->next_option)
{
completion_list_add (completion, ptr_option->name);
completion_list_add (completion, ptr_option->name, 0, WEELIST_POS_SORT);
}
#else
/* make C compiler happy */
@@ -599,7 +770,8 @@ void
completion_list_add_part (t_completion *completion)
{
if (cfg_irc_default_msg_part && cfg_irc_default_msg_part[0])
completion_list_add (completion, cfg_irc_default_msg_part);
completion_list_add (completion, cfg_irc_default_msg_part,
0, WEELIST_POS_SORT);
}
/*
@@ -615,7 +787,8 @@ completion_list_add_plugin (t_completion *completion)
for (ptr_plugin = weechat_plugins; ptr_plugin;
ptr_plugin = ptr_plugin->next_plugin)
{
completion_list_add (completion, ptr_plugin->name);
completion_list_add (completion, ptr_plugin->name,
0, WEELIST_POS_SORT);
}
#else
/* make C compiler happy */
@@ -631,7 +804,8 @@ void
completion_list_add_quit (t_completion *completion)
{
if (cfg_irc_default_msg_quit && cfg_irc_default_msg_quit[0])
completion_list_add (completion, cfg_irc_default_msg_quit);
completion_list_add (completion, cfg_irc_default_msg_quit,
0, WEELIST_POS_SORT);
}
/*
@@ -643,7 +817,8 @@ completion_list_add_server (t_completion *completion)
{
if (completion->server)
completion_list_add (completion,
((t_irc_server *)(completion->server))->name);
((t_irc_server *)(completion->server))->name,
0, WEELIST_POS_SORT);
}
/*
@@ -658,7 +833,8 @@ completion_list_add_servers (t_completion *completion)
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
completion_list_add (completion, ptr_server->name);
completion_list_add (completion, ptr_server->name,
0, WEELIST_POS_SORT);
}
}
@@ -681,7 +857,8 @@ completion_list_add_topic (t_completion *completion)
string = (char *)gui_color_decode ((unsigned char *)((t_irc_channel *)(completion->channel))->topic, 0);
completion_list_add (completion,
(string) ?
string : ((t_irc_channel *)(completion->channel))->topic);
string : ((t_irc_channel *)(completion->channel))->topic,
0, WEELIST_POS_SORT);
if (string)
free (string);
}
@@ -713,26 +890,31 @@ completion_list_add_option_value (t_completion *completion)
{
case OPTION_TYPE_BOOLEAN:
if (option_value && (*((int *)(option_value))))
completion_list_add (completion, "on");
completion_list_add (completion, "on",
0, WEELIST_POS_SORT);
else
completion_list_add (completion, "off");
completion_list_add (completion, "off",
0, WEELIST_POS_SORT);
break;
case OPTION_TYPE_INT:
snprintf (option_string, sizeof (option_string) - 1,
"%d", (option_value) ? *((int *)(option_value)) : option->default_int);
completion_list_add (completion, option_string);
completion_list_add (completion, option_string,
0, WEELIST_POS_SORT);
break;
case OPTION_TYPE_INT_WITH_STRING:
completion_list_add (completion,
(option_value) ?
option->array_values[*((int *)(option_value))] :
option->array_values[option->default_int]);
option->array_values[option->default_int],
0, WEELIST_POS_SORT);
break;
case OPTION_TYPE_COLOR:
completion_list_add (completion,
(option_value) ?
gui_color_get_name (*((int *)(option_value))) :
option->default_string);
option->default_string,
0, WEELIST_POS_SORT);
break;
case OPTION_TYPE_STRING:
snprintf (option_string, sizeof (option_string) - 1,
@@ -740,7 +922,8 @@ completion_list_add_option_value (t_completion *completion)
((option_value) && (*((char **)(option_value)))) ?
*((char **)(option_value)) :
option->default_string);
completion_list_add (completion, option_string);
completion_list_add (completion, option_string,
0, WEELIST_POS_SORT);
break;
}
}
@@ -768,7 +951,8 @@ completion_list_add_plugin_option_value (t_completion *completion)
ptr_option = plugin_config_search_internal (completion->args);
if (ptr_option)
completion_list_add (completion, ptr_option->value);
completion_list_add (completion, ptr_option->value,
0, WEELIST_POS_SORT);
if (pos)
pos[0] = ' ';
@@ -790,7 +974,8 @@ completion_list_add_weechat_cmd (t_completion *completion)
for (i = 0; weechat_commands[i].command_name; i++)
{
completion_list_add (completion, weechat_commands[i].command_name);
completion_list_add (completion, weechat_commands[i].command_name,
0, WEELIST_POS_SORT);
}
}
@@ -819,7 +1004,8 @@ completion_build_list_template (t_completion *completion, char *template)
word[word_offset] = '\0';
weelist_add (&completion->completion_list,
&completion->last_completion,
word);
word,
WEELIST_POS_SORT);
}
word_offset = 0;
break;
@@ -844,7 +1030,7 @@ completion_build_list_template (t_completion *completion, char *template)
completion_list_add_channel (completion);
break;
case 'C': /* all channels */
completion_list_add_server_channels (completion);
completion_list_add_channels (completion);
break;
case 'f': /* filename */
completion_list_add_filename (completion);
@@ -864,6 +1050,9 @@ completion_build_list_template (t_completion *completion, char *template)
case 'm': /* self nickname */
completion_list_add_self_nick (completion);
break;
case 'M': /* nicks of current server (all open channels) */
completion_list_add_server_nicks (completion);
break;
case 'n': /* channel nicks */
completion_list_add_channel_nicks (completion);
completion->context = COMPLETION_NICK;
@@ -1105,7 +1294,9 @@ completion_command (t_completion *completion)
{
if ((!completion->word_found) || word_found_seen)
{
completion->word_found = ptr_weelist->data;
if (completion->word_found)
free (completion->word_found);
completion->word_found = strdup (ptr_weelist->data);
if (completion->direction < 0)
ptr_weelist2 = ptr_weelist->prev_weelist;
@@ -1144,80 +1335,12 @@ completion_command (t_completion *completion)
}
if (completion->word_found)
{
free (completion->word_found);
completion->word_found = NULL;
completion_command (completion);
}
}
/*
* completion_is_only_alphanum: return 1 if there is only alpha/num chars
* in a string
*/
int
completion_is_only_alphanum (char *string)
{
while (string[0])
{
if (strchr (cfg_look_nick_completion_ignore, string[0]))
return 0;
string++;
}
return 1;
}
/*
* completion_strdup_alphanum: duplicate alpha/num chars in a string
*/
char *
completion_strdup_alphanum (char *string)
{
char *result, *pos;
result = (char *)malloc (strlen (string) + 1);
pos = result;
while (string[0])
{
if (!strchr (cfg_look_nick_completion_ignore, string[0]))
{
pos[0] = string[0];
pos++;
}
string++;
}
pos[0] = '\0';
return result;
}
/*
* completion_nickncmp: locale and case independent string comparison
* with max length for nicks (alpha or digits only)
*/
int
completion_nickncmp (char *base_word, char *nick, int max)
{
char *base_word2, *nick2;
int return_cmp;
if (!cfg_look_nick_completion_ignore
|| !cfg_look_nick_completion_ignore[0]
|| !base_word || !nick || !base_word[0] || !nick[0]
|| (!completion_is_only_alphanum (base_word)))
return ascii_strncasecmp (base_word, nick, max);
base_word2 = completion_strdup_alphanum (base_word);
nick2 = completion_strdup_alphanum (nick);
return_cmp = ascii_strncasecmp (base_word2, nick2, strlen (base_word2));
free (base_word2);
free (nick2);
return return_cmp;
}
/*
* completion_command_arg: complete a command argument
*/
@@ -1243,7 +1366,9 @@ completion_command_arg (t_completion *completion, int nick_completion)
{
if ((!completion->word_found) || word_found_seen)
{
completion->word_found = ptr_weelist->data;
if (completion->word_found)
free (completion->word_found);
completion->word_found = strdup (ptr_weelist->data);
if (completion->direction < 0)
ptr_weelist2 = ptr_weelist->prev_weelist;
@@ -1284,6 +1409,7 @@ completion_command_arg (t_completion *completion, int nick_completion)
}
if (completion->word_found)
{
free (completion->word_found);
completion->word_found = NULL;
completion_command_arg (completion, nick_completion);
}
@@ -1297,7 +1423,8 @@ void
completion_nick (t_completion *completion)
{
int length, word_found_seen, other_completion;
t_irc_nick *ptr_nick, *ptr_nick2;
t_irc_nick *ptr_nick;
t_weelist *ptr_weelist, *ptr_weelist2;
if (!completion->channel)
return;
@@ -1311,31 +1438,83 @@ completion_nick (t_completion *completion)
{
weelist_add (&completion->completion_list,
&completion->last_completion,
((t_irc_channel *)(completion->channel))->name);
((t_irc_channel *)(completion->channel))->name,
WEELIST_POS_SORT);
weelist_add (&completion->completion_list,
&completion->last_completion,
((t_irc_server *)(completion->server))->nick);
((t_irc_server *)(completion->server))->nick,
WEELIST_POS_SORT);
}
completion_command_arg (completion, 1);
return;
}
/* rebuild nick list for completion, with nicks speaking at beginning of list */
if ((((t_irc_channel *)(completion->channel))->nick_completion_reset)
|| (!(completion->completion_list)))
{
/* empty completion list */
if (completion->completion_list)
{
weelist_remove_all (&(completion->completion_list),
&(completion->last_completion));
completion->completion_list = NULL;
completion->last_completion = NULL;
}
/* add channel nicks */
for (ptr_nick = ((t_irc_channel *)(completion->channel))->nicks;
ptr_nick; ptr_nick = ptr_nick->next_nick)
{
weelist_add (&(completion->completion_list),
&(completion->last_completion),
ptr_nick->nick,
WEELIST_POS_SORT);
}
/* add nicks speaking recently on this channel */
if (cfg_look_nick_completion_smart)
{
for (ptr_weelist = ((t_irc_channel *)(completion->channel))->nicks_speaking;
ptr_weelist; ptr_weelist = ptr_weelist->next_weelist)
{
if (irc_nick_search ((t_irc_channel *)(completion->channel),
ptr_weelist->data))
weelist_add (&(completion->completion_list),
&(completion->last_completion),
ptr_weelist->data,
WEELIST_POS_BEGINNING);
}
}
/* add self nick at the end */
if (completion->server)
weelist_add (&(completion->completion_list),
&(completion->last_completion),
((t_irc_server *)(completion->server))->nick,
WEELIST_POS_END);
((t_irc_channel *)(completion->channel))->nick_completion_reset = 0;
}
length = strlen (completion->base_word);
word_found_seen = 0;
other_completion = 0;
if (completion->direction < 0)
ptr_nick = ((t_irc_channel *)(completion->channel))->last_nick;
else
ptr_nick = ((t_irc_channel *)(completion->channel))->nicks;
while (ptr_nick)
if (completion->direction < 0)
ptr_weelist = completion->last_completion;
else
ptr_weelist = completion->completion_list;
while (ptr_weelist)
{
if (completion_nickncmp (completion->base_word, ptr_nick->nick, length) == 0)
if (completion_nickncmp (completion->base_word, ptr_weelist->data, length) == 0)
{
if ((!completion->word_found) || word_found_seen)
{
completion->word_found = ptr_nick->nick;
if (completion->word_found)
free (completion->word_found);
completion->word_found = strdup (ptr_weelist->data);
if (cfg_look_nick_complete_first)
{
completion->position = -1;
@@ -1343,21 +1522,21 @@ completion_nick (t_completion *completion)
}
if (completion->direction < 0)
ptr_nick2 = ptr_nick->prev_nick;
ptr_weelist2 = ptr_weelist->prev_weelist;
else
ptr_nick2 = ptr_nick->next_nick;
ptr_weelist2 = ptr_weelist->next_weelist;
while (ptr_nick2)
while (ptr_weelist2)
{
if (completion_nickncmp (completion->base_word,
ptr_nick2->nick,
ptr_weelist2->data,
length) == 0)
other_completion++;
if (completion->direction < 0)
ptr_nick2 = ptr_nick2->prev_nick;
ptr_weelist2 = ptr_weelist2->prev_weelist;
else
ptr_nick2 = ptr_nick2->next_nick;
ptr_weelist2 = ptr_weelist2->next_weelist;
}
if (other_completion == 0)
@@ -1372,16 +1551,17 @@ completion_nick (t_completion *completion)
other_completion++;
}
if (completion->word_found &&
(ascii_strcasecmp (ptr_nick->nick, completion->word_found) == 0))
(ascii_strcasecmp (ptr_weelist->data, completion->word_found) == 0))
word_found_seen = 1;
if (completion->direction < 0)
ptr_nick = ptr_nick->prev_nick;
ptr_weelist = ptr_weelist->prev_weelist;
else
ptr_nick = ptr_nick->next_nick;
ptr_weelist = ptr_weelist->next_weelist;
}
if (completion->word_found)
{
free (completion->word_found);
completion->word_found = NULL;
completion_nick (completion);
}
@@ -1405,10 +1585,10 @@ completion_auto (t_completion *completion)
}
/* channel completion */
if (string_is_channel (completion->base_word))
if (irc_channel_is_channel (completion->base_word))
{
if (!completion->completion_list)
completion_list_add_server_channels (completion);
completion_list_add_channels (completion);
completion_command_arg (completion, 0);
return;
}
@@ -1435,12 +1615,15 @@ completion_search (t_completion *completion, int direction,
/* if new completion => look for base word */
if (pos != completion->position)
{
if (completion->word_found)
free (completion->word_found);
completion->word_found = NULL;
completion_find_context (completion, buffer, size, pos);
}
/* completion */
old_word_found = completion->word_found;
old_word_found = (completion->word_found) ?
strdup (completion->word_found) : NULL;
switch (completion->context)
{
case COMPLETION_NULL:
@@ -1487,6 +1670,8 @@ completion_search (t_completion *completion, int direction,
}
}
}
if (old_word_found)
free (old_word_found);
}
/*
+2 -2
View File
@@ -147,7 +147,7 @@ fifo_exec (char *text)
pos = strchr (text, ',');
if (pos)
pos[0] = '\0';
ptr_server = server_search (text);
ptr_server = irc_server_search (text);
if (!ptr_server || !ptr_server->buffer)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
@@ -157,7 +157,7 @@ fifo_exec (char *text)
}
if (ptr_server && pos)
{
ptr_channel = channel_search_any (ptr_server, pos + 1);
ptr_channel = irc_channel_search_any (ptr_server, pos + 1);
if (!ptr_channel)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+2 -2
View File
@@ -62,7 +62,7 @@ history_buffer_add (void *buffer, char *string)
{
new_history->text = strdup (string);
if (cfg_log_hide_nickserv_pwd)
irc_hide_password (new_history->text, 1);
irc_display_hide_password (new_history->text, 1);
if (((t_gui_buffer *)(buffer))->history)
((t_gui_buffer *)(buffer))->history->prev_history = new_history;
@@ -112,7 +112,7 @@ history_global_add (char *string)
{
new_history->text = strdup (string);
if (cfg_log_hide_nickserv_pwd)
irc_hide_password (new_history->text, 1);
irc_display_hide_password (new_history->text, 1);
if (history_global)
history_global->prev_history = new_history;
+1 -1
View File
@@ -101,7 +101,7 @@ weechat_log_init ()
if (!weechat_log_open (NULL, "w"))
{
weechat_iconv_fprintf (stderr,
_("%s unable to create/append to log file\n"
_("%s unable to create/append to log file (weechat.log)\n"
"If another WeeChat process is using this file, try to run WeeChat\n"
"with another home using \"--dir\" command line option.\n"),
WEECHAT_ERROR);
+20 -16
View File
@@ -259,6 +259,7 @@ session_save_servers (FILE *file)
rc = rc && (session_write_str (file, SESSION_SERV_UNTERMINATED_MESSAGE, ptr_server->unterminated_message));
rc = rc && (session_write_str (file, SESSION_SERV_NICK, ptr_server->nick));
rc = rc && (session_write_str (file, SESSION_SERV_NICK_MODES, ptr_server->nick_modes));
rc = rc && (session_write_str (file, SESSION_SERV_PREFIX, ptr_server->prefix));
rc = rc && (session_write_buf (file, SESSION_SERV_RECONNECT_START, &(ptr_server->reconnect_start), sizeof (time_t)));
rc = rc && (session_write_int (file, SESSION_SERV_RECONNECT_JOIN, ptr_server->reconnect_join));
rc = rc && (session_write_int (file, SESSION_SERV_IS_AWAY, ptr_server->is_away));
@@ -825,7 +826,6 @@ session_load_server (FILE *file)
void *session_data;
size_t session_size;
int session_size_int;
const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
#endif
/* read server name */
@@ -839,20 +839,20 @@ session_load_server (FILE *file)
/* use or allocate server */
weechat_log_printf (_("session: loading server \"%s\"\n"),
server_name);
session_current_server = server_search (server_name);
session_current_server = irc_server_search (server_name);
if (session_current_server)
weechat_log_printf (_("server found, updating values\n"));
else
{
weechat_log_printf (_("server not found, creating new one\n"));
session_current_server = server_alloc ();
session_current_server = irc_server_alloc ();
if (!session_current_server)
{
free (server_name);
session_crash (file, _("can't create new server"));
return 0;
}
server_init (session_current_server);
irc_server_init (session_current_server);
session_current_server->name = strdup (server_name);
}
free (server_name);
@@ -958,7 +958,8 @@ session_load_server (FILE *file)
return 0;
}
gnutls_set_default_priority (session_current_server->gnutls_sess);
gnutls_certificate_type_set_priority (session_current_server->gnutls_sess, cert_type_prio);
gnutls_certificate_type_set_priority (session_current_server->gnutls_sess, gnutls_cert_type_prio);
gnutls_protocol_set_priority (session_current_server->gnutls_sess, gnutls_prot_prio);
gnutls_credentials_set (session_current_server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
session_data = NULL;
rc = rc && (session_read_buf_alloc (file, &session_data, &session_size_int));
@@ -986,6 +987,9 @@ session_load_server (FILE *file)
case SESSION_SERV_NICK_MODES:
rc = rc && (session_read_str (file, &(session_current_server->nick_modes)));
break;
case SESSION_SERV_PREFIX:
rc = rc && (session_read_str (file, &(session_current_server->prefix)));
break;
case SESSION_SERV_RECONNECT_START:
rc = rc && (session_read_buf (file, &(session_current_server->reconnect_start), sizeof (time_t)));
break;
@@ -1065,9 +1069,9 @@ session_load_channel (FILE *file)
/* allocate channel */
weechat_log_printf (_("session: loading channel \"%s\"\n"),
channel_name);
session_current_channel = channel_new (session_current_server,
channel_type,
channel_name);
session_current_channel = irc_channel_new (session_current_server,
channel_type,
channel_name);
free (channel_name);
if (!session_current_channel)
{
@@ -1160,8 +1164,8 @@ session_load_nick (FILE *file)
}
/* allocate nick */
nick = nick_new (session_current_server, session_current_channel,
nick_name, 0, 0, 0, 0, 0);
nick = irc_nick_new (session_current_server, session_current_channel,
nick_name, 0, 0, 0, 0, 0, 0);
free (nick_name);
if (!nick)
{
@@ -1218,7 +1222,7 @@ session_load_dcc (FILE *file)
t_irc_channel *ptr_channel;
/* allocate DCC */
dcc = dcc_alloc ();
dcc = irc_dcc_alloc ();
if (!dcc)
{
session_crash (file, _("can't create new DCC"));
@@ -1251,7 +1255,7 @@ session_load_dcc (FILE *file)
return 0;
if (string && string[0])
{
ptr_server = server_search (string);
ptr_server = irc_server_search (string);
if (!ptr_server)
{
session_crash (file, _("server not found for DCC"));
@@ -1272,7 +1276,7 @@ session_load_dcc (FILE *file)
return 0;
if (string && string[0])
{
ptr_channel = channel_search_any (ptr_server, string);
ptr_channel = irc_channel_search_any (ptr_server, string);
if (!ptr_channel)
{
session_crash (file, _("channel not found for DCC"));
@@ -1464,7 +1468,7 @@ session_load_buffer (FILE *file)
ptr_channel = NULL;
if (server_name)
{
ptr_server = server_search (server_name);
ptr_server = irc_server_search (server_name);
if (!ptr_server)
{
session_crash (file, _("server not found for buffer"));
@@ -1474,7 +1478,7 @@ session_load_buffer (FILE *file)
if (channel_name)
{
ptr_channel = channel_search_any_without_buffer (ptr_server, channel_name);
ptr_channel = irc_channel_search_any_without_buffer (ptr_server, channel_name);
if (!ptr_channel)
{
session_crash (file, _("channel not found for buffer"));
@@ -1682,7 +1686,7 @@ session_load_hotlist (FILE *file)
server_name = NULL;
if (!session_read_str (file, &server_name))
return 0;
ptr_server = server_search (server_name);
ptr_server = irc_server_search (server_name);
free (server_name);
break;
case SESSION_HOTL_BUFFER_NUMBER:
+2 -1
View File
@@ -92,7 +92,8 @@ enum t_session_server
SESSION_SERV_CHARSET_ENCODE__UNUSED,
SESSION_SERV_HOSTNAME,
SESSION_SERV_NICK_MODES,
SESSION_SERV_AWAY_MESSAGE
SESSION_SERV_AWAY_MESSAGE,
SESSION_SERV_PREFIX
};
enum t_session_channel
+16
View File
@@ -55,6 +55,22 @@ utf8_init ()
local_utf8 = (ascii_strcasecmp (local_charset, "UTF-8") == 0);
}
/*
* utf8_has_8bits: return 1 if string has 8-bits chars, 0 if only 7-bits chars
*/
int
utf8_has_8bits (char *string)
{
while (string && string[0])
{
if (string[0] & 0x80)
return 1;
string++;
}
return 0;
}
/*
* utf8_is_valid: return 1 if UTF-8 string is valid, 0 otherwise
* if error is not NULL, it's set with first non valid UTF-8
+1
View File
@@ -24,6 +24,7 @@
extern int local_utf8;
extern void utf8_init ();
extern int utf8_has_8bits (char *);
extern int utf8_is_valid (char *, char **);
extern void utf8_normalize (char *, char);
extern char *utf8_prev_char (char *, char *);
+23 -2
View File
@@ -33,6 +33,14 @@
#include <iconv.h>
#endif
#ifndef ICONV_CONST
#ifdef ICONV_2ARG_IS_CONST
#define ICONV_CONST const
#else
#define ICONV_CONST
#endif
#endif
#include "weechat.h"
#include "utf8.h"
#include "weeconfig.h"
@@ -201,6 +209,7 @@ weechat_iconv (int from_utf8, char *from_code, char *to_code, char *string)
#ifdef HAVE_ICONV
iconv_t cd;
char *inbuf, *ptr_inbuf, *ptr_outbuf, *next_char;
char *ptr_inbuf_shift;
int done;
size_t err, inbytesleft, outbytesleft;
@@ -218,6 +227,7 @@ weechat_iconv (int from_utf8, char *from_code, char *to_code, char *string)
outbytesleft = inbytesleft * 4;
outbuf = (char *) malloc (outbytesleft + 2);
ptr_outbuf = outbuf;
ptr_inbuf_shift = NULL;
done = 0;
while (!done)
{
@@ -260,8 +270,19 @@ weechat_iconv (int from_utf8, char *from_code, char *to_code, char *string)
}
}
else
done = 1;
{
if (!ptr_inbuf_shift)
{
ptr_inbuf_shift = ptr_inbuf;
ptr_inbuf = NULL;
inbytesleft = 0;
}
else
done = 1;
}
}
if (ptr_inbuf_shift)
ptr_inbuf = ptr_inbuf_shift;
ptr_outbuf[0] = '\0';
free (inbuf);
iconv_close (cd);
@@ -298,7 +319,7 @@ weechat_iconv_to_internal (char *charset, char *string)
if (input)
{
if (utf8_is_valid (input, NULL))
if (utf8_has_8bits (input) && utf8_is_valid (input, NULL))
return input;
output = weechat_iconv (0,
+24 -24
View File
@@ -405,7 +405,7 @@ weechat_parse_args (int argc, char *argv[])
}
else if ((ascii_strncasecmp (argv[i], "irc", 3) == 0))
{
if (server_init_with_url (argv[i], &server_tmp) < 0)
if (irc_server_init_with_url (argv[i], &server_tmp) < 0)
{
weechat_iconv_fprintf (stderr,
_("%s invalid syntax for IRC server ('%s'), ignored\n"),
@@ -413,19 +413,19 @@ weechat_parse_args (int argc, char *argv[])
}
else
{
if (!server_new (server_tmp.name, server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
1, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
NULL, NULL, NULL, NULL, 0,
server_tmp.autojoin, 1, NULL))
if (!irc_server_new (server_tmp.name, server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
1, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
NULL, NULL, NULL, NULL, 0,
server_tmp.autojoin, 1, NULL))
weechat_iconv_fprintf (stderr,
_("%s unable to create server ('%s'), ignored\n"),
WEECHAT_WARNING, argv[i]);
server_destroy (&server_tmp);
irc_server_destroy (&server_tmp);
server_cmd_line = 1;
}
}
@@ -584,7 +584,7 @@ weechat_config_read ()
exit (EXIT_FAILURE);
break;
default: /* other error (fatal) */
server_free_all ();
irc_server_free_all ();
exit (EXIT_FAILURE);
}
}
@@ -705,25 +705,25 @@ weechat_dump (int crash)
for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server)
{
weechat_log_printf ("\n");
server_print_log (ptr_server);
irc_server_print_log (ptr_server);
for (ptr_channel = ptr_server->channels; ptr_channel;
ptr_channel = ptr_channel->next_channel)
{
weechat_log_printf ("\n");
channel_print_log (ptr_channel);
irc_channel_print_log (ptr_channel);
for (ptr_nick = ptr_channel->nicks; ptr_nick;
ptr_nick = ptr_nick->next_nick)
{
weechat_log_printf ("\n");
nick_print_log (ptr_nick);
irc_nick_print_log (ptr_nick);
}
}
}
dcc_print_log ();
irc_dcc_print_log ();
gui_panel_print_log ();
@@ -754,7 +754,7 @@ weechat_dump (int crash)
}
weechat_log_printf ("\n");
ignore_print_log ();
irc_ignore_print_log ();
weechat_log_printf ("\n");
weechat_log_printf ("****** End of dump ******\n");
@@ -769,8 +769,8 @@ void
weechat_sigsegv ()
{
weechat_dump (1);
dcc_end ();
server_free_all ();
irc_dcc_end ();
irc_server_free_all ();
gui_main_end ();
weechat_iconv_fprintf (stderr, "\n");
@@ -837,20 +837,20 @@ main (int argc, char *argv[])
plugin_init (auto_load_plugins); /* init plugin interface(s) */
#endif
server_auto_connect (auto_connect, /* auto-connect to servers */
server_cmd_line);
irc_server_auto_connect (auto_connect, /* auto-connect to servers */
server_cmd_line);
gui_main_loop (); /* WeeChat main loop */
#ifdef PLUGINS
plugin_end (); /* end plugin interface(s) */
#endif
server_disconnect_all (); /* disconnect from all servers */
irc_server_disconnect_all (); /* disconnect from all servers */
if (cfg_look_save_on_exit)
(void) config_write (NULL); /* save config file */
command_index_free (); /* free commands index */
dcc_end (); /* remove all DCC */
server_free_all (); /* free all servers */
irc_dcc_end (); /* remove all DCC */
irc_server_free_all (); /* free all servers */
gui_main_end (); /* shut down WeeChat GUI */
weechat_shutdown (EXIT_SUCCESS, 0); /* quit WeeChat (oh no, why?) */
+55 -27
View File
@@ -97,6 +97,7 @@ int cfg_look_align_size;
int cfg_look_align_size_max;
char *cfg_look_nick_completor;
char *cfg_look_nick_completion_ignore;
int cfg_look_nick_completion_smart;
int cfg_look_nick_complete_first;
int cfg_look_infobar;
char *cfg_look_infobar_timestamp;
@@ -222,6 +223,10 @@ t_config_option weechat_options_look[] =
N_("chars ignored for nick completion"),
OPTION_TYPE_STRING, 0, 0, 0,
"[]-^", NULL, NULL, &cfg_look_nick_completion_ignore, config_change_noop },
{ "look_nick_completion_smart", N_("smart completion for nicks"),
N_("smart completion for nicks (completes with last speakers first)"),
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
NULL, NULL, &cfg_look_nick_completion_smart, NULL, config_change_noop },
{ "look_nick_complete_first", N_("complete only with first nick found"),
N_("complete only with first nick found"),
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
@@ -317,6 +322,7 @@ int cfg_col_input_server;
int cfg_col_input_channel;
int cfg_col_input_nick;
int cfg_col_input_delimiters;
int cfg_col_input_text_not_found;
int cfg_col_input_bg;
int cfg_col_nick;
int cfg_col_nick_away;
@@ -509,6 +515,10 @@ t_config_option weechat_options_colors[] =
N_("color for input text (delimiters)"),
OPTION_TYPE_COLOR, 0, 0, 0,
"cyan", NULL, &cfg_col_input_delimiters, NULL, &config_change_color },
{ "col_input_text_not_found", N_("color for text not found"),
N_("color for text not found"),
OPTION_TYPE_COLOR, 0, 0, 0,
"red", NULL, &cfg_col_input_text_not_found, NULL, &config_change_color },
{ "col_input_bg", N_("background for input window"),
N_("background for input window"),
OPTION_TYPE_COLOR, 0, 0, 0,
@@ -1212,7 +1222,7 @@ config_change_nicks_colors ()
ptr_nick = ptr_nick->next_nick)
{
if (ptr_nick->color != COLOR_WIN_NICK_SELF)
ptr_nick->color = nick_find_color (ptr_nick);
ptr_nick->color = irc_nick_find_color (ptr_nick);
}
}
}
@@ -1229,7 +1239,7 @@ config_change_away_check ()
if (cfg_irc_away_check == 0)
{
/* reset away flag for all nicks/chans/servers */
server_remove_away ();
irc_server_remove_away ();
}
check_away = cfg_irc_away_check * 60;
}
@@ -1266,7 +1276,7 @@ config_change_notify_levels ()
{
if (BUFFER_IS_CHANNEL(ptr_buffer) || BUFFER_IS_PRIVATE(ptr_buffer))
ptr_buffer->notify_level =
channel_get_notify_level (SERVER(ptr_buffer), CHANNEL(ptr_buffer));
irc_channel_get_notify_level (SERVER(ptr_buffer), CHANNEL(ptr_buffer));
}
}
@@ -1678,7 +1688,7 @@ config_option_search_option_value (char *option_name, t_config_option **option,
if (pos)
{
pos[0] = '\0';
ptr_server = server_search (option_name);
ptr_server = irc_server_search (option_name);
if (ptr_server)
{
for (i = 0; weechat_options[CONFIG_SECTION_SERVER][i].option_name; i++)
@@ -1753,40 +1763,40 @@ config_allocate_server (char *filename, int line_number)
|| !cfg_server.username
|| !cfg_server.realname)
{
server_free_all ();
irc_server_free_all ();
gui_printf (NULL,
_("%s %s, line %d: new server, but previous was incomplete\n"),
WEECHAT_WARNING, filename, line_number);
return 0;
}
if (server_name_already_exists (cfg_server.name))
if (irc_server_name_already_exists (cfg_server.name))
{
server_free_all ();
irc_server_free_all ();
gui_printf (NULL,
_("%s %s, line %d: server '%s' already exists\n"),
WEECHAT_WARNING, filename, line_number, cfg_server.name);
return 0;
}
if (!server_new (cfg_server.name,
cfg_server.autoconnect, cfg_server.autoreconnect,
cfg_server.autoreconnect_delay, 0, cfg_server.address,
cfg_server.port, cfg_server.ipv6, cfg_server.ssl,
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
cfg_server.nick3, cfg_server.username, cfg_server.realname,
cfg_server.hostname, cfg_server.command,
cfg_server.command_delay, cfg_server.autojoin,
cfg_server.autorejoin, cfg_server.notify_levels))
if (!irc_server_new (cfg_server.name,
cfg_server.autoconnect, cfg_server.autoreconnect,
cfg_server.autoreconnect_delay, 0, cfg_server.address,
cfg_server.port, cfg_server.ipv6, cfg_server.ssl,
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
cfg_server.nick3, cfg_server.username, cfg_server.realname,
cfg_server.hostname, cfg_server.command,
cfg_server.command_delay, cfg_server.autojoin,
cfg_server.autorejoin, cfg_server.notify_levels))
{
server_free_all ();
irc_server_free_all ();
gui_printf (NULL,
_("%s %s, line %d: unable to create server\n"),
WEECHAT_WARNING, filename, line_number);
return 0;
}
server_destroy (&cfg_server);
server_init (&cfg_server);
irc_server_destroy (&cfg_server);
irc_server_init (&cfg_server);
return 1;
}
@@ -1876,7 +1886,7 @@ config_read ()
}
config_default_values ();
server_init (&cfg_server);
irc_server_init (&cfg_server);
/* read config file */
section = CONFIG_SECTION_NONE;
@@ -2019,7 +2029,8 @@ config_read ()
{
/* create new alias */
if (alias_new (line, pos))
weelist_add (&index_commands, &last_index_command, line);
weelist_add (&index_commands, &last_index_command,
line, WEELIST_POS_SORT);
}
else if (section == CONFIG_SECTION_IGNORE)
{
@@ -2030,7 +2041,7 @@ config_read ()
WEECHAT_WARNING, filename, line_number, line);
else
{
if (!ignore_add_from_config (pos))
if (!irc_ignore_add_from_config (pos))
gui_printf (NULL,
_("%s %s, line %d: invalid ignore options \"%s\"\n"),
WEECHAT_WARNING, filename, line_number, pos);
@@ -2342,9 +2353,9 @@ int
config_write (char *config_name)
{
int filename_length;
char *filename;
char *filename, *filename2;
FILE *file;
int i, j;
int i, j, rc;
time_t current_time;
t_irc_server *ptr_server;
t_weechat_alias *ptr_alias;
@@ -2353,7 +2364,10 @@ config_write (char *config_name)
char *expanded_name, *function_name;
if (config_name)
{
filename_length = strlen (config_name);
filename = strdup (config_name);
}
else
{
filename_length = strlen (weechat_home) +
@@ -2365,12 +2379,21 @@ config_write (char *config_name)
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
weechat_home, DIR_SEPARATOR);
}
filename2 = (char *) malloc ((filename_length + 32) * sizeof (char));
if (!filename2)
{
free (filename);
return -2;
}
snprintf (filename2, filename_length + 32, "%s.weechattmp", filename);
if ((file = fopen (filename, "w")) == NULL)
if ((file = fopen (filename2, "w")) == NULL)
{
gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
WEECHAT_ERROR, filename);
WEECHAT_ERROR, filename2);
free (filename);
free (filename2);
return -1;
}
@@ -2520,7 +2543,12 @@ config_write (char *config_name)
}
fclose (file);
chmod (filename, 0600);
chmod (filename2, 0600);
unlink (filename);
rc = rename (filename2, filename);
free (filename);
free (filename2);
if (rc != 0)
return -1;
return 0;
}
+2
View File
@@ -114,6 +114,7 @@ extern int cfg_look_align_size;
extern int cfg_look_align_size_max;
extern char *cfg_look_nick_completor;
extern char *cfg_look_nick_completion_ignore;
extern int cfg_look_nick_completion_smart;
extern int cfg_look_nick_complete_first;
extern int cfg_look_infobar;
extern char *cfg_look_infobar_timestamp;
@@ -166,6 +167,7 @@ extern int cfg_col_input_server;
extern int cfg_col_input_channel;
extern int cfg_col_input_nick;
extern int cfg_col_input_delimiters;
extern int cfg_col_input_text_not_found;
extern int cfg_col_input_bg;
extern int cfg_col_nick;
extern int cfg_col_nick_away;
+63 -7
View File
@@ -33,6 +33,26 @@
#include "util.h"
/*
* weelist_get_size: get list size (number of elements)
*/
int
weelist_get_size (t_weelist *weelist)
{
t_weelist *ptr_weelist;
int count;
count = 0;
for (ptr_weelist = weelist; ptr_weelist; ptr_weelist = ptr_weelist->next_weelist)
{
count++;
}
return count;
}
/*
* weelist_search: search date in a list
*/
@@ -74,14 +94,36 @@ weelist_find_pos (t_weelist *weelist, char *data)
*/
void
weelist_insert (t_weelist **weelist, t_weelist **last_weelist, t_weelist *element)
weelist_insert (t_weelist **weelist, t_weelist **last_weelist, t_weelist *element,
int position)
{
t_weelist *pos_weelist;
pos_weelist = weelist_find_pos (*weelist, element->data);
if (*weelist)
{
/* remove element if already in list */
pos_weelist = weelist_search (*weelist, element->data);
if (pos_weelist)
weelist_remove (weelist, last_weelist, pos_weelist);
}
if (*weelist)
{
/* search position for new element, according to pos asked */
pos_weelist = NULL;
switch (position)
{
case WEELIST_POS_SORT:
pos_weelist = weelist_find_pos (*weelist, element->data);
break;
case WEELIST_POS_BEGINNING:
pos_weelist = *weelist;
break;
case WEELIST_POS_END:
pos_weelist = NULL;
break;
}
if (pos_weelist)
{
/* insert data into the list (before position found) */
@@ -116,7 +158,8 @@ weelist_insert (t_weelist **weelist, t_weelist **last_weelist, t_weelist *elemen
*/
t_weelist *
weelist_add (t_weelist **weelist, t_weelist **last_weelist, char *data)
weelist_add (t_weelist **weelist, t_weelist **last_weelist, char *data,
int position)
{
t_weelist *new_weelist;
@@ -126,7 +169,7 @@ weelist_add (t_weelist **weelist, t_weelist **last_weelist, char *data)
if ((new_weelist = ((t_weelist *) malloc (sizeof (t_weelist)))))
{
new_weelist->data = strdup (data);
weelist_insert (weelist, last_weelist, new_weelist);
weelist_insert (weelist, last_weelist, new_weelist, position);
return new_weelist;
}
/* failed to allocate new element */
@@ -134,7 +177,7 @@ weelist_add (t_weelist **weelist, t_weelist **last_weelist, char *data)
}
/*
* weelist_remove: free an element in a list
* weelist_remove: remove an element from a list
*/
void
@@ -142,7 +185,7 @@ weelist_remove (t_weelist **weelist, t_weelist **last_weelist, t_weelist *elemen
{
t_weelist *new_weelist;
if (!element)
if (!element || !(*weelist))
return;
/* remove element from list */
@@ -166,6 +209,19 @@ weelist_remove (t_weelist **weelist, t_weelist **last_weelist, t_weelist *elemen
*weelist = new_weelist;
}
/*
* weelist_remove_all: remove all elements from a list
*/
void
weelist_remove_all (t_weelist **weelist, t_weelist **last_weelist)
{
while (*weelist)
{
weelist_remove (weelist, last_weelist, *weelist);
}
}
/*
* weelist_print_log: print weelist in log (usually for crash dump)
*/
+7 -1
View File
@@ -21,6 +21,10 @@
#ifndef __WEECHAT_LIST_H
#define __WEECHAT_LIST_H 1
#define WEELIST_POS_SORT 0
#define WEELIST_POS_BEGINNING 1
#define WEELIST_POS_END 2
typedef struct t_weelist t_weelist;
struct t_weelist
@@ -30,9 +34,11 @@ struct t_weelist
t_weelist *next_weelist;
};
extern int weelist_get_size (t_weelist *);
extern t_weelist *weelist_search (t_weelist *, char *);
extern t_weelist *weelist_add (t_weelist **, t_weelist **, char *);
extern t_weelist *weelist_add (t_weelist **, t_weelist **, char *, int);
extern void weelist_remove (t_weelist **, t_weelist **, t_weelist *);
extern void weelist_remove_all (t_weelist **, t_weelist **);
extern void weelist_print_log (t_weelist *, char *);
#endif /* weelist.h */
+25
View File
@@ -0,0 +1,25 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SUBDIRS( curses )
SET(LIB_GUI_COMMON_SRC gui-buffer.c gui-common.c gui-action.c gui-keyboard.c
gui-log.c gui-window.c gui-panel.c gui.h gui-buffer.h gui-color.h gui-keyboard.h
gui-panel.h gui-window.h)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
ADD_LIBRARY(weechat_gui_common STATIC ${LIB_GUI_COMMON_SRC})
+43
View File
@@ -0,0 +1,43 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(WEECHAT_CURSES_SRC gui-curses-chat.c gui-curses-color.c gui-curses-infobar.c
gui-curses-input.c gui-curses-keyboard.c gui-curses-main.c gui-curses-nicklist.c
gui-curses-status.c gui-curses-window.c gui-curses-panel.c gui-curses.h)
SET(EXECUTABLE weechat-curses)
FIND_PACKAGE(Ncurses)
IF(NCURSES_FOUND)
CHECK_INCLUDE_FILES(ncursesw/ncurses.h NCURSESW_HEADERS)
IF(NCURSESW_HEADERS)
ADD_DEFINITIONS(-DHAVE_NCURSESW_CURSES_H)
ELSE(NCURSESW_HEADERS)
CHECK_INCLUDE_FILES(ncurses.h NCURSES_HEADERS)
IF(NCURSES_HEADERS)
ADD_DEFINITIONS(-DHAVE_NCURSES_H)
ENDIF(NCURSES_HEADERS)
ENDIF(NCURSESW_HEADERS)
LIST(APPEND EXTRA_LIBS ${NCURSES_LIBRARY})
ENDIF(NCURSES_FOUND)
ADD_EXECUTABLE(${EXECUTABLE} ${WEECHAT_CURSES_SRC})
INCLUDE_DIRECTORIES(.. ../../common ../../irc ../../plugins)
TARGET_LINK_LIBRARIES(${EXECUTABLE} ${STATIC_LIBS} ${EXTRA_LIBS})
INSTALL(TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin)
+1
View File
@@ -535,6 +535,7 @@ gui_color_init_weechat ()
gui_color[COLOR_WIN_INPUT_CHANNEL] = gui_color_build (COLOR_WIN_INPUT_CHANNEL, cfg_col_input_channel, cfg_col_input_bg);
gui_color[COLOR_WIN_INPUT_NICK] = gui_color_build (COLOR_WIN_INPUT_NICK, cfg_col_input_nick, cfg_col_input_bg);
gui_color[COLOR_WIN_INPUT_DELIMITERS] = gui_color_build (COLOR_WIN_INPUT_DELIMITERS, cfg_col_input_delimiters, cfg_col_input_bg);
gui_color[COLOR_WIN_INPUT_TEXT_NOT_FOUND] = gui_color_build (COLOR_WIN_INPUT_TEXT_NOT_FOUND, cfg_col_input_text_not_found, cfg_col_input_bg);
gui_color[COLOR_WIN_NICK] = gui_color_build (COLOR_WIN_NICK, cfg_col_nick, cfg_col_nick_bg);
gui_color[COLOR_WIN_NICK_AWAY] = gui_color_build (COLOR_WIN_NICK_AWAY, cfg_col_nick_away, cfg_col_nick_bg);
gui_color[COLOR_WIN_NICK_CHANOWNER] = gui_color_build (COLOR_WIN_NICK_CHANOWNER, cfg_col_nick_chanowner, cfg_col_nick_bg);
+31 -19
View File
@@ -96,7 +96,7 @@ gui_input_get_prompt_length (t_gui_window *window, char *nick)
pos++;
switch (pos[0])
{
case 'c':
case 'c': /* channel or server name */
if (CHANNEL(window->buffer))
length += utf8_width_screen (CHANNEL(window->buffer)->name);
else
@@ -106,8 +106,8 @@ gui_input_get_prompt_length (t_gui_window *window, char *nick)
}
pos++;
break;
case 'm':
if (SERVER(window->buffer))
case 'm': /* nick modes */
if (SERVER(window->buffer) && SERVER(window->buffer)->is_connected)
{
if (SERVER(window->buffer)->nick_modes
&& SERVER(window->buffer)->nick_modes[0])
@@ -115,7 +115,7 @@ gui_input_get_prompt_length (t_gui_window *window, char *nick)
}
pos++;
break;
case 'n':
case 'n': /* nick */
length += utf8_width_screen (nick);
pos++;
break;
@@ -180,7 +180,7 @@ gui_input_draw_prompt (t_gui_window *window, char *nick)
pos++;
switch (pos[0])
{
case 'c':
case 'c': /* channel or server name */
if (CHANNEL(window->buffer))
{
gui_window_set_weechat_color (GUI_CURSES(window)->win_input,
@@ -208,8 +208,8 @@ gui_input_draw_prompt (t_gui_window *window, char *nick)
}
pos++;
break;
case 'm':
if (SERVER(window->buffer))
case 'm': /* nick modes */
if (SERVER(window->buffer) && SERVER(window->buffer)->is_connected)
{
if (SERVER(window->buffer)->nick_modes
&& SERVER(window->buffer)->nick_modes[0])
@@ -222,7 +222,7 @@ gui_input_draw_prompt (t_gui_window *window, char *nick)
}
pos++;
break;
case 'n':
case 'n': /* nick */
gui_window_set_weechat_color (GUI_CURSES(window)->win_input,
COLOR_WIN_INPUT_NICK);
buf = weechat_iconv_from_internal (NULL, nick);
@@ -284,6 +284,15 @@ gui_input_draw_text (t_gui_window *window, int input_width)
count_cursor = window->buffer->input_buffer_pos -
window->buffer->input_buffer_1st_display;
offset_cursor = 0;
if (window->buffer->text_search != TEXT_SEARCH_DISABLED)
{
if (window->buffer->text_search_found)
gui_window_set_weechat_color (GUI_CURSES(window)->win_input,
COLOR_WIN_INPUT);
else
gui_window_set_weechat_color (GUI_CURSES(window)->win_input,
COLOR_WIN_INPUT_TEXT_NOT_FOUND);
}
while ((input_width > 0) && ptr_start && ptr_start[0])
{
ptr_next = utf8_next_char (ptr_start);
@@ -292,18 +301,21 @@ gui_input_draw_text (t_gui_window *window, int input_width)
saved_char = ptr_next[0];
ptr_next[0] = '\0';
size = ptr_next - ptr_start;
if (window->buffer->input_buffer_color_mask[pos_mask] != ' ')
color = window->buffer->input_buffer_color_mask[pos_mask] - '0';
else
color = -1;
if (color != last_color)
if (window->buffer->text_search == TEXT_SEARCH_DISABLED)
{
if (color == -1)
gui_window_set_weechat_color (GUI_CURSES(window)->win_input, COLOR_WIN_INPUT);
if (window->buffer->input_buffer_color_mask[pos_mask] != ' ')
color = window->buffer->input_buffer_color_mask[pos_mask] - '0';
else
gui_input_set_color (window, color);
color = -1;
if (color != last_color)
{
if (color == -1)
gui_window_set_weechat_color (GUI_CURSES(window)->win_input, COLOR_WIN_INPUT);
else
gui_input_set_color (window, color);
}
last_color = color;
}
last_color = color;
output = weechat_iconv_from_internal (NULL, ptr_start);
wprintw (GUI_CURSES(window)->win_input, "%s", (output) ? output : ptr_start);
if (output)
@@ -355,9 +367,9 @@ gui_input_draw (t_gui_buffer *buffer, int erase)
if (buffer->input_buffer_length == 0)
buffer->input_buffer[0] = '\0';
if (SERVER(buffer))
if (SERVER(buffer) && SERVER(buffer)->is_connected)
ptr_nickname = (SERVER(buffer)->nick) ?
SERVER(buffer)->nick : SERVER(buffer)->nick1;
SERVER(buffer)->nick : cfg_look_no_nickname;
else
ptr_nickname = cfg_look_no_nickname;
+10 -2
View File
@@ -174,7 +174,7 @@ gui_keyboard_grab_end ()
void
gui_keyboard_read ()
{
int key, i, insert_ok;
int key, i, insert_ok, input_draw;
char key_str[32], *key_utf, *input_old;
i = 0;
@@ -278,6 +278,8 @@ gui_keyboard_read ()
strdup (gui_current_window->buffer->input_buffer) : strdup ("");
else
input_old = NULL;
input_draw = 0;
if ((gui_keyboard_pressed (key_str) != 0) && (insert_ok))
{
@@ -289,7 +291,7 @@ gui_keyboard_read ()
case BUFFER_TYPE_STANDARD:
gui_insert_string_input (gui_current_window, key_str, -1);
gui_current_window->buffer->completion.position = -1;
gui_input_draw (gui_current_window->buffer, 0);
input_draw = 1;
break;
case BUFFER_TYPE_DCC:
gui_exec_action_dcc (gui_current_window, key_str);
@@ -304,7 +306,13 @@ gui_keyboard_read ()
if ((gui_current_window->buffer->text_search != TEXT_SEARCH_DISABLED)
&& ((input_old == NULL) || (gui_current_window->buffer->input_buffer == NULL)
|| (strcmp (input_old, gui_current_window->buffer->input_buffer) != 0)))
{
gui_buffer_search_restart (gui_current_window);
input_draw = 1;
}
if (input_draw)
gui_input_draw (gui_current_window->buffer, 0);
if (input_old)
free (input_old);
+9 -9
View File
@@ -139,7 +139,7 @@ gui_main_loop ()
{
if (ptr_server->is_connected)
{
server_outqueue_send (ptr_server);
irc_server_outqueue_send (ptr_server);
}
}
@@ -170,7 +170,7 @@ gui_main_loop ()
if (check_away >= (cfg_irc_away_check * 60))
{
check_away = 0;
server_check_away ();
irc_server_check_away ();
}
}
@@ -223,7 +223,7 @@ gui_main_loop ()
if ((!ptr_server->is_connected)
&& (ptr_server->reconnect_start > 0)
&& (new_time >= (ptr_server->reconnect_start + ptr_server->autoreconnect_delay)))
server_reconnect (ptr_server);
irc_server_reconnect (ptr_server);
else
{
if (ptr_server->is_connected)
@@ -232,7 +232,7 @@ gui_main_loop ()
if ((ptr_server->lag_check_time.tv_sec == 0)
&& (new_time >= ptr_server->lag_next_check))
{
server_sendf (ptr_server, "PING %s", ptr_server->address);
irc_server_sendf (ptr_server, "PING %s", ptr_server->address);
gettimeofday (&(ptr_server->lag_check_time), NULL);
}
@@ -248,7 +248,7 @@ gui_main_loop ()
gui_printf (ptr_server->buffer,
_("%s lag is high, disconnecting from server...\n"),
WEECHAT_WARNING);
server_disconnect (ptr_server, 1);
irc_server_disconnect (ptr_server, 1);
continue;
}
}
@@ -282,22 +282,22 @@ gui_main_loop ()
if (!ptr_server->is_connected && (ptr_server->child_pid > 0))
{
if (FD_ISSET (ptr_server->child_read, &read_fd))
server_child_read (ptr_server);
irc_server_child_read (ptr_server);
}
else
{
if ((ptr_server->sock >= 0) &&
(FD_ISSET (ptr_server->sock, &read_fd)))
server_recv (ptr_server);
irc_server_recv (ptr_server);
}
}
}
/* manages active DCC */
dcc_handle ();
irc_dcc_handle ();
}
if (send_irc_quit)
irc_cmd_send_quit (NULL, NULL, NULL);
irc_send_cmd_quit (NULL, NULL, NULL);
}
/*
+7 -1
View File
@@ -54,7 +54,7 @@ gui_nicklist_draw (t_gui_buffer *buffer, int erase, int calculate_size)
{
if ((ptr_win->buffer == buffer) && (buffer->num_displayed > 0))
{
max_length = nick_get_max_length (CHANNEL(buffer));
max_length = irc_nick_get_max_length (CHANNEL(buffer));
if (calculate_size && (gui_window_calculate_pos_size (ptr_win, 0)))
{
@@ -193,6 +193,12 @@ gui_nicklist_draw (t_gui_buffer *buffer, int erase, int calculate_size)
mvwprintw (GUI_CURSES(ptr_win)->win_nick, y, x, "&");
x++;
}
else if (ptr_nick->flags & NICK_CHANADMIN2)
{
gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick, COLOR_WIN_NICK_CHANADMIN);
mvwprintw (GUI_CURSES(ptr_win)->win_nick, y, x, "!");
x++;
}
else if (ptr_nick->flags & NICK_OP)
{
gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick, COLOR_WIN_NICK_OP);
+3 -3
View File
@@ -127,9 +127,9 @@ gui_status_draw (t_gui_buffer *buffer, int erase)
SERVER(ptr_win->buffer)->name);
if (ptr_win->buffer->all_servers)
{
server_get_number_buffer (SERVER(ptr_win->buffer),
&server_pos,
&server_total);
irc_server_get_number_buffer (SERVER(ptr_win->buffer),
&server_pos,
&server_total);
gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_status,
COLOR_WIN_STATUS_DELIMITERS);
wprintw (GUI_CURSES(ptr_win)->win_status, "(");
+3 -3
View File
@@ -206,7 +206,7 @@ gui_window_calculate_pos_size (t_gui_window *window, int force_calculate)
/* init chat & nicklist settings */
if (cfg_look_nicklist && BUFFER_IS_CHANNEL(window->buffer))
{
max_length = nick_get_max_length (CHANNEL(window->buffer));
max_length = irc_nick_get_max_length (CHANNEL(window->buffer));
lines = 0;
@@ -224,8 +224,8 @@ gui_window_calculate_pos_size (t_gui_window *window, int force_calculate)
}
else
{
nick_count (CHANNEL(window->buffer), &num_nicks, &num_op,
&num_halfop, &num_voice, &num_normal);
irc_nick_count (CHANNEL(window->buffer), &num_nicks, &num_op,
&num_halfop, &num_voice, &num_normal);
width_used = (window->win_width - add_left - add_right)
- ((window->win_width - add_left - add_right) % (max_length + 2));
if (((max_length + 2) * num_nicks) % width_used == 0)
+58 -4
View File
@@ -168,7 +168,7 @@ gui_buffer_new (t_gui_window *window, void *server, void *channel, int type,
new_buffer->line_complete = 1;
/* notify level */
new_buffer->notify_level = channel_get_notify_level (server, channel);
new_buffer->notify_level = irc_channel_get_notify_level (server, channel);
/* create/append to log file */
new_buffer->log_filename = NULL;
@@ -210,6 +210,7 @@ gui_buffer_new (t_gui_window *window, void *server, void *channel, int type,
/* text search */
new_buffer->text_search = TEXT_SEARCH_DISABLED;
new_buffer->text_search_exact = 0;
new_buffer->text_search_found = 0;
new_buffer->text_search_input = NULL;
/* add buffer to buffers queue */
@@ -273,7 +274,7 @@ gui_buffer_search (char *server, char *channel)
{
if (server && server[0])
{
ptr_server = server_search (server);
ptr_server = irc_server_search (server);
if (!ptr_server)
return NULL;
}
@@ -282,7 +283,7 @@ gui_buffer_search (char *server, char *channel)
{
if (ptr_server)
{
ptr_channel = channel_search_any (ptr_server, channel);
ptr_channel = irc_channel_search_any (ptr_server, channel);
if (ptr_channel)
ptr_buffer = ptr_channel->buffer;
}
@@ -366,6 +367,54 @@ gui_buffer_find_window (t_gui_buffer *buffer)
return NULL;
}
/*
* gui_buffer_find_context: find window/buffer for a server/channel
*/
void
gui_buffer_find_context (void *server, void *channel,
t_gui_window **window, t_gui_buffer **buffer)
{
t_gui_window *ptr_win;
if (!buffer)
return;
/* first find buffer */
*buffer = NULL;
if ((t_irc_channel *)channel && ((t_irc_channel *)channel)->buffer)
*buffer = ((t_irc_channel *)channel)->buffer;
else
{
if ((t_irc_server *)server && ((t_irc_server *)server)->buffer)
*buffer = ((t_irc_server *)server)->buffer;
else
*buffer = gui_current_window->buffer;
}
/* then find first window displaying this buffer */
if (window)
{
*window = NULL;
if (gui_current_window->buffer == *buffer)
*window = gui_current_window;
else
{
for (ptr_win = gui_windows; ptr_win;
ptr_win = ptr_win->next_window)
{
if (ptr_win->buffer == *buffer)
{
*window = ptr_win;
break;
}
}
if (!*window)
*window = gui_current_window;
}
}
}
/*
* gui_buffer_is_scrolled: return 1 if all windows displaying buffer are scrolled
* (user doesn't see end of buffer)
@@ -1082,6 +1131,7 @@ gui_buffer_search_start (t_gui_window *window)
{
window->buffer->text_search = TEXT_SEARCH_BACKWARD;
window->buffer->text_search_exact = 0;
window->buffer->text_search_found = 0;
if (window->buffer->text_search_input)
{
free (window->buffer->text_search_input);
@@ -1106,7 +1156,10 @@ gui_buffer_search_restart (t_gui_window *window)
window->start_line = NULL;
window->start_line_pos = 0;
window->buffer->text_search = TEXT_SEARCH_BACKWARD;
if (!gui_buffer_search_text (window))
window->buffer->text_search_found = 0;
if (gui_buffer_search_text (window))
window->buffer->text_search_found = 1;
else
{
gui_chat_draw (window->buffer, 1);
gui_status_draw (window->buffer, 1);
@@ -1131,6 +1184,7 @@ gui_buffer_search_stop (t_gui_window *window)
}
window->start_line = NULL;
window->start_line_pos = 0;
hotlist_remove_buffer (window->buffer);
gui_chat_draw (window->buffer, 0);
gui_status_draw (window->buffer, 1);
gui_input_draw (window->buffer, 1);
+1
View File
@@ -129,6 +129,7 @@ struct t_gui_buffer
/* text search */
int text_search; /* text search type */
int text_search_exact; /* exact search (case sensitive) ? */
int text_search_found; /* 1 if text found, otherwise 0 */
char *text_search_input; /* input saved before text search */
/* link to previous/next buffer */
+1
View File
@@ -90,6 +90,7 @@ enum t_weechat_color
COLOR_DCC_ABORTED,
COLOR_WIN_INPUT_SERVER,
COLOR_WIN_TITLE_MORE,
COLOR_WIN_INPUT_TEXT_NOT_FOUND,
GUI_NUM_COLORS
};
+4 -4
View File
@@ -672,7 +672,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions)
&& (DCC_IS_RECV(dcc_selected->status))
&& (dcc_selected->status == DCC_WAITING))
{
dcc_accept (dcc_selected);
irc_dcc_accept (dcc_selected);
}
break;
/* cancel DCC */
@@ -681,7 +681,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions)
if (dcc_selected
&& (!DCC_ENDED(dcc_selected->status)))
{
dcc_close (dcc_selected, DCC_ABORTED);
irc_dcc_close (dcc_selected, DCC_ABORTED);
gui_window_redraw_buffer (window->buffer);
}
break;
@@ -696,7 +696,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions)
{
ptr_dcc_next = ptr_dcc->next_dcc;
if (DCC_ENDED(ptr_dcc->status))
dcc_free (ptr_dcc);
irc_dcc_free (ptr_dcc);
ptr_dcc = ptr_dcc_next;
}
gui_window_redraw_buffer (window->buffer);
@@ -731,7 +731,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions)
window->dcc_selected = dcc_selected->next_dcc;
else
window->dcc_selected = NULL;
dcc_free (dcc_selected);
irc_dcc_free (dcc_selected);
gui_window_redraw_buffer (window->buffer);
}
break;
+14 -3
View File
@@ -552,6 +552,7 @@ gui_keyboard_pressed (char *key_str)
int first_key;
t_gui_key *ptr_key;
char *buffer_before_key;
char **commands, **ptr_cmd;
/* add key to buffer */
first_key = (gui_key_buffer[0] == '\0');
@@ -576,9 +577,19 @@ gui_keyboard_pressed (char *key_str)
strdup (gui_current_window->buffer->input_buffer) : strdup ("");
gui_key_buffer[0] = '\0';
if (ptr_key->command)
user_command (SERVER(gui_current_window->buffer),
CHANNEL(gui_current_window->buffer),
ptr_key->command, 0);
{
commands = split_multi_command (ptr_key->command, ';');
if (commands)
{
for (ptr_cmd = commands; *ptr_cmd; ptr_cmd++)
{
user_command (SERVER(gui_current_window->buffer),
CHANNEL(gui_current_window->buffer),
*ptr_cmd, 0);
}
free_multi_command (commands);
}
}
else
(void)(ptr_key->function)(gui_current_window, ptr_key->args);
#ifdef PLUGINS
+2
View File
@@ -85,6 +85,8 @@ extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int);
extern t_gui_buffer *gui_buffer_search (char *, char *);
extern t_gui_buffer *gui_buffer_search_by_number (int);
extern t_gui_window *gui_buffer_find_window (t_gui_buffer *);
extern void gui_buffer_find_context (void *, void *,
t_gui_window **, t_gui_buffer **);
extern int gui_buffer_is_scrolled (t_gui_buffer *);
extern t_gui_buffer *gui_buffer_get_dcc (t_gui_window *);
extern void gui_buffer_clear (t_gui_buffer *);
+26
View File
@@ -0,0 +1,26 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(LIB_IRC_SRC irc.h irc-commands.c irc-send.c irc-recv.c irc-server.c
irc-channel.c irc-nick.c irc-mode.c irc-dcc.c irc-ignore.c irc-display.c)
CHECK_INCLUDE_FILES("regex.h" HAVE_REGEX_H)
CHECK_FUNCTION_EXISTS(regexec HAVE_REGEXEC)
CHECK_FUNCTION_EXISTS(uname HAVE_UNAME)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
ADD_LIBRARY(weechat_irc STATIC ${LIB_IRC_SRC})
+85 -44
View File
@@ -41,11 +41,12 @@ char *channel_modes = "iklmnstp";
/*
* channel_new: allocate a new channel for a server and add it to the server queue
* irc_channel_new: allocate a new channel for a server and add it to the
* server queue
*/
t_irc_channel *
channel_new (t_irc_server *server, int channel_type, char *channel_name)
irc_channel_new (t_irc_server *server, int channel_type, char *channel_name)
{
t_irc_channel *new_channel;
@@ -70,9 +71,12 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name)
new_channel->cycle = 0;
new_channel->close = 0;
new_channel->display_creation_date = 0;
new_channel->nick_completion_reset = 0;
new_channel->nicks = NULL;
new_channel->last_nick = NULL;
new_channel->buffer = NULL;
new_channel->nicks_speaking = NULL;
new_channel->last_nick_speaking = NULL;
/* add new channel to queue */
new_channel->prev_channel = server->last_channel;
@@ -88,11 +92,11 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name)
}
/*
* channel_free: free a channel and remove it from channels queue
* irc_channel_free: free a channel and remove it from channels queue
*/
void
channel_free (t_irc_server *server, t_irc_channel *channel)
irc_channel_free (t_irc_server *server, t_irc_channel *channel)
{
t_irc_channel *new_channels;
@@ -105,8 +109,8 @@ channel_free (t_irc_server *server, t_irc_channel *channel)
((t_irc_dcc *)(channel->dcc_chat))->channel = NULL;
if (!DCC_ENDED(((t_irc_dcc *)(channel->dcc_chat))->status))
{
dcc_close ((t_irc_dcc *)(channel->dcc_chat), DCC_ABORTED);
dcc_redraw (1);
irc_dcc_close ((t_irc_dcc *)(channel->dcc_chat), DCC_ABORTED);
irc_dcc_redraw (1);
}
}
@@ -133,32 +137,35 @@ channel_free (t_irc_server *server, t_irc_channel *channel)
free (channel->modes);
if (channel->key)
free (channel->key);
nick_free_all (channel);
irc_nick_free_all (channel);
if (channel->away_message)
free (channel->away_message);
if (channel->nicks_speaking)
weelist_remove_all (&(channel->nicks_speaking),
&(channel->last_nick_speaking));
free (channel);
server->channels = new_channels;
}
/*
* channel_free_all: free all allocated channels
* irc_channel_free_all: free all allocated channels
*/
void
channel_free_all (t_irc_server *server)
irc_channel_free_all (t_irc_server *server)
{
/* remove all channels for the server */
while (server->channels)
channel_free (server, server->channels);
irc_channel_free (server, server->channels);
}
/*
* channel_search: returns pointer on a channel with name
* WARNING: DCC chat channels are not returned by this function
* irc_channel_search: returns pointer on a channel with name
* WARNING: DCC chat channels are not returned by this function
*/
t_irc_channel *
channel_search (t_irc_server *server, char *channel_name)
irc_channel_search (t_irc_server *server, char *channel_name)
{
t_irc_channel *ptr_channel;
@@ -176,11 +183,11 @@ channel_search (t_irc_server *server, char *channel_name)
}
/*
* channel_search_any: returns pointer on a channel with name
* irc_channel_search_any: returns pointer on a channel with name
*/
t_irc_channel *
channel_search_any (t_irc_server *server, char *channel_name)
irc_channel_search_any (t_irc_server *server, char *channel_name)
{
t_irc_channel *ptr_channel;
@@ -197,12 +204,12 @@ channel_search_any (t_irc_server *server, char *channel_name)
}
/*
* channel_search_any_without_buffer: returns pointer on a channel with name
* looks only for channels without buffer
* irc_channel_search_any_without_buffer: returns pointer on a channel with name
* looks only for channels without buffer
*/
t_irc_channel *
channel_search_any_without_buffer (t_irc_server *server, char *channel_name)
irc_channel_search_any_without_buffer (t_irc_server *server, char *channel_name)
{
t_irc_channel *ptr_channel;
@@ -220,11 +227,11 @@ channel_search_any_without_buffer (t_irc_server *server, char *channel_name)
}
/*
* channel_search_dcc: returns pointer on a DCC chat channel with name
* irc_channel_search_dcc: returns pointer on a DCC chat channel with name
*/
t_irc_channel *
channel_search_dcc (t_irc_server *server, char *channel_name)
irc_channel_search_dcc (t_irc_server *server, char *channel_name)
{
t_irc_channel *ptr_channel;
@@ -242,11 +249,11 @@ channel_search_dcc (t_irc_server *server, char *channel_name)
}
/*
* string_is_channel: returns 1 if string is channel
* irc_channel_is_channel: returns 1 if string is channel
*/
int
string_is_channel (char *string)
irc_channel_is_channel (char *string)
{
char first_char[2];
@@ -259,11 +266,11 @@ string_is_channel (char *string)
}
/*
* channel_remove_away: remove away for all nicks on a channel
* irc_channel_remove_away: remove away for all nicks on a channel
*/
void
channel_remove_away (t_irc_channel *channel)
irc_channel_remove_away (t_irc_channel *channel)
{
t_irc_nick *ptr_nick;
@@ -278,11 +285,11 @@ channel_remove_away (t_irc_channel *channel)
}
/*
* channel_check_away: check for away on a channel
* irc_channel_check_away: check for away on a channel
*/
void
channel_check_away (t_irc_server *server, t_irc_channel *channel, int force)
irc_channel_check_away (t_irc_server *server, t_irc_channel *channel, int force)
{
if (channel->type == CHANNEL_TYPE_CHANNEL)
{
@@ -290,44 +297,44 @@ channel_check_away (t_irc_server *server, t_irc_channel *channel, int force)
(channel->nicks_count <= cfg_irc_away_check_max_nicks))
{
channel->checking_away++;
server_sendf (server, "WHO %s", channel->name);
irc_server_sendf (server, "WHO %s", channel->name);
}
else
channel_remove_away (channel);
irc_channel_remove_away (channel);
}
}
/*
* channel_set_away: set/unset away status for a channel
* irc_channel_set_away: set/unset away status for a channel
*/
void
channel_set_away (t_irc_channel *channel, char *nick, int is_away)
irc_channel_set_away (t_irc_channel *channel, char *nick, int is_away)
{
t_irc_nick *ptr_nick;
if (channel->type == CHANNEL_TYPE_CHANNEL)
{
ptr_nick = nick_search (channel, nick);
ptr_nick = irc_nick_search (channel, nick);
if (ptr_nick)
nick_set_away (channel, ptr_nick, is_away);
irc_nick_set_away (channel, ptr_nick, is_away);
}
}
/*
* channel_create_dcc: create DCC CHAT channel
* irc_channel_create_dcc: create DCC CHAT channel
*/
int
channel_create_dcc (t_irc_dcc *ptr_dcc)
irc_channel_create_dcc (t_irc_dcc *ptr_dcc)
{
t_irc_channel *ptr_channel;
ptr_channel = channel_search_dcc (ptr_dcc->server, ptr_dcc->nick);
ptr_channel = irc_channel_search_dcc (ptr_dcc->server, ptr_dcc->nick);
if (!ptr_channel)
{
ptr_channel = channel_new (ptr_dcc->server, CHANNEL_TYPE_DCC_CHAT,
ptr_dcc->nick);
ptr_channel = irc_channel_new (ptr_dcc->server, CHANNEL_TYPE_DCC_CHAT,
ptr_dcc->nick);
if (!ptr_channel)
return 0;
gui_buffer_new (gui_current_window, ptr_dcc->server, ptr_channel,
@@ -345,11 +352,11 @@ channel_create_dcc (t_irc_dcc *ptr_dcc)
}
/*
* channel_get_notify_level: get channel notify level
* irc_channel_get_notify_level: get channel notify level
*/
int
channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
irc_channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
{
char *name, *pos, *pos2;
int server_default_notify, notify;
@@ -360,7 +367,7 @@ channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
if ((!server->notify_levels) || (!server->notify_levels[0]))
return NOTIFY_LEVEL_DEFAULT;
server_default_notify = server_get_default_notify_level (server);
server_default_notify = irc_server_get_default_notify_level (server);
if ((channel->type != CHANNEL_TYPE_CHANNEL)
&& (server_default_notify == 1))
server_default_notify = 2;
@@ -388,11 +395,12 @@ channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
}
/*
* server_set_notify_level: set channel notify level
* irc_channel_set_notify_level: set channel notify level
*/
void
channel_set_notify_level (t_irc_server *server, t_irc_channel *channel, int notify)
irc_channel_set_notify_level (t_irc_server *server, t_irc_channel *channel,
int notify)
{
char level_string[2];
@@ -405,11 +413,36 @@ channel_set_notify_level (t_irc_server *server, t_irc_channel *channel, int noti
}
/*
* channel_print_log: print channel infos in log (usually for crash dump)
* irc_channel_add_nick_speaking: add a nick speaking on a channel
*/
void
channel_print_log (t_irc_channel *channel)
irc_channel_add_nick_speaking (t_irc_channel *channel, char *nick)
{
int size, to_remove, i;
weelist_add (&(channel->nicks_speaking), &(channel->last_nick_speaking),
nick, WEELIST_POS_END);
size = weelist_get_size (channel->nicks_speaking);
if (size > CHANNEL_NICKS_SPEAKING_LIMIT)
{
to_remove = size - CHANNEL_NICKS_SPEAKING_LIMIT;
for (i = 0; i < to_remove; i++)
{
weelist_remove (&(channel->nicks_speaking),
&(channel->last_nick_speaking),
channel->nicks_speaking);
}
}
}
/*
* irc_channel_print_log: print channel infos in log (usually for crash dump)
*/
void
irc_channel_print_log (t_irc_channel *channel)
{
weechat_log_printf ("=> channel %s (addr:0x%X)]\n", channel->name, channel);
weechat_log_printf (" type . . . . . . . . : %d\n", channel->type);
@@ -426,6 +459,14 @@ channel_print_log (t_irc_channel *channel)
weechat_log_printf (" nicks. . . . . . . . : 0x%X\n", channel->nicks);
weechat_log_printf (" last_nick. . . . . . : 0x%X\n", channel->last_nick);
weechat_log_printf (" buffer . . . . . . . : 0x%X\n", channel->buffer);
weechat_log_printf (" nicks_speaking . . . : 0x%X\n", channel->nicks_speaking);
weechat_log_printf (" last_nick_speaking . : 0x%X\n", channel->last_nick_speaking);
weechat_log_printf (" prev_channel . . . . : 0x%X\n", channel->prev_channel);
weechat_log_printf (" next_channel . . . . : 0x%X\n", channel->next_channel);
if (channel->nicks_speaking)
{
weechat_log_printf ("\n");
weelist_print_log (channel->nicks_speaking,
"channel nick speaking element");
}
}
+163 -157
View File
@@ -34,105 +34,105 @@ t_irc_command irc_commands[] =
{ { "admin", N_("find information about the administrator of the server"),
N_("[target]"),
N_("target: server"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_admin, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_admin, NULL },
{ "ame", N_("send a CTCP action to all channels of all connected servers"),
N_("message"),
N_("message: message to send"),
"", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_ame, NULL },
"", 1, MAX_ARGS, 1, 1, NULL, irc_send_cmd_ame, NULL },
{ "amsg", N_("send message to all channels of all connected servers"),
N_("text"),
N_("text: text to send"),
"", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_amsg, NULL },
"", 1, MAX_ARGS, 1, 1, NULL, irc_send_cmd_amsg, NULL },
{ "away", N_("toggle away status"),
N_("[-all] [message]"),
N_(" -all: toggle away status on all connected servers\n"
"message: message for away (if no message is given, away status is removed)"),
"-all", 0, MAX_ARGS, 1, 0, NULL, irc_cmd_send_away, NULL },
"-all", 0, MAX_ARGS, 1, 0, NULL, irc_send_cmd_away, NULL },
{ "ban", N_("bans nicks or hosts"),
N_("[channel] [nickname [nickname ...]]"),
N_(" channel: channel for ban\n"
"nickname: user or host to ban"),
"%N", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_ban, NULL },
"%N", 0, MAX_ARGS, 0, 1, NULL, irc_send_cmd_ban, NULL },
{ "ctcp", N_("send a CTCP message (Client-To-Client Protocol)"),
N_("receiver type [arguments]"),
N_(" receiver: nick or channel to send CTCP to\n"
" type: CTCP type (examples: \"version\", \"ping\", ..)\n"
"arguments: arguments for CTCP"),
"%c|%n action|ping|version", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_ctcp, NULL },
"%c|%n action|ping|version", 2, MAX_ARGS, 1, 1, NULL, irc_send_cmd_ctcp, NULL },
{ "cycle", N_("leave and rejoin a channel"),
N_("[channel[,channel]] [part_message]"),
N_(" channel: channel name for cycle\n"
"part_message: part message (displayed to other users)"),
"%p", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_cycle, NULL },
"%p", 0, MAX_ARGS, 0, 1, NULL, irc_send_cmd_cycle, NULL },
{ "dehalfop", N_("removes half channel operator status from nickname(s)"),
N_("[nickname [nickname]]"), "",
"", 0, MAX_ARGS, 0, 1, irc_cmd_send_dehalfop, NULL, NULL },
"", 0, MAX_ARGS, 0, 1, irc_send_cmd_dehalfop, NULL, NULL },
{ "deop", N_("removes channel operator status from nickname(s)"),
N_("[nickname [nickname]]"), "",
"", 0, MAX_ARGS, 0, 1, irc_cmd_send_deop, NULL, NULL },
"", 0, MAX_ARGS, 0, 1, irc_send_cmd_deop, NULL, NULL },
{ "devoice", N_("removes voice from nickname(s)"),
N_("[nickname [nickname]]"), "",
"", 0, MAX_ARGS, 0, 1, irc_cmd_send_devoice, NULL, NULL },
"", 0, MAX_ARGS, 0, 1, irc_send_cmd_devoice, NULL, NULL },
{ "die", N_("shutdown the server"), "", "",
NULL, 0, 0, 0, 1, NULL, irc_cmd_send_die, NULL },
NULL, 0, 0, 0, 1, NULL, irc_send_cmd_die, NULL },
{ "error", N_("error received from IRC server"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_error },
{ "halfop", N_("gives half channel operator status to nickname(s)"),
N_("[nickname [nickname]]"), "",
"", 0, MAX_ARGS, 0, 1, irc_cmd_send_halfop, NULL, NULL },
"", 0, MAX_ARGS, 0, 1, irc_send_cmd_halfop, NULL, NULL },
{ "info", N_("get information describing the server"),
N_("[target]"),
N_("target: server name"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_info, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_info, NULL },
{ "invite", N_("invite a nick on a channel"),
N_("nickname channel"),
N_("nickname: nick to invite\n"
" channel: channel to invite"),
"%n %c", 1, 2, 0, 1, irc_cmd_send_invite, NULL, irc_cmd_recv_invite },
"%n %c", 1, 2, 0, 1, irc_send_cmd_invite, NULL, irc_recv_cmd_invite },
{ "ison", N_("check if a nickname is currently on IRC"),
N_("nickname [nickname ...]"),
N_("nickname: nickname"),
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_ison, NULL },
"", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_ison, NULL },
{ "join", N_("join a channel"),
N_("channel[,channel] [key[,key]]"),
N_("channel: channel name to join\n"
" key: key to join the channel"),
NULL, 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_join, irc_cmd_recv_join },
NULL, 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_join, irc_recv_cmd_join },
{ "kick", N_("forcibly remove a user from a channel"),
N_("[channel] nickname [comment]"),
N_(" channel: channel where user is\n"
"nickname: nickname to kick\n"
" comment: comment for kick"),
"%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kick, irc_cmd_recv_kick },
"%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_kick, irc_recv_cmd_kick },
{ "kickban", N_("kicks and bans a nick from a channel"),
N_("[channel] nickname [comment]"),
N_(" channel: channel where user is\n"
"nickname: nickname to kick and ban\n"
" comment: comment for kick"),
"%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kickban, NULL },
"%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_kickban, NULL },
{ "kill", N_("close client-server connection"),
N_("nickname comment"),
N_("nickname: nickname\n"
" comment: comment for kill"),
"%n %-", 2, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kill, irc_cmd_recv_kill },
"%n %-", 2, MAX_ARGS, 0, 1, NULL, irc_send_cmd_kill, irc_recv_cmd_kill },
{ "links", N_("list all servernames which are known by the server answering the query"),
N_("[[server] server_mask]"),
N_(" server: this server should answer the query\n"
"server_mask: list of servers must match this mask"),
NULL, 0, 2, 0, 1, NULL, irc_cmd_send_links, NULL },
NULL, 0, 2, 0, 1, NULL, irc_send_cmd_links, NULL },
{ "list", N_("list channels and their topic"),
N_("[channel[,channel] [server]]"),
N_("channel: channel to list (a regexp is allowed)\nserver: server name"),
NULL, 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_list, NULL },
NULL, 0, MAX_ARGS, 0, 1, NULL, irc_send_cmd_list, NULL },
{ "lusers", N_("get statistics about the size of the IRC network"),
N_("[mask [target]]"),
N_(" mask: servers matching the mask only\n"
"target: server for forwarding request"),
NULL, 0, 2, 0, 1, NULL, irc_cmd_send_lusers, NULL },
NULL, 0, 2, 0, 1, NULL, irc_send_cmd_lusers, NULL },
{ "me", N_("send a CTCP action to the current channel"),
N_("message"),
N_("message: message to send"),
"", 0, MAX_ARGS, 1, 1, NULL, irc_cmd_send_me, NULL },
"", 0, MAX_ARGS, 1, 1, NULL, irc_send_cmd_me, NULL },
{ "mode", N_("change channel or user mode"),
N_("{ channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask] } | "
"{ nickname {[+|-]|i|w|s|o} }"),
@@ -156,354 +156,360 @@ t_irc_command irc_commands[] =
" s: mark a user for receive server notices\n"
" w: user receives wallops\n"
" o: operator flag"),
"%c|%m", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_mode, irc_cmd_recv_mode },
"%c|%m", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_mode, irc_recv_cmd_mode },
{ "motd", N_("get the \"Message Of The Day\""),
N_("[target]"),
N_("target: server name"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_motd, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_motd, NULL },
{ "msg", N_("send message to a nick or channel"),
N_("receiver[,receiver] text"),
N_("receiver: nick or channel (may be mask, '*' = current channel)\n"
"text: text to send"),
"", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_msg, NULL },
"", 2, MAX_ARGS, 1, 1, NULL, irc_send_cmd_msg, NULL },
{ "names", N_("list nicknames on channels"),
N_("[channel[,channel]]"),
N_("channel: channel name"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_names, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_names, NULL },
{ "nick", N_("change current nickname"),
N_("[-all] nickname"),
N_(" -all: set new nickname for all connected servers\n"
"nickname: new nickname"),
"-all", 1, 2, 0, 0, irc_cmd_send_nick, NULL, irc_cmd_recv_nick },
"-all", 1, 2, 0, 0, irc_send_cmd_nick, NULL, irc_recv_cmd_nick },
{ "notice", N_("send notice message to user"),
N_("nickname text"),
N_("nickname: user to send notice to\n"
" text: text to send"),
"%n %-", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_notice, irc_cmd_recv_notice },
"%n %-", 2, MAX_ARGS, 1, 1, NULL, irc_send_cmd_notice, irc_recv_cmd_notice },
{ "op", N_("gives channel operator status to nickname(s)"),
N_("nickname [nickname]"), "",
"", 1, MAX_ARGS, 0, 1, irc_cmd_send_op, NULL, NULL },
"", 1, MAX_ARGS, 0, 1, irc_send_cmd_op, NULL, NULL },
{ "oper", N_("get operator privileges"),
N_("user password"),
N_("user/password: used to get privileges on current IRC server"),
NULL, 2, 2, 0, 1, NULL, irc_cmd_send_oper, NULL },
NULL, 2, 2, 0, 1, NULL, irc_send_cmd_oper, NULL },
{ "part", N_("leave a channel"),
N_("[channel[,channel]] [part_message]"),
N_(" channel: channel name to leave\n"
"part_message: part message (displayed to other users)"),
"%p", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_part, irc_cmd_recv_part },
"%p", 0, MAX_ARGS, 0, 1, NULL, irc_send_cmd_part, irc_recv_cmd_part },
{ "ping", N_("ping server"),
N_("server1 [server2]"),
N_("server1: server to ping\nserver2: forward ping to this server"),
NULL, 1, 2, 0, 1, NULL, irc_cmd_send_ping, irc_cmd_recv_ping },
NULL, 1, 2, 0, 1, NULL, irc_send_cmd_ping, irc_recv_cmd_ping },
{ "pong", N_("answer to a ping message"),
N_("daemon [daemon2]"),
N_(" daemon: daemon who has responded to Ping message\n"
"daemon2: forward message to this daemon"),
NULL, 1, 2, 0, 1, NULL, irc_cmd_send_pong, irc_cmd_recv_pong },
NULL, 1, 2, 0, 1, NULL, irc_send_cmd_pong, irc_recv_cmd_pong },
{ "privmsg", N_("message received"), "", "",
"", 0, 0, 1, 1, NULL, NULL, irc_cmd_recv_privmsg },
"", 0, 0, 1, 1, NULL, NULL, irc_recv_cmd_privmsg },
{ "query", N_("send a private message to a nick"),
N_("nickname [text]"),
N_("nickname: nickname for private conversation\n"
" text: text to send"),
"%n %-", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_query, NULL },
"%n %-", 1, MAX_ARGS, 1, 1, NULL, irc_send_cmd_query, NULL },
{ "quit", N_("close all connections and quit"),
N_("[quit_message]"),
N_("quit_message: quit message (displayed to other users)"),
"%q", 0, MAX_ARGS, 1, 0, NULL, irc_cmd_send_quit, irc_cmd_recv_quit },
"%q", 0, MAX_ARGS, 1, 0, NULL, irc_send_cmd_quit, irc_recv_cmd_quit },
{ "quote", N_("send raw data to server without parsing"),
N_("data"),
N_("data: raw data to send"),
"", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_quote, NULL },
"", 1, MAX_ARGS, 1, 0, NULL, irc_send_cmd_quote, NULL },
{ "rehash", N_("tell the server to reload its config file"), "", "",
NULL, 0, 0, 0, 1, NULL, irc_cmd_send_rehash, NULL },
NULL, 0, 0, 0, 1, NULL, irc_send_cmd_rehash, NULL },
{ "restart", N_("tell the server to restart itself"), "", "",
NULL, 0, 0, 0, 1, NULL, irc_cmd_send_restart, NULL },
NULL, 0, 0, 0, 1, NULL, irc_send_cmd_restart, NULL },
{ "service", N_("register a new service"),
N_("nickname reserved distribution type reserved info"),
N_("distribution: visibility of service\n"
" type: reserved for future usage"),
NULL, 6, 6, 0, 1, NULL, irc_cmd_send_service, NULL },
NULL, 6, 6, 0, 1, NULL, irc_send_cmd_service, NULL },
{ "servlist", N_("list services currently connected to the network"),
N_("[mask [type]]"),
N_("mask: list only services matching this mask\n"
"type: list only services of this type"),
NULL, 0, 2, 0, 1, NULL, irc_cmd_send_servlist, NULL },
NULL, 0, 2, 0, 1, NULL, irc_send_cmd_servlist, NULL },
{ "squery", N_("deliver a message to a service"),
N_("service text"),
N_("service: name of service\ntext: text to send"),
NULL, 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_squery, NULL },
NULL, 2, MAX_ARGS, 1, 1, NULL, irc_send_cmd_squery, NULL },
{ "squit", N_("disconnect server links"),
N_("server comment"),
N_( "server: server name\n"
"comment: comment for quit"),
NULL, 2, 2, 1, 1, NULL, irc_cmd_send_squit, NULL },
NULL, 2, 2, 1, 1, NULL, irc_send_cmd_squit, NULL },
{ "stats", N_("query statistics about server"),
N_("[query [server]]"),
N_(" query: c/h/i/k/l/m/o/y/u (see RFC1459)\n"
"server: server name"),
NULL, 0, 2, 0, 1, NULL, irc_cmd_send_stats, NULL },
NULL, 0, 2, 0, 1, NULL, irc_send_cmd_stats, NULL },
{ "summon", N_("give users who are on a host running an IRC server a message "
"asking them to please join IRC"),
N_("user [target [channel]]"),
N_(" user: username\ntarget: server name\n"
"channel: channel name"),
NULL, 1, 3, 0, 1, NULL, irc_cmd_send_summon, NULL },
NULL, 1, 3, 0, 1, NULL, irc_send_cmd_summon, NULL },
{ "time", N_("query local time from server"),
N_("[target]"),
N_("target: query time from specified server"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_time, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_time, NULL },
{ "topic", N_("get/set channel topic"),
N_("[channel] [topic]"),
N_("channel: channel name\ntopic: new topic for channel "
"(if topic is \"-delete\" then topic is deleted)"),
"%t|-delete %-", 0, MAX_ARGS, 1, 1, NULL, irc_cmd_send_topic, irc_cmd_recv_topic },
"%t|-delete %-", 0, MAX_ARGS, 1, 1, NULL, irc_send_cmd_topic, irc_recv_cmd_topic },
{ "trace", N_("find the route to specific server"),
N_("[target]"),
N_("target: server"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_trace, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_trace, NULL },
{ "unban", N_("unbans nicks or hosts"),
N_("[channel] nickname [nickname ...]"),
N_(" channel: channel for unban\n"
"nickname: user or host to unban"),
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_unban, NULL },
"", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_unban, NULL },
{ "userhost", N_("return a list of information about nicknames"),
N_("nickname [nickname ...]"),
N_("nickname: nickname"),
"%n", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_userhost, NULL },
"%n", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_userhost, NULL },
{ "users", N_("list of users logged into the server"),
N_("[target]"),
N_("target: server"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_users, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_users, NULL },
{ "version", N_("gives the version info of nick or server (current or specified)"),
N_("[server | nickname]"),
N_(" server: server name\n"
"nickname: nickname"),
NULL, 0, 1, 0, 1, NULL, irc_cmd_send_version, NULL },
NULL, 0, 1, 0, 1, NULL, irc_send_cmd_version, NULL },
{ "voice", N_("gives voice to nickname(s)"),
N_("[nickname [nickname]]"), "",
"", 0, MAX_ARGS, 0, 1, irc_cmd_send_voice, NULL, NULL },
"", 0, MAX_ARGS, 0, 1, irc_send_cmd_voice, NULL, NULL },
{ "wallops", N_("send a message to all currently connected users who have "
"set the 'w' user mode for themselves"),
N_("text"),
N_("text to send"),
NULL, 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_wallops, irc_cmd_recv_wallops },
NULL, 1, MAX_ARGS, 1, 1, NULL, irc_send_cmd_wallops, irc_recv_cmd_wallops },
{ "who", N_("generate a query which returns a list of information"),
N_("[mask [\"o\"]]"),
N_("mask: only information which match this mask\n"
" o: only operators are returned according to the mask supplied"),
"%C", 0, 2, 0, 1, NULL, irc_cmd_send_who, NULL },
"%C", 0, 2, 0, 1, NULL, irc_send_cmd_who, NULL },
{ "whois", N_("query information about user(s)"),
N_("[server] nickname[,nickname]"),
N_(" server: server name\n"
"nickname: nickname (may be a mask)"),
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whois, NULL },
"", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_whois, NULL },
{ "whowas", N_("ask for information about a nickname which no longer exists"),
N_("nickname [,nickname [,nickname ...]] [count [target]]"),
N_("nickname: nickname to search\n"
" count: number of replies to return (full search if negative number)\n"
" target: reply should match this mask"),
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whowas, NULL },
"", 1, MAX_ARGS, 0, 1, NULL, irc_send_cmd_whowas, NULL },
{ "001", N_("a server message"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_001 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_001 },
{ "005", N_("a server message"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_005 },
{ "221", N_("user mode string"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_221 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_221 },
{ "301", N_("away message"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_301 },
{ "302", N_("userhost"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_302 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_302 },
{ "303", N_("ison"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_303 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_303 },
{ "305", N_("unaway"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_305 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_305 },
{ "306", N_("now away"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_306 },
{ "307", N_("whois (registered nick)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_whois_nick_msg },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "310", N_("whois (help mode)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_310 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_310 },
{ "311", N_("whois (user)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_311 },
{ "312", N_("whois (server)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_312 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_312 },
{ "313", N_("whois (operator)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_whois_nick_msg },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "314", N_("whowas"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_314 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_314 },
{ "315", N_("end of /who list"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_315 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_315 },
{ "317", N_("whois (idle)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_317 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_317 },
{ "318", N_("whois (end)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_whois_nick_msg },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "319", N_("whois (channels)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_319 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_319 },
{ "320", N_("whois (identified user)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_whois_nick_msg },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "321", N_("/list start"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_321 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_321 },
{ "322", N_("channel (for /list)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_322 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_322 },
{ "323", N_("/list end"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_323 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_323 },
{ "324", N_("channel mode"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_324 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_324 },
{ "326", N_("whois (has oper privs)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_whois_nick_msg },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "327", N_("whois (host)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_327 },
{ "329", N_("channel creation date"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_329 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_329 },
{ "331", N_("no topic for channel"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_331 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_331 },
{ "332", N_("topic of channel"),
N_("channel :topic"),
N_("channel: name of channel\n"
" topic: topic of the channel"),
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_332 },
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_332 },
{ "333", N_("infos about topic (nick and date changed)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_333 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_333 },
{ "338", N_("whois (host)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_338 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_338 },
{ "341", N_("inviting"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_341 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_341 },
{ "344", N_("channel reop"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_344 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_344 },
{ "345", N_("end of channel reop list"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_345 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_345 },
{ "348", N_("channel exception list"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_348 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_348 },
{ "349", N_("end of channel exception list"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_349 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_349 },
{ "351", N_("server version"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_351 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_351 },
{ "352", N_("who"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_352 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_352 },
{ "353", N_("list of nicks on channel"),
N_("channel :[[@|+]nick ...]"),
N_("channel: name of channel\n"
" nick: nick on the channel"),
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_353 },
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_353 },
{ "366", N_("end of /names list"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_366 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_366 },
{ "367", N_("banlist"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_367 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_367 },
{ "368", N_("end of banlist"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_368 },
{ "378", N_("connecting from"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_378 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_368 },
{ "378", N_("whois (connecting from)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "379", N_("whois (using modes)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_whois_nick_msg },
{ "401", N_("no such nick/channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "402", N_("no such server"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "403", N_("no such channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "404", N_("cannot send to channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "405", N_("too many channels"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "406", N_("was no such nick"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "407", N_("was no such nick"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "409", N_("no origin"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "410", N_("no services"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "411", N_("no recipient"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "412", N_("no text to send"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "413", N_("no toplevel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "414", N_("wilcard in toplevel domain"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "421", N_("unknown command"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "422", N_("MOTD is missing"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "423", N_("no administrative info"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "424", N_("file error"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "431", N_("no nickname given"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "432", N_("erroneous nickname"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_432 },
{ "433", N_("nickname already in use"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_433 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_433 },
{ "436", N_("nickname collision"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "437", N_("resource unavailable"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "438", N_("not authorized to change nickname"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_438 },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_438 },
{ "441", N_("user not in channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "442", N_("not on channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "443", N_("user already on channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "444", N_("user not logged in"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "445", N_("summon has been disabled"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "446", N_("users has been disabled"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "451", N_("you are not registered"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "461", N_("not enough parameters"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "462", N_("you may not register"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "463", N_("your host isn't among the privileged"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "464", N_("password incorrect"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "465", N_("you are banned from this server"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "467", N_("channel key already set"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "470", N_("forwarding to another channel"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "471", N_("channel is already full"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "472", N_("unknown mode char to me"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "473", N_("cannot join channel (invite only)"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "474", N_("cannot join channel (banned from channel)"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "475", N_("cannot join channel (bad channel key)"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "476", N_("bad channel mask"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "477", N_("channel doesn't support modes"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "481", N_("you're not an IRC operator"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "482", N_("you're not channel operator"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "483", N_("you can't kill a server!"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "484", N_("your connection is restricted!"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "485", N_("user is immune from kick/deop"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "487", N_("network split"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "491", N_("no O-lines for your host"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "501", N_("unknown mode flag"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "502", N_("can't change mode for other users"), "", "",
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_recv_cmd_error },
{ "671", N_("whois (secure connection)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_671 },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_671 },
{ "973", N_("whois (secure connection)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_server_mode_reason },
{ "974", N_("whois (secure connection)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_server_mode_reason },
{ "975", N_("whois (secure connection)"), "", "",
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason },
NULL, 0, 0, 0, 1, NULL, NULL, irc_recv_cmd_server_mode_reason },
{ NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 1, NULL, NULL, NULL }
};
+187 -185
View File
File diff suppressed because it is too large Load Diff
+43 -36
View File
@@ -37,49 +37,53 @@
/*
* irc_find_context: find window/buffer for a server/channel
* irc_display_hide_password: hide IRC password(s) in a string
*/
void
irc_find_context (t_irc_server *server, t_irc_channel *channel,
t_gui_window **window, t_gui_buffer **buffer)
irc_display_hide_password (char *string, int look_for_nickserv)
{
t_gui_window *ptr_win;
if (!buffer)
return;
/* first find buffer */
*buffer = NULL;
if (channel && channel->buffer)
*buffer = channel->buffer;
else
char *pos_nickserv, *pos, *pos_pwd;
pos = string;
while (1)
{
if (server && server->buffer)
*buffer = server->buffer;
else
*buffer = gui_current_window->buffer;
}
/* then find first window displaying this buffer */
if (window)
{
*window = NULL;
if (gui_current_window->buffer == *buffer)
*window = gui_current_window;
if (look_for_nickserv)
{
pos_nickserv = strstr (pos, "nickserv ");
if (!pos_nickserv)
return;
pos = pos_nickserv + 9;
while (pos[0] == ' ')
pos++;
if ((strncmp (pos, "identify ", 9) == 0)
|| (strncmp (pos, "register ", 9) == 0))
pos_pwd = pos + 9;
else
pos_pwd = NULL;
}
else
{
for (ptr_win = gui_windows; ptr_win;
ptr_win = ptr_win->next_window)
pos_pwd = strstr (pos, "identify ");
if (!pos_pwd)
pos_pwd = strstr (pos, "register ");
if (!pos_pwd)
return;
pos_pwd += 9;
}
if (pos_pwd)
{
while (pos_pwd[0] == ' ')
pos_pwd++;
while (pos_pwd[0] && (pos_pwd[0] != ';') && (pos_pwd[0] != ' ')
&& (pos_pwd[0] != '"'))
{
if (ptr_win->buffer == *buffer)
{
*window = ptr_win;
break;
}
pos_pwd[0] = '*';
pos_pwd++;
}
if (!*window)
*window = gui_current_window;
pos = pos_pwd;
}
}
}
@@ -174,7 +178,7 @@ irc_display_nick (t_gui_buffer *buffer, t_irc_nick *nick, char *nickname,
length += 2;
if (nick && cfg_look_nickmode)
{
if (nick->flags & (NICK_CHANOWNER | NICK_CHANADMIN |
if (nick->flags & (NICK_CHANOWNER | NICK_CHANADMIN | NICK_CHANADMIN2 |
NICK_OP | NICK_HALFOP | NICK_VOICE))
length += 1;
else if (cfg_look_nickmode_empty && !no_nickmode)
@@ -220,6 +224,9 @@ irc_display_nick (t_gui_buffer *buffer, t_irc_nick *nick, char *nickname,
else if (nick->flags & NICK_CHANADMIN)
gui_printf_type (buffer, type, "%s&",
GUI_COLOR(COLOR_WIN_NICK_OP));
else if (nick->flags & NICK_CHANADMIN2)
gui_printf_type (buffer, type, "%s!",
GUI_COLOR(COLOR_WIN_NICK_OP));
else if (nick->flags & NICK_OP)
gui_printf_type (buffer, type, "%s@",
GUI_COLOR(COLOR_WIN_NICK_OP));
@@ -426,7 +433,7 @@ irc_display_server (t_irc_server *server)
if (string)
{
if (cfg_log_hide_nickserv_pwd)
irc_hide_password (string, 1);
irc_display_hide_password (string, 1);
gui_printf (NULL, " server_command . . . . . . : %s\n",
string);
free (string);
+40 -38
View File
@@ -42,12 +42,12 @@ t_irc_ignore *last_irc_ignore = NULL;
/*
* ignore_check_mask: returns 1 is mask1 and mask2 are the same host
* anyone or both strings may have user and/or host after
* irc_ignore_check_mask: return 1 is mask1 and mask2 are the same host
* anyone or both strings may have user and/or host after
*/
int
ignore_check_mask (char *mask1, char *mask2)
irc_ignore_check_mask (char *mask1, char *mask2)
{
char *m1, *m2, *pos;
int match;
@@ -85,15 +85,16 @@ ignore_check_mask (char *mask1, char *mask2)
}
/*
* ignore_match: check if pointed ignore matches with arguments
* irc_ignore_match: check if pointed ignore matches with arguments
*/
int
ignore_match (t_irc_ignore *ptr_ignore, char *mask, char *type, char *channel_name, char *server_name)
irc_ignore_match (t_irc_ignore *ptr_ignore, char *mask, char *type,
char *channel_name, char *server_name)
{
/* check mask */
if ((strcmp (mask, "*") != 0) && (strcmp (ptr_ignore->mask, "*") != 0)
&& (!ignore_check_mask (ptr_ignore->mask, mask)))
&& (!irc_ignore_check_mask (ptr_ignore->mask, mask)))
return 0;
/* mask is matching, go on with type */
@@ -132,13 +133,13 @@ ignore_match (t_irc_ignore *ptr_ignore, char *mask, char *type, char *channel_na
}
/*
* ignore_check: check if an ignore is set for arguments
* returns 1 if at least one ignore exists (message should NOT be displayed)
* 0 if no ignore found (message will be displayed)
* irc_ignore_check: check if an ignore is set for arguments
* return 1 if at least one ignore exists (message should NOT be displayed)
* 0 if no ignore found (message will be displayed)
*/
int
ignore_check (char *mask, char *type, char *channel_name, char *server_name)
irc_ignore_check (char *mask, char *type, char *channel_name, char *server_name)
{
t_irc_ignore *ptr_ignore;
@@ -148,7 +149,7 @@ ignore_check (char *mask, char *type, char *channel_name, char *server_name)
for (ptr_ignore = irc_ignore; ptr_ignore;
ptr_ignore = ptr_ignore->next_ignore)
{
if (ignore_match (ptr_ignore, mask, type, channel_name, server_name))
if (irc_ignore_match (ptr_ignore, mask, type, channel_name, server_name))
return 1;
}
@@ -157,11 +158,11 @@ ignore_check (char *mask, char *type, char *channel_name, char *server_name)
}
/*
* ignore_search: search for an ignore
* irc_ignore_search: search for an ignore
*/
t_irc_ignore *
ignore_search (char *mask, char *type, char *channel_name, char *server_name)
irc_ignore_search (char *mask, char *type, char *channel_name, char *server_name)
{
t_irc_ignore *ptr_ignore;
@@ -180,11 +181,11 @@ ignore_search (char *mask, char *type, char *channel_name, char *server_name)
}
/*
* ignore_add: add an ignore in list
* irc_ignore_add: add an ignore in list
*/
t_irc_ignore *
ignore_add (char *mask, char *type, char *channel_name, char *server_name)
irc_ignore_add (char *mask, char *type, char *channel_name, char *server_name)
{
int type_index;
t_irc_command *command_ptr;
@@ -218,7 +219,7 @@ ignore_add (char *mask, char *type, char *channel_name, char *server_name)
return NULL;
}
if (ignore_search (mask, type, channel_name, server_name))
if (irc_ignore_search (mask, type, channel_name, server_name))
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
@@ -258,12 +259,12 @@ ignore_add (char *mask, char *type, char *channel_name, char *server_name)
}
/*
* ignore_add_from_config: add an ignore to list, read from config file
* (comma serparated values)
* irc_ignore_add_from_config: add an ignore to list, read from config file
* (comma serparated values)
*/
t_irc_ignore *
ignore_add_from_config (char *string)
irc_ignore_add_from_config (char *string)
{
t_irc_ignore *new_ignore;
char *string2;
@@ -291,7 +292,7 @@ ignore_add_from_config (char *string)
{
pos_server[0] = '\0';
pos_server++;
new_ignore = ignore_add (pos_mask, pos_type, pos_channel, pos_server);
new_ignore = irc_ignore_add (pos_mask, pos_type, pos_channel, pos_server);
}
}
}
@@ -301,11 +302,11 @@ ignore_add_from_config (char *string)
}
/*
* ignore_free: free an ignore
* irc_ignore_free: free an ignore
*/
void
ignore_free (t_irc_ignore *ptr_ignore)
irc_ignore_free (t_irc_ignore *ptr_ignore)
{
t_irc_ignore *new_irc_ignore;
@@ -338,24 +339,25 @@ ignore_free (t_irc_ignore *ptr_ignore)
}
/*
* ignore_free_all: free all ignores
* irc_ignore_free_all: free all ignores
*/
void
ignore_free_all ()
irc_ignore_free_all ()
{
while (irc_ignore)
ignore_free (irc_ignore);
irc_ignore_free (irc_ignore);
}
/*
* ignore_search_free: search and free ignore(s)
* return: number of ignore found and deleted
* 0 if no ignore found
* irc_ignore_search_free: search and free ignore(s)
* return: number of ignore found and deleted
* 0 if no ignore found
*/
int
ignore_search_free (char *mask, char *type, char *channel_name, char *server_name)
irc_ignore_search_free (char *mask, char *type,
char *channel_name, char *server_name)
{
int found;
t_irc_ignore *ptr_ignore, *next_ignore;
@@ -364,7 +366,7 @@ ignore_search_free (char *mask, char *type, char *channel_name, char *server_nam
ptr_ignore = irc_ignore;
while (ptr_ignore)
{
if (ignore_match (ptr_ignore, mask, type, channel_name, server_name))
if (irc_ignore_match (ptr_ignore, mask, type, channel_name, server_name))
{
found++;
if (found == 1)
@@ -372,7 +374,7 @@ ignore_search_free (char *mask, char *type, char *channel_name, char *server_nam
irc_display_prefix (NULL, NULL, PREFIX_INFO);
weechat_cmd_ignore_display (_("Removing ignore:"), ptr_ignore);
next_ignore = ptr_ignore->next_ignore;
ignore_free (ptr_ignore);
irc_ignore_free (ptr_ignore);
ptr_ignore = next_ignore;
}
else
@@ -383,13 +385,13 @@ ignore_search_free (char *mask, char *type, char *channel_name, char *server_nam
}
/*
* ignore_search_free_by_number: search and free ignore(s) by number
* return: 1 if ignore found and deleted
* 0 if ignore not found
* irc_ignore_search_free_by_number: search and free ignore(s) by number
* return: 1 if ignore found and deleted
* 0 if ignore not found
*/
int
ignore_search_free_by_number (int number)
irc_ignore_search_free_by_number (int number)
{
int i;
t_irc_ignore *ptr_ignore;
@@ -407,7 +409,7 @@ ignore_search_free_by_number (int number)
gui_printf (NULL, "\n");
irc_display_prefix (NULL, NULL, PREFIX_INFO);
weechat_cmd_ignore_display (_("Removing ignore:"), ptr_ignore);
ignore_free (ptr_ignore);
irc_ignore_free (ptr_ignore);
return 1;
}
}
@@ -417,11 +419,11 @@ ignore_search_free_by_number (int number)
}
/*
* ignore_print_log: print ignore list in log (usually for crash dump)
* irc_ignore_print_log: print ignore list in log (usually for crash dump)
*/
void
ignore_print_log ()
irc_ignore_print_log ()
{
t_irc_ignore *ptr_ignore;
+43 -8
View File
@@ -45,11 +45,11 @@ irc_mode_channel_set_nick (t_irc_channel *channel, char *nick,
if (nick)
{
ptr_nick = nick_search (channel, nick);
ptr_nick = irc_nick_search (channel, nick);
if (ptr_nick)
{
NICK_SET_FLAG(ptr_nick, (set_flag == '+'), flag);
nick_resort (channel, ptr_nick);
irc_nick_resort (channel, ptr_nick);
gui_nicklist_draw (channel->buffer, 1, 1);
}
}
@@ -117,15 +117,17 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
break;
default:
set_flag = irc_mode_channel_get_flag (modes, pos);
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
switch (pos[0])
{
case 'a': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANADMIN);
break;
case 'h':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_HALFOP);
break;
@@ -135,24 +137,40 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
free (channel->key);
channel->key = NULL;
}
if ((set_flag == '+') && ptr_arg)
channel->key = strdup (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->key = strdup (ptr_arg);
}
break;
case 'l':
if (set_flag == '-')
channel->limit = 0;
if ((set_flag == '+') && ptr_arg)
channel->limit = atoi (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->limit = atoi (ptr_arg);
}
break;
case 'o':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_OP);
break;
case 'q': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANOWNER);
break;
case 'v':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_VOICE);
break;
@@ -257,3 +275,20 @@ irc_mode_user_set (t_irc_server *server, char *modes)
modes++;
}
}
/*
* irc_mode_nick_prefix_allowed: return <> 0 if nick prefix is allowed by server
* for example :
* IRC: 005 (...) PREFIX=(ov)@+
* => allowed prefixes: @+
*/
int
irc_mode_nick_prefix_allowed (t_irc_server *server, char prefix)
{
/* if server did not send any prefix info, then consider this prefix is allowed */
if (!server->prefix)
return 1;
return (strchr (server->prefix, prefix) != NULL);
}
+59 -50
View File
@@ -37,11 +37,11 @@
/*
* nick_find_color: find a color for a nick (according to nick letters)
* irc_nick_find_color: find a color for a nick (according to nick letters)
*/
int
nick_find_color (t_irc_nick *nick)
irc_nick_find_color (t_irc_nick *nick)
{
int i, color;
@@ -56,15 +56,17 @@ nick_find_color (t_irc_nick *nick)
}
/*
* nick_score_for_sort: return score for sorting nick, according to privileges
* irc_nick_score_for_sort: return score for sorting nick, according to privileges
*/
int
nick_score_for_sort (t_irc_nick *nick)
irc_nick_score_for_sort (t_irc_nick *nick)
{
if (nick->flags & NICK_CHANOWNER)
return -32;
return -64;
if (nick->flags & NICK_CHANADMIN)
return -32;
if (nick->flags & NICK_CHANADMIN2)
return -16;
if (nick->flags & NICK_OP)
return -8;
@@ -76,20 +78,20 @@ nick_score_for_sort (t_irc_nick *nick)
}
/*
* nick_compare: compare two nicks
* return: -1 is nick1 < nick2
* 0 if nick1 = nick2
* +1 if nick1 > nick2
* status sort: operator > voice > normal nick
* irc_nick_compare: compare two nicks
* return: -1 is nick1 < nick2
* 0 if nick1 = nick2
* +1 if nick1 > nick2
* status sort: operator > voice > normal nick
*/
int
nick_compare (t_irc_nick *nick1, t_irc_nick *nick2)
irc_nick_compare (t_irc_nick *nick1, t_irc_nick *nick2)
{
int score1, score2, comp;
score1 = nick_score_for_sort (nick1);
score2 = nick_score_for_sort (nick2);
score1 = irc_nick_score_for_sort (nick1);
score2 = irc_nick_score_for_sort (nick2);
comp = ascii_strcasecmp (nick1->nick, nick2->nick);
if (comp > 0)
@@ -108,34 +110,34 @@ nick_compare (t_irc_nick *nick1, t_irc_nick *nick2)
}
/*
* nick_find_pos: find position for a nick (for sorting nick list)
* irc_nick_find_pos: find position for a nick (for sorting nick list)
*/
t_irc_nick *
nick_find_pos (t_irc_channel *channel, t_irc_nick *nick)
irc_nick_find_pos (t_irc_channel *channel, t_irc_nick *nick)
{
t_irc_nick *ptr_nick;
for (ptr_nick = channel->nicks; ptr_nick; ptr_nick = ptr_nick->next_nick)
{
if (nick_compare (nick, ptr_nick) < 0)
if (irc_nick_compare (nick, ptr_nick) < 0)
return ptr_nick;
}
return NULL;
}
/*
* nick_insert_sorted: insert nick into sorted list
* irc_nick_insert_sorted: insert nick into sorted list
*/
void
nick_insert_sorted (t_irc_channel *channel, t_irc_nick *nick)
irc_nick_insert_sorted (t_irc_channel *channel, t_irc_nick *nick)
{
t_irc_nick *pos_nick;
if (channel->nicks)
{
pos_nick = nick_find_pos (channel, nick);
pos_nick = irc_nick_find_pos (channel, nick);
if (pos_nick)
{
@@ -167,11 +169,11 @@ nick_insert_sorted (t_irc_channel *channel, t_irc_nick *nick)
}
/*
* nick_resort: resort nick in the list
* irc_nick_resort: resort nick in the list
*/
void
nick_resort (t_irc_channel *channel, t_irc_nick *nick)
irc_nick_resort (t_irc_channel *channel, t_irc_nick *nick)
{
/* temporarly remove nick from list */
if (nick == channel->nicks)
@@ -184,30 +186,31 @@ nick_resort (t_irc_channel *channel, t_irc_nick *nick)
channel->last_nick = nick->prev_nick;
/* insert again nick into sorted list */
nick_insert_sorted (channel, nick);
irc_nick_insert_sorted (channel, nick);
}
/*
* nick_new: allocate a new nick for a channel and add it to the nick list
* irc_nick_new: allocate a new nick for a channel and add it to the nick list
*/
t_irc_nick *
nick_new (t_irc_server *server, t_irc_channel *channel, char *nick_name,
int is_chanowner, int is_chanadmin, int is_op, int is_halfop,
int has_voice)
irc_nick_new (t_irc_server *server, t_irc_channel *channel, char *nick_name,
int is_chanowner, int is_chanadmin, int is_chanadmin2, int is_op,
int is_halfop, int has_voice)
{
t_irc_nick *new_nick;
/* nick already exists on this channel? */
if ((new_nick = nick_search (channel, nick_name)))
if ((new_nick = irc_nick_search (channel, nick_name)))
{
/* update nick */
NICK_SET_FLAG(new_nick, is_chanowner, NICK_CHANOWNER);
NICK_SET_FLAG(new_nick, is_chanadmin, NICK_CHANADMIN);
NICK_SET_FLAG(new_nick, is_chanadmin2, NICK_CHANADMIN2);
NICK_SET_FLAG(new_nick, is_op, NICK_OP);
NICK_SET_FLAG(new_nick, is_halfop, NICK_HALFOP);
NICK_SET_FLAG(new_nick, has_voice, NICK_VOICE);
nick_resort (channel, new_nick);
irc_nick_resort (channel, new_nick);
return new_nick;
}
@@ -221,28 +224,31 @@ nick_new (t_irc_server *server, t_irc_channel *channel, char *nick_name,
new_nick->flags = 0;
NICK_SET_FLAG(new_nick, is_chanowner, NICK_CHANOWNER);
NICK_SET_FLAG(new_nick, is_chanadmin, NICK_CHANADMIN);
NICK_SET_FLAG(new_nick, is_chanadmin2, NICK_CHANADMIN2);
NICK_SET_FLAG(new_nick, is_op, NICK_OP);
NICK_SET_FLAG(new_nick, is_halfop, NICK_HALFOP);
NICK_SET_FLAG(new_nick, has_voice, NICK_VOICE);
if (ascii_strcasecmp (new_nick->nick, server->nick) == 0)
new_nick->color = COLOR_WIN_NICK_SELF;
else
new_nick->color = nick_find_color (new_nick);
new_nick->color = irc_nick_find_color (new_nick);
nick_insert_sorted (channel, new_nick);
irc_nick_insert_sorted (channel, new_nick);
channel->nicks_count++;
channel->nick_completion_reset = 1;
/* all is ok, return address of new nick */
return new_nick;
}
/*
* nick_change: change nickname and move it if necessary (list is sorted)
* irc_nick_change: change nickname and move it if necessary (list is sorted)
*/
void
nick_change (t_irc_channel *channel, t_irc_nick *nick, char *new_nick)
irc_nick_change (t_irc_channel *channel, t_irc_nick *nick, char *new_nick)
{
int nick_is_me;
@@ -255,18 +261,18 @@ nick_change (t_irc_channel *channel, t_irc_nick *nick, char *new_nick)
if (nick_is_me)
nick->color = COLOR_WIN_NICK_SELF;
else
nick->color = nick_find_color (nick);
nick->color = irc_nick_find_color (nick);
/* insert again nick into sorted list */
nick_resort (channel, nick);
irc_nick_resort (channel, nick);
}
/*
* nick_free: free a nick and remove it from nicks queue
* irc_nick_free: free a nick and remove it from nicks queue
*/
void
nick_free (t_irc_channel *channel, t_irc_nick *nick)
irc_nick_free (t_irc_channel *channel, t_irc_nick *nick)
{
t_irc_nick *new_nicks;
@@ -296,32 +302,34 @@ nick_free (t_irc_channel *channel, t_irc_nick *nick)
free (nick->host);
free (nick);
channel->nicks = new_nicks;
channel->nick_completion_reset = 1;
}
/*
* nick_free_all: free all allocated nicks for a channel
* irc_nick_free_all: free all allocated nicks for a channel
*/
void
nick_free_all (t_irc_channel *channel)
irc_nick_free_all (t_irc_channel *channel)
{
if (!channel)
return;
/* remove all nicks for the channel */
while (channel->nicks)
nick_free (channel, channel->nicks);
irc_nick_free (channel, channel->nicks);
/* sould be zero, but prevent any bug :D */
channel->nicks_count = 0;
}
/*
* nick_search: returns pointer on a nick
* irc_nick_search: returns pointer on a nick
*/
t_irc_nick *
nick_search (t_irc_channel *channel, char *nickname)
irc_nick_search (t_irc_channel *channel, char *nickname)
{
t_irc_nick *ptr_nick;
@@ -338,12 +346,12 @@ nick_search (t_irc_channel *channel, char *nickname)
}
/*
* nick_count: returns number of nicks (total, op, halfop, voice) on a channel
* irc_nick_count: returns number of nicks (total, op, halfop, voice) on a channel
*/
void
nick_count (t_irc_channel *channel, int *total, int *count_op,
int *count_halfop, int *count_voice, int *count_normal)
irc_nick_count (t_irc_channel *channel, int *total, int *count_op,
int *count_halfop, int *count_voice, int *count_normal)
{
t_irc_nick *ptr_nick;
@@ -358,6 +366,7 @@ nick_count (t_irc_channel *channel, int *total, int *count_op,
(*total)++;
if ((ptr_nick->flags & NICK_CHANOWNER) ||
(ptr_nick->flags & NICK_CHANADMIN) ||
(ptr_nick->flags & NICK_CHANADMIN2) ||
(ptr_nick->flags & NICK_OP))
(*count_op)++;
else
@@ -376,11 +385,11 @@ nick_count (t_irc_channel *channel, int *total, int *count_op,
}
/*
* nick_get_max_length: returns longer nickname on a channel
* irc_nick_get_max_length: returns longer nickname on a channel
*/
int
nick_get_max_length (t_irc_channel *channel)
irc_nick_get_max_length (t_irc_channel *channel)
{
int length, max_length;
t_irc_nick *ptr_nick;
@@ -396,11 +405,11 @@ nick_get_max_length (t_irc_channel *channel)
}
/*
* nick_set_away: set/unset away status for a channel
* irc_nick_set_away: set/unset away status for a channel
*/
void
nick_set_away (t_irc_channel *channel, t_irc_nick *nick, int is_away)
irc_nick_set_away (t_irc_channel *channel, t_irc_nick *nick, int is_away)
{
if ((cfg_irc_away_check > 0)
&& ((cfg_irc_away_check_max_nicks == 0) ||
@@ -416,11 +425,11 @@ nick_set_away (t_irc_channel *channel, t_irc_nick *nick, int is_away)
}
/*
* nick_print_log: print nick infos in log (usually for crash dump)
* irc_nick_print_log: print nick infos in log (usually for crash dump)
*/
void
nick_print_log (t_irc_nick *nick)
irc_nick_print_log (t_irc_nick *nick)
{
weechat_log_printf ("=> nick %s (addr:0x%X)]\n", nick->nick, nick);
weechat_log_printf (" host . . . . . : %s\n", nick->host);
+586 -412
View File
File diff suppressed because it is too large Load Diff
+293 -348
View File
File diff suppressed because it is too large Load Diff
+316 -287
View File
File diff suppressed because it is too large Load Diff
+235 -227
View File
@@ -57,23 +57,24 @@
/* nick types */
#define NICK_CHANOWNER 1
#define NICK_CHANADMIN 2
#define NICK_OP 4
#define NICK_HALFOP 8
#define NICK_VOICE 16
#define NICK_AWAY 32
#define NICK_CHANOWNER 1
#define NICK_CHANADMIN 2
#define NICK_OP 4
#define NICK_HALFOP 8
#define NICK_VOICE 16
#define NICK_AWAY 32
#define NICK_CHANADMIN2 64
#define NICK_SET_FLAG(nick, set, flag) \
if (set) \
nick->flags |= flag; \
else \
nick->flags &= 0xFFFF - flag;
#define server_sendf_queued(server, fmt, argz...) \
#define irc_server_sendf_queued(server, fmt, argz...) \
if (server) \
{ \
server->queue_msg = 1; \
server_sendf(server, fmt, ##argz); \
irc_server_sendf (server, fmt, ##argz); \
server->queue_msg = 0; \
}
@@ -90,15 +91,16 @@ struct t_irc_nick
t_irc_nick *next_nick; /* link to next nick on the channel */
};
/* channel types */
#define CHANNEL_PREFIX "#&+!"
/* channel types */
#define CHANNEL_TYPE_UNKNOWN -1
#define CHANNEL_TYPE_CHANNEL 0
#define CHANNEL_TYPE_PRIVATE 1
#define CHANNEL_TYPE_DCC_CHAT 2
#define CHANNEL_NICKS_SPEAKING_LIMIT 32
typedef struct t_irc_channel t_irc_channel;
struct t_irc_channel
@@ -116,8 +118,12 @@ struct t_irc_channel
int cycle; /* currently cycling (/part then /join) */
int close; /* close request (/buffer close) */
int display_creation_date; /* 1 if creation date should be displayed */
int nick_completion_reset; /* 1 if nick completion should be rebuilt */
/* there was some join/part on channel */
t_irc_nick *nicks; /* nicks on the channel */
t_irc_nick *last_nick; /* last nick on the channel */
t_weelist *nicks_speaking; /* nicks speaking (for smart completion) */
t_weelist *last_nick_speaking; /* last nick speaking */
t_gui_buffer *buffer; /* GUI buffer allocated for channel */
t_irc_channel *prev_channel; /* link to previous channel */
t_irc_channel *next_channel; /* link to next channel */
@@ -176,6 +182,7 @@ struct t_irc_server
char *unterminated_message; /* beginning of a message in input buf */
char *nick; /* current nickname */
char *nick_modes; /* nick modes */
char *prefix; /* nick prefix allowed (from msg 005) */
time_t reconnect_start; /* this time + delay = reconnect time */
int reconnect_join; /* 1 if channels opened to rejoin */
int is_away; /* 1 is user is marked as away */
@@ -339,6 +346,10 @@ struct t_irc_ignore
extern t_irc_command irc_commands[];
extern t_irc_server *irc_servers;
#ifdef HAVE_GNUTLS
extern const int gnutls_cert_type_prio[];
extern const int gnutls_prot_prio[];
#endif
extern t_irc_message *recv_msgq, *msgq_last_msg;
extern int check_away;
extern t_irc_dcc *dcc_list;
@@ -352,115 +363,111 @@ extern t_irc_ignore *irc_last_ignore;
/* server functions (irc-server.c) */
extern void server_init (t_irc_server *);
extern int server_init_with_url (char *, t_irc_server *);
extern t_irc_server *server_alloc ();
extern void server_outqueue_free_all (t_irc_server *);
extern void server_destroy (t_irc_server *);
extern void server_free (t_irc_server *);
extern void server_free_all ();
extern t_irc_server *server_new (char *, int, int, int, int, char *, int, int, int,
char *, char *, char *, char *, char *, char *,
char *, char *, int, char *, int, char *);
extern char *server_get_charset_decode_iso (t_irc_server *);
extern char *server_get_charset_decode_utf (t_irc_server *);
extern char *server_get_charset_encode (t_irc_server *);
extern int server_send (t_irc_server *, char *, int);
extern void server_outqueue_send (t_irc_server *);
extern void server_sendf (t_irc_server *, char *, ...);
extern void server_parse_message (char *, char **, char **, char **);
extern void server_recv (t_irc_server *);
extern void server_child_read (t_irc_server *);
extern int server_connect (t_irc_server *);
extern void server_reconnect (t_irc_server *);
extern void server_auto_connect (int, int);
extern void server_disconnect (t_irc_server *, int);
extern void server_disconnect_all ();
extern t_irc_server *server_search (char *);
extern int server_get_number_connected ();
extern void server_get_number_buffer (t_irc_server *, int *, int *);
extern int server_name_already_exists (char *);
extern void server_remove_away ();
extern void server_check_away ();
extern void server_set_away (t_irc_server *, char *, int);
extern int server_get_default_notify_level (t_irc_server *);
extern void server_set_default_notify_level (t_irc_server *, int);
extern void server_print_log (t_irc_server *);
/* proxy functions (irc-server.c) */
extern void convbase64_8x3_to_6x4(char *from, char* to);
extern void base64encode(char *from, char *to);
extern int pass_httpproxy(int, char*, int);
extern int resolve(char *hostname, char *ip, int *version);
extern int pass_socks4proxy(int, char*, int, char*);
extern int pass_socks5proxy(int, char*, int);
extern int pass_proxy(int, char*, int, char*);
extern void irc_server_init (t_irc_server *);
extern int irc_server_init_with_url (char *, t_irc_server *);
extern t_irc_server *irc_server_alloc ();
extern void irc_server_outqueue_free_all (t_irc_server *);
extern void irc_server_destroy (t_irc_server *);
extern void irc_server_free (t_irc_server *);
extern void irc_server_free_all ();
extern t_irc_server *irc_server_new (char *, int, int, int, int, char *, int, int, int,
char *, char *, char *, char *, char *, char *,
char *, char *, int, char *, int, char *);
extern char *irc_server_get_charset_decode_iso (t_irc_server *);
extern char *irc_server_get_charset_decode_utf (t_irc_server *);
extern char *irc_server_get_charset_encode (t_irc_server *);
extern int irc_server_send (t_irc_server *, char *, int);
extern void irc_server_outqueue_send (t_irc_server *);
extern void irc_server_sendf (t_irc_server *, char *, ...);
extern void irc_server_parse_message (char *, char **, char **, char **);
extern void irc_server_recv (t_irc_server *);
extern void irc_server_child_read (t_irc_server *);
extern void irc_server_convbase64_8x3_to_6x4 (char *, char*);
extern void irc_server_base64encode (char *, char *);
extern int irc_server_pass_httpproxy (int, char*, int);
extern int irc_server_resolve (char *, char *, int *);
extern int irc_server_pass_socks4proxy (int, char*, int, char*);
extern int irc_server_pass_socks5proxy (int, char*, int);
extern int irc_server_pass_proxy (int, char*, int, char*);
extern int irc_server_connect (t_irc_server *);
extern void irc_server_reconnect (t_irc_server *);
extern void irc_server_auto_connect (int, int);
extern void irc_server_disconnect (t_irc_server *, int);
extern void irc_server_disconnect_all ();
extern t_irc_server *irc_server_search (char *);
extern int irc_server_get_number_connected ();
extern void irc_server_get_number_buffer (t_irc_server *, int *, int *);
extern int irc_server_name_already_exists (char *);
extern void irc_server_remove_away ();
extern void irc_server_check_away ();
extern void irc_server_set_away (t_irc_server *, char *, int);
extern int irc_server_get_default_notify_level (t_irc_server *);
extern void irc_server_set_default_notify_level (t_irc_server *, int);
extern void irc_server_print_log (t_irc_server *);
/* channel functions (irc-channel.c) */
extern t_irc_channel *channel_new (t_irc_server *, int, char *);
extern void channel_free (t_irc_server *, t_irc_channel *);
extern void channel_free_all (t_irc_server *);
extern t_irc_channel *channel_search (t_irc_server *, char *);
extern t_irc_channel *channel_search_any (t_irc_server *, char *);
extern t_irc_channel *channel_search_any_without_buffer (t_irc_server *, char *);
extern t_irc_channel *channel_search_dcc (t_irc_server *, char *);
extern int string_is_channel (char *);
extern char *channel_get_charset_decode_iso (t_irc_server *, t_irc_channel *);
extern char *channel_get_charset_decode_utf (t_irc_server *, t_irc_channel *);
extern char *channel_get_charset_encode (t_irc_server *, t_irc_channel *);
extern void channel_remove_away (t_irc_channel *);
extern void channel_check_away (t_irc_server *, t_irc_channel *, int);
extern void channel_set_away (t_irc_channel *, char *, int);
extern int channel_create_dcc (t_irc_dcc *);
extern int channel_get_notify_level (t_irc_server *, t_irc_channel *);
extern void channel_set_notify_level (t_irc_server *, t_irc_channel *, int);
extern void channel_print_log (t_irc_channel *);
extern t_irc_channel *irc_channel_new (t_irc_server *, int, char *);
extern void irc_channel_free (t_irc_server *, t_irc_channel *);
extern void irc_channel_free_all (t_irc_server *);
extern t_irc_channel *irc_channel_search (t_irc_server *, char *);
extern t_irc_channel *irc_channel_search_any (t_irc_server *, char *);
extern t_irc_channel *irc_channel_search_any_without_buffer (t_irc_server *, char *);
extern t_irc_channel *irc_channel_search_dcc (t_irc_server *, char *);
extern int irc_channel_is_channel (char *);
extern void irc_channel_remove_away (t_irc_channel *);
extern void irc_channel_check_away (t_irc_server *, t_irc_channel *, int);
extern void irc_channel_set_away (t_irc_channel *, char *, int);
extern int irc_channel_create_dcc (t_irc_dcc *);
extern int irc_channel_get_notify_level (t_irc_server *, t_irc_channel *);
extern void irc_channel_set_notify_level (t_irc_server *, t_irc_channel *, int);
extern void irc_channel_add_nick_speaking (t_irc_channel *, char *);
extern void irc_channel_print_log (t_irc_channel *);
/* nick functions (irc-nick.c) */
extern int nick_find_color (t_irc_nick *);
extern t_irc_nick *nick_new (t_irc_server *, t_irc_channel *, char *,
int, int, int, int, int);
extern void nick_resort (t_irc_channel *, t_irc_nick *);
extern void nick_change (t_irc_channel *, t_irc_nick *, char *);
extern void nick_free (t_irc_channel *, t_irc_nick *);
extern void nick_free_all (t_irc_channel *);
extern t_irc_nick *nick_search (t_irc_channel *, char *);
extern void nick_count (t_irc_channel *, int *, int *, int *, int *, int *);
extern int nick_get_max_length (t_irc_channel *);
extern void nick_set_away (t_irc_channel *, t_irc_nick *, int);
extern void nick_print_log (t_irc_nick *);
extern int irc_nick_find_color (t_irc_nick *);
extern t_irc_nick *irc_nick_new (t_irc_server *, t_irc_channel *, char *,
int, int, int, int, int, int);
extern void irc_nick_resort (t_irc_channel *, t_irc_nick *);
extern void irc_nick_change (t_irc_channel *, t_irc_nick *, char *);
extern void irc_nick_free (t_irc_channel *, t_irc_nick *);
extern void irc_nick_free_all (t_irc_channel *);
extern t_irc_nick *irc_nick_search (t_irc_channel *, char *);
extern void irc_nick_count (t_irc_channel *, int *, int *, int *, int *, int *);
extern int irc_nick_get_max_length (t_irc_channel *);
extern void irc_nick_set_away (t_irc_channel *, t_irc_nick *, int);
extern void irc_nick_print_log (t_irc_nick *);
/* mode functions (irc-mode.c) */
extern void irc_mode_channel_set (t_irc_channel *, char *);
extern void irc_mode_user_set (t_irc_server *, char *);
extern int irc_mode_nick_prefix_allowed (t_irc_server *, char);
/* DCC functions (irc-dcc.c) */
extern void dcc_redraw (int);
extern void dcc_free (t_irc_dcc *);
extern void dcc_close (t_irc_dcc *, int);
extern void dcc_chat_remove_channel (t_irc_channel *);
extern void dcc_accept (t_irc_dcc *);
extern void dcc_accept_resume (t_irc_server *, char *, int, unsigned long);
extern void dcc_start_resume (t_irc_server *, char *, int, unsigned long);
extern t_irc_dcc *dcc_alloc ();
extern t_irc_dcc *dcc_add (t_irc_server *, int, unsigned long, int, char *, int,
char *, char *, unsigned long);
extern void dcc_send_request (t_irc_server *, int, char *, char *);
extern void dcc_chat_sendf (t_irc_dcc *, char *, ...);
extern void dcc_file_send_fork (t_irc_dcc *);
extern void dcc_file_recv_fork (t_irc_dcc *);
extern void dcc_handle ();
extern void dcc_end ();
extern void dcc_print_log ();
extern void irc_dcc_redraw (int);
extern void irc_dcc_free (t_irc_dcc *);
extern void irc_dcc_close (t_irc_dcc *, int);
extern void irc_dcc_chat_remove_channel (t_irc_channel *);
extern void irc_dcc_accept (t_irc_dcc *);
extern void irc_dcc_accept_resume (t_irc_server *, char *, int, unsigned long);
extern void irc_dcc_start_resume (t_irc_server *, char *, int, unsigned long);
extern t_irc_dcc *irc_dcc_alloc ();
extern t_irc_dcc *irc_dcc_add (t_irc_server *, int, unsigned long, int, char *, int,
char *, char *, unsigned long);
extern void irc_dcc_send_request (t_irc_server *, int, char *, char *);
extern void irc_dcc_chat_sendf (t_irc_dcc *, char *, ...);
extern void irc_dcc_file_send_fork (t_irc_dcc *);
extern void irc_dcc_file_recv_fork (t_irc_dcc *);
extern void irc_dcc_handle ();
extern void irc_dcc_end ();
extern void irc_dcc_print_log ();
/* IRC display (irc-diplay.c) */
extern void irc_find_context (t_irc_server *, t_irc_channel *,
t_gui_window **, t_gui_buffer **);
extern void irc_display_hide_password (char *, int);
extern void irc_display_prefix (t_irc_server *, t_gui_buffer *, char *);
extern void irc_display_nick (t_gui_buffer *, t_irc_nick *, char *, int,
int, int, int);
@@ -471,140 +478,141 @@ extern void irc_display_server (t_irc_server *ptr_server);
/* IRC commands issued by user (irc-send.c) */
extern void irc_login (t_irc_server *);
extern void irc_hide_password (char *, int);
extern int irc_cmd_send_admin (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_ame (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_amsg (t_irc_server *, t_irc_channel *, char *);
extern void irc_send_login (t_irc_server *);
extern int irc_send_cmd_admin (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_ame (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_amsg (t_irc_server *, t_irc_channel *, char *);
extern void irc_send_away (t_irc_server *, char *);
extern int irc_cmd_send_away (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_ban (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_ctcp (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_cycle (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_dehalfop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_deop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_devoice (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_die (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_halfop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_info (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_invite (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_ison (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_join (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_kick (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_kickban (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_kill (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_links (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_list (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_lusers (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_me (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_mode (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_away (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_ban (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_ctcp (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_cycle (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_dehalfop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_deop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_devoice (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_die (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_halfop (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_info (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_invite (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_ison (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_join (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_kick (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_kickban (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_kill (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_links (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_list (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_lusers (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_me (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_mode (t_irc_server *, t_irc_channel *, char *);
extern void irc_send_mode_nicks (t_irc_server *, char *, char *, char *, int, char **);
extern int irc_cmd_send_motd (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_msg (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_names (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_nick (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_notice (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_op (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_oper (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_part (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_ping (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_pong (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_query (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_motd (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_msg (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_names (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_nick (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_notice (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_op (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_oper (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_part (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_ping (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_pong (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_query (t_irc_server *, t_irc_channel *, char *);
extern void irc_send_quit_server (t_irc_server *, char *);
extern int irc_cmd_send_quit (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_quote (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_rehash (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_restart (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_service (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_servlist (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_squery (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_squit (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_stats (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_summon (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_time (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_topic (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_trace (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_unban (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_userhost (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_users (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_version (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_voice (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_cmd_send_wallops (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_who (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_whois (t_irc_server *, t_irc_channel *, char *);
extern int irc_cmd_send_whowas (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_quit (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_quote (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_rehash (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_restart (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_service (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_servlist (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_squery (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_squit (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_stats (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_summon (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_time (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_topic (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_trace (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_unban (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_userhost (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_users (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_version (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_voice (t_irc_server *, t_irc_channel *, int, char **);
extern int irc_send_cmd_wallops (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_who (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_whois (t_irc_server *, t_irc_channel *, char *);
extern int irc_send_cmd_whowas (t_irc_server *, t_irc_channel *, char *);
/* IRC commands executed when received from server (irc-recv.c) */
extern int irc_is_highlight (char *, char *);
extern int irc_recv_is_highlight (char *, char *);
extern int irc_recv_command (t_irc_server *, char *, char *, char *, char *);
extern int irc_cmd_recv_error (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_invite (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_join (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_kick (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_kill (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_mode (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_nick (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_notice (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_part (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_ping (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_pong (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_privmsg (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_quit (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_server_mode_reason (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_server_msg (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_server_reply (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_topic (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_wallops (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_001 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_221 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_301 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_302 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_303 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_305 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_306 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_whois_nick_msg (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_310 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_311 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_312 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_314 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_315 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_317 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_319 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_321 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_322 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_323 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_324 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_329 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_331 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_332 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_333 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_338 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_341 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_344 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_345 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_348 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_349 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_351 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_352 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_353 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_365 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_366 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_367 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_368 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_378 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_433 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_438 (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_671 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_error (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_invite (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_join (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_kick (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_kill (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_mode (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_nick (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_notice (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_part (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_ping (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_pong (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_privmsg (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_quit (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_server_mode_reason (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_server_msg (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_server_reply (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_topic (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_wallops (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_001 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_005 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_221 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_301 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_302 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_303 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_305 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_306 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_whois_nick_msg (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_310 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_311 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_312 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_314 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_315 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_317 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_319 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_321 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_322 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_323 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_324 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_327 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_329 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_331 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_332 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_333 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_338 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_341 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_344 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_345 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_348 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_349 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_351 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_352 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_353 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_365 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_366 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_367 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_368 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_432 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_433 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_438 (t_irc_server *, char *, char *, char *);
extern int irc_recv_cmd_671 (t_irc_server *, char *, char *, char *);
/* ignore functions (irc-ignore.c) */
extern int ignore_check (char *, char *, char *, char *);
extern t_irc_ignore *ignore_add (char *, char *, char *, char *);
extern t_irc_ignore *ignore_add_from_config (char *);
extern void ignore_free_all ();
extern int ignore_search_free (char *, char *, char *, char *);
extern int ignore_search_free_by_number (int);
extern void ignore_print_log ();
extern int irc_ignore_check (char *, char *, char *, char *);
extern t_irc_ignore *irc_ignore_add (char *, char *, char *, char *);
extern t_irc_ignore *irc_ignore_add_from_config (char *);
extern void irc_ignore_free_all ();
extern int irc_ignore_search_free (char *, char *, char *, char *);
extern int irc_ignore_search_free_by_number (int);
extern void irc_ignore_print_log ();
#endif /* irc.h */
+45
View File
@@ -0,0 +1,45 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
SET(LIB_PLUGINS_SRC weechat-plugin.h plugins.h plugins.c plugins-interface.c
plugins-config.h plugins-config.c)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
ADD_LIBRARY(weechat_plugins STATIC ${LIB_PLUGINS_SRC})
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckFunctionExists)
INCLUDE(CheckLibraryExists)
IF(NOT DISABLE_ASPELL)
# Check for aspell libraries
FIND_PACKAGE(Aspell)
IF(ASPELL_FOUND)
ADD_SUBDIRECTORY( aspell )
ENDIF(ASPELL_FOUND)
ENDIF(NOT DISABLE_ASPELL)
IF (NOT DISABLE_CHARSET)
# Check for iconv support.
FIND_PACKAGE(Iconv)
IF(ICONV_FOUND)
ADD_DEFINITIONS( -DHAVE_ICONV )
ADD_SUBDIRECTORY( charset )
ENDIF(ICONV_FOUND)
ENDIF(NOT DISABLE_CHARSET)
ADD_SUBDIRECTORY( scripts )
+26
View File
@@ -0,0 +1,26 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
ADD_LIBRARY(aspell MODULE weechat-aspell.h weechat-aspell.c)
SET_TARGET_PROPERTIES(aspell PROPERTIES PREFIX "")
IF(ASPELL_FOUND)
INCLUDE_DIRECTORIES(${ASPELL_INCLUDE_PATH})
TARGET_LINK_LIBRARIES(aspell ${ASPELL_LIBRARY})
ENDIF(ASPELL_FOUND)
INSTALL(TARGETS aspell LIBRARY DESTINATION lib/${PROJECT_NAME}/plugins)
+30
View File
@@ -0,0 +1,30 @@
# Copyright (c) 2003-2007 FlashCode <flashcode@flashtux.org>
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
ADD_LIBRARY(charset MODULE weechat-charset.h weechat-charset.c)
SET_TARGET_PROPERTIES(charset PROPERTIES PREFIX "")
IF(ICONV_FOUND)
INCLUDE_DIRECTORIES(${ICONV_INCLUDE_PATH})
IF(ICONV_LIBRARY)
TARGET_LINK_LIBRARIES(charset ${ICONV_LIBRARY})
ELSE(ICONV_LIBRARY)
TARGET_LINK_LIBRARIES(charset)
ENDIF(ICONV_LIBRARY)
ENDIF(ICONV_FOUND)
INSTALL(TARGETS charset LIBRARY DESTINATION lib/${PROJECT_NAME}/plugins)
+2 -4
View File
@@ -234,11 +234,9 @@ weechat_charset_parse_irc_msg (char *message, char **nick, char **command,
pos2++;
while (pos2[0] == ' ')
pos2++;
if (pos2[0] == ':')
*pos_args = pos2 + 1;
else
*pos_args = pos2;
if (pos2[0] != ':')
{
*pos_args = pos2;
if ((pos2[0] == '#') || (pos2[0] == '&')
|| (pos2[0] == '+') || (pos2[0] == '!'))
{
+6 -6
View File
@@ -833,7 +833,7 @@ weechat_plugin_set_config (t_weechat_plugin *plugin, char *option, char *value)
{
strncpy (server_name, option, pos - option);
server_name[pos - option] = '\0';
ptr_server = server_search (server_name);
ptr_server = irc_server_search (server_name);
free (server_name);
if (ptr_server)
return (config_set_server_value (ptr_server, pos + 1, value) == 0);
@@ -899,8 +899,8 @@ weechat_plugin_set_plugin_config (t_weechat_plugin *plugin, char *option, char *
/*
* weechat_plugin_get_server_info: get list of server info
* WARNING: caller has to free structure returned
* by this function after use
* WARNING: caller has to free structure returned
* by this function after use
*/
t_plugin_server_info *
@@ -1027,7 +1027,7 @@ weechat_plugin_get_channel_info (t_weechat_plugin *plugin, char *server)
if (!plugin || !server || !server[0])
return NULL;
ptr_server = server_search (server);
ptr_server = irc_server_search (server);
if (!ptr_server)
return NULL;
@@ -1111,11 +1111,11 @@ weechat_plugin_get_nick_info (t_weechat_plugin *plugin, char *server, char *chan
if (!plugin || !server || !server[0] || !channel || !channel[0])
return NULL;
ptr_server = server_search (server);
ptr_server = irc_server_search (server);
if (!ptr_server)
return NULL;
ptr_channel = channel_search (ptr_server, channel);
ptr_channel = irc_channel_search (ptr_server, channel);
if (!ptr_channel)
return NULL;

Some files were not shown because too many files have changed in this diff Show More