mirror of
https://github.com/weechat/weechat.git
synced 2026-06-20 01:54:46 +02:00
Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2c31a11aeb | |||
| 1d2a83b055 | |||
| 915ea408f0 | |||
| c9a469f51b | |||
| 69cb87251e | |||
| 8bcbc3dcae | |||
| dcb3b6fc7e | |||
| 16717f8322 | |||
| dc38b59849 | |||
| 7d91cdcbb3 | |||
| 885fe7434f | |||
| 84677f2835 | |||
| c20a3fdfa4 | |||
| f97a5555ca | |||
| 59bd0b825d | |||
| 38bf163c17 | |||
| 09a36a5d8e | |||
| 10f0236ea9 | |||
| 6d7afb96c1 | |||
| 48941e3646 | |||
| 72cb070ee4 | |||
| 390a097718 | |||
| f4733b970a | |||
| b80086cfac | |||
| 984eaaf826 | |||
| 0dddf86ab7 | |||
| c057937c7b | |||
| 938cc50f5e | |||
| aac1a0a08c | |||
| b77e441dc4 | |||
| f9279df092 | |||
| d84b1fa58f | |||
| 12941227d7 | |||
| 25f79c7bba | |||
| ac3f6dfa7b | |||
| 65704c6fea | |||
| 85c32048cf | |||
| ffbc4c0b0c | |||
| 4e138f3dca | |||
| df66856a28 | |||
| 6950745079 | |||
| 3b6bf81ad6 | |||
| fd3e94070a | |||
| 0708f1a571 | |||
| 3ea696bbc0 | |||
| 57e00428ca | |||
| 555a4191d4 | |||
| a1f09df80f | |||
| c8c5ff3d68 | |||
| e2e384df49 | |||
| 507a5c17c0 | |||
| 4f23a3c621 | |||
| ba618d3276 | |||
| 2f1af3b53e | |||
| 10a170bf7d | |||
| 7a3ee901a4 | |||
| e469f0ef48 | |||
| ba65f5ec30 | |||
| 7779b2f78e | |||
| edcc01bcf0 | |||
| fe4ca01615 | |||
| 62fabde373 | |||
| 8758555b19 | |||
| d4ec2e46aa | |||
| fd9512bbbc | |||
| 176198fdc6 | |||
| 97d5c9bd0e | |||
| 13949e2ace |
@@ -1,17 +1,20 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
WeeChat known bugs, 2003-11-03
|
||||
WeeChat known bugs, 2004-02-07
|
||||
|
||||
- ./configure does not check that Curses header is installed
|
||||
- ./configure does not check that Curses headers are installed
|
||||
- ./configure does not check that Gtk 2.0 libraries are installed
|
||||
- ./configure does not check that Perl headers & libraries are installed
|
||||
- too much nicks in the channel (> height of window) => display bug
|
||||
- some IRC commands are marked as 'unknown' when received
|
||||
(IRC protocol is under dev!)
|
||||
- intercept Ctrl-C (do not quit immediately if Ctrl-C pressed!)
|
||||
- too much opened channels => display bug
|
||||
- when kicked, channel is not prefixed by '(' and sufixed by ')'
|
||||
- when function key (non used by WeeChat) is pressed, prompt is deleted
|
||||
- when quitting WeeChat term title is not restored (if look_set_title is ON)
|
||||
- command name for /server can not contain spaces
|
||||
- wrong alias is not created and not saved when quitting WeeChat
|
||||
- when many WeeChat are launched, log file is not properly written (cleared by
|
||||
each WeeChat at startup)
|
||||
- display problems with old Konsole versions (Kde terminal)
|
||||
|
||||
@@ -1,9 +1,33 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2003-11-03
|
||||
ChangeLog - 2004-02-07
|
||||
|
||||
|
||||
Version 0.0.5 (2004-02-07):
|
||||
* /set command to modify config options when WeeChat is running
|
||||
* fixed look_nicklist config option, now enables/disables nicklist
|
||||
* secured code to prevent buffer overflows and memory leaks
|
||||
* fixed QUIT IRC command: now sent to all connected servers (not only current)
|
||||
* URL command line parameter to connect to server(s)
|
||||
* new Perl script function to display message in info bar ("IRC::print_infobar")
|
||||
* info bar highlight notifications
|
||||
* info bar timestamp is added to config ("look_infobar_timestamp")
|
||||
* added info bar (optional, "look_infobar" to enable it, "on" by default)
|
||||
* fixed crash with /oper command
|
||||
* for default config file, nick is now based on un*x username (thanks to Witukind)
|
||||
* fixed crash when config file cannot be written
|
||||
* -c (or --config) command line parameter added to see config file options
|
||||
* highlight action messages
|
||||
|
||||
Version 0.0.4 (2004-01-01):
|
||||
* Perl plugin, with auto-load
|
||||
* when private window is created (another user is talking), WeeChat does not
|
||||
switch to this window
|
||||
* highlight when our nick is written in a channel/private window
|
||||
* ctrl-C now intercepted (ignored)
|
||||
* debug messages can be enabled via ./configure --enbale-debug option
|
||||
|
||||
Version 0.0.3 (2003-11-03):
|
||||
* ./configure script to build WeeChat
|
||||
* nicks are now correctly sorted (op, halfop, voice, other)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
WeeChat FAQ, 2003-10-27
|
||||
WeeChat FAQ, 2004-01-01
|
||||
|
||||
|
||||
1- Compiling
|
||||
@@ -11,9 +11,13 @@ WeeChat FAQ, 2003-10-27
|
||||
|
||||
2- Using WeeChat
|
||||
|
||||
2.1 Why using WeeChat ? Irssi and xchat are so good...
|
||||
2.1 Why using WeeChat ? X-Chat and Irssi are so good...
|
||||
2.2 I've launched WeeChat, but I'm lost, what can I do?
|
||||
2.3 How can I customize key bindings?
|
||||
2.4 How can I load Perl scripts?
|
||||
Are Perl scripts compatible with X-chat or/and Irssi ?
|
||||
2.5 How can I load Python scripts?
|
||||
2.6 How can I load Ruby scripts?
|
||||
|
||||
3- Development
|
||||
|
||||
@@ -55,7 +59,7 @@ WeeChat FAQ, 2003-10-27
|
||||
\------------------------------------------------------------------------------/
|
||||
|
||||
|
||||
2.1 Why using WeeChat ? Irssi and xchat are so good...
|
||||
2.1 Why using WeeChat ? X-Chat and Irssi are so good...
|
||||
|
||||
Because WeeChat is very light and has new features.
|
||||
Some new features:
|
||||
@@ -77,6 +81,26 @@ WeeChat FAQ, 2003-10-27
|
||||
Today you can't do that. This will be available in a future version.
|
||||
|
||||
|
||||
2.4 How can I load Perl scripts?
|
||||
Are Perl scripts compatible with X-chat or/and Irssi ?
|
||||
|
||||
Yes, you can use /perl command to launch scripts
|
||||
(default path is ~/.weechat/perl).
|
||||
Note that scripts in ~/.weechat/perl/autoload are automatically loaded
|
||||
when WeeChat is starting up.
|
||||
WeeChat perl scripts are compatible with X-Chat, not with Irssi, sorry ;)
|
||||
|
||||
|
||||
2.5 How can I load Python scripts?
|
||||
|
||||
Today Python interface is not developed, so can't load any Python script.
|
||||
|
||||
|
||||
2.6 How can I load Ruby scripts?
|
||||
|
||||
Today Ruby interface is not developed, so can't load any Ruby script.
|
||||
|
||||
|
||||
/------------------------------------------------------------------------------\
|
||||
| 3- Development |
|
||||
\------------------------------------------------------------------------------/
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
* FlashCode, 2004-02-07
|
||||
|
||||
WeeChat 0.0.5 released.
|
||||
|
||||
* FlashCode, 2004-01-01
|
||||
|
||||
WeeChat 0.0.4 released.
|
||||
|
||||
* FlashCode, 2003-11-03
|
||||
|
||||
WeeChat 0.0.3 released.
|
||||
|
||||
@@ -22,7 +22,7 @@ Features
|
||||
Copyright
|
||||
---------
|
||||
|
||||
WeeChat (c) Copyright 2003
|
||||
WeeChat (c) Copyright 2004
|
||||
by: FlashCode <flashcode@flashtux.org>
|
||||
Xahlexx <xahlex@tuxisland.org>
|
||||
Bounga <bounga@altern.org>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
TODO - 2003-11-03
|
||||
TODO - 2004-02-07
|
||||
|
||||
Legend:
|
||||
# done
|
||||
@@ -10,34 +10,37 @@ Legend:
|
||||
? is this really necessary?
|
||||
|
||||
|
||||
v0.0.3:
|
||||
v0.0.5:
|
||||
------
|
||||
|
||||
* General:
|
||||
# use of ./configure script for building WeeChat
|
||||
|
||||
* IRC protocol:
|
||||
# implement RFC 2812
|
||||
+ "/mode" command: change the user/channels modes
|
||||
# "/wallops" command: write the same string to all the
|
||||
persons with the flag +w enable
|
||||
# debug messages can be enabled via ./configure --enbale-debug option
|
||||
+ Solaris version
|
||||
|
||||
* WeeChat commands:
|
||||
+ "/set" command: allow the user to set the WeeChat variables
|
||||
under WeeChat without editing the config file (colours, time
|
||||
# "/set" command: allow the user to set the WeeChat variables
|
||||
under WeeChat without editing the config file (colors, time
|
||||
format, etc)
|
||||
|
||||
|
||||
* Interface:
|
||||
+ internationalization (traduce WeeChat in many languages)
|
||||
# info bar
|
||||
# add clock
|
||||
|
||||
* Configuration:
|
||||
# do not stop program if problem with options in config file
|
||||
|
||||
+ add missing options for config file
|
||||
+ add key bindings to config file
|
||||
|
||||
|
||||
Future versions:
|
||||
---------------
|
||||
|
||||
* General:
|
||||
- Windows version
|
||||
- *BSD version
|
||||
|
||||
* IRC protocol:
|
||||
+ "/mode" command: change the user/channels modes
|
||||
- "/dcc" command (for chat and sending/receiving files)
|
||||
- complete "/list" command: add regexp search, display only channels that
|
||||
match regexp
|
||||
@@ -69,7 +72,6 @@ Future versions:
|
||||
if WeeChat is running for long time, a lot of memory is used!)
|
||||
- improve completion (for example complete command parameters when possible)
|
||||
- understand incomplete commands if unambigous (for example: /he for /help is ok)
|
||||
- add clock (in status bar?)
|
||||
- log chats to file
|
||||
? Qt GUI
|
||||
|
||||
@@ -80,14 +82,11 @@ Future versions:
|
||||
- IPv6 protocol implementation
|
||||
|
||||
* Configuration:
|
||||
- add key bindings to config file
|
||||
- add missing options for config file
|
||||
- load config file after GUI (so init values by default (colors, ...) before
|
||||
loading config)
|
||||
|
||||
* Plugins:
|
||||
- add Perl plugin
|
||||
- add Python plugin
|
||||
- add Ruby plugin
|
||||
- "/load" and "/unload" commands to (un)load extension scripts
|
||||
(perl, python, ruby, ...)
|
||||
- Python plugin
|
||||
- "/python load" and "/python unload" commands to (un)load Python scripts
|
||||
- Ruby plugin
|
||||
- "/ruby load" and "/ruby unload" commands to (un)load Ruby scripts
|
||||
|
||||
+42
-15
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -19,10 +19,10 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.56)
|
||||
AC_INIT(WeeChat, 0.0.3, flashcode@flashtux.org)
|
||||
AC_INIT(WeeChat, 0.0.5, flashcode@flashtux.org)
|
||||
AC_CONFIG_SRCDIR([src/common/weechat.c])
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AM_INIT_AUTOMAKE([weechat], [0.0.3])
|
||||
AM_INIT_AUTOMAKE([weechat], [0.0.5])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
@@ -38,7 +38,7 @@ AC_CHECK_LIB([curses], [initscr], LIBCURSES_FOUND=1, LIBCURSES_FOUND=0)
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS([arpa/inet.h libintl.h limits.h locale.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
||||
AC_CHECK_HEADERS([arpa/inet.h libintl.h limits.h locale.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h sys/types.h unistd.h pwd.h errno.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_TIME
|
||||
@@ -51,29 +51,34 @@ AC_FUNC_SELECT_ARGTYPES
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_FUNCS([gethostbyname gethostname gettimeofday inet_ntoa memset mkdir select setlocale socket strcasecmp strchr strdup strncasecmp strpbrk strrchr strstr uname])
|
||||
|
||||
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
||||
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
||||
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
||||
|
||||
AC_ARG_ENABLE(curses, [ --disable-curses Turn off Curses interface (default=auto)],,enable_curses=yes)
|
||||
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=yes,enable_gtk=no)
|
||||
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=yes,enable_qt=no)
|
||||
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=yes,enable_perl=no)
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug Turn on debugging messages (default=no)],enable_debug=yes,enable_debug=no)
|
||||
|
||||
enable_plugins=no
|
||||
enable_perl=no
|
||||
PERL_CFLAGS=
|
||||
enable_python=no
|
||||
enable_plugins="no"
|
||||
enable_python="no"
|
||||
PYTHON_CFLAGS=
|
||||
enable_ruby=no
|
||||
enable_ruby="no"
|
||||
RUBY_CFLAGS=
|
||||
enable_debug=no
|
||||
DEBUG_CFLAGS=
|
||||
|
||||
AM_CONDITIONAL(GUI_CURSES, test "$enable_curses" = "yes")
|
||||
AM_CONDITIONAL(GUI_GTK, test "$enable_gtk" = "yes")
|
||||
AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
||||
AM_CONDITIONAL(GUI_CURSES, test "$enable_curses" = "yes")
|
||||
AM_CONDITIONAL(GUI_GTK, test "$enable_gtk" = "yes")
|
||||
AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
||||
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
||||
# AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
||||
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
||||
|
||||
if test "x$enable_curses" = "xyes" ; then
|
||||
if test "$LIBCURSES_FOUND" = "0" ; then
|
||||
AC_MSG_ERROR([Curses library not found! Install Curses library or run ./configure with --disable-curses parameter.])
|
||||
fi
|
||||
CURSES_LIBS=-lcurses
|
||||
CURSES_LIBS="-lcurses"
|
||||
AC_SUBST(CURSES_LIBS)
|
||||
fi
|
||||
|
||||
@@ -87,12 +92,34 @@ if test "x$enable_gtk" = "xyes" ; then
|
||||
AC_SUBST(GTK_LIBS)
|
||||
fi
|
||||
|
||||
PLUGINS_LIBS=
|
||||
|
||||
if test "x$enable_perl" = "xyes" ; then
|
||||
enable_plugins="yes"
|
||||
PLUGINS_LIBS="$PLUGINS_LIBS ../../plugins/perl/lib_weechat_perl.a `perl -MExtUtils::Embed -e ldopts`"
|
||||
PERL_CFLAGS=`perl -MExtUtils::Embed -e ccopts`
|
||||
AC_SUBST(PERL_CFLAGS)
|
||||
AC_DEFINE(PLUGIN_PERL)
|
||||
fi
|
||||
|
||||
if test "x$enable_plugins" = "xyes" ; then
|
||||
AC_DEFINE(PLUGINS)
|
||||
fi
|
||||
|
||||
AC_SUBST(PLUGINS_LIBS)
|
||||
|
||||
if test "x$enable_debug" = "xyes" ; then
|
||||
AC_DEFINE(DEBUG)
|
||||
fi
|
||||
|
||||
CFLAGS="-Wall -W -pipe -O2"
|
||||
|
||||
AC_OUTPUT([Makefile
|
||||
src/Makefile
|
||||
src/common/Makefile
|
||||
src/irc/Makefile
|
||||
src/plugins/Makefile
|
||||
src/plugins/perl/Makefile
|
||||
src/gui/Makefile
|
||||
src/gui/curses/Makefile
|
||||
src/gui/gtk/Makefile
|
||||
|
||||
Vendored
+12
@@ -1,3 +1,15 @@
|
||||
weechat (0.0.5-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.5, see ChangeLog for detail.
|
||||
|
||||
-- FlashCode <flashcode@flashtux.org> Sat, 07 Feb 2004 20:30:00 +0200
|
||||
|
||||
weechat (0.0.4-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.4, see ChangeLog for detail.
|
||||
|
||||
-- FlashCode <flashcode@flashtux.org> Thu, 01 Jan 2004 13:00:00 +0200
|
||||
|
||||
weechat (0.0.3-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.3, see ChangeLog for detail.
|
||||
|
||||
Vendored
+1
-1
@@ -2,7 +2,7 @@ Source: weechat
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: FlashCode <flashcode@flashtux.org>
|
||||
Build-Depends: debhelper (>> 4.0.0), libncurses5 (>= 5.2.20020112a-7)
|
||||
Build-Depends: debhelper (>> 4.0.0), libncurses5 (>= 5.2.20020112a-7), perl (>= 5.6.0-16), libperl-dev
|
||||
Standards-Version: 3.5.8
|
||||
|
||||
Package: weechat
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
This package was debianized by FlashCode <flashcode@flashtux.org> on
|
||||
Mon, 03 Nov 2003 23:15:00 +0200.
|
||||
Sat, 07 Feb 2004 20:30:00 +0200.
|
||||
|
||||
It was downloaded from http://weechat.flashtux.org/download
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -17,7 +17,7 @@ endif
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
./configure --prefix=/usr --sysconfdir=/etc --enable-gtk
|
||||
./configure --prefix=/usr --sysconfdir=/etc --enable-perl --enable-gtk
|
||||
touch configure-stamp
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Copyright (c) 2003 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
all: weechat_doc_fr.texi weechat_doc_en.texi weechat_doc_pt.texi
|
||||
export LANG=fr_FR && makeinfo --html --no-split --number-sections weechat_doc_fr.texi
|
||||
export LANG=fr_FR && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_fr.texi >weechat_doc_fr.txt
|
||||
export LANG=en_EN && makeinfo --html --no-split --number-sections weechat_doc_en.texi
|
||||
export LANG=en_EN && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_en.texi >weechat_doc_en.txt
|
||||
export LANG=pt_PT && makeinfo --html --no-split --number-sections weechat_doc_pt.texi
|
||||
export LANG=pt_PT && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_pt.texi >weechat_doc_pt.txt
|
||||
export LANG=fr_FR && texi2pdf weechat_doc_fr.texi
|
||||
export LANG=en_EN && texi2pdf weechat_doc_en.texi
|
||||
export LANG=pt_PT && texi2pdf weechat_doc_pt.texi
|
||||
|
||||
clean:
|
||||
rm -rf weechat_doc_*.aux weechat_doc_*.cp weechat_doc_*.fn \
|
||||
weechat_doc_*.html weechat_doc_*.ky weechat_doc_*.log \
|
||||
weechat_doc_*.pdf weechat_doc_*.pg weechat_doc_*.toc \
|
||||
weechat_doc_*.tp weechat_doc_*.txt weechat_doc_*.vr
|
||||
@@ -0,0 +1,834 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_en.info
|
||||
@settitle WeeChat - fast, light and extensible IRC client
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (english version)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_en.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_en.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage en
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - User guide
|
||||
@subtitle Fast, light and extensible IRC client
|
||||
@subtitle Documentation for WeeChat v0.0.5-pre3 - January, 24 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
This manual documents WeeChat IRC client, it is part of WeeChat.@*
|
||||
@*
|
||||
Latest version of this document can be found on this page:@*
|
||||
@uref{http://weechat.flashtux.org/doc.php?lang=en}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
This document may be used under the terms the GNU General Public License
|
||||
version 2 or higher.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Page @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introduction, (dir), (dir)
|
||||
@menu
|
||||
* Introduction:: What is WeeChat ?
|
||||
* Installation:: WeeChat installation
|
||||
* Usage:: WeeChat usage
|
||||
* Extensions:: WeeChat extensions
|
||||
* Authors / Support:: Contact authors and get support
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introduction *******************************
|
||||
|
||||
@node Introduction, Installation, Top, Top
|
||||
@chapter Introduction
|
||||
|
||||
@menu
|
||||
* Description::
|
||||
* Pre-requisites::
|
||||
@end menu
|
||||
|
||||
@node Description, Pre-requisites, Introduction, Introduction
|
||||
@section Description
|
||||
|
||||
WeeChat (Wee Enhanced Environment for Chat) is a free IRC client, fast and light,
|
||||
designed for many operating systems.@*
|
||||
@*
|
||||
Main features are:
|
||||
@itemize @minus
|
||||
@item
|
||||
multi-servers connection
|
||||
@item
|
||||
many GUI (Graphical User Interface): Curses, Gtk and Qt
|
||||
@item
|
||||
small, fast and light
|
||||
@item
|
||||
customizable and extensible with scripts
|
||||
@item
|
||||
compliant with RFCs 1459, 2810, 2811, 2812, and 2813
|
||||
@item
|
||||
multi-platform (Gnu/Linux, *BSD, Windows and other)
|
||||
@item
|
||||
100% GPL, free software
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
WeeChat homepage is here:@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requisites, , Description, Introduction
|
||||
@section Pre-requisites
|
||||
|
||||
In order to install WeeChat, you @b{need}:@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
A running Gnu/Linux system (with compiler tools for source package)
|
||||
@item
|
||||
"root" privileges (to install WeeChat)
|
||||
@item
|
||||
According to GUI, one of the following libraries:
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: ncurses library,
|
||||
@item
|
||||
Gtk: *** GUI not developed ***,
|
||||
@item
|
||||
Qt: *** GUI not developed ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Installation *******************************
|
||||
|
||||
@node Installation, Usage, Introduction, Top
|
||||
@chapter Installation
|
||||
|
||||
@menu
|
||||
* Binary package::
|
||||
* Source package::
|
||||
* CVS sources::
|
||||
@end menu
|
||||
|
||||
@node Binary package, Source package, Installation, Installation
|
||||
@section Binary package
|
||||
|
||||
Binary packages are available for these distributions:
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (or any Debian compatible distribution)@*
|
||||
To install: @kbd{dpkg -i /path/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (or any RPM compatible distribution)@*
|
||||
To install: @kbd{rpm -i /path/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
To install: see Gentoo documentation
|
||||
@item
|
||||
*BSD (not available!)
|
||||
@item
|
||||
Slackware (not available!)
|
||||
@item
|
||||
Windows (not available!)
|
||||
@end itemize
|
||||
|
||||
where x.y.z is the version (for example 0.0.1)
|
||||
@*
|
||||
|
||||
@node Source package, CVS sources, Binary package, Installation
|
||||
@section Source package
|
||||
|
||||
All you have to do is to run in a console or a terminal:@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Nota: to build only some interfaces, you can give parameters
|
||||
to ./configure, type @kbd{./configure --help} for help about options.@*
|
||||
|
||||
Then get root privileges and install WeeChat:@*
|
||||
@kbd{su -}@*
|
||||
(enter root password)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node CVS sources, , Source package, Installation
|
||||
@section CVS sources
|
||||
|
||||
Warning: CVS sources are for advanced users: it may not compile or not be stable.
|
||||
You're warned!@*
|
||||
|
||||
To get CVS sources, issue these commands:@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(when prompted for a password, just press Enter key)@*
|
||||
|
||||
Execute this script:@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Then follow instructions for source package - @xref{Source package}.
|
||||
|
||||
|
||||
@c ********************************** Usage ***********************************
|
||||
|
||||
@node Usage, Extensions, Installation, Top
|
||||
@chapter Usage
|
||||
|
||||
@menu
|
||||
* Run WeeChat::
|
||||
* Config file::
|
||||
* Key bindings::
|
||||
* WeeChat commands::
|
||||
@end menu
|
||||
|
||||
@node Run WeeChat, Config file, Usage, Usage
|
||||
@section Run WeeChat
|
||||
|
||||
@subsection Command line parameters
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Display config file help (list of options)@*
|
||||
@item -h, --help
|
||||
Display help screen@*
|
||||
@item -l, --license
|
||||
Display WeeChat license@*
|
||||
@item -v, --version
|
||||
Display WeeChat version@*
|
||||
@end table
|
||||
|
||||
@subsection Run WeeChat
|
||||
|
||||
Just issue this command to run WeeChat:@*
|
||||
@kbd{weechat-curses} (for Curses front-end)@*
|
||||
or @kbd{weechat-gtk} (for Gtk front-end)@*
|
||||
or @kbd{weechat-qt} (for Qt front-end)@*
|
||||
|
||||
When you run WeeChat for the first time, a default configuration file is
|
||||
created, with default options.@*
|
||||
The default configuration file is: ~/.weechat/weechat.rc@*
|
||||
|
||||
You can edit this file at your convenience to configure WeeChat, or you can
|
||||
set parameters with @kbd{/set} command in WeeChat - @xref{WeeChat commands}.
|
||||
|
||||
@node Config file, Key bindings, Run WeeChat, Usage
|
||||
@section Config file
|
||||
|
||||
Here is a list of all options for config file:@*
|
||||
|
||||
@table @kbd
|
||||
@item look_set_title
|
||||
Set title for window (terminal for Curses GUI) with name & version@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_startup_logo
|
||||
Display WeeChat logo at startup@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_startup_version
|
||||
Display WeeChat version at startup@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_weechat_slogan
|
||||
WeeChat slogan (if empty, slogan is not used)@*
|
||||
Type: string (any string), default value: 'the geekest IRC client!'@*
|
||||
@item look_color_nicks
|
||||
Display nick names with different colors@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_color_actions
|
||||
Display actions with different colors@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_remove_colors_from_msgs
|
||||
Remove colors from incoming messages@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nicklist
|
||||
Display nicklist window (for channel windows)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nicklist_position
|
||||
Nicklist position (top, left, right (default), bottom)@*
|
||||
Type: string (values: 'left', 'right', 'top', 'bottom'), default value: 'right'@*
|
||||
@item look_nicklist_min_size
|
||||
Min size for nicklist (width or height, depending on look_nicklist_position (0 = no min size))@*
|
||||
Type: integer (values: between 0 and 100), default value: 0@*
|
||||
@item look_nicklist_max_size
|
||||
Max size for nicklist (width or height, depending on look_nicklist_position (0 = no max size; if min == max and > 0, then size is fixed))@*
|
||||
Type: integer (values: between 0 and 100), default value: 0@*
|
||||
@item look_no_nickname
|
||||
Text to display instead of nick when not connected@*
|
||||
Type: string (any string), default value: '-cmd-'@*
|
||||
@item look_nickmode
|
||||
Display nick mode ((half)op/voice) before each nick@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nickmode_empty
|
||||
Display space if nick mode is not (half)op/voice@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'off'@*
|
||||
@item look_nick_completor
|
||||
The string inserted after nick completion@*
|
||||
Type: string (any string), default value: ':'@*
|
||||
@item look_infobar
|
||||
Enable info bar@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_infobar_timestamp
|
||||
Timestamp for time in infobar@*
|
||||
Type: string (any string), default value: '%B, %A %d %G - %H:%M'@*
|
||||
@item look_infobar_delay_highlight
|
||||
Delay (in seconds) for highlight messages in infobar (0 = disable highlight notifications in infobar)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 7@*
|
||||
@item col_title
|
||||
Color for title bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_title_bg
|
||||
Background for title bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_chat
|
||||
Color for chat text@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_chat_time
|
||||
Color for time in chat window@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_chat_time_sep
|
||||
Color for time separator (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'brown'@*
|
||||
@item col_chat_prefix1
|
||||
Color for 1st and 3rd char of prefix@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightcyan'@*
|
||||
@item col_chat_prefix2
|
||||
Color for middle char of prefix@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_chat_nick
|
||||
Color for nicks in actions (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightcyan'@*
|
||||
@item col_chat_host
|
||||
Color for hostnames (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'cyan'@*
|
||||
@item col_chat_channel
|
||||
Color for channel names in actions (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_chat_dark
|
||||
Color for dark separators (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'green'@*
|
||||
@item col_chat_highlight
|
||||
Color for highlighted nick (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_chat_bg
|
||||
Background for chat window@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item col_status
|
||||
Color for status bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_status_active
|
||||
Color for active window (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_status_data_msg
|
||||
Color for window with new messages (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightred'@*
|
||||
@item col_status_data_other
|
||||
Color for window with new data (not messages) (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightmagenta'@*
|
||||
@item col_status_more
|
||||
Color for window with new data (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_status_bg
|
||||
Background for status window@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_infobar
|
||||
Color for info bar text@*
|
||||
Type: color (Curses or Gtk color), default value: 'black'@*
|
||||
@item col_infobar_highlight
|
||||
Color for info bar highlight notification@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_infobar_bg
|
||||
Background for info bar window@*
|
||||
Type: color (Curses or Gtk color), default value: 'cyan'@*
|
||||
@item col_input
|
||||
Color for input text@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_input_channel
|
||||
Color for input text (channel name)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_input_nick
|
||||
Color for input text (nick name)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightgreen'@*
|
||||
@item col_input_bg
|
||||
Background for input window@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item col_nick
|
||||
Color for nicknames@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_nick_op
|
||||
Color for operator symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightgreen'@*
|
||||
@item col_nick_halfop
|
||||
Color for half-operator symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightmagenta'@*
|
||||
@item col_nick_voice
|
||||
Color for voice symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_nick_sep
|
||||
Color for nick separator@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_nick_self
|
||||
Color for local nick@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_nick_private
|
||||
Color for other nick in private window@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_nick_bg
|
||||
Background for nicknames@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item history_max_lines
|
||||
Maximum number of lines in history for one server/channel/private window (0 = unlimited)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 4096@*
|
||||
@item history_max_commands
|
||||
Maximum number of user commands in history (0 = unlimited)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 100@*
|
||||
@item log_auto_channels
|
||||
Automatically log channel chats@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item log_auto_private
|
||||
Automatically log private chats@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item log_path
|
||||
Path for WeeChat log files@*
|
||||
Type: string (any string), default value: '~/.weechat/logs/'@*
|
||||
@item log_name
|
||||
Name for log files (%S == irc server name, %N == channel name (or nickname if private chat)@*
|
||||
Type: string (any string), default value: '%S,%N.weechatlog'@*
|
||||
@item log_timestamp
|
||||
Timestamp for log (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item log_start_string
|
||||
Text written when starting new log file (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '--- Log started %a %b %d %Y %H:%M:%s'@*
|
||||
@item log_end_string
|
||||
Text written when ending log file (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '--- Log ended %a %b %d %Y %H:%M:%s'@*
|
||||
@item dcc_auto_accept_files
|
||||
Automatically accept incoming dcc files@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_auto_accept_max_size
|
||||
Maximum size for incoming file when automatically accepted@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 0@*
|
||||
@item dcc_auto_accept_chats
|
||||
Automatically accept dcc chats (use carefully!)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_timeout
|
||||
Timeout for dcc request (in seconds)@*
|
||||
Type: integer (values: between 1 and 2147483647), default value: 300@*
|
||||
@item dcc_download_path
|
||||
Path for writing incoming files with dcc (default: user home)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item dcc_upload_path
|
||||
Path for reading files when sending thru dcc (when no path is specified)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item dcc_auto_rename
|
||||
Rename incoming files if already exists (add '.1', '.2', ...)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_auto_resume
|
||||
Automatically resume dcc transfer if connection with remote host is loosed@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item proxy_use
|
||||
Use a proxy server to connect to irc server@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'off'@*
|
||||
@item proxy_address
|
||||
Proxy server address (IP or hostname)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item proxy_port
|
||||
Port for connecting to proxy server@*
|
||||
Type: integer (values: between 0 and 65535), default value: 1080@*
|
||||
@item proxy_password
|
||||
Password for proxy server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_name
|
||||
Name associated to IRC server (for display only)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_autoconnect
|
||||
Automatically connect to server when WeeChat is starting@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item server_address
|
||||
IP address or hostname of IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_port
|
||||
Port for connecting to server@*
|
||||
Type: integer (values: between 0 and 65535), default value: 6667@*
|
||||
@item server_password
|
||||
Password for IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick1
|
||||
Nickname to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick2
|
||||
Alternate nickname to use on IRC server (if nickname is already used)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick3
|
||||
2nd alternate nickname to use on IRC server (if alternate nickname is already used)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_username
|
||||
User name to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_realname
|
||||
Real name to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_command
|
||||
First command to run when connected to server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_autojoin
|
||||
Comma separated list of channels to join when connected to server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@end table
|
||||
|
||||
Colors for Curses GUI are:@*
|
||||
@itemize @minus
|
||||
@item
|
||||
@kbd{default}: default color (transparent for background)
|
||||
@item
|
||||
@kbd{black}: black
|
||||
@item
|
||||
@kbd{red}: dark red
|
||||
@item
|
||||
@kbd{lightred}: light red
|
||||
@item
|
||||
@kbd{green}: dark green
|
||||
@item
|
||||
@kbd{lightgreen}: light green
|
||||
@item
|
||||
@kbd{brown}: brown
|
||||
@item
|
||||
@kbd{yellow}: yellow
|
||||
@item
|
||||
@kbd{blue}: dark blue
|
||||
@item
|
||||
@kbd{lightblue}: light blue
|
||||
@item
|
||||
@kbd{magenta}: dark magenta
|
||||
@item
|
||||
@kbd{lightmagenta}: light magenta
|
||||
@item
|
||||
@kbd{cyan}: dark cyan
|
||||
@item
|
||||
@kbd{lightcyan}: light cyan
|
||||
@item
|
||||
@kbd{gray}: gray
|
||||
@item
|
||||
@kbd{white}: white
|
||||
@end itemize
|
||||
|
||||
@node Key bindings, WeeChat commands, Config file, Usage
|
||||
@section Key bindings
|
||||
|
||||
@table @kbd
|
||||
@item Left arrow / Right arrow
|
||||
Go to previous / next char in command line@*
|
||||
@*
|
||||
@item Ctrl + left arrow / Ctrl + right arrow
|
||||
Go to previous / next word in command line@*
|
||||
@*
|
||||
@item Home / End
|
||||
Go to the beginning / end of command line@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Erase previous / next char of command line@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Erase previous word of command line@*
|
||||
@*
|
||||
@item Tab
|
||||
Complete command or nick (@kbd{Tab} again: find next completion)@*
|
||||
@*
|
||||
@item Any char
|
||||
Insert char to cursor position in the command line@*
|
||||
@*
|
||||
@item Enter
|
||||
Execute command or send message@*
|
||||
@*
|
||||
@item Up arrow / Down arrow
|
||||
Call again last commands/messages@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Show window history@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Switch to previous / next window@*
|
||||
@*
|
||||
@item Alt + left arrow / Alt + right arrow
|
||||
Same as F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Remove last infobar message@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node WeeChat commands, , Key bindings, Usage
|
||||
@section WeeChat commands
|
||||
|
||||
NOT WRITTEN!
|
||||
|
||||
|
||||
@c ******************************* Extensions *********************************
|
||||
|
||||
@node Extensions, Authors / Support, Usage, Top
|
||||
@chapter Extensions
|
||||
|
||||
@menu
|
||||
* Perl scripts::
|
||||
* Python scripts::
|
||||
* Ruby scripts::
|
||||
@end menu
|
||||
|
||||
@node Perl scripts, Python scripts, Extensions, Extensions
|
||||
@section Perl scripts
|
||||
|
||||
@subsection Load/unload Perl scripts
|
||||
|
||||
Perl scripts are loaded and unloaded with @command{/perl} command.
|
||||
(type @kbd{/help perl} within WeeChat to get help about command).@*
|
||||
|
||||
@emph{Examples:}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Load a Perl script: @kbd{/perl load /tmp/sample.pl}@*
|
||||
@item
|
||||
Unload all Perl scripts: @kbd{/perl unload}@*
|
||||
@item
|
||||
List all Perl scripts: @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection WeeChat / Perl API
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( name, version, shutdown_function, description );}@*
|
||||
@*
|
||||
This is first function to call in Perl script.@*
|
||||
All Perl scripts for WeeChat should call this function.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: unique name to identify script (each script must have
|
||||
unique name)
|
||||
@item @option{version}: script's version
|
||||
@item @option{shutdown_function}: Perl function called when script is
|
||||
unloaded (optional parameter, empty string means nothing is called at the end)
|
||||
@item @option{description}: short description of script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::register ("sample", "1.0", "sample_end", "Sample script!");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( message );}@*
|
||||
@*
|
||||
Print message in current window (channel or server).@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::print ("message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( channel, [server,] message );}@*
|
||||
@*
|
||||
Print message in a channel.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{channel}: name of channel
|
||||
@item @option{server}: internal name of server
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Examples:}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "message");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( delay, message );}@*
|
||||
@*
|
||||
Print message in infobar.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{delay}: after this delay (in seconds), message will be erased
|
||||
(if 0, message will not be erased).
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::print_infobar (5, "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( name, function );}@*
|
||||
@*
|
||||
Attach a Perl function to an IRC message.@*
|
||||
Function will be called each time IRC message will be received.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: name of IRC message@*
|
||||
To know list of IRC messages, please refer to RFC 1459 and/or 2812:@*
|
||||
RFC 1459: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{function}: Perl function called when message is received
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::add_message_handler ("privmsg", my_function);}@*
|
||||
@code{sub my_function}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $channel, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($hostmask, $null, $channel) = split " ", $channel;}@*
|
||||
@code{@ @ @ @ IRC::print ("host=$hostmask, chan=$channel, msg=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( name, function );}@*
|
||||
@*
|
||||
Create new WeeChat command, linked with Perl function.@*
|
||||
Function will be called when user will launch command with @kbd{/name}.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: name of new command@*
|
||||
This name may be existing command, so that the command is overrided by
|
||||
Perl function. Be careful when overriding WeeChat commands, they'll not be
|
||||
available until your Perl script will be unloaded.
|
||||
@item @option{function}: Perl function linked with command
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::add_command_handler ("command", my_command);}@*
|
||||
@code{sub my_command}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Arguments: ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Python scripts, Ruby scripts, Perl scripts, Extensions
|
||||
@section Python scripts
|
||||
|
||||
Not developed!
|
||||
|
||||
@node Ruby scripts, , Python scripts, Extensions
|
||||
@section Ruby scripts
|
||||
|
||||
Not developed!
|
||||
|
||||
|
||||
@c **************************** Authors / Support *****************************
|
||||
|
||||
@node Authors / Support, , Extensions, Top
|
||||
@chapter Authors / Support
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Authors::
|
||||
* Get support::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Authors::
|
||||
* Get support::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Authors, Get support, Authors / Support, Authors / Support
|
||||
@section Authors
|
||||
|
||||
WeeChat is developed by:@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Get support, Copyright, Authors, Authors / Support
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Get support, , Authors, Authors / Support
|
||||
@end ifnothtml
|
||||
@section Get support
|
||||
|
||||
Before asking for support, be sure you've read documentation and FAQ provided
|
||||
with WeeChat.@*
|
||||
(documentation is this document, if you don't read all lines until this sentence,
|
||||
you can start again!)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Support with IRC:@*
|
||||
- server: @b{irc.freenode.net}@*
|
||||
- channel: @b{#weechat}@*@*
|
||||
@item
|
||||
WeeChat forum: soon!@*@*
|
||||
@item
|
||||
Support with mailing list:@*
|
||||
- to subscribe/unsubscribe:@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- to send mail to all mailing list subscribers, send your mail to@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Mailing archives are available here:@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Look for WeeChat support page for detail:@*
|
||||
@uref{http://weechat.flashtux.org/support.php?lang=en}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Get support, Authors / Support
|
||||
@section Copyright
|
||||
|
||||
This manual documents WeeChat IRC client, it is part of WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
This document may be used under the terms the GNU General Public License
|
||||
version 2 or higher.
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
@@ -0,0 +1,834 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_fr.info
|
||||
@settitle WeeChat - Client IRC rapide, leger et extensible
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (french version)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_fr.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_fr.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage fr
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - Guide utilisateur
|
||||
@subtitle Client IRC rapide, l@'eger et extensible
|
||||
@subtitle Documentation pour WeeChat v0.0.5-pre3 - 24 janvier 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
Ce manuel documente le client IRC WeeChat, il fait partie de WeeChat.@*
|
||||
@*
|
||||
La derni@`ere version de ce document peut @^etre t@'el@'echarg@'ee sur cette page :@*
|
||||
@uref{http://weechat.flashtux.org/doc.php}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Ce document peut @^etre utilis@'e sous les termes de la licence GNU General Public
|
||||
License version 2 ou plus.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Page @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introduction, (dir), (dir)
|
||||
@menu
|
||||
* Introduction:: Description de WeeChat
|
||||
* Installation:: Installation de WeeChat
|
||||
* Utilisation:: Utilisation de WeeChat
|
||||
* Extensions:: Extensions de WeeChat
|
||||
* Auteurs / Support:: Contacter les auteurs et obtenir du support
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introduction *******************************
|
||||
|
||||
@node Introduction, Installation, Top, Top
|
||||
@chapter Introduction
|
||||
@menu
|
||||
* Description::
|
||||
* Pre-requis::
|
||||
@end menu
|
||||
|
||||
@node Description, Pre-requis, Introduction, Introduction
|
||||
@section Description
|
||||
|
||||
WeeChat (Wee Enhanced Environment for Chat) est un client IRC libre, rapide et l@'eger,
|
||||
concu pour diff@'erents syst@`emes d'exploitation.@*
|
||||
@*
|
||||
Ses principales caract@'eristiques sont les suivantes :
|
||||
@itemize @minus
|
||||
@item
|
||||
connexion multi-serveurs
|
||||
@item
|
||||
plusieurs interfaces : Curses, Gtk et Qt
|
||||
@item
|
||||
petit, rapide et l@'eger
|
||||
@item
|
||||
param@'etrable et extensible avec des scripts
|
||||
@item
|
||||
conforme aux RFCs 1459, 2810, 2811, 2812, et 2813
|
||||
@item
|
||||
multi-plateformes (Gnu/Linux, *BSD, Windows et d'autres syst@`emes)
|
||||
@item
|
||||
100% GPL, logiciel libre
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
La page d'accueil de WeeChat est ici :@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requis, , Description, Introduction
|
||||
@section Pr@'e-requis
|
||||
|
||||
Pour installer WeeChat, vous @b{devez} avoir :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Un syst@`eme Gnu/Linux (avec le compilateur et les outils associ@'es pour le paquet des sources)
|
||||
@item
|
||||
Droits "root" (pour installer WeeChat)
|
||||
@item
|
||||
Selon l'interface, une des biblioth@`eques suivantes :
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: la librairie ncurses,
|
||||
@item
|
||||
Gtk: *** interface non d@'evelopp@'ee ***,
|
||||
@item
|
||||
Qt: *** interface non d@'evelopp@'ee ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Installation *******************************
|
||||
|
||||
@node Installation, Utilisation, Introduction, Top
|
||||
@chapter Installation
|
||||
|
||||
@menu
|
||||
* Paquet binaire::
|
||||
* Paquet source::
|
||||
* Sources CVS::
|
||||
@end menu
|
||||
|
||||
@node Paquet binaire, Paquet source, Installation, Installation
|
||||
@section Paquet binaire
|
||||
|
||||
Les paquets binaires sont disponibles pour les distributions suivantes :
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (ou toute distribution compatible Debian)@*
|
||||
Pour installer : @kbd{dpkg -i /chemin/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (ou toute distribution compatible avec les RPM)@*
|
||||
Pour installer : @kbd{rpm -i /chemin/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
Pour installer : voir la documentation Gentoo
|
||||
@item
|
||||
*BSD (non disponible !)
|
||||
@item
|
||||
Slackware (non disponible !)
|
||||
@item
|
||||
Windows (non disponible !)
|
||||
@end itemize
|
||||
|
||||
o@`u x.y.z est la version (par exemple 0.0.1)
|
||||
@*
|
||||
|
||||
@node Paquet source, Sources CVS, Paquet binaire, Installation
|
||||
@section Paquet source
|
||||
|
||||
Tapez simplement dans une console ou un terminal :@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Note: pour ne construire que certaines interfaces, vous pouvez passer des param@`etres
|
||||
@`a ./configure, tapez @kbd{./configure --help} pour de l'aide sur ces options.@*
|
||||
|
||||
Obtenez les droits root et installez WeeChat :@*
|
||||
@kbd{su -}@*
|
||||
(entrez le mot de passe de root)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node Sources CVS, , Paquet source, Installation
|
||||
@section Sources CVS
|
||||
|
||||
Attention: les sources CVS sont r@'eserv@'es aux utilisateurs avanc@'es : il se peut
|
||||
que WeeChat ne compile pas et qu'il soit tr@`s instable.
|
||||
Vous @^etes pr@'evenus !@*
|
||||
|
||||
Pour r@'ecup@'erer les sources CVS, tapez ces commandes :@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(lorsqu'un mot de passe est demand@'e, tapez simplement sur Entr@'ee)@*
|
||||
|
||||
Ex@'ecutez ce script :@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Suivez alors les instructions du paquet sources - @xref{Paquet source}.
|
||||
|
||||
|
||||
@c ******************************* Utilisation ********************************
|
||||
|
||||
@node Utilisation, Extensions, Installation, Top
|
||||
@chapter Utilisation
|
||||
|
||||
@menu
|
||||
* Lancer WeeChat::
|
||||
* Fichier de configuration::
|
||||
* Raccourcis clavier::
|
||||
* Commandes WeeChat::
|
||||
@end menu
|
||||
|
||||
@node Lancer WeeChat, Fichier de configuration, Utilisation, Utilisation
|
||||
@section Lancer WeeChat
|
||||
|
||||
@subsection Param@`etres de ligne de commande
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Afficher l'aide sur le fichier de config (liste des options)@*
|
||||
@item -h, --help
|
||||
Afficher l'aide@*
|
||||
@item -l, --license
|
||||
Afficher la licence de WeeChat@*
|
||||
@item -v, --version
|
||||
Afficher la version de WeeChat@*
|
||||
@end table
|
||||
|
||||
@subsection Lancer WeeChat
|
||||
|
||||
Tapez simplement cette commande pour lancer WeeChat :@*
|
||||
@kbd{weechat-curses} (pour l'interface Curses)@*
|
||||
ou @kbd{weechat-gtk} (pour l'interface Gtk)@*
|
||||
ou @kbd{weechat-qt} (pour l'interface Qt)@*
|
||||
|
||||
Lorsque vous lancez WeeChat pour la premi@`ere fois, un fichier de configuration
|
||||
par d@'efaut est cr@'e@'e, avec les options par d@'efaut.@*
|
||||
Le fichier de configuration par d@'efaut est : ~/.weechat/weechat.rc@*
|
||||
|
||||
Vous pouvez @'editer ce fichier pour configurer WeeChat @`a votre convenance, ou
|
||||
vous pouvez modifier les param@`etres dans WeeChat avec la commande @kbd{/set} - @xref{Commandes WeeChat}.
|
||||
|
||||
@node Fichier de configuration, Raccourcis clavier, Lancer WeeChat, Utilisation
|
||||
@section Fichier de configuration
|
||||
|
||||
Liste des options du fichier de configuration :@*
|
||||
|
||||
@table @kbd
|
||||
@item look_set_title
|
||||
D@'efinit le titre de la fen@^etre (terminal pour l'interface Curses) avec le nom et la version@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_startup_logo
|
||||
Afficher le logo WeeChat au d@'emarrage@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_startup_version
|
||||
Afficher la version de WeeChat au d@'emarrage@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_weechat_slogan
|
||||
Slogan WeeChat (si vide, le slogan ne sera pas utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: 'the geekest IRC client!'@*
|
||||
@item look_color_nicks
|
||||
Afficher les utilisateurs avec diff@'erentes couleurs@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_color_actions
|
||||
Afficher les actions avec diff@'erentes couleurs@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_remove_colors_from_msgs
|
||||
Supprimer les couleurs dans les messages entrants@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nicklist
|
||||
Afficher la fen@^etre des utilisateurs (pour les fen@^etres de canaux)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nicklist_position
|
||||
Position de la fen@^etre d'utilisateurs (haut (top), gauche (left), droite (right, par d@'efaut), bas (bottom))@*
|
||||
Type: cha@^ine (valeurs: 'left', 'right', 'top', 'bottom'), valeur par d@'efaut: 'right'@*
|
||||
@item look_nicklist_min_size
|
||||
Taille minimum pour la fen@^etre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille minimum))@*
|
||||
Type: entier (valeurs: entre 0 et 100), valeur par d@'efaut: 0@*
|
||||
@item look_nicklist_max_size
|
||||
Taille maximum pour la fen@^etre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille maximum; si min == max et > 0, alors la taille est fixe))@*
|
||||
Type: entier (valeurs: entre 0 et 100), valeur par d@'efaut: 0@*
|
||||
@item look_no_nickname
|
||||
Texte @`a afficher en lieu et place du nom d'utilisateur lorsque la connexion n'est pas active@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '-cmd-'@*
|
||||
@item look_nickmode
|
||||
Afficher le mode de l'utilisateur ((half)op/voice) devant chaque utilisateur@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nickmode_empty
|
||||
Afficher un espace si le mode utilisateur n'est pas (half)op/voice@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'off'@*
|
||||
@item look_nick_completor
|
||||
La cha@^ine affich@'ee apr@`es la compl@'etion des utilisateurs@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ':'@*
|
||||
@item look_infobar
|
||||
Active la barre d'infos@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_infobar_timestamp
|
||||
Horodatage pour les conversations sauvegard@'ees@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '%B, %A %d %G - %H:%M'@*
|
||||
@item look_infobar_delay_highlight
|
||||
D@'elai (en secondes) pour la notification des messages dans la barre d'infos (0 = d@'esactiver les notifications dans la barre d'infos)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 7@*
|
||||
@item col_title
|
||||
Couleur pour la barre de titre@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_title_bg
|
||||
Couleur de fond pour la barre de titre@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_chat
|
||||
Couleur pour le texte de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_chat_time
|
||||
Couleur pour l'heure dans la fen@^etre de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_chat_time_sep
|
||||
Couleur pour la s@'eparation de l'heure (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'brown'@*
|
||||
@item col_chat_prefix1
|
||||
Couleur pour le 1er et le 3@`eme caract@`ere du pr@'efixe@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightcyan'@*
|
||||
@item col_chat_prefix2
|
||||
Couleur pour le caract@`ere du milieu du pr@'efixe@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_chat_nick
|
||||
Couleur pour les noms d'utilisateurs dans les actions (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightcyan'@*
|
||||
@item col_chat_host
|
||||
Couleur pour les noms de machines (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'cyan'@*
|
||||
@item col_chat_channel
|
||||
Couleur pour les canaux dans les actions (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_chat_dark
|
||||
Couleur pour les s@'eparateurs sombres (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'green'@*
|
||||
@item col_chat_highlight
|
||||
Couleur pour le pseudo surlign@'e (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_chat_bg
|
||||
Couleur de fond pour la fen@^etre de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item col_status
|
||||
Couleur pour la barre de statut@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_status_active
|
||||
Couleur pour la fen@^etre active (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_status_data_msg
|
||||
Couleur pour une fen@^etre avec de nouvelles infos (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightred'@*
|
||||
@item col_status_data_other
|
||||
Couleur pour une fen@^etre avec des nouvelles donn@'ees (pas des infos) (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightmagenta'@*
|
||||
@item col_status_more
|
||||
Couleur pour une fen@^etre avec des nouvelles donn@'ees (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_status_bg
|
||||
Couleur de fond pour la fen@^etre de statut@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_infobar
|
||||
Couleur pour la barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'black'@*
|
||||
@item col_infobar_highlight
|
||||
Couleur pour la notification dans la barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_infobar_bg
|
||||
Couleur de fond pour la fen@^etre de barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'cyan'@*
|
||||
@item col_input
|
||||
Couleur pour le texte saisi@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_input_channel
|
||||
Couleur pour le texte saisi (nom du canal)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_input_nick
|
||||
Couleur pour le texte saisi (pseudo)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightgreen'@*
|
||||
@item col_input_bg
|
||||
Couleur de fond pour la fen@^etre de saisie@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item col_nick
|
||||
Couleur pour les pseudos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_nick_op
|
||||
Couleur pour le symbole op@'erateur@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightgreen'@*
|
||||
@item col_nick_halfop
|
||||
Couleur pour le symbole demi-op@'erateur@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightmagenta'@*
|
||||
@item col_nick_voice
|
||||
Couleur pour le symbole voix@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_nick_sep
|
||||
Couleur pour le s@'eparateur de pseudo@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_nick_self
|
||||
Couleur pour le pseudo local@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_nick_private
|
||||
Couleur pour l'autre pseudo dans la fen@^etre priv@'ee@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_nick_bg
|
||||
Couleur de fond pour les pseudos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item history_max_lines
|
||||
Nombre maximum de lignes dans l'historique pour un serveur/fen@^etre/fen@^etre priv@'ee (0 = sans limite)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 4096@*
|
||||
@item history_max_commands
|
||||
Nombre maximum de commandes utilisateur dans l'historique (0 = sans limite)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 100@*
|
||||
@item log_auto_channels
|
||||
Enregistrer automatiquement les conversations des canaux@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item log_auto_private
|
||||
Enregistrer automatiquement les conversations priv@'ees@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item log_path
|
||||
Chemin pour les conversations sauvegard@'ees par WeeChat@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~/.weechat/logs/'@*
|
||||
@item log_name
|
||||
Nom des conversations saivegard@'ees (%S == nom du serveur irc, %N == nom du canal (ou pseudo si fen@^etre priv@'ee)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '%S,%N.weechatlog'@*
|
||||
@item log_timestamp
|
||||
Horodatage pour les conversations sauvegard@'ees (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item log_start_string
|
||||
Texte @'ecrit en d@'emarrant la sauvegarde d'une discussion (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '--- Log started %a %b %d %Y %H:%M:%s'@*
|
||||
@item log_end_string
|
||||
Texte @'ecrit @`a la fin d'une discussion sauvegard@'ees (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '--- Log ended %a %b %d %Y %H:%M:%s'@*
|
||||
@item dcc_auto_accept_files
|
||||
Accepte automatiquement les fichiers dcc entrants@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_auto_accept_max_size
|
||||
Taille maximum pour un fichier entrant lorsqu'il est accept@'e automatiquement@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 0@*
|
||||
@item dcc_auto_accept_chats
|
||||
Accepte automatiquement les demandes de discussion dcc (@`a utiliser avec pr@'ecaution !)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_timeout
|
||||
D@'elai d'attente pour les requ@^etes dcc (en secondes)@*
|
||||
Type: entier (valeurs: entre 1 et 2147483647), valeur par d@'efaut: 300@*
|
||||
@item dcc_download_path
|
||||
Chemin pour @'ecrire les fichiers re@,{c}us par dcc (par d@'efaut: r@'epertoire de l'utilisateur)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item dcc_upload_path
|
||||
Chemin pour lire les fichiers lorsqu'ils sont envoy@'es par dcc (quand aucun chemin n'est sp@'ecifi@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item dcc_auto_rename
|
||||
Renommer les fichiers re@,{c}us s'ils existent d@'ej@`a (ajoute '.1', '.2', ...)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_auto_resume
|
||||
Continuer automatiquement les transferts dcc si la connexion avec la machine distante a @'et@'e perdue@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item proxy_use
|
||||
Utiliser un proxy pour se connecter au serveur irc@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'off'@*
|
||||
@item proxy_address
|
||||
Adresse du serveur proxy (IP ou nom)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item proxy_port
|
||||
Port pour se connecter au serveur proxy@*
|
||||
Type: entier (valeurs: entre 0 et 65535), valeur par d@'efaut: 1080@*
|
||||
@item proxy_password
|
||||
Mot de passe pour le serveur proxy@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_name
|
||||
Nom associ@'e au serveur IRC (pour affichage seulement)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_autoconnect
|
||||
Connexion automatique au serveur quand WeeChat d@'emarre@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item server_address
|
||||
Adresse IP ou nom du serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_port
|
||||
Port pour se connecter au serveur@*
|
||||
Type: entier (valeurs: entre 0 et 65535), valeur par d@'efaut: 6667@*
|
||||
@item server_password
|
||||
Mot de passe pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick1
|
||||
Pseudo @`a utiliser sur le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick2
|
||||
Pseudo alternatif pour le serveur IRC (si le pseudo est d@'ej@`a utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick3
|
||||
2nd pseudo alternatif pour le serveur IRC (si le pseudo alternatif est d@'ej@`a utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_username
|
||||
Nom d'utilisateur pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_realname
|
||||
Nom r@'eel pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_command
|
||||
Commande @`a ex@'ecuter en premier lorsque connect@'e au serveur@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_autojoin
|
||||
Liste des canaux (s@'epar@'es par des virgules) @`a rejoindre lorsque connect@'e au serveur@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@end table
|
||||
|
||||
Les couleurs pour l'interface Curses sont :@*
|
||||
@itemize @minus
|
||||
@item
|
||||
@kbd{default}: couleur par d@'efaut (transparent pour le fond)
|
||||
@item
|
||||
@kbd{black}: noir
|
||||
@item
|
||||
@kbd{red}: rouge fonc@'e
|
||||
@item
|
||||
@kbd{lightred}: rouge clair
|
||||
@item
|
||||
@kbd{green}: vert fonc@'e
|
||||
@item
|
||||
@kbd{lightgreen}: vert clair
|
||||
@item
|
||||
@kbd{brown}: marron
|
||||
@item
|
||||
@kbd{yellow}: jaune
|
||||
@item
|
||||
@kbd{blue}: bleu fonc@'e
|
||||
@item
|
||||
@kbd{lightblue}: bleu clair
|
||||
@item
|
||||
@kbd{magenta}: violet fonc@'e
|
||||
@item
|
||||
@kbd{lightmagenta}: violet clair
|
||||
@item
|
||||
@kbd{cyan}: cyan fonc@'e
|
||||
@item
|
||||
@kbd{lightcyan}: cyan clair
|
||||
@item
|
||||
@kbd{gray}: gris
|
||||
@item
|
||||
@kbd{white}: blanc
|
||||
@end itemize
|
||||
|
||||
@node Raccourcis clavier, Commandes WeeChat, Fichier de configuration, Utilisation
|
||||
@section Raccourcis clavier
|
||||
|
||||
@table @kbd
|
||||
@item Fl@`eche gauche / Fl@`eche droite
|
||||
Aller au caract@`ere pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Ctrl + fl@`eche gauche / Ctrl + fl@`eche droite
|
||||
Aller au mot pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Home / End
|
||||
Aller au d@'ebut / @`a la fin de la ligne de commande@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Effacer le mot pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Effacer le mot pr@'ec@'edent sur la ligne de commande@*
|
||||
@*
|
||||
@item Tab
|
||||
Compl@'eter la commande ou le pseudo (@kbd{Tab} @`a nouveau : trouver la compl@'etion suivante)@*
|
||||
@*
|
||||
@item Tout caract@`ere
|
||||
Ins@'erer le caract@`ere @`a la position du curseur sur la ligne de commande@*
|
||||
@*
|
||||
@item Entr@'ee
|
||||
Ex@'ecuter la commande ou envoyer le message@*
|
||||
@*
|
||||
@item Fl@`eche haut / Fl@`eche bas
|
||||
Rappeler les derni@`eres commandes/messages@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Afficher l'historique de la fen@^etre@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Aller @`a la fen@^etre pr@'ec@'edente / suivante@*
|
||||
@*
|
||||
@item Alt + fl@`eche gauche / Alt + fl@`eche droite
|
||||
Identique @`a F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Effacer le dernier message de la barre d'infos@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node Commandes WeeChat, , Raccourcis clavier, Utilisation
|
||||
@section Commandes WeeChat
|
||||
|
||||
NON ECRIT !
|
||||
|
||||
|
||||
@c ******************************* Extensions *********************************
|
||||
|
||||
@node Extensions, Auteurs / Support, Utilisation, Top
|
||||
@chapter Extensions
|
||||
|
||||
@menu
|
||||
* Scripts Perl::
|
||||
* Scripts Python::
|
||||
* Scripts Ruby::
|
||||
@end menu
|
||||
|
||||
@node Scripts Perl, Scripts Python, Extensions, Extensions
|
||||
@section Scripts Perl
|
||||
|
||||
@subsection Charger/d@'echarger des scripts Perl
|
||||
|
||||
Les scripts Perl sont charg@'es et d@'echarg@'es avec la commande @command{/perl}
|
||||
(tapez @kbd{/help perl} dans WeeChat pour obtenir de l'aide sur la commande).@*
|
||||
|
||||
@emph{Exemples :}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Charger un script Perl : @kbd{/perl load /tmp/essai.pl}@*
|
||||
@item D@'echarger tous les scripts Perl : @kbd{/perl unload}@*
|
||||
@item
|
||||
Lister les scripts Perl charg@'es : @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection Interface WeeChat / Perl
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( nom, version, fonction_de_fin, description );}@*
|
||||
@*
|
||||
C'est la premi@`ere fonction @`a appeler dans le script Perl.@*
|
||||
Tout script Perl pour WeeChat doit appeler cette fonction.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom unique pour identifier le script (chaque script doit
|
||||
avoir un nom diff@'erent)
|
||||
@item @option{version}: version du script
|
||||
@item @option{fonction_de_fin}: fonction Perl appel@'ee quand le script est
|
||||
d@'echarg@'e (param@`etre facultatif, une cha@^ine vide signifiant qu'il n'y a pas
|
||||
de fonction @`a appeler)
|
||||
@item @option{description}: description br@`eve du script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::register ("essai", "1.0", "fin_essai", "Script d'essai !");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( message );}@*
|
||||
@*
|
||||
Affiche un message dans la fen@^etre courante (canal ou serveur).@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::print ("message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( canal, [serveur,] message );}@*
|
||||
@*
|
||||
Affiche un message dans un canal.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{canal}: nom du canal
|
||||
@item @option{serveur}: nom interne du serveur
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemples :}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "message");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( d@'elai, message );}@*
|
||||
@*
|
||||
Affiche un message dans la barre d'infos.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{d@'elai}: d@'elai (en secondes) pendant lequel le message est affich@'e
|
||||
(si 0, le message ne sera pas effac@'e).
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::print_infobar (5, "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( nom, fonction );}@*
|
||||
@*
|
||||
Attache une fonction Perl @`a un message IRC particulier.@*
|
||||
La fonction sera appel@'ee @`a chaque fois que le message IRC sera re@,{c}u.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom du message IRC pour lequel la fonction est appel@'ee@*
|
||||
Pour conna@^itre la liste des messages IRC disponibles, merci de consulter les
|
||||
RFC 1459 et/ou 2812 :@*
|
||||
RFC 1459 : @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812 : @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{fonction}: fonction Perl appel@'ee lorsque le message est re@,{c}u
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::add_message_handler ("privmsg", ma_fonction);}@*
|
||||
@code{sub ma_fonction}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $canal, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($masque, $null, $canal) = split " ", $canal;}@*
|
||||
@code{@ @ @ @ IRC::print ("masque=$masque, canal=$canal, message=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( nom, fonction );}@*
|
||||
@*
|
||||
Cr@'e@'e une nouvelle commande WeeChat, associ@'ee @`a une fonction Perl.@*
|
||||
La fonction sera appel@'ee lorsque l'utilisateur lancera la commande par @kbd{/nom}.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom de la nouvelle commande@*
|
||||
Il peut s'agir d'une commande existante, auquel cas celle-ci est @'ecras@'ee par
|
||||
la fonction Perl. Soyez prudent en @'ecrasant les commandes WeeChat, car elles
|
||||
ne seront plus accessibles tant que le script Perl sera charg@'e.
|
||||
@item @option{fonction}: fonction Perl associ@'ee @`a la commande
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::add_command_handler ("commande", ma_commande);}@*
|
||||
@code{sub ma_commande}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Param@`etres : ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Scripts Python, Scripts Ruby, Scripts Perl, Extensions
|
||||
@section Scripts Python
|
||||
|
||||
Non d@'evelopp@'e !
|
||||
|
||||
@node Scripts Ruby, , Scripts Python, Extensions
|
||||
@section Scripts Ruby
|
||||
|
||||
Non d@'evelopp@'e !
|
||||
|
||||
@c **************************** Auteurs / Support *****************************
|
||||
|
||||
@node Auteurs / Support, , Extensions, Top
|
||||
@chapter Auteurs / Support
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Auteurs::
|
||||
* Obtenir du support::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Auteurs::
|
||||
* Obtenir du support::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Auteurs, Obtenir du support, Auteurs / Support, Auteurs / Support
|
||||
@section Auteurs
|
||||
|
||||
WeeChat est d@'evelopp@'e par :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Obtenir du support, Copyright, Auteurs, Auteurs / Support
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Obtenir du support, , Auteurs, Auteurs / Support
|
||||
@end ifnothtml
|
||||
@section Obtenir du support
|
||||
|
||||
Avant de faire appel au support, merci de lire la documentation et la
|
||||
FAQ de WeeChat.@*
|
||||
(la documentation est le document que vous @^etes en train de lire, si vous
|
||||
n'avez pas tout lu jusqu'ici, il est encore temps de recommencer !)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Support par IRC:@*
|
||||
- serveur : @b{irc.freenode.net}@*
|
||||
- canal : @b{#weechat}@*@*
|
||||
@item
|
||||
Forum WeeChat : bient@^ot !@*@*
|
||||
@item
|
||||
Support par la liste de diffusion :@*
|
||||
- pour souscrire/d@'esinscrire :@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- pour envoyer un mail @`a la liste de diffusion, envoyer @`a :@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Les archives de la liste de diffusion sont ici :@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Voir la page support WeeChat pour plus de d@'etails :@*
|
||||
@uref{http://weechat.flashtux.org/support.php}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Obtenir du support, Auteurs / Support
|
||||
@section Copyright
|
||||
|
||||
Ce manuel documente le client IRC WeeChat, il fait partie de WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Ce document peut @^etre utilis@'e sous les termes de la licence GNU General Public
|
||||
License version 2 ou plus.
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
@@ -0,0 +1,528 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_pt.info
|
||||
@settitle WeeChat - Um cliente de IRC rapido, leve e extencivel
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (vers@~ao partuguesa)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_pt.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_pt.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage pt
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - Guia do Utilizador
|
||||
@subtitle Cliente de IRC rapido, leve e extencivel
|
||||
@subtitle Documenta@,{c}@~ao do WeeChat v0.0.5-pre2 - 21 de Janeiro de 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
Este manual documenta o cliente de IRC WeeChat, ele faz parte do WeeChat.@*
|
||||
@*
|
||||
A ultima versĂŁo deste documento pode ser descarregada de :@*
|
||||
@uref{http://weechat.flashtux.org/doc.php}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Este documento pode ser utilizado sobre os termos da Licen@,{c}a P@'ublica geral GNU (GNU General Public
|
||||
License) vers@~ao 2 ou superior.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Pagina @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introducao, (dir), (dir)
|
||||
@menu
|
||||
* Introducao:: Descri@,{c}@~ao do WeeChat
|
||||
* Instalacao:: Instala@,{c}@~ao do WeeChat
|
||||
* Utilizacao:: Utiliza@,{c}@~ao do WeeChat
|
||||
* Extencoes:: Exten@,{c}@~oes do Weechat
|
||||
* Autores/Suporte:: Contactar os autores e obter suporte
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introducao *******************************
|
||||
|
||||
@node Introducao, Instalacao, Top, Top
|
||||
@chapter Introdu@,{c}@~ao
|
||||
@menu
|
||||
* Descricao::
|
||||
* Pre-requisitos::
|
||||
@end menu
|
||||
|
||||
@node Descricao, Pre-requisitos, Introducao, Introducao
|
||||
@section Descri@,{c}@~ao
|
||||
|
||||
O WeeChat (Wee Enhanced Environment for Chat) @'e um cliente de IRC livre, r@'apido e leve,
|
||||
concebido para funcionar em diversos sistemas operativos.@*
|
||||
@*
|
||||
As suas caracter@'isticas prinicpais s@~ao as seguintes :
|
||||
@itemize @minus
|
||||
@item
|
||||
liga@,{c}@~ao a m@'ultiplos servidores
|
||||
@item
|
||||
v@'arias interfaces : Curses, Gtk e Qt
|
||||
@item
|
||||
pequeno r@'apido e leve
|
||||
@item
|
||||
configuravel e extenc@'ivel com scripts
|
||||
@item
|
||||
compat@'ivel com RFCs 1459, 2810, 2811, 2812, e 2813
|
||||
@item
|
||||
multiplataforma (Gnu/Linux, *BSD, Windows e outros)
|
||||
@item
|
||||
100% GPL, Software Livre
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
A p@'agina Web do Weechat @'e aqui :@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requisitos, ,Descricao, Introducao
|
||||
@section Pr@'e-requisitos
|
||||
|
||||
Para instalar o Weechat, vais @b{precisar} de ter :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Um sistema Gnu/Linux (com um compilador e outros utilit@'arios associados aos pacotes de c@'odigo fonte)
|
||||
@item
|
||||
Direitos de "root" (para instalar)
|
||||
@item
|
||||
Consoante a interface escolhida, uma das seguintes bibliotecas :
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: a biblioteca ncurses,
|
||||
@item
|
||||
Gtk: *** interface n@~ao desenvolvida ***,
|
||||
@item
|
||||
Qt: *** interface n@~ao desenvolvida ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Instalacao *******************************
|
||||
|
||||
@node Instalacao, Utilizacao, Introducao, Top
|
||||
@chapter Instala@,{c}@~ao
|
||||
@menu
|
||||
* Binarios::
|
||||
* Codigo Fonte::
|
||||
* Codigo Fonte via CVS::
|
||||
@end menu
|
||||
|
||||
@node Binarios, Codigo Fonte, Instalacao, Instalacao
|
||||
@section Bin@'arios
|
||||
|
||||
Os pacotes bin@'arios est@'ao dispon@'iveis para as seguintes distribui@,{c}@~oes :
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (ou compat@'ivel)@*
|
||||
Instala@,{c}@~ao : @kbd{dpkg -i /chemin/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (ou outra distro compat@'ivel com RPMs)@*
|
||||
Instala@,{c}@~ao : @kbd{rpm -i /chemin/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
Instala@,{c}@~ao : ver a documenta@,{c}@~ao da Gentoo
|
||||
@item
|
||||
*BSD (non disponible !)
|
||||
@item
|
||||
Slackware (n@~ao dispon@'ivel !)
|
||||
@item
|
||||
Windows (n@~ao dispon@'ivel !)
|
||||
@end itemize
|
||||
|
||||
Onde x.y.z @'e a vers@~ao (por exemplo 0.0.1)
|
||||
@*
|
||||
|
||||
@node Codigo Fonte, Codigo Fonte via CVS, Binarios, Instalacao
|
||||
@section C@'odigo Fonte
|
||||
|
||||
Escreve simplesmente numa consola ou num terminal :@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Nota: Para compilar certas interfaces, podes passar par@^ametros
|
||||
ao ./configure, escreve @kbd{./configure --help} para veres as op@,{c}@~oes.@*
|
||||
|
||||
Obter os direitos do root e instalar o Weechat :@*
|
||||
@kbd{su -}@*
|
||||
(escreve aqui a palavra-passe do superutilizador)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node Codigo Fonte via CVS, , Codigo Fonte, Instalacao
|
||||
@section C@'odigo Fonte via CVS
|
||||
|
||||
Aten@,{c}@~ao: o c@'odigo fonte CVS est@'a reservado aos utilizadores avan@,{c}ados : o WeeChat pode n@~ao compilar ou ficar inst@'avel.@*
|
||||
Considera-te avisado !@*
|
||||
|
||||
Para sacares o c@'odigo fonte via CVS, escreve estes comandos :@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(quando te pedirem a palavra-passe, primen simplesmente Enter)@*
|
||||
|
||||
Executa o script :@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Segue agora as instru@,{c}@~oes para compilar o c@'odigo fonte - @xref{Codigo Fonte}.
|
||||
|
||||
|
||||
@c ******************************* Utilizacao ********************************
|
||||
|
||||
@node Utilizacao, Extencoes, Instalacao, Top
|
||||
@chapter Utiliza@,{c}@~ao
|
||||
|
||||
@menu
|
||||
* Invocar o WeeChat::
|
||||
* Recursos de teclado::
|
||||
* Comandos do WeeChat::
|
||||
@end menu
|
||||
|
||||
@node Invocar o WeeChat, Recursos de teclado, Utilizacao, Utilizacao
|
||||
@section Invocar o WeeChat
|
||||
|
||||
@subsection Par@^ametros de linha de comandos
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Mostrar da lima dos config da exposi@,{c}@~ao (lista das op@,{c}@~oes)
|
||||
@item -h, --help
|
||||
Mostrar a ajuda@*
|
||||
@item -l, --license
|
||||
Mostrar a licen@,{c}a do WeeChat@*
|
||||
@item -v, --version
|
||||
Mostrar a vers@~ao do WeeChat@*
|
||||
@end table
|
||||
|
||||
@subsection Invocar o WeeChat
|
||||
|
||||
Escreve simplesmente este comando para invoceres o WeeChat :@*
|
||||
@kbd{weechat-curses} (para a interface em Curses)@*
|
||||
ou @kbd{weechat-gtk} (para a interface em Gtk)@*
|
||||
ou @kbd{weechat-qt} (para a interface em Qt)@*
|
||||
|
||||
Logo que lan@,{c}ares o WeeChat pela primeira vez, um ficheiro de configura@,{c}@~ao
|
||||
por defeito @'e criado, com as configura@,{c}@~oes por defeito.@*
|
||||
O ficheiro de configura@,{c}@~ao por defeito @'e : ~/.weechat/weechat.rc@*
|
||||
|
||||
Podes editar esse ficheiro para configurar o WeeChat @`a tua maneira, man tamb@'em podes modificar os par@^ametros dentro do WeeChat utilizando o comando @kbd{/set} - @xref{Comandos do WeeChat}.
|
||||
|
||||
@node Recursos de teclado, Comandos do WeeChat, Invocar o WeeChat, Utilizacao
|
||||
@section Recursos de teclado
|
||||
|
||||
@table @kbd
|
||||
@item Seta esquerda / Seta direita
|
||||
Ir um caractere para traz / para a frente na linha de comando@*
|
||||
@*
|
||||
@item Ctrl + Seta esquerda / Ctrl + Seta Direita
|
||||
Ir uma palavra para traz / para a frente na linha de comando@*
|
||||
@*
|
||||
@item Home / End
|
||||
Ir para o in@'icio / para o fim da linha de comando@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Apagar o caractere anterior / seguinte na linha de comando@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Apagar a palavra anterior na linha de comando
|
||||
@*
|
||||
@item Tab
|
||||
Completar o comando ou o nick (@kbd{Tab} novamente : encontrar a pr@'oxima sugest@~ao)@*
|
||||
@*
|
||||
@item Qualquer caractere
|
||||
Inserir o caractere na linha de comando, no s@'itio do cursor@*
|
||||
@*
|
||||
@item Enter
|
||||
Executa o comando ou envia a mensagem@*
|
||||
@*
|
||||
@item Seta para cima / Seta para baixo
|
||||
Repetir os ultimos comandos/mensagens@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Navegar no hist@'orico da janela@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Ir para a janela anterior/seguinte@*
|
||||
@*
|
||||
@item Alt + Seta da esquerda / Alt + Seta da direita
|
||||
Identico a F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Apagar a @'ultima mensagem da barra do info@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node Comandos do WeeChat, , Recursos de teclado, Utilizacao
|
||||
@section Comandos do WeeChat
|
||||
|
||||
N@~AO ESCRITO !
|
||||
|
||||
|
||||
@c ******************************* Extencoes *********************************
|
||||
|
||||
@node Extencoes, Autores/Suporte, Utilizacao, Top
|
||||
@chapter Exten@,{c}@~oes
|
||||
|
||||
@menu
|
||||
* Scripts Perl::
|
||||
* Scripts Python::
|
||||
* Scripts Ruby::
|
||||
@end menu
|
||||
|
||||
@node Scripts Perl, Scripts Python, Extencoes, Extencoes
|
||||
@section Scripts Perl
|
||||
|
||||
@subsection Carregar/Descarregar Scripts Perl
|
||||
|
||||
Os Scripts Perl s@~ao carregados e descarregados com o comando @command{/perl}.
|
||||
(escreve @kbd{/help perl} dentro do WeeChat para obteres ajuda acerca do comando).@*
|
||||
|
||||
@emph{Exemplos:}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Carregar um Script Perl: @kbd{/perl load /tmp/sample.pl}@*
|
||||
@item
|
||||
Descarregar todos os Scripts Perl: @kbd{/perl unload}@*
|
||||
@item
|
||||
Listar todos os Scripts Perl: @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection Interface WeeChat / Perl
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( nome, vers@~ao, fun@,{c}@~ao_de_shutdown, descri@,{c}@~ao );}@*
|
||||
@*
|
||||
Esta @'e a primeira fun@,{c}@~ao a invocar num Script Perl.@*
|
||||
Todos os Scripts Perl para o Weechat devem invocar esta fun@,{c}@~ao.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome @'unico que indentifique o script (cada Script Perl deve ter um @'unico nome)
|
||||
@item @option{vers@~ao}: vers@~ao do script
|
||||
@item @option{fun@,{c}@~ao_de_shutdown}: fun@,{c}@~ao Perl invocada quando o script Ă© descarregado (par@^ametro opcional, se deixado em branco significa que nada deve ser chamado)
|
||||
@item @option{descri@,{c}@~ao}: breve descri@,{c}@~ao do script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::register ("sample", "1.0", "sample_end", "Sample script!");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na janela actual (canal ou servidor).@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::print ("mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( canal, [servidor,] mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na canal.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{canal}: nome da canal
|
||||
@item @option{servidor}: nome interno da servidor
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplos:}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "mensagem");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( atrasa, mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na barra do info.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{atrasa}: depois que isto atrasa (nos segundos), a mensagem estar@'a apagada
|
||||
(se 0, mensagem n@~ao forem apagados).
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::print_infobar (5, "mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( nome, fun@,{c}@~ao );}@*
|
||||
@*
|
||||
Anexa uma fun@,{c}@~ao Perl a uma mensagem de IRC.@*
|
||||
A fun@,{c}@~ao ser@'a invocada de cada vez que a mensagem IRC for recebida.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome da mensagem IRC@*
|
||||
Para conheceres uma lista de mensagens de IRC, por favor lĂŞ o RFC 1459 e/ou o 2812:@*
|
||||
RFC 1459: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{fun@,{c}@~ao}: fun@,{c}@~ao Perl invocada quando a mensagem Ă© recebida
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::add_message_handler ("privmsg", my_function);}@*
|
||||
@code{sub my_function}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $channel, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($hostmask, $null, $channel) = split " ", $channel;}@*
|
||||
@code{@ @ @ @ IRC::print ("host=$hostmask, chan=$channel, msg=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( nome, fun@,{c}@~ao );}@*
|
||||
@*
|
||||
Cria um novo comando do Weechat, ligado a uma fun@,{c}@~ao Perl.@*
|
||||
A fun@,{c}@~ao ser@'a chamada quando o utilizador a invocar utilizando @command{/nome}@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome do novo comando@*
|
||||
Este nome pode pertencer a um comando já existente, o qual ser@'a sobreposto pela fun@,{c}@~ao Perl. Tem cuidado quando fizeres isto: os comandos originais não estar@~ao acessiveis antes de teres descarregado o Script Perl.
|
||||
@item @option{fun@,{c}@~ao}: fun@,{c}@~ao Perl ligada ao comando
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::add_command_handler ("command", my_command);}@*
|
||||
@code{sub my_command}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Argumentos: ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Scripts Python, Scripts Ruby, Scripts Perl, Extencoes
|
||||
@section Scripts Python
|
||||
|
||||
N@~AO DESENVOLVIDO!
|
||||
|
||||
@node Scripts Ruby, , Scripts Python, Extencoes
|
||||
@section Scripts Ruby
|
||||
|
||||
N@~AO DESENVOLVIDO!
|
||||
|
||||
|
||||
@c **************************** Autores/Suporte *****************************
|
||||
|
||||
@node Autores/Suporte, , Extencoes, Top
|
||||
@chapter Autores / Suporte
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Autores::
|
||||
* Obter Suporte::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Autores::
|
||||
* Obter Suporte::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Autores, Obter Suporte, Autores/Suporte, Autores/Suporte
|
||||
@section Autores
|
||||
|
||||
O WeeChat @'e desenvolvido por :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Obter Suporte, Copyright, Autores, Autores/Suporte
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Obter Suporte, , Autores, Autores/Suporte
|
||||
@end ifnothtml
|
||||
@section Obter Suporte
|
||||
|
||||
Antes de pedires suporte, agradecemos se leres toda a documenta@,{c}@~ao e a FAQ.@*
|
||||
(a documenta@,{c}@~ao @'e este documento que est@'as a ler, se n@~ao leste tudo at@'e aqui, est@'a na hora de come@,{c}ares do in@'icio !)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Suporte por IRC:@*
|
||||
- servidor : @b{irc.freenode.net}@*
|
||||
- canal : @b{#weechat}@*@*
|
||||
@item
|
||||
Forum do WeeChat : mais tarde !@*@*
|
||||
@item
|
||||
Suporte por lista de correio-e :@*
|
||||
- para te inscreveres/desinscreveres :@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- para enviares uma mensagem para a lista :@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Os arquivos da lista est@~ao aqui :@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Para mais detalhes, v@^e tamb@'em a p@'agina de suporte do WeeChat :@*
|
||||
@uref{http://weechat.flashtux.org/support.php}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Obter Suporte, Autores/Suporte
|
||||
@section Copyright
|
||||
|
||||
Este manual documenta o cliente de IRC WeeChat, Ele faz parte do WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
Tradu@,{c}@~ao portuguesa de Jo@~ao Jer@'onimo <@email{j_j_b_o@@sapo.pt, j_j_b_o AT sapo.pt}>@*
|
||||
@*
|
||||
A utiliza@,{c}@~ao deste documento @'e regida pela GNU General Public
|
||||
License vers@~ao 2 ou posterior.@*
|
||||
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
|
||||
Binary file not shown.
+7
-3
@@ -1,24 +1,28 @@
|
||||
./src/irc/irc-nick.c
|
||||
./src/irc/irc-server.c
|
||||
./src/irc/irc-channel.c
|
||||
./src/irc/irc.h
|
||||
./src/irc/irc-commands.c
|
||||
./src/irc/irc-display.c
|
||||
./src/irc/irc-send.c
|
||||
./src/irc/irc-recv.c
|
||||
./src/plugins/perl/wee-perl.c
|
||||
./src/plugins/perl/wee-perl.h
|
||||
./src/plugins/plugins.c
|
||||
./src/plugins/plugins.h
|
||||
./src/gui/curses/gui-input.c
|
||||
./src/gui/curses/gui-display.c
|
||||
./src/gui/gtk/gui-display.c
|
||||
./src/gui/gtk/gui-input.c
|
||||
./src/gui/gui.h
|
||||
./src/gui/gui-common.c
|
||||
./src/common/command.c
|
||||
./src/common/completion.c
|
||||
./src/common/history.c
|
||||
./src/common/weechat.c
|
||||
./src/common/weeconfig.c
|
||||
./src/irc/irc.h
|
||||
./src/gui/gui.h
|
||||
./src/common/command.h
|
||||
./src/common/completion.h
|
||||
./src/common/history.h
|
||||
./src/common/weechat.h
|
||||
./src/common/weeconfig.c
|
||||
./src/common/weeconfig.h
|
||||
|
||||
+1947
-1748
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,4 +15,4 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
SUBDIRS = common irc gui
|
||||
SUBDIRS = common irc plugins gui
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
+448
-217
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -34,6 +32,7 @@
|
||||
#include "weeconfig.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* WeeChat internal commands */
|
||||
@@ -59,6 +58,11 @@ t_weechat_command weechat_commands[] =
|
||||
{ "help", N_("display help about commands"),
|
||||
N_("[command]"), N_("command: name of a WeeChat or IRC command"),
|
||||
0, 1, weechat_cmd_help, NULL },
|
||||
{ "perl", N_("list/load/unload Perl scripts"),
|
||||
N_("[load filename] | [unload]"),
|
||||
N_("filename: Perl script (file) to load\n"
|
||||
"Without argument, /perl command lists all loaded Perl scripts."),
|
||||
0, 2, weechat_cmd_perl, NULL },
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[servername hostname port [-auto | -noauto] [-pwd password] [-nicks nick1 "
|
||||
@@ -80,7 +84,7 @@ t_weechat_command weechat_commands[] =
|
||||
0, 1, weechat_cmd_save, NULL },
|
||||
{ "set", N_("set config parameters"),
|
||||
N_("[option [value]]"), N_("option: name of an option\nvalue: value for option"),
|
||||
0, 2, weechat_cmd_set, NULL },
|
||||
0, MAX_ARGS, NULL, weechat_cmd_set },
|
||||
{ "unalias", N_("remove an alias"),
|
||||
N_("alias_name"), N_("alias_name: name of alias to remove"),
|
||||
1, 1, NULL, weechat_cmd_unalias },
|
||||
@@ -203,14 +207,14 @@ index_command_build ()
|
||||
i = 0;
|
||||
while (weechat_commands[i].command_name)
|
||||
{
|
||||
index_command_new (weechat_commands[i].command_name);
|
||||
(void) index_command_new (weechat_commands[i].command_name);
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while (irc_commands[i].command_name)
|
||||
{
|
||||
if (irc_commands[i].cmd_function_args || irc_commands[i].cmd_function_1arg)
|
||||
index_command_new (irc_commands[i].command_name);
|
||||
(void) index_command_new (irc_commands[i].command_name);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -359,8 +363,11 @@ alias_new (char *alias_name, char *alias_command)
|
||||
{
|
||||
new_alias->alias_name = strdup (alias_name);
|
||||
new_alias->alias_command = (char *)malloc (strlen (alias_command) + 2);
|
||||
new_alias->alias_command[0] = '/';
|
||||
strcpy (new_alias->alias_command + 1, alias_command);
|
||||
if (new_alias->alias_command)
|
||||
{
|
||||
new_alias->alias_command[0] = '/';
|
||||
strcpy (new_alias->alias_command + 1, alias_command);
|
||||
}
|
||||
alias_insert_sorted (new_alias);
|
||||
return new_alias;
|
||||
}
|
||||
@@ -405,7 +412,7 @@ alias_free (t_weechat_alias *alias)
|
||||
*/
|
||||
|
||||
char **
|
||||
explode_string (char *string, char *separators, int num_items_max,
|
||||
explode_string (/*@null@*/ char *string, char *separators, int num_items_max,
|
||||
int *num_items)
|
||||
{
|
||||
int i, n_items;
|
||||
@@ -498,7 +505,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
char *command, *pos, *ptr_args, **argv, *alias_command;
|
||||
t_weechat_alias *ptr_alias;
|
||||
|
||||
if ((!string[0]) || (string[0] != '/'))
|
||||
if ((!string) || (!string[0]) || (string[0] != '/'))
|
||||
return 0;
|
||||
|
||||
command = strdup (string);
|
||||
@@ -517,154 +524,165 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
ptr_args = NULL;
|
||||
}
|
||||
|
||||
argv = explode_string (ptr_args, " ", 0, &argc);
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
if (!plugin_exec_command (command + 1, ptr_args))
|
||||
{
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
argv = explode_string (ptr_args, " ", 0, &argc);
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
{
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
{
|
||||
if (weechat_commands[i].min_arg ==
|
||||
weechat_commands[i].max_arg)
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
else
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (weechat_commands[i].cmd_function_args)
|
||||
return_code = (int) (weechat_commands[i].cmd_function_args)
|
||||
(argc, argv);
|
||||
else
|
||||
return_code = (int) (weechat_commands[i].cmd_function_1arg)
|
||||
(ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s %s command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
if ((argc < irc_commands[i].min_arg)
|
||||
|| (argc > irc_commands[i].max_arg))
|
||||
{
|
||||
if (irc_commands[i].min_arg == irc_commands[i].max_arg)
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((irc_commands[i].need_connection) &&
|
||||
((!server) || (!server->is_connected)))
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s command \"%s\" needs a server connection!\n"),
|
||||
WEECHAT_ERROR, irc_commands[i].command_name);
|
||||
return 0;
|
||||
if (weechat_commands[i].min_arg ==
|
||||
weechat_commands[i].max_arg)
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
else
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
}
|
||||
if (irc_commands[i].cmd_function_args)
|
||||
return_code = (int) (irc_commands[i].cmd_function_args)
|
||||
(server, argc, argv);
|
||||
else
|
||||
return_code = (int) (irc_commands[i].cmd_function_1arg)
|
||||
(server, ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, command + 1);
|
||||
{
|
||||
if (weechat_commands[i].cmd_function_args)
|
||||
return_code = (int) (weechat_commands[i].cmd_function_args)
|
||||
(argc, argv);
|
||||
else
|
||||
return_code = (int) (weechat_commands[i].cmd_function_1arg)
|
||||
(ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s %s command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if (ptr_args)
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
length1 = strlen (ptr_alias->alias_command);
|
||||
length2 = strlen (ptr_args);
|
||||
alias_command = (char *)malloc (length1 + 1 + length2 + 1);
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
if ((argc < irc_commands[i].min_arg)
|
||||
|| (argc > irc_commands[i].max_arg))
|
||||
{
|
||||
if (irc_commands[i].min_arg == irc_commands[i].max_arg)
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((irc_commands[i].need_connection) &&
|
||||
((!server) || (!server->is_connected)))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s command \"%s\" needs a server connection!\n"),
|
||||
WEECHAT_ERROR, irc_commands[i].command_name);
|
||||
return 0;
|
||||
}
|
||||
if (irc_commands[i].cmd_function_args)
|
||||
return_code = (int) (irc_commands[i].cmd_function_args)
|
||||
(server, argc, argv);
|
||||
else
|
||||
return_code = (int) (irc_commands[i].cmd_function_1arg)
|
||||
(server, ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
}
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
if (ptr_args)
|
||||
{
|
||||
length1 = strlen (ptr_alias->alias_command);
|
||||
length2 = strlen (ptr_args);
|
||||
alias_command = (char *)malloc (length1 + 1 + length2 + 1);
|
||||
if (alias_command)
|
||||
{
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
}
|
||||
(void) exec_weechat_command (server, alias_command);
|
||||
if (alias_command)
|
||||
free (alias_command);
|
||||
}
|
||||
else
|
||||
(void) exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command \"%s\" (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
}
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command \"%s\" (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -683,7 +701,7 @@ user_command (t_irc_server *server, char *command)
|
||||
if ((command[0] == '/') && (command[1] != '/'))
|
||||
{
|
||||
/* WeeChat internal command (or IRC command) */
|
||||
exec_weechat_command (server, command);
|
||||
(void) exec_weechat_command (server, command);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -759,9 +777,9 @@ weechat_cmd_alias (char *arguments)
|
||||
WEECHAT_ERROR, "alias");
|
||||
return -1;
|
||||
}
|
||||
index_command_new (arguments);
|
||||
if (!alias_new (arguments, pos))
|
||||
return -1;
|
||||
(void) index_command_new (arguments);
|
||||
gui_printf (NULL, _("Alias \"%s\" => \"%s\" created\n"),
|
||||
arguments, pos);
|
||||
}
|
||||
@@ -840,7 +858,10 @@ weechat_cmd_connect (int argc, char **argv)
|
||||
return -1;
|
||||
}
|
||||
if (!ptr_server->window)
|
||||
gui_window_new (ptr_server, NULL);
|
||||
{
|
||||
if (!gui_window_new (ptr_server, NULL, 1))
|
||||
return -1;
|
||||
}
|
||||
if (server_connect (ptr_server))
|
||||
{
|
||||
irc_login (ptr_server);
|
||||
@@ -973,6 +994,155 @@ weechat_cmd_help (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_perl: list/load/unload Perl scripts
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_perl (int argc, char **argv)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
t_plugin_script *ptr_plugin_script;
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
int handler_found, path_length;
|
||||
char *path_script;
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
switch (argc)
|
||||
{
|
||||
case 0:
|
||||
/* list registered Perl scripts */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Registered Perl scripts:\n"));
|
||||
if (perl_scripts)
|
||||
{
|
||||
for (ptr_plugin_script = perl_scripts; ptr_plugin_script;
|
||||
ptr_plugin_script = ptr_plugin_script->next_script)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, " %s v%s%s%s\n",
|
||||
ptr_plugin_script->name,
|
||||
ptr_plugin_script->version,
|
||||
(ptr_plugin_script->description[0]) ? " - " : "",
|
||||
ptr_plugin_script->description);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
/* list Perl message handlers */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl message handlers:\n"));
|
||||
handler_found = 0;
|
||||
for (ptr_plugin_handler = plugin_msg_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
{
|
||||
handler_found = 1;
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" IRC(%s) => Perl(%s)\n"),
|
||||
ptr_plugin_handler->name,
|
||||
ptr_plugin_handler->function_name);
|
||||
}
|
||||
}
|
||||
if (!handler_found)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
/* list Perl command handlers */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl command handlers:\n"));
|
||||
handler_found = 0;
|
||||
for (ptr_plugin_handler = plugin_cmd_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
{
|
||||
handler_found = 1;
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" Command /%s => Perl(%s)\n"),
|
||||
ptr_plugin_handler->name,
|
||||
ptr_plugin_handler->function_name);
|
||||
}
|
||||
}
|
||||
if (!handler_found)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
break;
|
||||
case 1:
|
||||
if (strcmp (argv[0], "unload") == 0)
|
||||
{
|
||||
/* unload all Perl scripts */
|
||||
plugin_unload (PLUGIN_TYPE_PERL, NULL);
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl scripts unloaded\n"));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (strcmp (argv[0], "load") == 0)
|
||||
{
|
||||
/* load Perl script */
|
||||
if (strstr(argv[1], DIR_SEPARATOR))
|
||||
path_script = NULL;
|
||||
else
|
||||
{
|
||||
path_length = strlen (weechat_home) + strlen (argv[1]) + 7;
|
||||
path_script = (char *) malloc (path_length * sizeof (char));
|
||||
snprintf (path_script, path_length, "%s%s%s%s%s",
|
||||
weechat_home, DIR_SEPARATOR, "perl",
|
||||
DIR_SEPARATOR, argv[1]);
|
||||
}
|
||||
plugin_load (PLUGIN_TYPE_PERL,
|
||||
(path_script) ? path_script : argv[1]);
|
||||
if (path_script)
|
||||
free (path_script);
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s unknown option for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "perl");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "perl");
|
||||
}
|
||||
#else
|
||||
gui_printf (NULL,
|
||||
_("WeeChat was build without Perl support.\n"
|
||||
"Please rebuild WeeChat with "
|
||||
"\"--enable-perl\" option for ./configure script\n"));
|
||||
/* make gcc happy */
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#endif /* PLUGIN_PERL */
|
||||
|
||||
#endif /* PLUGINS */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_save: save options to disk
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_save (int argc, char **argv)
|
||||
{
|
||||
return (config_write ((argc == 1) ? argv[0] : NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_server: list, add or remove server(s)
|
||||
*/
|
||||
@@ -1012,8 +1182,11 @@ weechat_cmd_server (int argc, char **argv)
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Autoconnect: %s\n"),
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"));
|
||||
_(" Autoconnect: %s%s\n"),
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"),
|
||||
(ptr_server->command_line) ?
|
||||
_(" (temporary server, will not be saved)") :
|
||||
"");
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
@@ -1244,11 +1417,11 @@ weechat_cmd_server (int argc, char **argv)
|
||||
}
|
||||
|
||||
/* create new server */
|
||||
new_server = server_new (server.name, server.autoconnect, server.address,
|
||||
server.port, server.password, server.nick1,
|
||||
server.nick2, server.nick3, server.username,
|
||||
server.realname, server.command,
|
||||
server.autojoin);
|
||||
new_server = server_new (server.name, server.autoconnect, 0,
|
||||
server.address, server.port, server.password,
|
||||
server.nick1, server.nick2, server.nick3,
|
||||
server.username, server.realname,
|
||||
server.command, server.autojoin);
|
||||
if (new_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
@@ -1268,7 +1441,7 @@ weechat_cmd_server (int argc, char **argv)
|
||||
|
||||
if (new_server->autoconnect)
|
||||
{
|
||||
gui_window_new (new_server, NULL);
|
||||
(void) gui_window_new (new_server, NULL, 1);
|
||||
if (server_connect (new_server))
|
||||
irc_login (new_server);
|
||||
}
|
||||
@@ -1278,87 +1451,145 @@ weechat_cmd_server (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_save: set options
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_save (int argc, char **argv)
|
||||
{
|
||||
return (config_write ((argc == 1) ? argv[0] : NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_set: set options
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_set (int argc, char **argv)
|
||||
weechat_cmd_set (char *arguments)
|
||||
{
|
||||
char *option, *value;
|
||||
int i, j, section_displayed;
|
||||
char *color_name;
|
||||
t_config_option *ptr_option;
|
||||
int number_found;
|
||||
|
||||
/* TODO: complete /set command */
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
option = NULL;
|
||||
value = NULL;
|
||||
if (arguments && arguments[0])
|
||||
{
|
||||
section_displayed = 0;
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
option = arguments;
|
||||
value = strchr (option, ' ');
|
||||
if (value)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
value[0] = '\0';
|
||||
value++;
|
||||
while (value[0] == ' ')
|
||||
value++;
|
||||
}
|
||||
}
|
||||
|
||||
if (value && value[0])
|
||||
{
|
||||
ptr_option = config_option_search (option);
|
||||
if (ptr_option)
|
||||
{
|
||||
if (ptr_option->handler_change == NULL)
|
||||
{
|
||||
if ((argc == 0) ||
|
||||
((argc > 0)
|
||||
&& (strstr (weechat_options[i][j].option_name, argv[0])
|
||||
!= NULL)))
|
||||
gui_printf (NULL,
|
||||
_("%s option '%s' can not be changed while WeeChat is running\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (config_option_set_value (ptr_option, value) == 0)
|
||||
{
|
||||
if (!section_displayed)
|
||||
(void) (ptr_option->handler_change());
|
||||
gui_printf (NULL, "[%s]\n", config_get_section (ptr_option));
|
||||
gui_printf (NULL, " %s = %s\n", option, value);
|
||||
}
|
||||
else
|
||||
gui_printf (NULL, _("%s incorrect value for option '%s'\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_printf (NULL, _("%s config option '%s' not found\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
number_found = 0;
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
section_displayed = 0;
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
if ((!option) ||
|
||||
((option) && (option[0])
|
||||
&& (strstr (weechat_options[i][j].option_name, option)
|
||||
!= NULL)))
|
||||
{
|
||||
gui_printf (NULL, "[%s]\n",
|
||||
config_sections[i].section_name);
|
||||
section_displayed = 1;
|
||||
}
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(*weechat_options[i][j].ptr_int) ?
|
||||
"ON" : "OFF");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
gui_printf (NULL,
|
||||
" %s = %d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
*weechat_options[i][j].ptr_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
color_name = gui_get_color_by_value (*weechat_options[i][j].ptr_int);
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(color_name) ? color_name : _("(unknown)"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].
|
||||
option_name,
|
||||
(*weechat_options[i][j].
|
||||
ptr_string) ?
|
||||
*weechat_options[i][j].
|
||||
ptr_string : "");
|
||||
break;
|
||||
if (!section_displayed)
|
||||
{
|
||||
gui_printf (NULL, "[%s]\n",
|
||||
config_sections[i].section_name);
|
||||
section_displayed = 1;
|
||||
}
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(*weechat_options[i][j].ptr_int) ?
|
||||
"ON" : "OFF");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
gui_printf (NULL,
|
||||
" %s = %d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
*weechat_options[i][j].ptr_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
color_name = gui_get_color_by_value (*weechat_options[i][j].ptr_int);
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(color_name) ? color_name : _("(unknown)"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].
|
||||
option_name,
|
||||
(*weechat_options[i][j].
|
||||
ptr_string) ?
|
||||
*weechat_options[i][j].
|
||||
ptr_string : "");
|
||||
break;
|
||||
}
|
||||
number_found++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (number_found == 0)
|
||||
{
|
||||
if (value)
|
||||
gui_printf (NULL, _("No config option found with '%s'\n"),
|
||||
value);
|
||||
else
|
||||
gui_printf (NULL, _("No config option found with '%s'\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value)
|
||||
gui_printf (NULL, _("%d config option(s) found with '%s'\n"),
|
||||
number_found, value);
|
||||
else
|
||||
gui_printf (NULL, _("%d config option(s) found\n"),
|
||||
number_found);
|
||||
}
|
||||
}
|
||||
gui_printf (NULL, "(TODO) \"/set\" command not fully developed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -62,6 +60,7 @@ struct t_index_command
|
||||
extern t_weechat_alias *weechat_alias;
|
||||
extern t_index_command *index_commands;
|
||||
|
||||
extern t_index_command *index_command_search (char *);
|
||||
extern t_index_command *index_command_new (char *);
|
||||
extern void index_command_build ();
|
||||
extern t_weechat_alias *alias_new (char *, char *);
|
||||
@@ -72,9 +71,10 @@ extern int weechat_cmd_clear (int, char **);
|
||||
extern int weechat_cmd_connect (int, char **);
|
||||
extern int weechat_cmd_disconnect (int, char **);
|
||||
extern int weechat_cmd_help (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_perl (int, char **);
|
||||
extern int weechat_cmd_save (int, char **);
|
||||
extern int weechat_cmd_set (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_set (char *);
|
||||
extern int weechat_cmd_unalias (char *);
|
||||
|
||||
#endif /* command.h */
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+308
-137
@@ -16,10 +16,8 @@
|
||||
* ### ###
|
||||
* ############################################################################
|
||||
*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -50,26 +48,40 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "weeconfig.h"
|
||||
#include "command.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* char *display_name; */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
char *weechat_home; /* WeeChat home dir. (example: /home/toto/.weechat) */
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log) */
|
||||
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
int server_cmd_line; /* at least one server on WeeChat command line */
|
||||
|
||||
|
||||
/*
|
||||
* log_printf: displays a message in WeeChat log (~/.weechat/weechat.log)
|
||||
* my_sigint: SIGINT handler, do nothing (just ignore this signal)
|
||||
* Prevents user for exiting with Ctrl-C
|
||||
*/
|
||||
|
||||
void
|
||||
log_printf (char *message, ...)
|
||||
my_sigint ()
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_log_printf: displays a message in WeeChat log (~/.weechat/weechat.log)
|
||||
*/
|
||||
|
||||
void
|
||||
wee_log_printf (char *message, ...)
|
||||
{
|
||||
static char buffer[4096];
|
||||
va_list argptr;
|
||||
@@ -85,13 +97,89 @@ log_printf (char *message, ...)
|
||||
|
||||
seconds = time (NULL);
|
||||
date_tmp = localtime (&seconds);
|
||||
fprintf (log_file, "[%04d-%02d-%02d %02d:%02d:%02d] %s",
|
||||
date_tmp->tm_year + 1900, date_tmp->tm_mon + 1, date_tmp->tm_mday,
|
||||
date_tmp->tm_hour, date_tmp->tm_min, date_tmp->tm_sec,
|
||||
buffer);
|
||||
if (date_tmp)
|
||||
fprintf (log_file, "[%04d-%02d-%02d %02d:%02d:%02d] %s",
|
||||
date_tmp->tm_year + 1900, date_tmp->tm_mon + 1, date_tmp->tm_mday,
|
||||
date_tmp->tm_hour, date_tmp->tm_min, date_tmp->tm_sec,
|
||||
buffer);
|
||||
else
|
||||
fprintf (log_file, "[????-??-?? ??:??:??] %s", buffer);
|
||||
fflush (log_file);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_display_config_options: display config options
|
||||
*/
|
||||
|
||||
void wee_display_config_options ()
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
printf (_("WeeChat configuration options (~/.weechat/weechat.rc):\n\n"));
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if (weechat_options[i])
|
||||
{
|
||||
j = 0;
|
||||
while (weechat_options[i][j].option_name)
|
||||
{
|
||||
printf ("* %s:\n",
|
||||
weechat_options[i][j].option_name);
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
printf (_(" . type boolean (values: 'on' or 'off')\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_int == BOOL_TRUE) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
printf (_(" . type integer (values: between %d and %d)\n"),
|
||||
weechat_options[i][j].min,
|
||||
weechat_options[i][j].max);
|
||||
printf (_(" . default value: %d\n"),
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
printf (_(" . type string (values: "));
|
||||
k = 0;
|
||||
while (weechat_options[i][j].array_values[k])
|
||||
{
|
||||
printf ("'%s'",
|
||||
weechat_options[i][j].array_values[k]);
|
||||
if (weechat_options[i][j].array_values[k + 1])
|
||||
printf (", ");
|
||||
k++;
|
||||
}
|
||||
printf (")\n");
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
printf (_(" . type color (Curses or Gtk color, look at WeeChat doc)\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
printf (_(" . type string (any string)\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
}
|
||||
printf (_(" . description: %s\n\n"),
|
||||
gettext (weechat_options[i][j].long_description));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf (_("Moreover, you can define aliases in [alias] section, by adding lines like:\n"));
|
||||
printf ("j=join\n");
|
||||
printf (_("where 'j' is alias name, and 'join' associated command.\n\n"));
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_parse_args: parse command line args
|
||||
*/
|
||||
@@ -100,39 +188,56 @@ void
|
||||
wee_parse_args (int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
t_irc_server server_tmp;
|
||||
|
||||
server_cmd_line = 0;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if ((strcmp (argv[i], "-h") == 0)
|
||||
|| (strcmp (argv[i], "--help") == 0))
|
||||
if ((strcmp (argv[i], "-c") == 0)
|
||||
|| (strcmp (argv[i], "--config") == 0))
|
||||
{
|
||||
printf ("\n%s%s", WEE_USAGE);
|
||||
exit (0);
|
||||
wee_display_config_options ();
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strcmp (argv[i], "-h") == 0)
|
||||
|| (strcmp (argv[i], "--help") == 0))
|
||||
{
|
||||
printf ("\n" WEE_USAGE1, argv[0], argv[0]);
|
||||
printf ("%s", WEE_USAGE2);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strcmp (argv[i], "-l") == 0)
|
||||
|| (strcmp (argv[i], "--license") == 0))
|
||||
{
|
||||
printf ("\n%s%s", WEE_LICENSE);
|
||||
exit (0);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
/*else if ((strcmp (argv[i], "-d") == 0)
|
||||
|| (strcmp (argv[i], "--display") == 0))
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
fprintf (stderr,
|
||||
_("%s no display specified (parameter '%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
else
|
||||
{
|
||||
display_name = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
}*/
|
||||
else if ((strcmp (argv[i], "-v") == 0)
|
||||
|| (strcmp (argv[i], "--version") == 0))
|
||||
{
|
||||
printf (PACKAGE_VERSION "\n");
|
||||
exit (0);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strncasecmp (argv[i], "irc://", 6) == 0))
|
||||
{
|
||||
if (server_init_with_url (argv[i], &server_tmp) < 0)
|
||||
{
|
||||
fprintf (stderr, _("%s invalid syntax for IRC server ('%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!server_new (server_tmp.name, 0, 1,
|
||||
server_tmp.address, server_tmp.port,
|
||||
server_tmp.password, server_tmp.nick1,
|
||||
server_tmp.nick2, server_tmp.nick3,
|
||||
NULL, NULL, NULL, server_tmp.autojoin))
|
||||
fprintf (stderr, _("%s unable to create server ('%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
server_destroy (&server_tmp);
|
||||
server_cmd_line = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -144,30 +249,112 @@ wee_parse_args (int argc, char *argv[])
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_create_home_dir: create weechat home directory (if not found)
|
||||
* wee_create_dir: create a directory
|
||||
* return: 1 if ok (or directory already exists)
|
||||
* 0 if error
|
||||
*/
|
||||
|
||||
void
|
||||
wee_create_home_dir ()
|
||||
int
|
||||
wee_create_dir (char *directory)
|
||||
{
|
||||
char *weechat_home_dir;
|
||||
int return_code;
|
||||
|
||||
weechat_home_dir =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (weechat_home_dir, "%s/.weechat", getenv ("HOME"));
|
||||
return_code = mkdir (weechat_home_dir, 0755);
|
||||
if (return_code < 0)
|
||||
if (mkdir (directory, 0755) < 0)
|
||||
{
|
||||
/* exit if error (except if directory already exists) */
|
||||
if (errno != EEXIST)
|
||||
{
|
||||
fprintf (stderr, _("%s cannot create directory \"%s\"\n"),
|
||||
WEECHAT_ERROR, weechat_home_dir);
|
||||
free (weechat_home_dir);
|
||||
exit (1);
|
||||
WEECHAT_ERROR, directory);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
free (weechat_home_dir);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_create_home_dirs: create (if not found):
|
||||
* - WeeChat home directory ("~/.weechat")
|
||||
* - "perl" directory (and "autoload")
|
||||
* - "ruby" directory (and "autoload")
|
||||
* - "python" directory (and "autoload")
|
||||
*/
|
||||
|
||||
void
|
||||
wee_create_home_dirs ()
|
||||
{
|
||||
char *ptr_home, *dir_name;
|
||||
int dir_length;
|
||||
|
||||
/* TODO: rewrite this code for Windows version */
|
||||
ptr_home = getenv ("HOME");
|
||||
if (!ptr_home)
|
||||
{
|
||||
fprintf (stderr, _("%s unable to get HOME directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
dir_length = strlen (ptr_home) + 10;
|
||||
weechat_home =
|
||||
(char *) malloc (dir_length * sizeof (char));
|
||||
if (!weechat_home)
|
||||
{
|
||||
fprintf (stderr, _("%s not enough memory for home directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
snprintf (weechat_home, dir_length, "%s%s.weechat", ptr_home,
|
||||
DIR_SEPARATOR);
|
||||
|
||||
/* create home directory "~/.weechat" ; error is fatal */
|
||||
if (!wee_create_dir (weechat_home))
|
||||
{
|
||||
fprintf (stderr, _("%s unable to create ~/.weechat directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
dir_length = strlen (weechat_home) + 64;
|
||||
dir_name = (char *) malloc (dir_length * sizeof (char));
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
/* create "~/.weechat/perl" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"perl");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/perl/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "perl", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLUGIN_PYTHON
|
||||
/* create "~/.weechat/python" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"python");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/python/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "python", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLUGIN_RUBY
|
||||
/* create "~/.weechat/ruby" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"ruby");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/ruby/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "ruby", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
free (dir_name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -192,86 +379,27 @@ wee_init_vars ()
|
||||
void
|
||||
wee_init_log ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_LOG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
snprintf (filename, filename_length, "%s/" WEECHAT_LOG_NAME, weechat_home);
|
||||
if ((log_file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
free (filename);
|
||||
fprintf (stderr,
|
||||
_("%s unable to create/append to log file (~/.weechat/"
|
||||
WEECHAT_LOG_NAME), WEECHAT_ERROR);
|
||||
}
|
||||
_("%s unable to create/append to log file (~/.weechat/%s)"),
|
||||
WEECHAT_WARNING, WEECHAT_LOG_NAME);
|
||||
free (filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
* weechat_welcome_message: display WeeChat welcome message - yeah!
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
weechat_welcome_message ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* pre-initiliaze interface */
|
||||
gui_pre_init (&argc, &argv);
|
||||
|
||||
/* initialize variables */
|
||||
wee_init_vars ();
|
||||
|
||||
/* parse command line args */
|
||||
wee_parse_args (argc, argv);
|
||||
|
||||
/* create weechat home directory */
|
||||
wee_create_home_dir ();
|
||||
|
||||
/* init log file */
|
||||
wee_init_log ();
|
||||
|
||||
/* build commands index (sorted), for completion */
|
||||
index_command_build ();
|
||||
|
||||
/* read configuration */
|
||||
switch (config_read ())
|
||||
{
|
||||
case 0: /* success */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* init gui */
|
||||
gui_init ();
|
||||
|
||||
/* Welcome message - yeah! */
|
||||
if (cfg_look_startup_logo)
|
||||
{
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
@@ -303,27 +431,70 @@ main (int argc, char *argv[])
|
||||
cfg_look_startup_version)
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
gui_main_loop ();
|
||||
server_disconnect_all ();
|
||||
|
||||
/* save config file */
|
||||
config_write (NULL);
|
||||
|
||||
/* program ending */
|
||||
wee_shutdown ();
|
||||
|
||||
/* make gcc happy (statement never executed) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, ""); /* initialize gettext */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
signal (SIGINT, my_sigint); /* ignore SIGINT signal */
|
||||
gui_pre_init (&argc, &argv); /* pre-initiliaze interface */
|
||||
wee_init_vars (); /* initialize some variables */
|
||||
wee_parse_args (argc, argv); /* parse command line args */
|
||||
wee_create_home_dirs (); /* create WeeChat directories */
|
||||
wee_init_log (); /* init log file */
|
||||
index_command_build (); /* build commands index for completion */
|
||||
|
||||
switch (config_read ()) /* read configuration */
|
||||
{
|
||||
case 0: /* config file OK */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
if (config_create_default () < 0)
|
||||
return EXIT_FAILURE;
|
||||
if (config_read () != 0)
|
||||
return EXIT_FAILURE;
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
gui_init (); /* init WeeChat interface */
|
||||
plugin_init (); /* init plugin interface(s) */
|
||||
weechat_welcome_message (); /* display WeeChat welcome message */
|
||||
/* auto-connect to servers */
|
||||
server_auto_connect (server_cmd_line);
|
||||
|
||||
gui_main_loop (); /* WeeChat main loop */
|
||||
|
||||
plugin_end (); /* end plugin interface(s) */
|
||||
server_disconnect_all (); /* disconnect from all servers */
|
||||
(void) config_write (NULL); /* save config file */
|
||||
wee_shutdown (); /* quit WeeChat (oh no, why?) */
|
||||
|
||||
return EXIT_SUCCESS; /* make gcc happy (never executed) */
|
||||
}
|
||||
|
||||
+25
-26
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -45,15 +43,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
#define WEECHAT_COPYRIGHT PACKAGE_NAME " (c) 2003 by Wee Team"
|
||||
#define WEECHAT_COPYRIGHT PACKAGE_NAME " (c) 2004 by Wee Team"
|
||||
#define WEECHAT_WEBSITE "http://weechat.flashtux.org"
|
||||
|
||||
#define WEECHAT_ERROR _(PACKAGE_NAME " Error:")
|
||||
#define WEECHAT_WARNING _(PACKAGE_NAME " Warning:")
|
||||
|
||||
/* debug mode, 0=normal use, 1=some debug msg, 2=full debug (developers only) */
|
||||
#define DEBUG 0
|
||||
|
||||
/* log file */
|
||||
|
||||
#define WEECHAT_LOG_NAME "weechat.log"
|
||||
@@ -61,10 +56,11 @@
|
||||
/* license */
|
||||
|
||||
#define WEE_LICENSE \
|
||||
PACKAGE_STRING " (c) Copyright 2003, compiled on " __DATE__ __TIME__ \
|
||||
"Developed by FlashCode <flashcode@flashtux.org>\n" \
|
||||
PACKAGE_STRING " (c) Copyright 2004, compiled on " __DATE__ " " __TIME__ \
|
||||
"\nDeveloped by FlashCode <flashcode@flashtux.org>\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n" \
|
||||
"Website: " WEECHAT_WEBSITE "\n\n" \
|
||||
"This program is free software; you can redistribute it and/or modify\n" \
|
||||
"it under the terms of the GNU General Public License as published by\n" \
|
||||
"the Free Software Foundation; either version 2 of the License, or\n" \
|
||||
@@ -80,29 +76,32 @@
|
||||
"along with this program; if not, write to the Free Software\n" \
|
||||
"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n"
|
||||
|
||||
#define WEE_USAGE \
|
||||
PACKAGE_STRING " (c) Copyright 2003, compiled on " __DATE__ __TIME__ \
|
||||
"Developed by FlashCode <flashcode@flashtux.org>\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" -h, --help this help screen\n", \
|
||||
#define WEE_USAGE1 \
|
||||
PACKAGE_STRING " (c) Copyright 2004, compiled on " __DATE__ " " __TIME__ \
|
||||
"\nDeveloped by FlashCode, Bounga and Xahlexx - " WEECHAT_WEBSITE "\n\n" \
|
||||
"Usage: %s [options ...]\n" \
|
||||
" or: %s [irc://[nickname[:password]@]irc.example.org[:port][/channel] ...]\n\n"
|
||||
|
||||
#define WEE_USAGE2 \
|
||||
" -c, --config config file help (list of options)\n" \
|
||||
" -h, --help this help screen\n" \
|
||||
" -l, --license display WeeChat license\n" \
|
||||
" -v, --version display WeeChat version\n\n"
|
||||
|
||||
/* " -d, --display choose X display\n" \*/
|
||||
/* directory separator, depending on OS */
|
||||
|
||||
#ifdef _WIN32
|
||||
#define DIR_SEPARATOR "\\"
|
||||
#else
|
||||
#define DIR_SEPARATOR "/"
|
||||
#endif
|
||||
|
||||
/*#define DEFAULT_DISPLAY ":0" */
|
||||
|
||||
|
||||
/*extern char *display_name; */
|
||||
int quit_weechat;
|
||||
/* global variables and functions */
|
||||
|
||||
extern int quit_weechat;
|
||||
extern char *weechat_home;
|
||||
|
||||
extern void log_printf (char *, ...);
|
||||
extern void wee_log_printf (char *, ...);
|
||||
extern void wee_shutdown ();
|
||||
|
||||
#endif /* weechat.h */
|
||||
|
||||
+332
-186
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -19,7 +17,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* config.c: WeeChat configuration */
|
||||
/* weeconfig.c: WeeChat configuration */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@@ -27,10 +25,14 @@
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <time.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "weeconfig.h"
|
||||
@@ -71,70 +73,86 @@ int cfg_look_nickmode;
|
||||
int cfg_look_nickmode_empty;
|
||||
char *cfg_look_no_nickname;
|
||||
char *cfg_look_completor;
|
||||
int cfg_look_infobar;
|
||||
char *cfg_look_infobar_timestamp;
|
||||
int cfg_look_infobar_delay_highlight;
|
||||
|
||||
t_config_option weechat_options_look[] =
|
||||
{ { "look_set_title", N_("set title for terminal window (curses GUI) with name & version"),
|
||||
N_("set title for terminal window (curses GUI) with name & version"),
|
||||
{ { "look_set_title", N_("set title for window (terminal for Curses GUI) with name & version"),
|
||||
N_("set title for window (terminal for Curses GUI) with name & version"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_set_title, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_set_title, NULL, config_change_title },
|
||||
{ "look_startup_logo", N_("display WeeChat logo at startup"),
|
||||
N_("display WeeChat logo at startup"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_startup_logo, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_startup_logo, NULL, config_change_noop },
|
||||
{ "look_startup_version", N_("display WeeChat version at startup"),
|
||||
N_("display WeeChat version at startup"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_startup_version, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_startup_version, NULL, config_change_noop },
|
||||
{ "look_weechat_slogan", N_("WeeChat slogan"),
|
||||
N_("WeeChat slogan (if empty, slogan is not used)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"the geekest IRC client!", NULL, NULL, &cfg_look_weechat_slogan, NULL },
|
||||
"the geekest IRC client!", NULL, NULL, &cfg_look_weechat_slogan, config_change_noop },
|
||||
{ "look_color_nicks", N_("display nick names with different colors"),
|
||||
N_("display nick names with different colors"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_color_nicks, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_color_nicks, NULL, config_change_noop },
|
||||
{ "look_color_actions", N_("display actions with different colors"),
|
||||
N_("display actions with different colors"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_color_actions, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_color_actions, NULL, config_change_noop },
|
||||
{ "look_remove_colors_from_msgs", N_("remove colors from incoming messages"),
|
||||
N_("remove colors from incoming messages"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_remove_colors_from_msgs, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_remove_colors_from_msgs, NULL, config_change_noop },
|
||||
{ "look_nicklist", N_("display nicklist window"),
|
||||
N_("display nicklist window (for channel windows)"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_nicklist, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist, NULL, config_change_windows },
|
||||
{ "look_nicklist_position", N_("nicklist position"),
|
||||
N_("nicklist position (top, left, right (default), bottom)"),
|
||||
OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
|
||||
"right", cfg_look_nicklist_position_values, &cfg_look_nicklist_position, NULL, NULL },
|
||||
"right", cfg_look_nicklist_position_values, &cfg_look_nicklist_position, NULL, config_change_windows },
|
||||
{ "look_nicklist_min_size", N_("min size for nicklist"),
|
||||
N_("min size for nicklist (width or height, depending on look_nicklist_position "
|
||||
"(0 = no min size))"),
|
||||
OPTION_TYPE_INT, 0, 100, 0,
|
||||
NULL, NULL, &cfg_look_nicklist_min_size, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist_min_size, NULL, config_change_windows },
|
||||
{ "look_nicklist_max_size", N_("max size for nicklist"),
|
||||
N_("max size for nicklist (width or height, depending on look_nicklist_position "
|
||||
"(0 = no max size; if min == max and > 0, then size is fixed))"),
|
||||
OPTION_TYPE_INT, 0, 100, 0,
|
||||
NULL, NULL, &cfg_look_nicklist_max_size, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist_max_size, NULL, config_change_windows },
|
||||
{ "look_no_nickname", N_("text to display instead of nick when not connected"),
|
||||
N_("text to display instead of nick when not connected"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"-cmd-", NULL, NULL, &cfg_look_no_nickname, NULL },
|
||||
"-cmd-", NULL, NULL, &cfg_look_no_nickname, config_change_window_content },
|
||||
{ "look_nickmode", N_("display nick mode ((half)op/voice) before each nick"),
|
||||
N_("display nick mode ((half)op/voice) before each nick"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_nickmode, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nickmode, NULL, config_change_windows },
|
||||
{ "look_nickmode_empty", N_("display space if nick mode is not (half)op/voice"),
|
||||
N_("display space if nick mode is not (half)op/voice"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
|
||||
NULL, NULL, &cfg_look_nickmode_empty, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nickmode_empty, NULL, config_change_windows },
|
||||
{ "look_nick_completor", N_("the string inserted after nick completion"),
|
||||
N_("the string inserted after nick completion"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
":", NULL, NULL, &cfg_look_completor, NULL },
|
||||
":", NULL, NULL, &cfg_look_completor, config_change_noop },
|
||||
{ "look_infobar", N_("enable info bar"),
|
||||
N_("enable info bar"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_infobar, NULL, config_change_windows },
|
||||
{ "look_infobar_timestamp", N_("timestamp for time in infobar"),
|
||||
N_("timestamp for time in infobar"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"%B, %A %d %G - %H:%M", NULL, NULL, &cfg_look_infobar_timestamp, config_change_window_content },
|
||||
{ "look_infobar_delay_highlight", N_("delay (in seconds) for highlight messages in infobar"),
|
||||
N_("delay (in seconds) for highlight messages in infobar "
|
||||
"(0 = disable highlight notifications in infobar)"),
|
||||
OPTION_TYPE_INT, 0, INT_MAX, 7,
|
||||
NULL, NULL, &cfg_look_infobar_delay_highlight, NULL, config_change_noop },
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -151,6 +169,7 @@ int cfg_col_chat_nick;
|
||||
int cfg_col_chat_host;
|
||||
int cfg_col_chat_channel;
|
||||
int cfg_col_chat_dark;
|
||||
int cfg_col_chat_highlight;
|
||||
int cfg_col_chat_bg;
|
||||
int cfg_col_status;
|
||||
int cfg_col_status_active;
|
||||
@@ -158,6 +177,9 @@ int cfg_col_status_data_msg;
|
||||
int cfg_col_status_data_other;
|
||||
int cfg_col_status_more;
|
||||
int cfg_col_status_bg;
|
||||
int cfg_col_infobar;
|
||||
int cfg_col_infobar_highlight;
|
||||
int cfg_col_infobar_bg;
|
||||
int cfg_col_input;
|
||||
int cfg_col_input_channel;
|
||||
int cfg_col_input_nick;
|
||||
@@ -176,131 +198,149 @@ t_config_option weechat_options_colors[] =
|
||||
{ "col_title", N_("color for title bar"),
|
||||
N_("color for title bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_title, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_title, NULL, &config_change_color },
|
||||
{ "col_title_bg", N_("background for title bar"),
|
||||
N_("background for title bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_title_bg, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_title_bg, NULL, &config_change_color },
|
||||
|
||||
/* chat window */
|
||||
{ "col_chat", N_("color for chat text"),
|
||||
N_("color for chat text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_chat, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_chat, NULL, &config_change_color },
|
||||
{ "col_chat_time", N_("color for time"),
|
||||
N_("color for time in chat window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_chat_time, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_chat_time, NULL, &config_change_color },
|
||||
{ "col_chat_time_sep", N_("color for time separator"),
|
||||
N_("color for time separator (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"brown", NULL, &cfg_col_chat_time_sep, NULL, NULL },
|
||||
"brown", NULL, &cfg_col_chat_time_sep, NULL, &config_change_color },
|
||||
{ "col_chat_prefix1", N_("color for 1st and 3rd char of prefix"),
|
||||
N_("color for 1st and 3rd char of prefix"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightcyan", NULL, &cfg_col_chat_prefix1, NULL, NULL },
|
||||
"lightcyan", NULL, &cfg_col_chat_prefix1, NULL, &config_change_color },
|
||||
{ "col_chat_prefix2", N_("color for middle char of prefix"),
|
||||
N_("color for middle char of prefix"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_chat_prefix2, NULL, NULL },
|
||||
"white", NULL, &cfg_col_chat_prefix2, NULL, &config_change_color },
|
||||
{ "col_chat_nick", N_("color for nicks in actions"),
|
||||
N_("color for nicks in actions (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightcyan", NULL, &cfg_col_chat_nick, NULL, NULL },
|
||||
"lightcyan", NULL, &cfg_col_chat_nick, NULL, &config_change_color },
|
||||
{ "col_chat_host", N_("color for hostnames"),
|
||||
N_("color for hostnames (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"cyan", NULL, &cfg_col_chat_host, NULL, NULL },
|
||||
"cyan", NULL, &cfg_col_chat_host, NULL, &config_change_color },
|
||||
{ "col_chat_channel", N_("color for channel names in actions"),
|
||||
N_("color for channel names in actions (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_chat_channel, NULL, NULL },
|
||||
"white", NULL, &cfg_col_chat_channel, NULL, &config_change_color },
|
||||
{ "col_chat_dark", N_("color for dark separators"),
|
||||
N_("color for dark separators (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"green", NULL, &cfg_col_chat_dark, NULL, NULL },
|
||||
"green", NULL, &cfg_col_chat_dark, NULL, &config_change_color },
|
||||
{ "col_chat_highlight", N_("color for highlighted nick"),
|
||||
N_("color for highlighted nick (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_chat_highlight, NULL, &config_change_color },
|
||||
{ "col_chat_bg", N_("background for chat"),
|
||||
N_("background for chat window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_chat_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_chat_bg, NULL, &config_change_color },
|
||||
|
||||
/* status window */
|
||||
{ "col_status", N_("color for status bar"),
|
||||
N_("color for status bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_status, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_status, NULL, &config_change_color },
|
||||
{ "col_status_active", N_("color for active window"),
|
||||
N_("color for active window (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_status_active, NULL, NULL },
|
||||
"yellow", NULL, &cfg_col_status_active, NULL, &config_change_color },
|
||||
{ "col_status_data_msg", N_("color for window with new messages"),
|
||||
N_("color for window with new messages (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightred", NULL, &cfg_col_status_data_msg, NULL, NULL },
|
||||
"lightred", NULL, &cfg_col_status_data_msg, NULL, &config_change_color },
|
||||
{ "col_status_data_other", N_("color for window with new data (not messages)"),
|
||||
N_("color for window with new data (not messages) (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightmagenta", NULL, &cfg_col_status_data_other, NULL, NULL },
|
||||
"lightmagenta", NULL, &cfg_col_status_data_other, NULL, &config_change_color },
|
||||
{ "col_status_more", N_("color for \"*MORE*\" text"),
|
||||
N_("color for window with new data (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_status_more, NULL, NULL },
|
||||
"white", NULL, &cfg_col_status_more, NULL, &config_change_color },
|
||||
{ "col_status_bg", N_("background for status window"),
|
||||
N_("background for status window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_status_bg, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_status_bg, NULL, &config_change_color },
|
||||
|
||||
/* infobar window */
|
||||
{ "col_infobar", N_("color for info bar text"),
|
||||
N_("color for info bar text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"black", NULL, &cfg_col_infobar, NULL, &config_change_color },
|
||||
{ "col_infobar_highlight", N_("color for info bar highlight notification"),
|
||||
N_("color for info bar highlight notification"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_infobar_highlight, NULL, &config_change_color },
|
||||
{ "col_infobar_bg", N_("background for info bar window"),
|
||||
N_("background for info bar window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"cyan", NULL, &cfg_col_infobar_bg, NULL, &config_change_color },
|
||||
|
||||
/* input window */
|
||||
{ "col_input", N_("color for input text"),
|
||||
N_("color for input text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_input, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_input, NULL, &config_change_color },
|
||||
{ "col_input_channel", N_("color for input text (channel name)"),
|
||||
N_("color for input text (channel name)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_input_channel, NULL, NULL },
|
||||
"white", NULL, &cfg_col_input_channel, NULL, &config_change_color },
|
||||
{ "col_input_nick", N_("color for input text (nick name)"),
|
||||
N_("color for input text (nick name)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightgreen", NULL, &cfg_col_input_nick, NULL, NULL },
|
||||
"lightgreen", NULL, &cfg_col_input_nick, NULL, &config_change_color },
|
||||
{ "col_input_bg", N_("background for input window"),
|
||||
N_("background for input window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_input_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_input_bg, NULL, &config_change_color },
|
||||
|
||||
/* nick window */
|
||||
{ "col_nick", N_("color for nicknames"),
|
||||
N_("color for nicknames"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_nick, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_nick, NULL, &config_change_color },
|
||||
{ "col_nick_op", N_("color for operator symbol"),
|
||||
N_("color for operator symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightgreen", NULL, &cfg_col_nick_op, NULL, NULL },
|
||||
"lightgreen", NULL, &cfg_col_nick_op, NULL, &config_change_color },
|
||||
{ "col_nick_halfop", N_("color for half-operator symbol"),
|
||||
N_("color for half-operator symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightmagenta", NULL, &cfg_col_nick_halfop, NULL, NULL },
|
||||
"lightmagenta", NULL, &cfg_col_nick_halfop, NULL, &config_change_color },
|
||||
{ "col_nick_voice", N_("color for voice symbol"),
|
||||
N_("color for voice symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_nick_voice, NULL, NULL },
|
||||
"yellow", NULL, &cfg_col_nick_voice, NULL, &config_change_color },
|
||||
{ "col_nick_sep", N_("color for nick separator"),
|
||||
N_("color for nick separator"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_nick_sep, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_nick_sep, NULL, &config_change_color },
|
||||
{ "col_nick_self", N_("color for local nick"),
|
||||
N_("color for local nick"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_nick_self, NULL, NULL },
|
||||
"white", NULL, &cfg_col_nick_self, NULL, &config_change_color },
|
||||
{ "col_nick_private", N_("color for other nick in private window"),
|
||||
N_("color for other nick in private window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"brown", NULL, &cfg_col_nick_private, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_nick_private, NULL, &config_change_color },
|
||||
{ "col_nick_bg", N_("background for nicknames"),
|
||||
N_("background for nicknames"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_nick_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_nick_bg, NULL, &config_change_color },
|
||||
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
@@ -398,8 +438,8 @@ t_config_option weechat_options_dcc[] =
|
||||
NULL, NULL, &cfg_dcc_timeout, NULL, NULL },
|
||||
{ "dcc_download_path", N_("path for incoming files with dcc"),
|
||||
N_("path for writing incoming files with dcc (default: user home)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0, "~",
|
||||
NULL, NULL, &cfg_dcc_download_path, NULL },
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"~", NULL, NULL, &cfg_dcc_download_path, NULL },
|
||||
{ "dcc_upload_path", N_("default path for sending files with dcc"),
|
||||
N_("path for reading files when sending thru dcc (when no path is specified)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0, "~",
|
||||
@@ -528,6 +568,83 @@ get_pos_array_values (char **array, char *string)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_get_section: get section name from option pointer
|
||||
*/
|
||||
|
||||
char *
|
||||
config_get_section (t_config_option *ptr_option)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
/* if option found, return pointer to section name */
|
||||
if (ptr_option == &weechat_options[i][j])
|
||||
return config_sections[i].section_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* option not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_noop: called when an option is changed by /set command
|
||||
* and that no special action is needed after that
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_noop ()
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_title: called when title is changed
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_title ()
|
||||
{
|
||||
gui_set_window_title ();
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_windows: called when windows change (for example nicklist)
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_windows ()
|
||||
{
|
||||
gui_switch_to_window (gui_current_window);
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_window_content: called when content of a window changes
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_window_content ()
|
||||
{
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_color: called when a color is changed by /set command
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_color()
|
||||
{
|
||||
gui_init_colors ();
|
||||
}
|
||||
|
||||
/*
|
||||
* config_option_set_value: set new value for an option
|
||||
* return: 0 if success
|
||||
@@ -575,14 +692,12 @@ config_option_set_value (t_config_option *option, char *value)
|
||||
}
|
||||
|
||||
/*
|
||||
* config_set_value: set new value for an option (found by name)
|
||||
* return: 0 if success
|
||||
* -1 if bad value for option
|
||||
* -2 if option is not found
|
||||
* config_option_search: look for an option and return pointer to this option
|
||||
* if option is not found, NULL is returned
|
||||
*/
|
||||
|
||||
int
|
||||
config_set_value (char *option_name, char *value)
|
||||
t_config_option *
|
||||
config_option_search (char *option_name)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
@@ -592,14 +707,33 @@ config_set_value (char *option_name, char *value)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
/* if option found, assign value and exit */
|
||||
/* if option found, return pointer */
|
||||
if (strcasecmp (weechat_options[i][j].option_name, option_name) == 0)
|
||||
return config_option_set_value (&weechat_options[i][j], value);
|
||||
return &weechat_options[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
/* option not found */
|
||||
return -2;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_set_value: set new value for an option (found by name)
|
||||
* return: 0 if success
|
||||
* -1 if bad value for option
|
||||
* -2 if option is not found
|
||||
*/
|
||||
|
||||
int
|
||||
config_set_value (char *option_name, char *value)
|
||||
{
|
||||
t_config_option *ptr_option;
|
||||
|
||||
ptr_option = config_option_search (option_name);
|
||||
if (ptr_option)
|
||||
return config_option_set_value (ptr_option, value);
|
||||
else
|
||||
return -2;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -634,7 +768,7 @@ config_allocate_server (char *filename, int line_number)
|
||||
return 0;
|
||||
}
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.autoconnect, 0, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname,
|
||||
cfg_server.command, cfg_server.autojoin))
|
||||
@@ -714,15 +848,20 @@ config_default_values ()
|
||||
int
|
||||
config_read ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
FILE *file;
|
||||
int section, line_number, i, option_number;
|
||||
int server_found;
|
||||
char line[1024], *ptr_line, *pos, *pos2;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
if ((file = fopen (filename, "rt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s config file \"%s\" not found.\n"),
|
||||
@@ -899,21 +1038,6 @@ config_read ()
|
||||
}
|
||||
}
|
||||
|
||||
/* set default colors for colors not set */
|
||||
/*for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if (i != CONFIG_SECTION_SERVER)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
if ((weechat_options[i][j].option_type == OPTION_TYPE_COLOR) &&
|
||||
(*weechat_options[i][j].ptr_int == COLOR_NOT_SET))
|
||||
*weechat_options[i][j].ptr_int =
|
||||
gui_get_color_by_name (weechat_options[i][j].default_string);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
|
||||
@@ -930,15 +1054,21 @@ config_read ()
|
||||
int
|
||||
config_create_default ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
char line[1024];
|
||||
FILE *file;
|
||||
int i, j;
|
||||
time_t current_time;
|
||||
struct passwd *my_passwd;
|
||||
char *realname, *pos;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
|
||||
@@ -948,99 +1078,128 @@ config_create_default ()
|
||||
}
|
||||
|
||||
printf (_("%s: creating default config file...\n"), PACKAGE_NAME);
|
||||
log_printf (_("creating default config file\n"));
|
||||
wee_log_printf (_("creating default config file\n"));
|
||||
|
||||
current_time = time (NULL);
|
||||
sprintf (line, _("#\n# %s configuration file, created by "
|
||||
fprintf (file, _("#\n# %s configuration file, created by "
|
||||
"%s v%s on %s#\n"),
|
||||
PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
|
||||
ctime (¤t_time));
|
||||
fputs (line, file);
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
sprintf (line, "\n[%s]\n", config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
fprintf (file, "\n[%s]\n", config_sections[i].section_name);
|
||||
if ((i == CONFIG_SECTION_HISTORY) || (i == CONFIG_SECTION_LOG) ||
|
||||
(i == CONFIG_SECTION_DCC) || (i == CONFIG_SECTION_PROXY))
|
||||
{
|
||||
sprintf (line,
|
||||
fprintf (file,
|
||||
"# WARNING!!! Options for section \"%s\" are not developed!\n",
|
||||
config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
}
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].default_int) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
sprintf (line, "%s=%d\n",
|
||||
fprintf (file, "%s=%d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
case OPTION_TYPE_COLOR:
|
||||
case OPTION_TYPE_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
}
|
||||
fputs (line, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* default aliases */
|
||||
/* TODO: remove comments when missing commands will be ok */
|
||||
fputs ("\n[alias]\n", file);
|
||||
fputs ("SAY=msg *\n", file);
|
||||
fputs ("BYE=quit\n", file);
|
||||
fputs ("EXIT=quit\n", file);
|
||||
fputs ("SIGNOFF=quit\n", file);
|
||||
fputs ("C=clear\n", file);
|
||||
fputs ("CL=clear\n", file);
|
||||
fputs ("# CHAT=dcc chat\n", file);
|
||||
fputs ("# GET=dcc get\n", file);
|
||||
fputs ("# IG=ignore\n", file);
|
||||
fputs ("J=join\n", file);
|
||||
fputs ("K=kick\n", file);
|
||||
fputs ("# KB=kickban\n", file);
|
||||
fputs ("# KN=knockout\n", file);
|
||||
fputs ("LEAVE=part\n", file);
|
||||
fputs ("M=msg\n", file);
|
||||
fputs ("# MUB=unban *\n", file);
|
||||
fputs ("N=names\n", file);
|
||||
fputs ("T=topic\n", file);
|
||||
fputs ("# UB=unban\n", file);
|
||||
fputs ("# UNIG=unignore\n", file);
|
||||
fputs ("# W=who\n", file);
|
||||
fputs ("WC=part\n", file);
|
||||
fputs ("WI=whois\n", file);
|
||||
fputs ("# WW=whowas\n", file);
|
||||
fprintf (file, "\n[alias]\n");
|
||||
fprintf (file, "SAY=msg *\n");
|
||||
fprintf (file, "BYE=quit\n");
|
||||
fprintf (file, "EXIT=quit\n");
|
||||
fprintf (file, "SIGNOFF=quit\n");
|
||||
fprintf (file, "C=clear\n");
|
||||
fprintf (file, "CL=clear\n");
|
||||
fprintf (file, "# CHAT=dcc chat\n");
|
||||
fprintf (file, "# GET=dcc get\n");
|
||||
fprintf (file, "# IG=ignore\n");
|
||||
fprintf (file, "J=join\n");
|
||||
fprintf (file, "K=kick\n");
|
||||
fprintf (file, "# KB=kickban\n");
|
||||
fprintf (file, "# KN=knockout\n");
|
||||
fprintf (file, "LEAVE=part\n");
|
||||
fprintf (file, "M=msg\n");
|
||||
fprintf (file, "# MUB=unban *\n");
|
||||
fprintf (file, "N=names\n");
|
||||
fprintf (file, "T=topic\n");
|
||||
fprintf (file, "# UB=unban\n");
|
||||
fprintf (file, "# UNIG=unignore\n");
|
||||
fprintf (file, "W=who\n");
|
||||
fprintf (file, "WC=part\n");
|
||||
fprintf (file, "WI=whois\n");
|
||||
fprintf (file, "WW=whowas\n");
|
||||
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
fputs ("server_name=freenode\n", file);
|
||||
fputs ("server_autoconnect=on\n", file);
|
||||
fputs ("server_address=irc.freenode.net\n", file);
|
||||
fputs ("server_port=6667\n", file);
|
||||
fputs ("server_password=\n", file);
|
||||
fputs ("server_nick1=weechat_user\n", file);
|
||||
fputs ("server_nick2=weechat2\n", file);
|
||||
fputs ("server_nick3=weechat3\n", file);
|
||||
fputs ("server_username=weechat\n", file);
|
||||
fputs ("server_realname=WeeChat default realname\n", file);
|
||||
fputs ("server_command=\n", file);
|
||||
fputs ("server_autojoin=\n", file);
|
||||
fprintf (file, "\n[server]\n");
|
||||
fprintf (file, "server_name=freenode\n");
|
||||
fprintf (file, "server_autoconnect=on\n");
|
||||
fprintf (file, "server_address=irc.freenode.net\n");
|
||||
fprintf (file, "server_port=6667\n");
|
||||
fprintf (file, "server_password=\n");
|
||||
|
||||
/* Get the user's name from /etc/passwd */
|
||||
if ((my_passwd = getpwuid (geteuid ())) != NULL)
|
||||
{
|
||||
fprintf (file, "server_nick1=%s\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_nick2=%s1\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_nick3=%s2\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_username=%s\n", my_passwd->pw_name);
|
||||
if ((!my_passwd->pw_gecos)
|
||||
|| (my_passwd->pw_gecos[0] == '\0')
|
||||
|| (my_passwd->pw_gecos[0] == ',')
|
||||
|| (my_passwd->pw_gecos[0] == ' '))
|
||||
fprintf (file, "server_realname=%s\n", my_passwd->pw_name);
|
||||
else
|
||||
{
|
||||
realname = strdup (my_passwd->pw_gecos);
|
||||
pos = strchr (realname, ',');
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
fprintf (file, "server_realname=%s\n",
|
||||
realname);
|
||||
if (pos)
|
||||
pos[0] = ',';
|
||||
free (realname);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* default values if /etc/passwd can't be read */
|
||||
fprintf (stderr, "%s: %s (%s).",
|
||||
WEECHAT_WARNING,
|
||||
_("Unable to get user's name"),
|
||||
strerror (errno));
|
||||
fprintf (file, "server_nick1=weechat1\n");
|
||||
fprintf (file, "server_nick2=weechat2\n");
|
||||
fprintf (file, "server_nick3=weechat3\n");
|
||||
fprintf (file, "server_username=weechat\n");
|
||||
fprintf (file, "server_realname=WeeChat default realname\n");
|
||||
}
|
||||
|
||||
fprintf (file, "server_command=\n");
|
||||
fprintf (file, "server_autojoin=\n");
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
@@ -1056,8 +1215,8 @@ config_create_default ()
|
||||
int
|
||||
config_write (char *config_name)
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
char line[1024];
|
||||
FILE *file;
|
||||
int i, j;
|
||||
time_t current_time;
|
||||
@@ -1068,9 +1227,13 @@ config_write (char *config_name)
|
||||
filename = strdup (config_name);
|
||||
else
|
||||
{
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
}
|
||||
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
@@ -1081,118 +1244,101 @@ config_write (char *config_name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
log_printf (_("saving config to disk\n"));
|
||||
wee_log_printf (_("saving config to disk\n"));
|
||||
|
||||
current_time = time (NULL);
|
||||
sprintf (line, _("#\n# %s configuration file, created by "
|
||||
fprintf (file, _("#\n# %s configuration file, created by "
|
||||
"%s v%s on %s#\n"),
|
||||
PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
|
||||
ctime (¤t_time));
|
||||
fputs (line, file);
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
sprintf (line, "\n[%s]\n", config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
fprintf (file, "\n[%s]\n", config_sections[i].section_name);
|
||||
if ((i == CONFIG_SECTION_HISTORY) || (i == CONFIG_SECTION_LOG) ||
|
||||
(i == CONFIG_SECTION_DCC) || (i == CONFIG_SECTION_PROXY))
|
||||
{
|
||||
sprintf (line,
|
||||
fprintf (file,
|
||||
"# WARNING!!! Options for section \"%s\" are not developed!\n",
|
||||
config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
}
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int &&
|
||||
*weechat_options[i][j].ptr_int) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
sprintf (line, "%s=%d\n",
|
||||
fprintf (file, "%s=%d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
*weechat_options[i][j].ptr_int :
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int] :
|
||||
weechat_options[i][j].array_values[weechat_options[i][j].default_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
gui_get_color_by_value (*weechat_options[i][j].ptr_int) :
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_string) ?
|
||||
*weechat_options[i][j].ptr_string :
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
}
|
||||
fputs (line, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* alias section */
|
||||
fputs ("\n[alias]\n", file);
|
||||
fprintf (file, "\n[alias]\n");
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
ptr_alias->alias_name, ptr_alias->alias_command + 1);
|
||||
fputs (line, file);
|
||||
}
|
||||
|
||||
/* server section */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
sprintf (line, "server_name=%s\n", ptr_server->name);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autoconnect=%s\n",
|
||||
(ptr_server->autoconnect) ? "on" : "off");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_address=%s\n", ptr_server->address);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_port=%d\n", ptr_server->port);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_password=%s\n",
|
||||
(ptr_server->password) ? ptr_server->password : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick1=%s\n", ptr_server->nick1);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick2=%s\n", ptr_server->nick2);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick3=%s\n", ptr_server->nick3);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_username=%s\n", ptr_server->username);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_realname=%s\n", ptr_server->realname);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
fputs (line, file);
|
||||
if (!ptr_server->command_line)
|
||||
{
|
||||
fprintf (file, "\n[server]\n");
|
||||
fprintf (file, "server_name=%s\n", ptr_server->name);
|
||||
fprintf (file, "server_autoconnect=%s\n",
|
||||
(ptr_server->autoconnect) ? "on" : "off");
|
||||
fprintf (file, "server_address=%s\n", ptr_server->address);
|
||||
fprintf (file, "server_port=%d\n", ptr_server->port);
|
||||
fprintf (file, "server_password=%s\n",
|
||||
(ptr_server->password) ? ptr_server->password : "");
|
||||
fprintf (file, "server_nick1=%s\n", ptr_server->nick1);
|
||||
fprintf (file, "server_nick2=%s\n", ptr_server->nick2);
|
||||
fprintf (file, "server_nick3=%s\n", ptr_server->nick3);
|
||||
fprintf (file, "server_username=%s\n", ptr_server->username);
|
||||
fprintf (file, "server_realname=%s\n", ptr_server->realname);
|
||||
fprintf (file, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fprintf (file, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
}
|
||||
}
|
||||
|
||||
fclose (file);
|
||||
|
||||
+20
-6
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -72,7 +70,7 @@ struct t_config_option
|
||||
char **array_values;
|
||||
int *ptr_int;
|
||||
char **ptr_string;
|
||||
int (*handler_change)(int *, char **);
|
||||
void (*handler_change)();
|
||||
};
|
||||
|
||||
extern int cfg_look_set_title;
|
||||
@@ -90,6 +88,9 @@ extern int cfg_look_nickmode;
|
||||
extern int cfg_look_nickmode_empty;
|
||||
extern char *cfg_look_no_nickname;
|
||||
extern char *cfg_look_completor;
|
||||
extern int cfg_look_infobar;
|
||||
extern char *cfg_look_infobar_timestamp;
|
||||
extern int cfg_look_infobar_delay_highlight;
|
||||
|
||||
extern int cfg_col_title;
|
||||
extern int cfg_col_title_bg;
|
||||
@@ -102,6 +103,7 @@ extern int cfg_col_chat_nick;
|
||||
extern int cfg_col_chat_host;
|
||||
extern int cfg_col_chat_channel;
|
||||
extern int cfg_col_chat_dark;
|
||||
extern int cfg_col_chat_highlight;
|
||||
extern int cfg_col_chat_bg;
|
||||
extern int cfg_col_status;
|
||||
extern int cfg_col_status_active;
|
||||
@@ -109,6 +111,9 @@ extern int cfg_col_status_data_msg;
|
||||
extern int cfg_col_status_data_other;
|
||||
extern int cfg_col_status_more;
|
||||
extern int cfg_col_status_bg;
|
||||
extern int cfg_col_infobar;
|
||||
extern int cfg_col_infobar_highlight;
|
||||
extern int cfg_col_infobar_bg;
|
||||
extern int cfg_col_input;
|
||||
extern int cfg_col_input_channel;
|
||||
extern int cfg_col_input_nick;
|
||||
@@ -150,8 +155,17 @@ extern char *cfg_proxy_password;
|
||||
extern t_config_section config_sections [CONFIG_NUMBER_SECTIONS];
|
||||
extern t_config_option * weechat_options [CONFIG_NUMBER_SECTIONS];
|
||||
|
||||
extern char *config_get_section ();
|
||||
extern void config_change_noop ();
|
||||
extern void config_change_title ();
|
||||
extern void config_change_windows ();
|
||||
extern void config_change_window_content ();
|
||||
extern void config_change_color ();
|
||||
extern int config_option_set_value (t_config_option *, char *);
|
||||
extern t_config_option *config_option_search (char *);
|
||||
extern int config_set_value (char *, char *);
|
||||
extern int config_read ();
|
||||
extern int config_create_default ();
|
||||
extern int config_write ();
|
||||
|
||||
#endif /* config.h */
|
||||
#endif /* weeconfig.h */
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,11 +15,14 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\"
|
||||
|
||||
bin_PROGRAMS = weechat-curses
|
||||
|
||||
weechat_curses_LDADD = ../../common/lib_weechat_main.a \
|
||||
../../irc/lib_weechat_irc.a \
|
||||
$(CURSES_LIBS)
|
||||
$(CURSES_LIBS) \
|
||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS)
|
||||
|
||||
weechat_curses_SOURCES = ../gui.h \
|
||||
../gui-common.c \
|
||||
|
||||
+191
-56
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -161,7 +159,7 @@ gui_window_set_color (WINDOW *window, int num_color)
|
||||
int
|
||||
gui_window_has_nicklist (t_gui_window *window)
|
||||
{
|
||||
return (window->win_nick != NULL);
|
||||
return ((window->win_nick != NULL) ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +182,7 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
|
||||
/* init chat & nicklist settings */
|
||||
/* TODO: calculate values from function parameters */
|
||||
if (WIN_IS_CHANNEL(window))
|
||||
if (cfg_look_nicklist && WIN_IS_CHANNEL(window))
|
||||
{
|
||||
max_length = nick_get_max_length (CHANNEL(window));
|
||||
|
||||
@@ -194,21 +192,37 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = max_length + 2;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS - max_length - 2;
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = max_length + 2;
|
||||
window->win_nick_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_chat_height = LINES - 4;
|
||||
window->win_nick_height = LINES - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_height = LINES - 3;
|
||||
}
|
||||
break;
|
||||
case CFG_LOOK_NICKLIST_RIGHT:
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS - max_length - 2;
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_x = COLS - max_length - 2;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = max_length + 2;
|
||||
window->win_nick_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_chat_height = LINES - 4;
|
||||
window->win_nick_height = LINES - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_height = LINES - 3;
|
||||
}
|
||||
break;
|
||||
case CFG_LOOK_NICKLIST_TOP:
|
||||
nick_count (CHANNEL(window), &num_nicks, &num_op, &num_halfop,
|
||||
@@ -220,7 +234,10 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1 + (lines + 1);
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 3 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = COLS;
|
||||
@@ -236,9 +253,15 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 3 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = LINES - 2 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_nick_y = LINES - 2 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_nick_y = LINES - 2 - (lines + 1);
|
||||
window->win_nick_width = COLS;
|
||||
window->win_nick_height = lines + 1;
|
||||
break;
|
||||
@@ -252,7 +275,10 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 4;
|
||||
else
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_chat_cursor_x = 0;
|
||||
window->win_chat_cursor_y = 0;
|
||||
window->win_nick_x = -1;
|
||||
@@ -271,7 +297,6 @@ gui_curses_window_clear (WINDOW *window)
|
||||
{
|
||||
werase (window);
|
||||
wmove (window, 0, 0);
|
||||
//wrefresh (window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -296,7 +321,7 @@ gui_draw_window_title (t_gui_window *window)
|
||||
}
|
||||
if (CHANNEL(window))
|
||||
{
|
||||
sprintf (format, "%%-%ds", window->win_width);
|
||||
snprintf (format, 32, "%%-%ds", window->win_width);
|
||||
if (CHANNEL(window)->topic)
|
||||
mvwprintw (window->win_title, 0, 0, format,
|
||||
CHANNEL(window)->topic);
|
||||
@@ -365,7 +390,7 @@ gui_display_end_of_line (t_gui_window *window, t_gui_line *line, int count)
|
||||
t_gui_message *ptr_message;
|
||||
char saved_char, format_align[32];
|
||||
|
||||
sprintf (format_align, "%%-%ds", line->length_align);
|
||||
snprintf (format_align, 32, "%%-%ds", line->length_align);
|
||||
num_lines = gui_get_line_num_splits (window, line);
|
||||
ptr_message = line->messages;
|
||||
offset = 0;
|
||||
@@ -445,7 +470,7 @@ gui_display_line (t_gui_window *window, t_gui_line *line, int stop_at_end)
|
||||
t_gui_message *ptr_message;
|
||||
char saved_char, format_align[32];
|
||||
|
||||
sprintf (format_align, "%%-%ds", line->length_align);
|
||||
snprintf (format_align, 32, "%%-%ds", line->length_align);
|
||||
ptr_message = line->messages;
|
||||
offset = 0;
|
||||
while (ptr_message)
|
||||
@@ -640,7 +665,7 @@ gui_draw_window_nick (t_gui_window *window)
|
||||
window->win_nick_x);
|
||||
gui_draw_window_chat (window);
|
||||
}
|
||||
sprintf (format, "%%-%ds", max_length);
|
||||
snprintf (format, 32, "%%-%ds", max_length);
|
||||
|
||||
if (has_colors ())
|
||||
{
|
||||
@@ -777,7 +802,6 @@ gui_draw_window_status (t_gui_window *window)
|
||||
wborder (window->win_status, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_status);
|
||||
}
|
||||
//refresh ();
|
||||
wmove (window->win_status, 0, 0);
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
@@ -864,13 +888,13 @@ gui_draw_window_status (t_gui_window *window)
|
||||
}
|
||||
}
|
||||
|
||||
/* display "*MORE*" if last line is not displayed */
|
||||
/* display "-MORE-" if last line is not displayed */
|
||||
gui_window_set_color (window->win_status, COLOR_WIN_STATUS_MORE);
|
||||
if (window->sub_lines > 0)
|
||||
mvwprintw (window->win_status, 0, COLS - 7, _("-MORE-"));
|
||||
else
|
||||
{
|
||||
sprintf (format_more, "%%-%ds", strlen (_("-MORE-")));
|
||||
snprintf (format_more, 32, "%%-%ds", strlen (_("-MORE-")));
|
||||
mvwprintw (window->win_status, 0, COLS - 7, format_more, " ");
|
||||
}
|
||||
|
||||
@@ -893,6 +917,62 @@ gui_redraw_window_status (t_gui_window *window)
|
||||
gui_draw_window_status (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_infobar: draw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_draw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
time_t time_seconds;
|
||||
struct tm *local_time;
|
||||
char text[1024 + 1];
|
||||
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
if (has_colors ())
|
||||
{
|
||||
gui_window_set_color (window->win_infobar, COLOR_WIN_INFOBAR);
|
||||
wborder (window->win_infobar, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_infobar);
|
||||
}
|
||||
wmove (window->win_infobar, 0, 0);
|
||||
|
||||
time_seconds = time (NULL);
|
||||
local_time = localtime (&time_seconds);
|
||||
if (local_time)
|
||||
{
|
||||
strftime (text, 1024, cfg_look_infobar_timestamp, local_time);
|
||||
gui_window_set_color (window->win_infobar, COLOR_WIN_INFOBAR);
|
||||
wprintw (window->win_infobar, "%s", text);
|
||||
}
|
||||
if (gui_infobar)
|
||||
{
|
||||
gui_window_set_color (window->win_infobar, gui_infobar->color);
|
||||
wprintw (window->win_infobar, " | %s", gui_infobar->text);
|
||||
}
|
||||
|
||||
wrefresh (window->win_infobar);
|
||||
refresh ();
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_redraw_window_infobar: redraw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_redraw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
gui_curses_window_clear (window->win_infobar);
|
||||
gui_draw_window_infobar (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_get_input_width: return input width (max # chars displayed)
|
||||
*/
|
||||
@@ -933,7 +1013,6 @@ gui_draw_window_input (t_gui_window *window)
|
||||
wborder (window->win_input, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_input);
|
||||
}
|
||||
//refresh ();
|
||||
|
||||
if (window->input_buffer_size == 0)
|
||||
window->input_buffer[0] = '\0';
|
||||
@@ -963,7 +1042,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
}
|
||||
if (CHANNEL(window))
|
||||
{
|
||||
sprintf (format, "%%s %%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
|
||||
mvwprintw (window->win_input, 0, 0, format,
|
||||
CHANNEL(window)->name,
|
||||
SERVER(window)->nick,
|
||||
@@ -977,7 +1056,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
{
|
||||
if (SERVER(window))
|
||||
{
|
||||
sprintf (format, "%%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s> %%-%ds", input_width);
|
||||
if (SERVER(window) && (SERVER(window)->is_connected))
|
||||
ptr_nickname = SERVER(window)->nick;
|
||||
else
|
||||
@@ -991,7 +1070,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf (format, "%%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s> %%-%ds", input_width);
|
||||
if (SERVER(window) && (SERVER(window)->is_connected))
|
||||
ptr_nickname = SERVER(window)->nick;
|
||||
else
|
||||
@@ -1040,6 +1119,8 @@ gui_redraw_window (t_gui_window *window)
|
||||
if (window->win_nick)
|
||||
gui_redraw_window_nick (window);
|
||||
gui_redraw_window_status (window);
|
||||
if (cfg_look_infobar)
|
||||
gui_redraw_window_infobar (window);
|
||||
gui_redraw_window_input (window);
|
||||
}
|
||||
|
||||
@@ -1064,13 +1145,18 @@ gui_switch_to_window (t_gui_window *window)
|
||||
window->win_chat = ptr_win->win_chat;
|
||||
window->win_nick = ptr_win->win_nick;
|
||||
window->win_status = ptr_win->win_status;
|
||||
window->win_infobar = ptr_win->win_infobar;
|
||||
window->win_input = ptr_win->win_input;
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
ptr_win->is_displayed = 0;
|
||||
if (ptr_win != window)
|
||||
{
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_infobar = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
ptr_win->is_displayed = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1086,40 +1172,52 @@ gui_switch_to_window (t_gui_window *window)
|
||||
window->win_chat_width,
|
||||
window->win_chat_y,
|
||||
window->win_chat_x);
|
||||
if (CHANNEL(window))
|
||||
if (cfg_look_nicklist && CHANNEL(window))
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
else
|
||||
window->win_nick = NULL;
|
||||
window->win_status = newwin (1, COLS, LINES - 2, 0);
|
||||
window->win_input = newwin (1, COLS, LINES - 1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* create chat & nick windows */
|
||||
/* remove some windows */
|
||||
if (window->win_nick)
|
||||
{
|
||||
delwin (window->win_nick);
|
||||
window->win_nick = NULL;
|
||||
}
|
||||
if (window->win_status)
|
||||
{
|
||||
delwin (window->win_status);
|
||||
window->win_status = NULL;
|
||||
}
|
||||
if (window->win_infobar)
|
||||
{
|
||||
delwin (window->win_infobar);
|
||||
window->win_infobar = NULL;
|
||||
}
|
||||
|
||||
/* create windows */
|
||||
if (WIN_IS_CHANNEL(window))
|
||||
{
|
||||
/* (re)create nicklist window */
|
||||
if (window->win_nick)
|
||||
delwin (window->win_nick);
|
||||
delwin (window->win_chat);
|
||||
window->win_chat = newwin (window->win_chat_height,
|
||||
window->win_chat_width,
|
||||
window->win_chat_y,
|
||||
window->win_chat_x);
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
if (cfg_look_nicklist)
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
else
|
||||
window->win_nick = NULL;
|
||||
}
|
||||
if (!(WIN_IS_CHANNEL(window)))
|
||||
{
|
||||
/* remove nick list window */
|
||||
if (window->win_nick)
|
||||
delwin (window->win_nick);
|
||||
window->win_nick = NULL;
|
||||
delwin (window->win_chat);
|
||||
window->win_chat = newwin (window->win_chat_height,
|
||||
window->win_chat_width,
|
||||
@@ -1128,6 +1226,15 @@ gui_switch_to_window (t_gui_window *window)
|
||||
}
|
||||
}
|
||||
|
||||
/* create status/infobar windows */
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_infobar = newwin (1, COLS, LINES - 2, 0);
|
||||
window->win_status = newwin (1, COLS, LINES - 3, 0);
|
||||
}
|
||||
else
|
||||
window->win_status = newwin (1, COLS, LINES - 2, 0);
|
||||
|
||||
/* change current window to the new window */
|
||||
gui_current_window = window;
|
||||
|
||||
@@ -1234,12 +1341,15 @@ gui_curses_resize_handler ()
|
||||
delwin (ptr_win->win_nick);
|
||||
if (ptr_win->win_status)
|
||||
delwin (ptr_win->win_status);
|
||||
if (ptr_win->win_infobar)
|
||||
delwin (ptr_win->win_infobar);
|
||||
if (ptr_win->win_input)
|
||||
delwin (ptr_win->win_input);
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_infobar = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
gui_switch_to_window (ptr_win);
|
||||
}
|
||||
@@ -1257,6 +1367,7 @@ gui_window_init_subwindows (t_gui_window *window)
|
||||
window->win_chat = NULL;
|
||||
window->win_nick = NULL;
|
||||
window->win_status = NULL;
|
||||
window->win_infobar = NULL;
|
||||
window->win_input = NULL;
|
||||
}
|
||||
|
||||
@@ -1306,6 +1417,8 @@ gui_init_colors ()
|
||||
cfg_col_chat_channel & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_CHAT_DARK,
|
||||
cfg_col_chat_dark & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_CHAT_HIGHLIGHT,
|
||||
cfg_col_chat_highlight & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_STATUS,
|
||||
cfg_col_status & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_STATUS_ACTIVE,
|
||||
@@ -1316,6 +1429,10 @@ gui_init_colors ()
|
||||
cfg_col_status_data_other & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_STATUS_MORE,
|
||||
cfg_col_status_more & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_INFOBAR,
|
||||
cfg_col_infobar & A_CHARTEXT, cfg_col_infobar_bg);
|
||||
init_pair (COLOR_WIN_INFOBAR_HIGHLIGHT,
|
||||
cfg_col_infobar_highlight & A_CHARTEXT, cfg_col_infobar_bg);
|
||||
init_pair (COLOR_WIN_INPUT,
|
||||
cfg_col_input & A_CHARTEXT, cfg_col_input_bg);
|
||||
init_pair (COLOR_WIN_INPUT_CHANNEL,
|
||||
@@ -1356,11 +1473,14 @@ gui_init_colors ()
|
||||
color_attr[COLOR_WIN_CHAT_HOST - 1] = cfg_col_chat_host & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_CHANNEL - 1] = cfg_col_chat_channel & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_DARK - 1] = cfg_col_chat_dark & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_HIGHLIGHT - 1] = cfg_col_chat_highlight & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS - 1] = cfg_col_status & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_ACTIVE - 1] = cfg_col_status_active & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_DATA_MSG - 1] = cfg_col_status_data_msg & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_DATA_OTHER - 1] = cfg_col_status_data_other & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_MORE - 1] = cfg_col_status_more & A_BOLD;
|
||||
color_attr[COLOR_WIN_INFOBAR - 1] = cfg_col_infobar & A_BOLD;
|
||||
color_attr[COLOR_WIN_INFOBAR_HIGHLIGHT - 1] = cfg_col_infobar_highlight & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT - 1] = cfg_col_input & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT_CHANNEL - 1] = cfg_col_input_channel & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT_NICK - 1] = cfg_col_input_nick & A_BOLD;
|
||||
@@ -1374,6 +1494,20 @@ gui_init_colors ()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_set_window_title: set terminal title
|
||||
*/
|
||||
|
||||
void
|
||||
gui_set_window_title ()
|
||||
{
|
||||
#ifdef __linux__
|
||||
/* set title for term window, not for console */
|
||||
if (strcmp (getenv ("TERM"), "linux") != 0)
|
||||
printf ("\e]2;" PACKAGE_NAME " " PACKAGE_VERSION "\a\e]1;" PACKAGE_NAME " " PACKAGE_VERSION "\a");
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_init: init GUI
|
||||
*/
|
||||
@@ -1391,16 +1525,15 @@ gui_init ()
|
||||
|
||||
gui_init_colors ();
|
||||
|
||||
gui_infobar = NULL;
|
||||
|
||||
/* create a new window */
|
||||
gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
|
||||
gui_current_window = gui_window_new (NULL, NULL, 1 /*0, 0, COLS, LINES*/);
|
||||
|
||||
signal (SIGWINCH, gui_curses_resize_handler);
|
||||
|
||||
#ifdef __linux__
|
||||
/* set title for term window, not for console */
|
||||
if (cfg_look_set_title && (strcmp (getenv ("TERM"), "linux") != 0))
|
||||
printf ("\e]2;" PACKAGE_NAME " " PACKAGE_VERSION "\a\e]1;" PACKAGE_NAME " " PACKAGE_VERSION "\a");
|
||||
#endif
|
||||
if (cfg_look_set_title)
|
||||
gui_set_window_title ();
|
||||
|
||||
gui_ready = 1;
|
||||
}
|
||||
@@ -1425,6 +1558,8 @@ gui_end ()
|
||||
delwin (ptr_win->win_nick);
|
||||
if (ptr_win->win_status)
|
||||
delwin (ptr_win->win_status);
|
||||
if (ptr_win->win_infobar)
|
||||
delwin (ptr_win->win_infobar);
|
||||
if (ptr_win->win_input)
|
||||
delwin (ptr_win->win_input);
|
||||
/* TODO: free input buffer, lines, messages, completion */
|
||||
@@ -1519,7 +1654,7 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
|
||||
if (window == NULL)
|
||||
{
|
||||
log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
wee_log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1540,13 +1675,13 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
if ((!window->last_line) || (window->line_complete))
|
||||
{
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "[");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_hour);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_hour);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME_SEP, ":");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_min);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_min);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME_SEP, ":");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_sec);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_sec);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "] ");
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -59,10 +57,11 @@ gui_read_keyb ()
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
/* resize event: do nothing */
|
||||
/* resize event */
|
||||
case KEY_RESIZE:
|
||||
gui_redraw_window (gui_current_window);
|
||||
break;
|
||||
/* previous window */
|
||||
case KEY_F(6):
|
||||
gui_switch_to_previous_window ();
|
||||
break;
|
||||
@@ -70,6 +69,10 @@ gui_read_keyb ()
|
||||
case KEY_F(7):
|
||||
gui_switch_to_next_window ();
|
||||
break;
|
||||
/* remove last infobar message */
|
||||
case KEY_F(10):
|
||||
gui_infobar_remove ();
|
||||
break;
|
||||
/* cursor up */
|
||||
case KEY_UP:
|
||||
if (gui_current_window->ptr_history)
|
||||
@@ -354,10 +357,38 @@ gui_main_loop ()
|
||||
fd_set read_fd;
|
||||
static struct timeval timeout;
|
||||
t_irc_server *ptr_server;
|
||||
int old_min, old_sec;
|
||||
time_t new_time;
|
||||
struct tm *local_time;
|
||||
|
||||
quit_weechat = 0;
|
||||
old_min = -1;
|
||||
old_sec = -1;
|
||||
while (!quit_weechat)
|
||||
{
|
||||
new_time = time (NULL);
|
||||
local_time = localtime (&new_time);
|
||||
|
||||
/* minute has changed ? => redraw infobar */
|
||||
if (local_time->tm_min != old_min)
|
||||
{
|
||||
old_min = local_time->tm_min;
|
||||
gui_redraw_window_infobar (gui_current_window);
|
||||
}
|
||||
|
||||
/* second has changed ? => count down time for infobar, if needed */
|
||||
if (local_time->tm_sec != old_sec)
|
||||
{
|
||||
old_sec = local_time->tm_sec;
|
||||
/* TODO: manage splitted windows! */
|
||||
if (gui_infobar && gui_infobar->remaining_time > 0)
|
||||
{
|
||||
gui_infobar->remaining_time--;
|
||||
if (gui_infobar->remaining_time == 0)
|
||||
gui_infobar_remove ();
|
||||
}
|
||||
}
|
||||
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 10000;
|
||||
FD_ZERO (&read_fd);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,13 +15,14 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
bin_PROGRAMS = weechat-gtk
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" $(GTK_CFLAGS)
|
||||
|
||||
INCLUDES = $(GTK_CFLAGS)
|
||||
bin_PROGRAMS = weechat-gtk
|
||||
|
||||
weechat_gtk_LDADD = ../../common/lib_weechat_main.a \
|
||||
../../irc/lib_weechat_irc.a \
|
||||
$(GTK_LIBS)
|
||||
$(GTK_LIBS) \
|
||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS)
|
||||
|
||||
weechat_gtk_SOURCES = ../gui.h \
|
||||
../gui-common.c \
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -351,6 +349,35 @@ gui_redraw_window_status (t_gui_window *window)
|
||||
gui_draw_window_status (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_infobar: draw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_draw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
/* TODO: draw infobar window! */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_redraw_window_infobar: redraw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_redraw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
/* TODO: first delete window content */
|
||||
gui_draw_window_infobar (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_input: draw input window
|
||||
*/
|
||||
@@ -572,6 +599,16 @@ gui_init_colors ()
|
||||
/* TODO: init colors for Gtk */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_set_window_title: set window title
|
||||
*/
|
||||
|
||||
void
|
||||
gui_set_window_title ()
|
||||
{
|
||||
/* TODO: set window title for Gtk */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_init: init GUI
|
||||
*/
|
||||
@@ -625,7 +662,7 @@ gui_init ()
|
||||
gtk_widget_show_all (gtk_main_window);
|
||||
|
||||
/* create a new window */
|
||||
gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
|
||||
gui_current_window = gui_window_new (NULL, NULL, 1 /*0, 0, COLS, LINES*/);
|
||||
|
||||
/* TODO: set gui_ready to 1 when Gtk display functions will be ok */
|
||||
gui_ready = 1;
|
||||
@@ -710,7 +747,7 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
|
||||
if (window == NULL)
|
||||
{
|
||||
log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
wee_log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+66
-10
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -44,6 +42,7 @@ int gui_ready; /* = 1 if GUI is initialized */
|
||||
t_gui_window *gui_windows = NULL; /* pointer to first window */
|
||||
t_gui_window *last_gui_window = NULL; /* pointer to last window */
|
||||
t_gui_window *gui_current_window = NULL; /* pointer to current window */
|
||||
t_gui_infobar *gui_infobar; /* pointer to infobar content */
|
||||
|
||||
|
||||
/*
|
||||
@@ -52,7 +51,7 @@ t_gui_window *gui_current_window = NULL; /* pointer to current window */
|
||||
*/
|
||||
|
||||
t_gui_window *
|
||||
gui_window_new (void *server, void *channel
|
||||
gui_window_new (void *server, void *channel, int switch_to_window
|
||||
/*int x, int y, int width, int height*/)
|
||||
{
|
||||
t_gui_window *new_window;
|
||||
@@ -114,7 +113,8 @@ gui_window_new (void *server, void *channel
|
||||
new_window->ptr_history = NULL;
|
||||
|
||||
/* switch to new window */
|
||||
gui_switch_to_window (new_window);
|
||||
if (switch_to_window)
|
||||
gui_switch_to_window (new_window);
|
||||
|
||||
/* add window to windows queue */
|
||||
new_window->prev_window = last_gui_window;
|
||||
@@ -126,7 +126,7 @@ gui_window_new (void *server, void *channel
|
||||
new_window->next_window = NULL;
|
||||
|
||||
/* redraw whole screen */
|
||||
gui_redraw_window (new_window);
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
@@ -183,6 +183,62 @@ gui_window_clear_all ()
|
||||
gui_window_clear (ptr_win);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_infobar_printf: display message in infobar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_infobar_printf (int time_displayed, int color, char *message, ...)
|
||||
{
|
||||
static char buffer[1024];
|
||||
va_list argptr;
|
||||
t_gui_infobar *ptr_infobar;
|
||||
char *pos;
|
||||
|
||||
va_start (argptr, message);
|
||||
vsnprintf (buffer, sizeof (buffer) - 1, message, argptr);
|
||||
va_end (argptr);
|
||||
|
||||
ptr_infobar = (t_gui_infobar *)malloc (sizeof (t_gui_infobar));
|
||||
if (ptr_infobar)
|
||||
{
|
||||
ptr_infobar->color = color;
|
||||
ptr_infobar->text = strdup (buffer);
|
||||
pos = strchr (ptr_infobar->text, '\n');
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
ptr_infobar->remaining_time = (time_displayed <= 0) ? -1 : time_displayed;
|
||||
ptr_infobar->next_infobar = gui_infobar;
|
||||
gui_infobar = ptr_infobar;
|
||||
/* TODO: manage splitted windows! */
|
||||
gui_redraw_window_infobar (gui_current_window);
|
||||
}
|
||||
else
|
||||
wee_log_printf (_("%s not enough memory for infobar message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_infobar_remove: remove last displayed message in infobar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_infobar_remove ()
|
||||
{
|
||||
t_gui_infobar *new_infobar;
|
||||
|
||||
if (gui_infobar)
|
||||
{
|
||||
new_infobar = gui_infobar->next_infobar;
|
||||
if (gui_infobar->text)
|
||||
free (gui_infobar->text);
|
||||
free (gui_infobar);
|
||||
gui_infobar = new_infobar;
|
||||
/* TODO: manage splitted windows! */
|
||||
gui_redraw_window_infobar (gui_current_window);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_window_free: delete a window
|
||||
*/
|
||||
@@ -235,7 +291,7 @@ gui_window_free (t_gui_window *window)
|
||||
|
||||
/* always at least one window */
|
||||
if (!gui_windows && create_new)
|
||||
gui_window_new (NULL, NULL);
|
||||
(void) gui_window_new (NULL, NULL, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -264,7 +320,7 @@ gui_new_line (t_gui_window *window)
|
||||
}
|
||||
else
|
||||
{
|
||||
log_printf (_("%s not enough memory for new line!\n"));
|
||||
wee_log_printf (_("%s not enough memory for new line!\n"));
|
||||
return NULL;
|
||||
}
|
||||
return new_line;
|
||||
@@ -291,7 +347,7 @@ gui_new_message (t_gui_window *window)
|
||||
}
|
||||
else
|
||||
{
|
||||
log_printf (_("not enough memory!\n"));
|
||||
wee_log_printf (_("not enough memory!\n"));
|
||||
return NULL;
|
||||
}
|
||||
return new_message;
|
||||
|
||||
+47
-27
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -28,7 +26,7 @@
|
||||
|
||||
#define INPUT_BUFFER_BLOCK_SIZE 256
|
||||
|
||||
#define NUM_COLORS 35
|
||||
#define NUM_COLORS 38
|
||||
#define COLOR_WIN_TITLE 1
|
||||
#define COLOR_WIN_CHAT 2
|
||||
#define COLOR_WIN_CHAT_TIME 3
|
||||
@@ -39,23 +37,26 @@
|
||||
#define COLOR_WIN_CHAT_HOST 8
|
||||
#define COLOR_WIN_CHAT_CHANNEL 9
|
||||
#define COLOR_WIN_CHAT_DARK 10
|
||||
#define COLOR_WIN_STATUS 11
|
||||
#define COLOR_WIN_STATUS_ACTIVE 12
|
||||
#define COLOR_WIN_STATUS_DATA_MSG 13
|
||||
#define COLOR_WIN_STATUS_DATA_OTHER 14
|
||||
#define COLOR_WIN_STATUS_MORE 15
|
||||
#define COLOR_WIN_INPUT 16
|
||||
#define COLOR_WIN_INPUT_CHANNEL 17
|
||||
#define COLOR_WIN_INPUT_NICK 18
|
||||
#define COLOR_WIN_NICK 19
|
||||
#define COLOR_WIN_NICK_OP 20
|
||||
#define COLOR_WIN_NICK_HALFOP 21
|
||||
#define COLOR_WIN_NICK_VOICE 22
|
||||
#define COLOR_WIN_NICK_SEP 23
|
||||
#define COLOR_WIN_NICK_SELF 24
|
||||
#define COLOR_WIN_NICK_PRIVATE 25
|
||||
#define COLOR_WIN_NICK_FIRST 26
|
||||
#define COLOR_WIN_NICK_LAST 35
|
||||
#define COLOR_WIN_CHAT_HIGHLIGHT 11
|
||||
#define COLOR_WIN_STATUS 12
|
||||
#define COLOR_WIN_STATUS_ACTIVE 13
|
||||
#define COLOR_WIN_STATUS_DATA_MSG 14
|
||||
#define COLOR_WIN_STATUS_DATA_OTHER 15
|
||||
#define COLOR_WIN_STATUS_MORE 16
|
||||
#define COLOR_WIN_INFOBAR 17
|
||||
#define COLOR_WIN_INFOBAR_HIGHLIGHT 18
|
||||
#define COLOR_WIN_INPUT 19
|
||||
#define COLOR_WIN_INPUT_CHANNEL 20
|
||||
#define COLOR_WIN_INPUT_NICK 21
|
||||
#define COLOR_WIN_NICK 22
|
||||
#define COLOR_WIN_NICK_OP 23
|
||||
#define COLOR_WIN_NICK_HALFOP 24
|
||||
#define COLOR_WIN_NICK_VOICE 25
|
||||
#define COLOR_WIN_NICK_SEP 26
|
||||
#define COLOR_WIN_NICK_SELF 27
|
||||
#define COLOR_WIN_NICK_PRIVATE 28
|
||||
#define COLOR_WIN_NICK_FIRST 29
|
||||
#define COLOR_WIN_NICK_LAST 38
|
||||
#define COLOR_WIN_NICK_NUMBER (COLOR_WIN_NICK_LAST - COLOR_WIN_NICK_FIRST + 1)
|
||||
|
||||
#define SERVER(window) ((t_irc_server *)(window->server))
|
||||
@@ -108,6 +109,18 @@ struct t_gui_color
|
||||
int color;
|
||||
};
|
||||
|
||||
typedef struct t_gui_infobar t_gui_infobar;
|
||||
|
||||
struct t_gui_infobar
|
||||
{
|
||||
int color; /* text color */
|
||||
char *text; /* infobar text */
|
||||
int remaining_time; /* delay (sec) before erasing this text */
|
||||
/* if < 0, text is never erased (except */
|
||||
/* by user action to erase it) */
|
||||
t_gui_infobar *next_infobar; /* next message for infobar */
|
||||
};
|
||||
|
||||
typedef struct t_gui_window t_gui_window;
|
||||
|
||||
struct t_gui_window
|
||||
@@ -139,16 +152,17 @@ struct t_gui_window
|
||||
void *win_chat; /* chat window (exemple: channel) */
|
||||
void *win_nick; /* nick window */
|
||||
void *win_status; /* status window */
|
||||
void *win_infobar; /* info bar window */
|
||||
void *win_input; /* input window */
|
||||
|
||||
/* windows for Curses GUI */
|
||||
/* windows for Gtk GUI */
|
||||
void *textview_chat; /* textview widget for chat */
|
||||
void *textbuffer_chat; /* textbuffer widget for chat */
|
||||
void *texttag_chat; /* texttag widget for chat */
|
||||
void *textview_nicklist; /* textview widget for nicklist */
|
||||
void *textbuffer_nicklist; /* textbuffer widget for nicklist */
|
||||
|
||||
/* windows for Curses GUI */
|
||||
/* windows for Qt GUI */
|
||||
/* TODO: declare Qt window */
|
||||
|
||||
/* chat content (lines, line is composed by many messages) */
|
||||
@@ -184,13 +198,16 @@ extern int gui_ready;
|
||||
extern t_gui_window *gui_windows;
|
||||
extern t_gui_window *last_gui_window;
|
||||
extern t_gui_window *gui_current_window;
|
||||
extern t_gui_infobar *gui_infobar;
|
||||
|
||||
/* prototypes */
|
||||
|
||||
/* GUI independent functions */
|
||||
extern t_gui_window *gui_window_new (void *, void * /*int, int, int, int*/); /* TODO: add coordinates and size */
|
||||
extern t_gui_window *gui_window_new (/*@null@*/ void *, /*@null@*/ void *, int /*int, int, int, int*/); /* TODO: add coordinates and size */
|
||||
extern void gui_window_clear (t_gui_window *);
|
||||
extern void gui_window_clear_all ();
|
||||
extern void gui_infobar_printf (int, int, char *, ...);
|
||||
extern void gui_infobar_remove ();
|
||||
extern t_gui_line *gui_new_line (t_gui_window *);
|
||||
extern t_gui_message *gui_new_message (t_gui_window *);
|
||||
extern void gui_optimize_input_buffer_size (t_gui_window *);
|
||||
@@ -212,6 +229,8 @@ extern void gui_draw_window_nick (t_gui_window *);
|
||||
extern void gui_redraw_window_nick (t_gui_window *);
|
||||
extern void gui_draw_window_status (t_gui_window *);
|
||||
extern void gui_redraw_window_status (t_gui_window *);
|
||||
extern void gui_draw_window_infobar (t_gui_window *);
|
||||
extern void gui_redraw_window_infobar (t_gui_window *);
|
||||
extern void gui_draw_window_input (t_gui_window *);
|
||||
extern void gui_redraw_window_input (t_gui_window *);
|
||||
extern void gui_redraw_window (t_gui_window *);
|
||||
@@ -222,11 +241,12 @@ extern void gui_move_page_up ();
|
||||
extern void gui_move_page_down ();
|
||||
extern void gui_window_init_subwindows (t_gui_window *);
|
||||
extern void gui_pre_init (int *, char **[]);
|
||||
//extern void gui_init_colors ();
|
||||
extern void gui_init_colors ();
|
||||
extern void gui_set_window_title ();
|
||||
extern void gui_init ();
|
||||
extern void gui_window_free (t_gui_window *);
|
||||
extern void gui_end ();
|
||||
extern void gui_printf_color_type (t_gui_window *, int, int, char *, ...);
|
||||
extern void gui_printf_color_type (/*@null@*/ t_gui_window *, int, int, char *, ...);
|
||||
extern void gui_main_loop ();
|
||||
|
||||
#endif /* gui.h */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
+2
-4
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+2
-4
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+3
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,6 +15,8 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\"
|
||||
|
||||
noinst_LIBRARIES = lib_weechat_irc.a
|
||||
|
||||
lib_weechat_irc_a_SOURCES = irc.h \
|
||||
|
||||
+5
-10
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -41,13 +39,10 @@ t_irc_channel *current_channel = NULL;
|
||||
*/
|
||||
|
||||
t_irc_channel *
|
||||
channel_new (t_irc_server *server, int channel_type, char *channel_name)
|
||||
channel_new (t_irc_server *server, int channel_type, char *channel_name,
|
||||
int switch_to_window)
|
||||
{
|
||||
t_irc_channel *new_channel;
|
||||
|
||||
#if DEBUG >= 1
|
||||
log_printf ("joining channel %s\n", channel_name);
|
||||
#endif
|
||||
|
||||
/* alloc memory for new channel */
|
||||
if ((new_channel = (t_irc_channel *) malloc (sizeof (t_irc_channel))) == NULL)
|
||||
@@ -72,7 +67,7 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name)
|
||||
server->channels = new_channel;
|
||||
server->last_channel = new_channel;
|
||||
|
||||
gui_window_new (server, new_channel);
|
||||
gui_window_new (server, new_channel, switch_to_window);
|
||||
|
||||
/* all is ok, return address of new channel */
|
||||
return new_channel;
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -268,8 +266,8 @@ t_irc_command irc_commands[] =
|
||||
{ "301", N_("away message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
|
||||
{ "302", N_("userhost"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_302 },
|
||||
{ "303", N_("ison"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_303 },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_305 },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
|
||||
{ "311", N_("whois (user)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
|
||||
{ "312", N_("whois (server)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_312 },
|
||||
{ "313", N_("whois (operator)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_313 },
|
||||
|
||||
+16
-11
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -57,6 +55,7 @@ irc_display_prefix (t_gui_window *window, char *prefix)
|
||||
|
||||
/*
|
||||
* irc_display_nick: display nick in chat window
|
||||
* if color_nick < 0 then nick is highlighted
|
||||
*/
|
||||
|
||||
void
|
||||
@@ -92,13 +91,19 @@ irc_display_nick (t_gui_window *window, t_irc_nick *nick, int message_type,
|
||||
}
|
||||
}
|
||||
}
|
||||
gui_printf_color_type (window,
|
||||
message_type,
|
||||
(color_nick) ?
|
||||
((cfg_look_color_nicks) ?
|
||||
nick->color : COLOR_WIN_CHAT) :
|
||||
COLOR_WIN_CHAT,
|
||||
"%s", nick->nick);
|
||||
if (color_nick < 0)
|
||||
gui_printf_color_type (window,
|
||||
message_type,
|
||||
COLOR_WIN_CHAT_HIGHLIGHT,
|
||||
"%s", nick->nick);
|
||||
else
|
||||
gui_printf_color_type (window,
|
||||
message_type,
|
||||
(color_nick) ?
|
||||
((cfg_look_color_nicks) ?
|
||||
nick->color : COLOR_WIN_CHAT) :
|
||||
COLOR_WIN_CHAT,
|
||||
"%s", nick->nick);
|
||||
|
||||
if (display_around)
|
||||
gui_printf_color_type (window,
|
||||
|
||||
+2
-4
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+132
-29
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -40,6 +38,7 @@
|
||||
#include "../common/command.h"
|
||||
#include "../common/weeconfig.h"
|
||||
#include "../gui/gui.h"
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -51,29 +50,35 @@
|
||||
*/
|
||||
|
||||
int
|
||||
irc_recv_command (t_irc_server *server,
|
||||
irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
char *host, char *command, char *arguments)
|
||||
{
|
||||
int i, cmd_found;
|
||||
int i, cmd_found, return_code;
|
||||
|
||||
if (command == NULL)
|
||||
return -2;
|
||||
|
||||
/* looks for irc command */
|
||||
/* look for IRC command */
|
||||
cmd_found = -1;
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if (strcasecmp (irc_commands[i].command_name, command) == 0)
|
||||
{
|
||||
cmd_found = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* command not found */
|
||||
if (cmd_found < 0)
|
||||
return -3;
|
||||
|
||||
if (irc_commands[i].recv_function != NULL)
|
||||
return (int) (irc_commands[i].recv_function) (server, host, arguments);
|
||||
{
|
||||
return_code = (int) (irc_commands[i].recv_function) (server, host, arguments);
|
||||
plugin_event_msg (irc_commands[i].command_name, entire_line);
|
||||
return return_code;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -151,7 +156,7 @@ irc_cmd_recv_join (t_irc_server *server, char *host, char *arguments)
|
||||
ptr_channel = channel_search (server, arguments);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
ptr_channel = channel_new (server, CHAT_CHANNEL, arguments);
|
||||
ptr_channel = channel_new (server, CHAT_CHANNEL, arguments, 1);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
gui_printf (server->window,
|
||||
@@ -178,7 +183,7 @@ irc_cmd_recv_join (t_irc_server *server, char *host, char *arguments)
|
||||
_(" has joined "));
|
||||
gui_printf_color (ptr_channel->window, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s\n", arguments);
|
||||
nick_new (ptr_channel, host, 0, 0, 0);
|
||||
(void) nick_new (ptr_channel, host, 0, 0, 0);
|
||||
gui_redraw_window_nick (gui_current_window);
|
||||
return 0;
|
||||
}
|
||||
@@ -482,7 +487,7 @@ irc_cmd_recv_nick (t_irc_server *server, char *host, char *arguments)
|
||||
ptr_nick = nick_search (ptr_channel, host);
|
||||
if (ptr_nick)
|
||||
{
|
||||
nick_is_me = (strcmp (ptr_nick->nick, server->nick) == 0);
|
||||
nick_is_me = (strcmp (ptr_nick->nick, server->nick) == 0) ? 1 : 0;
|
||||
nick_change (ptr_channel, ptr_nick, arguments);
|
||||
irc_display_prefix (ptr_channel->window, PREFIX_INFO);
|
||||
if (nick_is_me)
|
||||
@@ -782,8 +787,21 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
if (pos2)
|
||||
pos2[0] = '\0';
|
||||
irc_display_prefix (ptr_channel->window, PREFIX_ACTION_ME);
|
||||
gui_printf_color (ptr_channel->window,
|
||||
COLOR_WIN_CHAT_NICK, "%s", host);
|
||||
if (strstr (pos, server->nick))
|
||||
{
|
||||
gui_printf_color (ptr_channel->window,
|
||||
COLOR_WIN_CHAT_HIGHLIGHT, "%s", host);
|
||||
if ( (cfg_look_infobar_delay_highlight > 0)
|
||||
&& (ptr_channel->window != gui_current_window) )
|
||||
gui_infobar_printf (cfg_look_infobar_delay_highlight,
|
||||
COLOR_WIN_INFOBAR_HIGHLIGHT,
|
||||
_("On %s: * %s %s"),
|
||||
ptr_channel->name,
|
||||
host, pos);
|
||||
}
|
||||
else
|
||||
gui_printf_color (ptr_channel->window,
|
||||
COLOR_WIN_CHAT_NICK, "%s", host);
|
||||
gui_printf_color (ptr_channel->window,
|
||||
COLOR_WIN_CHAT, " %s\n", pos);
|
||||
}
|
||||
@@ -792,8 +810,21 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
ptr_nick = nick_search (ptr_channel, host);
|
||||
if (ptr_nick)
|
||||
{
|
||||
irc_display_nick (ptr_channel->window, ptr_nick,
|
||||
MSG_TYPE_NICK, 1, 1, 0);
|
||||
if (strstr (pos, server->nick))
|
||||
{
|
||||
irc_display_nick (ptr_channel->window, ptr_nick,
|
||||
MSG_TYPE_NICK, 1, -1, 0);
|
||||
if ( (cfg_look_infobar_delay_highlight > 0)
|
||||
&& (ptr_channel->window != gui_current_window) )
|
||||
gui_infobar_printf (cfg_look_infobar_delay_highlight,
|
||||
COLOR_WIN_INFOBAR_HIGHLIGHT,
|
||||
_("On %s: %s> %s"),
|
||||
ptr_channel->name,
|
||||
host, pos);
|
||||
}
|
||||
else
|
||||
irc_display_nick (ptr_channel->window, ptr_nick,
|
||||
MSG_TYPE_NICK, 1, 1, 0);
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_MSG,
|
||||
COLOR_WIN_CHAT, "%s\n", pos);
|
||||
@@ -836,15 +867,23 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
if (strcmp (pos, "\01VERSION\01") == 0)
|
||||
{
|
||||
buf = (struct utsname *) malloc (sizeof (struct utsname));
|
||||
uname (buf);
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s, host \"%s\" is running "
|
||||
"%s %s / %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
&buf->nodename, &buf->sysname,
|
||||
&buf->release, &buf->machine, "\01\r\n");
|
||||
free (buf);
|
||||
if (buf && (uname (buf) == 0))
|
||||
{
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s, host \"%s\" is running "
|
||||
"%s %s / %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
&buf->nodename, &buf->sysname,
|
||||
&buf->release, &buf->machine, "\01\r\n");
|
||||
free (buf);
|
||||
}
|
||||
else
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
"\01\r\n");
|
||||
irc_display_prefix (server->window, PREFIX_INFO);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, _("Received a "));
|
||||
@@ -883,7 +922,7 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
ptr_channel = channel_search (server, host);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
ptr_channel = channel_new (server, CHAT_PRIVATE, host);
|
||||
ptr_channel = channel_new (server, CHAT_PRIVATE, host, 0);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
gui_printf (server->window,
|
||||
@@ -901,10 +940,24 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_NICK,
|
||||
COLOR_WIN_CHAT_DARK, "<");
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_NICK,
|
||||
COLOR_WIN_NICK_PRIVATE,
|
||||
"%s", host);
|
||||
if (strstr (pos, server->nick))
|
||||
{
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_NICK,
|
||||
COLOR_WIN_CHAT_HIGHLIGHT,
|
||||
"%s", host);
|
||||
if ( (cfg_look_infobar_delay_highlight > 0)
|
||||
&& (ptr_channel->window != gui_current_window) )
|
||||
gui_infobar_printf (cfg_look_infobar_delay_highlight,
|
||||
COLOR_WIN_INFOBAR_HIGHLIGHT,
|
||||
_("Private %s> %s"),
|
||||
host, pos);
|
||||
}
|
||||
else
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_NICK,
|
||||
COLOR_WIN_NICK_PRIVATE,
|
||||
"%s", host);
|
||||
gui_printf_color_type (ptr_channel->window,
|
||||
MSG_TYPE_NICK,
|
||||
COLOR_WIN_CHAT_DARK, "> ");
|
||||
@@ -1326,6 +1379,56 @@ irc_cmd_recv_303 (t_irc_server *server, char *host, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_305: '305' command (unaway)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_305 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_306: '306' command (now away)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_306 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_311: '311' command (whois, user)
|
||||
*/
|
||||
|
||||
+18
-11
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -487,7 +485,7 @@ irc_cmd_send_msg (t_irc_server *server, char *arguments)
|
||||
ptr_channel = channel_search (server, arguments);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
ptr_channel = channel_new (server, CHAT_PRIVATE, arguments);
|
||||
ptr_channel = channel_new (server, CHAT_PRIVATE, arguments, 1);
|
||||
if (!ptr_channel)
|
||||
{
|
||||
gui_printf (server->window,
|
||||
@@ -624,7 +622,7 @@ irc_cmd_send_op (t_irc_server *server, int argc, char **argv)
|
||||
int
|
||||
irc_cmd_send_oper (t_irc_server *server, char *arguments)
|
||||
{
|
||||
server_sendf (server, "OPER %s %s\r\n", arguments);
|
||||
server_sendf (server, "OPER %s\r\n", arguments);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -723,12 +721,21 @@ irc_cmd_send_pong (t_irc_server *server, char *arguments)
|
||||
int
|
||||
irc_cmd_send_quit (t_irc_server *server, char *arguments)
|
||||
{
|
||||
if (server && server->is_connected)
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) server;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (arguments)
|
||||
server_sendf (server, "QUIT :%s\r\n", arguments);
|
||||
else
|
||||
server_sendf (server, "QUIT\r\n");
|
||||
if (ptr_server->is_connected)
|
||||
{
|
||||
if (arguments)
|
||||
server_sendf (ptr_server, "QUIT :%s\r\n", arguments);
|
||||
else
|
||||
server_sendf (ptr_server, "QUIT\r\n");
|
||||
}
|
||||
}
|
||||
quit_weechat = 1;
|
||||
return 0;
|
||||
|
||||
+228
-85
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -28,9 +26,11 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
@@ -61,6 +61,7 @@ server_init (t_irc_server *server)
|
||||
{
|
||||
server->name = NULL;
|
||||
server->autoconnect = 0;
|
||||
server->command_line = 0;
|
||||
server->address = NULL;
|
||||
server->port = -1;
|
||||
server->password = NULL;
|
||||
@@ -82,6 +83,103 @@ server_init (t_irc_server *server)
|
||||
server->last_channel = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_init_with_url: init a server with url of this form:
|
||||
* irc://nick:pass@irc.toto.org:6667
|
||||
* returns: 0 = ok
|
||||
* -1 = invalid syntax
|
||||
*/
|
||||
|
||||
int
|
||||
server_init_with_url (char *irc_url, t_irc_server *server)
|
||||
{
|
||||
char *url, *pos_server, *pos_channel, *pos, *pos2;
|
||||
struct passwd *my_passwd;
|
||||
|
||||
server_init (server);
|
||||
if (strncasecmp (irc_url, "irc://", 6) != 0)
|
||||
return -1;
|
||||
url = strdup (irc_url);
|
||||
pos_server = strchr (url, '@');
|
||||
if (pos_server)
|
||||
{
|
||||
pos_server[0] = '\0';
|
||||
pos_server++;
|
||||
pos = url + 6;
|
||||
if (!pos[0])
|
||||
{
|
||||
free (url);
|
||||
return -1;
|
||||
}
|
||||
pos2 = strchr (pos, ':');
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
server->password = strdup (pos2 + 1);
|
||||
}
|
||||
server->nick1 = strdup (pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((my_passwd = getpwuid (geteuid ())) != NULL)
|
||||
server->nick1 = strdup (my_passwd->pw_name);
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s: %s (%s).",
|
||||
WEECHAT_WARNING,
|
||||
_("Unable to get user's name"),
|
||||
strerror (errno));
|
||||
free (url);
|
||||
return -1;
|
||||
}
|
||||
pos_server = url + 6;
|
||||
}
|
||||
if (!pos_server[0])
|
||||
{
|
||||
free (url);
|
||||
return -1;
|
||||
}
|
||||
pos_channel = strchr (pos_server, '/');
|
||||
if (pos_channel)
|
||||
{
|
||||
pos_channel[0] = '\0';
|
||||
pos_channel++;
|
||||
}
|
||||
pos = strchr (pos_server, ':');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
server->port = atoi (pos + 1);
|
||||
}
|
||||
server->name = strdup (pos_server);
|
||||
server->address = strdup (pos_server);
|
||||
if (pos_channel && pos_channel[0])
|
||||
{
|
||||
if (string_is_channel (pos_channel))
|
||||
server->autojoin = strdup (pos_channel);
|
||||
else
|
||||
{
|
||||
server->autojoin = (char *) malloc (strlen (pos_channel) + 2);
|
||||
strcpy (server->autojoin, "#");
|
||||
strcat (server->autojoin, pos_channel);
|
||||
}
|
||||
}
|
||||
|
||||
free (url);
|
||||
|
||||
/* some default values */
|
||||
if (server->port < 0)
|
||||
server->port = DEFAULT_IRC_PORT;
|
||||
server->nick2 = (char *) malloc (strlen (server->nick1) + 2);
|
||||
strcpy (server->nick2, server->nick1);
|
||||
server->nick2 = strcat (server->nick2, "1");
|
||||
server->nick3 = (char *) malloc (strlen (server->nick1) + 2);
|
||||
strcpy (server->nick3, server->nick1);
|
||||
server->nick3 = strcat (server->nick3, "2");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_alloc: allocate a new server and add it to the servers queue
|
||||
*/
|
||||
@@ -90,10 +188,6 @@ t_irc_server *
|
||||
server_alloc ()
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
|
||||
#if DEBUG >= 1
|
||||
log_printf ("allocating new server\n");
|
||||
#endif
|
||||
|
||||
/* alloc memory for new server */
|
||||
if ((new_server = (t_irc_server *) malloc (sizeof (t_irc_server))) == NULL)
|
||||
@@ -199,8 +293,8 @@ server_free_all ()
|
||||
*/
|
||||
|
||||
t_irc_server *
|
||||
server_new (char *name, int autoconnect, char *address, int port,
|
||||
char *password, char *nick1, char *nick2, char *nick3,
|
||||
server_new (char *name, int autoconnect, int command_line, char *address,
|
||||
int port, char *password, char *nick1, char *nick2, char *nick3,
|
||||
char *username, char *realname, char *command, char *autojoin)
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
@@ -208,20 +302,21 @@ server_new (char *name, int autoconnect, char *address, int port,
|
||||
if (!name || !address || (port < 0))
|
||||
return NULL;
|
||||
|
||||
#if DEBUG >= 1
|
||||
log_printf ("creating new server (name:%s, address:%s, port:%d, pwd:%s, "
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
|
||||
"command:%s, autojoin:%s)\n",
|
||||
name, address, port, (password) ? password : "",
|
||||
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
|
||||
(username) ? username : "", (realname) ? realname : "",
|
||||
(command) ? command : "", (autojoin) ? autojoin : "");
|
||||
#ifdef DEBUG
|
||||
wee_log_printf ("creating new server (name:%s, address:%s, port:%d, pwd:%s, "
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
|
||||
"command:%s, autojoin:%s)\n",
|
||||
name, address, port, (password) ? password : "",
|
||||
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
|
||||
(username) ? username : "", (realname) ? realname : "",
|
||||
(command) ? command : "", (autojoin) ? autojoin : "");
|
||||
#endif
|
||||
|
||||
if ((new_server = server_alloc ()))
|
||||
{
|
||||
new_server->name = strdup (name);
|
||||
new_server->autoconnect = autoconnect;
|
||||
new_server->command_line = command_line;
|
||||
new_server->address = strdup (address);
|
||||
new_server->port = port;
|
||||
new_server->password = (password) ? strdup (password) : strdup ("");
|
||||
@@ -260,7 +355,7 @@ server_send (t_irc_server * server, char *buffer, int size_buf)
|
||||
* server_sendf: send formatted data to irc server
|
||||
*/
|
||||
|
||||
int
|
||||
void
|
||||
server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
@@ -268,24 +363,26 @@ server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
int size_buf;
|
||||
|
||||
if (!server)
|
||||
return -1;
|
||||
return;
|
||||
|
||||
va_start (args, fmt);
|
||||
size_buf = vsnprintf (buffer, sizeof (buffer) - 1, fmt, args);
|
||||
va_end (args);
|
||||
|
||||
if ((size_buf == 0) || (strcmp (buffer, "\r\n") == 0))
|
||||
return 0;
|
||||
return;
|
||||
|
||||
buffer[sizeof (buffer) - 1] = '\0';
|
||||
if ((size_buf < 0) || (size_buf > (int) (sizeof (buffer) - 1)))
|
||||
size_buf = strlen (buffer);
|
||||
buffer[size_buf - 2] = '\0';
|
||||
#if DEBUG >= 2
|
||||
#ifdef DEBUG
|
||||
gui_printf (server->window, "[DEBUG] Sending to server >>> %s\n", buffer);
|
||||
#endif
|
||||
buffer[size_buf - 2] = '\r';
|
||||
return server_send (server, buffer, size_buf);
|
||||
if (server_send (server, buffer, size_buf) <= 0)
|
||||
gui_printf (server->window, _("%s error sending data to IRC server\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -293,18 +390,32 @@ server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
*/
|
||||
|
||||
void
|
||||
server_msgq_add_msg (t_irc_server * server, char *msg)
|
||||
server_msgq_add_msg (t_irc_server *server, char *msg)
|
||||
{
|
||||
t_irc_message *message;
|
||||
|
||||
message = (t_irc_message *) malloc (sizeof (t_irc_message));
|
||||
if (!message)
|
||||
{
|
||||
gui_printf (server->window,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
return;
|
||||
}
|
||||
message->server = server;
|
||||
if (unterminated_message)
|
||||
{
|
||||
message->data = (char *) malloc (strlen (unterminated_message) +
|
||||
strlen (msg) + 1);
|
||||
strcpy (message->data, unterminated_message);
|
||||
strcat (message->data, msg);
|
||||
if (!message->data)
|
||||
gui_printf (server->window,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
else
|
||||
{
|
||||
strcpy (message->data, unterminated_message);
|
||||
strcat (message->data, msg);
|
||||
}
|
||||
free (unterminated_message);
|
||||
unterminated_message = NULL;
|
||||
}
|
||||
@@ -350,7 +461,12 @@ server_msgq_add_buffer (t_irc_server * server, char *buffer)
|
||||
unterminated_message =
|
||||
(char *) realloc (unterminated_message,
|
||||
strlen (buffer) + 1);
|
||||
strcpy (unterminated_message, buffer);
|
||||
if (!unterminated_message)
|
||||
gui_printf (server->window,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
else
|
||||
strcpy (unterminated_message, buffer);
|
||||
return;
|
||||
}
|
||||
gui_printf (server->window,
|
||||
@@ -368,78 +484,83 @@ void
|
||||
server_msgq_flush ()
|
||||
{
|
||||
t_irc_message *next;
|
||||
/*char **argv;
|
||||
int argc;*/
|
||||
char *ptr_data, *pos, *pos2;
|
||||
char *entire_line, *ptr_data, *pos, *pos2;
|
||||
char *host, *command, *args;
|
||||
|
||||
/* TODO: optimize this function, parse only a few messages (for low CPU time!) */
|
||||
while (recv_msgq)
|
||||
{
|
||||
#if DEBUG >= 2
|
||||
gui_printf (gui_current_window, "[DEBUG] %s\n", recv_msgq->data);
|
||||
#endif
|
||||
|
||||
ptr_data = recv_msgq->data;
|
||||
|
||||
while (ptr_data[0] == ' ')
|
||||
ptr_data++;
|
||||
|
||||
if (ptr_data)
|
||||
if (recv_msgq->data)
|
||||
{
|
||||
#if DEBUG >= 2
|
||||
gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data);
|
||||
#ifdef DEBUG
|
||||
gui_printf (gui_current_window, "[DEBUG] %s\n", recv_msgq->data);
|
||||
#endif
|
||||
|
||||
host = NULL;
|
||||
command = NULL;
|
||||
args = ptr_data;
|
||||
ptr_data = recv_msgq->data;
|
||||
entire_line = strdup (ptr_data);
|
||||
|
||||
if (ptr_data[0] == ':')
|
||||
{
|
||||
pos = strchr(ptr_data, ' ');
|
||||
pos[0] = '\0';
|
||||
host = ptr_data+1;
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
pos = ptr_data;
|
||||
while (ptr_data[0] == ' ')
|
||||
ptr_data++;
|
||||
|
||||
if (pos != NULL)
|
||||
if (ptr_data)
|
||||
{
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
pos2 = strchr(pos, ' ');
|
||||
if (pos2 != NULL)
|
||||
#ifdef DEBUG
|
||||
gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data);
|
||||
#endif
|
||||
|
||||
host = NULL;
|
||||
command = NULL;
|
||||
args = ptr_data;
|
||||
|
||||
if (ptr_data[0] == ':')
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
command = strdup(pos);
|
||||
pos2++;
|
||||
while (pos2[0] == ' ')
|
||||
pos = strchr(ptr_data, ' ');
|
||||
pos[0] = '\0';
|
||||
host = ptr_data+1;
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
pos = ptr_data;
|
||||
|
||||
if (pos != NULL)
|
||||
{
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
pos2 = strchr(pos, ' ');
|
||||
if (pos2 != NULL)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
command = strdup(pos);
|
||||
pos2++;
|
||||
args = (pos2[0] == ':') ? pos2+1 : pos2;
|
||||
while (pos2[0] == ' ')
|
||||
pos2++;
|
||||
args = (pos2[0] == ':') ? pos2+1 : pos2;
|
||||
}
|
||||
}
|
||||
|
||||
switch (irc_recv_command (recv_msgq->server, entire_line, host,
|
||||
command, args))
|
||||
{
|
||||
case -1:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("Command '%s' failed!\n"), command);
|
||||
break;
|
||||
case -2:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("No command to execute!\n"));
|
||||
break;
|
||||
case -3:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("Unknown command: cmd=%s, args=%s\n"),
|
||||
command, args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (irc_recv_command (recv_msgq->server, host, command, args))
|
||||
{
|
||||
case -1:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("Command '%s' failed!\n"), command);
|
||||
break;
|
||||
case -2:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("No command to execute!\n"));
|
||||
break;
|
||||
case -3:
|
||||
gui_printf (recv_msgq->server->window,
|
||||
_("Unknown command: cmd=%s, args=%s\n"),
|
||||
command, args);
|
||||
break;
|
||||
}
|
||||
free (entire_line);
|
||||
free (recv_msgq->data);
|
||||
}
|
||||
|
||||
free (recv_msgq->data);
|
||||
|
||||
next = recv_msgq->next_message;
|
||||
free (recv_msgq);
|
||||
recv_msgq = next;
|
||||
@@ -468,7 +589,7 @@ server_recv (t_irc_server *server)
|
||||
}
|
||||
|
||||
/*
|
||||
* server_connect: connect to an irc server
|
||||
* server_connect: connect to an IRC server
|
||||
*/
|
||||
|
||||
int
|
||||
@@ -484,8 +605,8 @@ server_connect (t_irc_server *server)
|
||||
gui_printf (server->window,
|
||||
_("%s: connecting to %s:%d...\n"),
|
||||
PACKAGE_NAME, server->address, server->port);
|
||||
log_printf (_("connecting to server %s:%d...\n"),
|
||||
server->address, server->port);
|
||||
wee_log_printf (_("connecting to server %s:%d...\n"),
|
||||
server->address, server->port);
|
||||
server->is_connected = 0;
|
||||
|
||||
/* create pipe */
|
||||
@@ -572,6 +693,28 @@ server_connect (t_irc_server *server)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_auto_connect: auto-connect to servers (called at startup)
|
||||
*/
|
||||
|
||||
void
|
||||
server_auto_connect (int command_line)
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if ( ((command_line) && (ptr_server->command_line))
|
||||
|| ((!command_line) && (ptr_server->autoconnect)) )
|
||||
{
|
||||
(void) gui_window_new (ptr_server, NULL, 1);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_disconnect: disconnect from an irc server
|
||||
*/
|
||||
|
||||
+15
-9
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -32,9 +30,12 @@
|
||||
#define PREFIX_PART "<--"
|
||||
#define PREFIX_QUIT "<--"
|
||||
#define PREFIX_ERROR "=!="
|
||||
#define PREFIX_PLUGIN "-P-"
|
||||
|
||||
#define CHANNEL_PREFIX "#&+!"
|
||||
|
||||
#define DEFAULT_IRC_PORT 6667
|
||||
|
||||
/* nick types */
|
||||
|
||||
typedef struct t_irc_nick t_irc_nick;
|
||||
@@ -79,6 +80,7 @@ struct t_irc_server
|
||||
/* user choices */
|
||||
char *name; /* name of server (only for display) */
|
||||
int autoconnect; /* = 1 if auto connect at startup */
|
||||
int command_line; /* server was given on command line */
|
||||
char *address; /* address of server (IP or name) */
|
||||
int port; /* port for server (6667 by default) */
|
||||
char *password; /* password for server */
|
||||
@@ -141,16 +143,18 @@ extern t_irc_channel *current_channel;
|
||||
/* 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_destroy (t_irc_server *);
|
||||
extern void server_free (t_irc_server *);
|
||||
extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, int, char *, int, char *, char *,
|
||||
extern t_irc_server *server_new (char *, int, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
extern int server_connect ();
|
||||
extern void server_auto_connect (int);
|
||||
extern void server_disconnect (t_irc_server *);
|
||||
extern void server_disconnect_all ();
|
||||
extern t_irc_server *server_search (char *);
|
||||
@@ -159,7 +163,7 @@ extern int server_name_already_exists (char *);
|
||||
|
||||
/* channel functions (irc-channel.c) */
|
||||
|
||||
extern t_irc_channel *channel_new (t_irc_server *, int, char *);
|
||||
extern t_irc_channel *channel_new (t_irc_server *, int, char *, int);
|
||||
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 *);
|
||||
@@ -178,14 +182,14 @@ extern int nick_get_max_length (t_irc_channel *);
|
||||
|
||||
/* IRC display (irc-diplay.c) */
|
||||
|
||||
extern void irc_display_prefix (t_gui_window *, char *);
|
||||
extern void irc_display_prefix (/*@null@*/ t_gui_window *, char *);
|
||||
extern void irc_display_nick (t_gui_window *, t_irc_nick *, int, int, int, int);
|
||||
extern void irc_display_mode (t_gui_window *, char *, char, char *, char *,
|
||||
char *, char *);
|
||||
|
||||
/* IRC protocol (irc-commands.c) */
|
||||
|
||||
extern int irc_recv_command (t_irc_server *, char *, char *, char *);
|
||||
extern int irc_recv_command (t_irc_server *, char *, char *, char *, char *);
|
||||
extern void irc_login (t_irc_server *);
|
||||
/* IRC commands issued by user */
|
||||
extern int irc_cmd_send_admin (t_irc_server *, char *);
|
||||
@@ -255,6 +259,8 @@ extern int irc_cmd_recv_004 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_301 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_302 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_303 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_305 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_306 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_311 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_312 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_313 (t_irc_server *, char *, char *);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Copyright (c) 2004 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\"
|
||||
|
||||
if PLUGIN_PERL
|
||||
perl_dir = perl
|
||||
endif
|
||||
|
||||
# if PLUGIN_PYTHON
|
||||
# python_dir = python
|
||||
# endif
|
||||
|
||||
# if PLUGIN_RUBY
|
||||
# ruby_dir = ruby
|
||||
# endif
|
||||
|
||||
# SUBDIRS = $(perl_dir) $(python_dir) $(ruby_dir)
|
||||
SUBDIRS = $(perl_dir)
|
||||
|
||||
noinst_LIBRARIES = lib_weechat_plugins.a
|
||||
|
||||
lib_weechat_plugins_a_SOURCES = plugins.h \
|
||||
plugins.c
|
||||
+4
-2
@@ -2,8 +2,10 @@ WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
This is plugins directory for WeeChat.
|
||||
In the future, you'll find there interfaces with many famous languages for
|
||||
|
||||
Today, Perl interface is developed.
|
||||
|
||||
In the future, you'll find there interfaces with other famous languages for
|
||||
writing extensions to WeeChat:
|
||||
- Perl interface,
|
||||
- Python interface,
|
||||
- Ruby interface.
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Copyright (c) 2004 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" $(PERL_CFLAGS)
|
||||
|
||||
noinst_LIBRARIES = lib_weechat_perl.a
|
||||
|
||||
lib_weechat_perl_a_SOURCES = wee-perl.h \
|
||||
wee-perl.c
|
||||
@@ -0,0 +1,578 @@
|
||||
/*
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* wee-perl.c: Perl plugin support for WeeChat */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <EXTERN.h>
|
||||
#include <perl.h>
|
||||
#include <XSUB.h>
|
||||
#include "../../common/weechat.h"
|
||||
#include "../plugins.h"
|
||||
#include "wee-perl.h"
|
||||
#include "../../common/command.h"
|
||||
#include "../../irc/irc.h"
|
||||
#include "../../gui/gui.h"
|
||||
|
||||
|
||||
static PerlInterpreter *my_perl = NULL;
|
||||
|
||||
t_plugin_script *perl_scripts = NULL;
|
||||
t_plugin_script *last_perl_script = NULL;
|
||||
|
||||
extern void boot_DynaLoader (pTHX_ CV* cv);
|
||||
|
||||
|
||||
/*
|
||||
* IRC::register: startup function for all WeeChat Perl scripts
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_register)
|
||||
{
|
||||
char *name, *version, *shutdown_func, *description;
|
||||
int integer;
|
||||
t_plugin_script *ptr_perl_script, *perl_script_found, *new_perl_script;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
version = SvPV (ST (1), integer);
|
||||
shutdown_func = SvPV (ST (2), integer);
|
||||
description = SvPV (ST (3), integer);
|
||||
|
||||
perl_script_found = NULL;
|
||||
for (ptr_perl_script = perl_scripts; ptr_perl_script;
|
||||
ptr_perl_script = ptr_perl_script->next_script)
|
||||
{
|
||||
if (strcasecmp (ptr_perl_script->name, name) == 0)
|
||||
{
|
||||
perl_script_found = ptr_perl_script;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (perl_script_found)
|
||||
{
|
||||
/* error: another scripts already exists with this name! */
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("Perl error: unable to register Perl script \"%s\" (another script "
|
||||
"already exists with this name)\n"),
|
||||
name);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* registering script */
|
||||
new_perl_script = (t_plugin_script *)malloc (sizeof (t_plugin_script));
|
||||
if (new_perl_script)
|
||||
{
|
||||
new_perl_script->name = strdup (name);
|
||||
new_perl_script->version = strdup (version);
|
||||
new_perl_script->shutdown_func = strdup (shutdown_func);
|
||||
new_perl_script->description = strdup (description);
|
||||
|
||||
/* add new script to list */
|
||||
new_perl_script->prev_script = last_perl_script;
|
||||
new_perl_script->next_script = NULL;
|
||||
if (perl_scripts)
|
||||
last_perl_script->next_script = new_perl_script;
|
||||
else
|
||||
perl_scripts = new_perl_script;
|
||||
last_perl_script = new_perl_script;
|
||||
|
||||
wee_log_printf (_("registered Perl script: \"%s\", version %s (%s)\n"),
|
||||
name, version, description);
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("%s unable to load Perl script \"%s\" (not enough memory)\n"),
|
||||
WEECHAT_ERROR, name);
|
||||
}
|
||||
}
|
||||
XST_mPV (0, VERSION);
|
||||
XSRETURN (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::print: print message to current window
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_print)
|
||||
{
|
||||
int i, integer;
|
||||
char *message;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
for (i = 0; i < items; i++)
|
||||
{
|
||||
message = SvPV (ST (i), integer);
|
||||
irc_display_prefix (gui_current_window, PREFIX_PLUGIN);
|
||||
gui_printf (gui_current_window, "%s", message);
|
||||
}
|
||||
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::print_with_channel: print message to a specific channel/server
|
||||
* (server is optional)
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_print_with_channel)
|
||||
{
|
||||
int integer;
|
||||
char *message, *channel, *server = NULL;
|
||||
t_gui_window *ptr_window;
|
||||
t_irc_server *ptr_server;
|
||||
t_irc_channel *ptr_channel;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
/* server specified */
|
||||
if (items > 2)
|
||||
{
|
||||
server = SvPV (ST (2), integer);
|
||||
if (!server[0])
|
||||
server = NULL;
|
||||
}
|
||||
|
||||
/* look for window for printing message */
|
||||
channel = SvPV (ST (1), integer);
|
||||
ptr_window = NULL;
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (!server || (strcasecmp (ptr_server->name, server)) == 0)
|
||||
{
|
||||
for (ptr_channel = ptr_server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (strcasecmp (ptr_channel->name, channel) == 0)
|
||||
{
|
||||
ptr_window = ptr_channel->window;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ptr_window)
|
||||
break;
|
||||
}
|
||||
|
||||
/* window found => display message & return 1 */
|
||||
if (ptr_window)
|
||||
{
|
||||
message = SvPV (ST (0), integer);
|
||||
irc_display_prefix (ptr_window, PREFIX_PLUGIN);
|
||||
gui_printf (ptr_window, "%s", message);
|
||||
XSRETURN_YES;
|
||||
}
|
||||
|
||||
/* no window found => return 0 */
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::print_infobar: print message to infobar
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_print_infobar)
|
||||
{
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
if (items == 2)
|
||||
gui_infobar_printf (SvIV (ST (0)), COLOR_WIN_INFOBAR, SvPV (ST (1), integer));
|
||||
else
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("Perl error: wrong parameters for IRC::print_infobar Perl function\n"));
|
||||
}
|
||||
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::add_message_handler: add handler for messages (privmsg, ...)
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_add_message_handler)
|
||||
{
|
||||
char *name, *function;
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
plugin_handler_add (&plugin_msg_handlers, &last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL, name, function);
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::add_command_handler: add command handler (define/redefine commands)
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_add_command_handler)
|
||||
{
|
||||
char *name, *function;
|
||||
int integer;
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
if (!index_command_search (name))
|
||||
index_command_new (name);
|
||||
ptr_plugin_handler = plugin_handler_search (plugin_cmd_handlers, name);
|
||||
if (ptr_plugin_handler)
|
||||
{
|
||||
free (ptr_plugin_handler->function_name);
|
||||
ptr_plugin_handler->function_name = strdup (function);
|
||||
}
|
||||
else
|
||||
plugin_handler_add (&plugin_cmd_handlers, &last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL, name, function);
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::get_info: get various infos
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_get_info)
|
||||
{
|
||||
char *arg, *info = NULL;
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
arg = SvPV (ST (0), integer);
|
||||
|
||||
if (arg)
|
||||
{
|
||||
|
||||
if ( (strcasecmp (arg, "0") == 0) || (strcasecmp (arg, "version") == 0) )
|
||||
{
|
||||
info = PACKAGE_STRING;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) )
|
||||
{
|
||||
info = current_irc_server->nick;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "2") == 0) || (strcasecmp (arg, "channel") == 0) )
|
||||
{
|
||||
if (WIN_IS_CHANNEL (gui_current_window))
|
||||
info = CHANNEL (gui_current_window)->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) )
|
||||
{
|
||||
info = current_irc_server->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "4") == 0) || (strcasecmp (arg, "weechatdir") == 0) )
|
||||
{
|
||||
info = weechat_home;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) )
|
||||
{
|
||||
XST_mIV (0, current_irc_server->is_away);
|
||||
XSRETURN (1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info)
|
||||
XST_mPV (0, info);
|
||||
else
|
||||
XST_mPV (0, "");
|
||||
}
|
||||
|
||||
XSRETURN (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* xs_init: initialize subroutines
|
||||
*/
|
||||
|
||||
void
|
||||
xs_init (pTHX)
|
||||
{
|
||||
newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
|
||||
newXS ("IRC::register", XS_IRC_register, "IRC");
|
||||
newXS ("IRC::print", XS_IRC_print, "IRC");
|
||||
newXS ("IRC::print_with_channel", XS_IRC_print_with_channel, "IRC");
|
||||
newXS ("IRC::print_infobar", XS_IRC_print_infobar, "IRC");
|
||||
newXS ("IRC::add_message_handler", XS_IRC_add_message_handler, "IRC");
|
||||
newXS ("IRC::add_command_handler", XS_IRC_add_command_handler, "IRC");
|
||||
newXS ("IRC::get_info", XS_IRC_get_info, "IRC");
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_init: initialize Perl interface for WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
wee_perl_init ()
|
||||
{
|
||||
char *perl_args[] = { "", "-e", "0" };
|
||||
/* Following Perl code is extracted/modified from X-Chat IRC client */
|
||||
/* X-Chat is (c) 1998-2002 Peter Zelezny */
|
||||
char *weechat_perl_func =
|
||||
{
|
||||
"sub wee_perl_load_file"
|
||||
"{"
|
||||
" my $filename = shift;"
|
||||
" local $/ = undef;"
|
||||
" open FILE, $filename or return \"__WEECHAT_ERROR__\";"
|
||||
" $_ = <FILE>;"
|
||||
" close FILE;"
|
||||
" return $_;"
|
||||
"}"
|
||||
"sub wee_perl_load_eval_file"
|
||||
"{"
|
||||
" my $filename = shift;"
|
||||
" my $content = wee_perl_load_file ($filename);"
|
||||
" if ($content eq \"__WEECHAT_ERROR__\")"
|
||||
" {"
|
||||
" IRC::print \"" WEECHAT_ERROR " Perl script '$filename' not found.\\n\";"
|
||||
" return 1;"
|
||||
" }"
|
||||
" eval $content;"
|
||||
" if ($@)"
|
||||
" {"
|
||||
" IRC::print \"" WEECHAT_ERROR " unable to load Perl script '$filename':\\n\";"
|
||||
" IRC::print \"$@\\n\";"
|
||||
" return 2;"
|
||||
" }"
|
||||
" return 0;"
|
||||
"}"
|
||||
"$SIG{__WARN__} = sub { IRC::print \"$_[0]\n\"; };"
|
||||
};
|
||||
|
||||
my_perl = perl_alloc ();
|
||||
perl_construct (my_perl);
|
||||
perl_parse (my_perl, xs_init, 3, perl_args, NULL);
|
||||
eval_pv (weechat_perl_func, TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_search: search a (loaded) Perl script by name
|
||||
*/
|
||||
|
||||
t_plugin_script *
|
||||
wee_perl_search (char *name)
|
||||
{
|
||||
t_plugin_script *ptr_perl_script;
|
||||
|
||||
for (ptr_perl_script = perl_scripts; ptr_perl_script;
|
||||
ptr_perl_script = ptr_perl_script->next_script)
|
||||
{
|
||||
if (strcmp (ptr_perl_script->name, name) == 0)
|
||||
return ptr_perl_script;
|
||||
}
|
||||
|
||||
/* script not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_exec: execute a Perl script
|
||||
*/
|
||||
|
||||
int
|
||||
wee_perl_exec (char *function, char *arguments)
|
||||
{
|
||||
char *argv[2];
|
||||
int count, return_code;
|
||||
SV *sv;
|
||||
|
||||
/* call Perl function */
|
||||
dSP;
|
||||
ENTER;
|
||||
SAVETMPS;
|
||||
PUSHMARK(sp);
|
||||
argv[0] = arguments;
|
||||
argv[1] = NULL;
|
||||
count = perl_call_argv (function, G_EVAL | G_SCALAR, argv);
|
||||
SPAGAIN;
|
||||
|
||||
/* check if ok */
|
||||
sv = GvSV (gv_fetchpv ("@", TRUE, SVt_PV));
|
||||
return_code = 1;
|
||||
if (SvTRUE (sv))
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("Perl error: %s\n"),
|
||||
SvPV (sv, count));
|
||||
POPs;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count != 1)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("Perl error: too much values from \"%s\" (%d). Expected: 1.\n"),
|
||||
function, count);
|
||||
}
|
||||
else
|
||||
return_code = POPi;
|
||||
}
|
||||
|
||||
PUTBACK;
|
||||
FREETMPS;
|
||||
LEAVE;
|
||||
|
||||
return return_code;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_load: load a Perl script
|
||||
*/
|
||||
|
||||
int
|
||||
wee_perl_load (char *filename)
|
||||
{
|
||||
/* execute Perl script */
|
||||
wee_log_printf (_("loading Perl script \"%s\"\n"), filename);
|
||||
return wee_perl_exec ("wee_perl_load_eval_file", filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_script_free: free a Perl script
|
||||
*/
|
||||
|
||||
void
|
||||
wee_perl_script_free (t_plugin_script *ptr_perl_script)
|
||||
{
|
||||
t_plugin_script *new_perl_scripts;
|
||||
|
||||
/* remove script from list */
|
||||
if (last_perl_script == ptr_perl_script)
|
||||
last_perl_script = ptr_perl_script->prev_script;
|
||||
if (ptr_perl_script->prev_script)
|
||||
{
|
||||
(ptr_perl_script->prev_script)->next_script = ptr_perl_script->next_script;
|
||||
new_perl_scripts = perl_scripts;
|
||||
}
|
||||
else
|
||||
new_perl_scripts = ptr_perl_script->next_script;
|
||||
|
||||
if (ptr_perl_script->next_script)
|
||||
(ptr_perl_script->next_script)->prev_script = ptr_perl_script->prev_script;
|
||||
|
||||
/* free data */
|
||||
if (ptr_perl_script->name)
|
||||
free (ptr_perl_script->name);
|
||||
if (ptr_perl_script->version)
|
||||
free (ptr_perl_script->version);
|
||||
if (ptr_perl_script->shutdown_func)
|
||||
free (ptr_perl_script->shutdown_func);
|
||||
if (ptr_perl_script->description)
|
||||
free (ptr_perl_script->description);
|
||||
free (ptr_perl_script);
|
||||
perl_scripts = new_perl_scripts;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_unload: unload a Perl script
|
||||
*/
|
||||
|
||||
void
|
||||
wee_perl_unload (t_plugin_script *ptr_perl_script)
|
||||
{
|
||||
if (ptr_perl_script)
|
||||
{
|
||||
wee_log_printf (_("unloading Perl script \"%s\"\n"),
|
||||
ptr_perl_script->name);
|
||||
|
||||
/* call shutdown callback function */
|
||||
if (ptr_perl_script->shutdown_func[0])
|
||||
wee_perl_exec (ptr_perl_script->shutdown_func, "");
|
||||
wee_perl_script_free (ptr_perl_script);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_unload_all: unload all Perl scripts
|
||||
*/
|
||||
|
||||
void
|
||||
wee_perl_unload_all ()
|
||||
{
|
||||
wee_log_printf (_("unloading all Perl scripts...\n"));
|
||||
while (perl_scripts)
|
||||
wee_perl_unload (perl_scripts);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_perl_end: shutdown Perl interface
|
||||
*/
|
||||
|
||||
void
|
||||
wee_perl_end ()
|
||||
{
|
||||
/* unload all scripts */
|
||||
wee_perl_unload_all ();
|
||||
|
||||
/* free all handlers */
|
||||
plugin_handler_free_all_type (&plugin_msg_handlers,
|
||||
&last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
plugin_handler_free_all_type (&plugin_cmd_handlers,
|
||||
&last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
|
||||
/* free Perl interpreter */
|
||||
if (my_perl)
|
||||
{
|
||||
perl_destruct (my_perl);
|
||||
perl_free (my_perl);
|
||||
my_perl = NULL;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_PERL_H
|
||||
#define __WEECHAT_PERL_H 1
|
||||
|
||||
#include "../plugins.h"
|
||||
|
||||
extern void wee_perl_init ();
|
||||
extern t_plugin_script *wee_perl_search (char *);
|
||||
extern int wee_perl_exec (char *, char *);
|
||||
extern int wee_perl_load (char *);
|
||||
extern void wee_perl_unload (t_plugin_script *);
|
||||
extern void wee_perl_unload_all ();
|
||||
extern void wee_perl_end ();
|
||||
|
||||
#endif /* wee-perl.h */
|
||||
@@ -0,0 +1,373 @@
|
||||
/*
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* plugins.c: manages WeeChat plugins (Perl and/or Python and/or Ruby) */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
#include "../common/weechat.h"
|
||||
#include "plugins.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
#include "perl/wee-perl.h"
|
||||
#endif
|
||||
|
||||
|
||||
char *plugin_name[3] = { "Perl", "Python", "Ruby" };
|
||||
|
||||
t_plugin_handler *plugin_msg_handlers = NULL;
|
||||
t_plugin_handler *last_plugin_msg_handler = NULL;
|
||||
|
||||
t_plugin_handler *plugin_cmd_handlers = NULL;
|
||||
t_plugin_handler *last_plugin_cmd_handler = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* plugin_auto_load: auto-load all scripts in a directory
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_auto_load (int plugin_type, char *directory)
|
||||
{
|
||||
int dir_length;
|
||||
char *dir_name, *current_dir;
|
||||
DIR *dir;
|
||||
struct dirent *entry;
|
||||
struct stat statbuf;
|
||||
|
||||
/* build directory, adding WeeChat home */
|
||||
dir_length = strlen (weechat_home) + strlen (directory) + 2;
|
||||
dir_name =
|
||||
(char *) malloc (dir_length * sizeof (char));
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR, directory);
|
||||
|
||||
/* save working directory */
|
||||
current_dir = (char *) malloc (1024 * sizeof (char));
|
||||
if (!getcwd (current_dir, 1024 - 1))
|
||||
{
|
||||
free (current_dir);
|
||||
current_dir = NULL;
|
||||
}
|
||||
|
||||
/* browse autoload directory */
|
||||
dir = opendir (dir_name);
|
||||
chdir (dir_name);
|
||||
if (dir)
|
||||
{
|
||||
while ((entry = readdir (dir)))
|
||||
{
|
||||
lstat (entry->d_name, &statbuf);
|
||||
if (! S_ISDIR(statbuf.st_mode))
|
||||
{
|
||||
wee_log_printf (_("auto-loading %s script: %s%s%s\n"),
|
||||
plugin_name[plugin_type],
|
||||
dir_name, DIR_SEPARATOR, entry->d_name);
|
||||
plugin_load (plugin_type, entry->d_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* restore working directory */
|
||||
if (current_dir)
|
||||
{
|
||||
chdir (current_dir);
|
||||
free (current_dir);
|
||||
}
|
||||
free (dir_name);
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_init: initialize all plugins
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_init ()
|
||||
{
|
||||
#ifdef PLUGIN_PERL
|
||||
wee_perl_init();
|
||||
plugin_auto_load (PLUGIN_TYPE_PERL, "perl/autoload");
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_load: load a plugin
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_load (int plugin_type, char *filename)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
switch (plugin_type)
|
||||
{
|
||||
case PLUGIN_TYPE_PERL:
|
||||
#ifdef PLUGIN_PERL
|
||||
wee_perl_load (filename);
|
||||
#endif
|
||||
break;
|
||||
case PLUGIN_TYPE_PYTHON:
|
||||
/* TODO: load Python script */
|
||||
break;
|
||||
case PLUGIN_TYPE_RUBY:
|
||||
/* TODO: load Ruby script */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_handler_search: look for message/command handler
|
||||
*/
|
||||
|
||||
t_plugin_handler *
|
||||
plugin_handler_search (t_plugin_handler *plugin_handlers, char *name)
|
||||
{
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
|
||||
for (ptr_plugin_handler = plugin_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
/* handler found */
|
||||
if (strcasecmp (ptr_plugin_handler->name, name) == 0)
|
||||
return ptr_plugin_handler;
|
||||
}
|
||||
/* handler not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_handler_add: add a message/command handler
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_handler_add (t_plugin_handler **plugin_handlers,
|
||||
t_plugin_handler **last_plugin_handler,
|
||||
int plugin_type, char *name, char *function)
|
||||
{
|
||||
t_plugin_handler *new_plugin_handler;
|
||||
|
||||
new_plugin_handler = (t_plugin_handler *)malloc (sizeof (t_plugin_handler));
|
||||
if (new_plugin_handler)
|
||||
{
|
||||
new_plugin_handler->plugin_type = plugin_type;
|
||||
new_plugin_handler->name = strdup (name);
|
||||
new_plugin_handler->function_name = strdup (function);
|
||||
|
||||
/* add new handler to list */
|
||||
new_plugin_handler->prev_handler = *last_plugin_handler;
|
||||
new_plugin_handler->next_handler = NULL;
|
||||
if (*plugin_handlers)
|
||||
(*last_plugin_handler)->next_handler = new_plugin_handler;
|
||||
else
|
||||
*plugin_handlers = new_plugin_handler;
|
||||
*last_plugin_handler = new_plugin_handler;
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_ERROR);
|
||||
gui_printf (NULL,
|
||||
_("%s unable to add handler for \"%s\" message (not enough memory)\n"),
|
||||
WEECHAT_ERROR, name);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_handler_free: free message/command handler
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_handler_free (t_plugin_handler **plugin_handlers,
|
||||
t_plugin_handler **last_plugin_handler,
|
||||
t_plugin_handler *ptr_plugin_handler)
|
||||
{
|
||||
t_plugin_handler *new_plugin_handlers;
|
||||
|
||||
/* remove handler from list */
|
||||
if (*last_plugin_handler == ptr_plugin_handler)
|
||||
*last_plugin_handler = ptr_plugin_handler->prev_handler;
|
||||
if (ptr_plugin_handler->prev_handler)
|
||||
{
|
||||
(ptr_plugin_handler->prev_handler)->next_handler = ptr_plugin_handler->next_handler;
|
||||
new_plugin_handlers = *plugin_handlers;
|
||||
}
|
||||
else
|
||||
new_plugin_handlers = ptr_plugin_handler->next_handler;
|
||||
|
||||
if (ptr_plugin_handler->next_handler)
|
||||
(ptr_plugin_handler->next_handler)->prev_handler = ptr_plugin_handler->prev_handler;
|
||||
|
||||
/* free data */
|
||||
free (ptr_plugin_handler->name);
|
||||
free (ptr_plugin_handler->function_name);
|
||||
free (ptr_plugin_handler);
|
||||
*plugin_handlers = new_plugin_handlers;
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_handler_free_all: remove all message/command handlers
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_handler_free_all (t_plugin_handler **plugin_handlers,
|
||||
t_plugin_handler **last_plugin_handler)
|
||||
{
|
||||
while (*plugin_handlers)
|
||||
plugin_handler_free (plugin_handlers, last_plugin_handler,
|
||||
*plugin_handlers);
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_handler_free_all_type: remove all message/command handlers for one type
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_handler_free_all_type (t_plugin_handler **plugin_handlers,
|
||||
t_plugin_handler **last_plugin_handler,
|
||||
int plugin_type)
|
||||
{
|
||||
t_plugin_handler *ptr_plugin_handler, *new_plugin_handler;
|
||||
|
||||
ptr_plugin_handler = *plugin_handlers;
|
||||
while (ptr_plugin_handler)
|
||||
{
|
||||
if (ptr_plugin_handler->plugin_type == plugin_type)
|
||||
{
|
||||
new_plugin_handler = ptr_plugin_handler->next_handler;
|
||||
plugin_handler_free (plugin_handlers, last_plugin_handler,
|
||||
ptr_plugin_handler);
|
||||
ptr_plugin_handler = new_plugin_handler;
|
||||
}
|
||||
else
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_event_msg: IRC message received => call all handlers for this message
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_event_msg (char *irc_command, char *arguments)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
|
||||
for (ptr_plugin_handler = plugin_msg_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (strcasecmp (ptr_plugin_handler->name, irc_command) == 0)
|
||||
{
|
||||
#ifdef PLUGIN_PERL
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
wee_perl_exec (ptr_plugin_handler->function_name, arguments);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* make gcc happy */
|
||||
(void) irc_command;
|
||||
(void) arguments;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_exec_command: execute a command handler
|
||||
*/
|
||||
|
||||
int
|
||||
plugin_exec_command (char *user_command, char *arguments)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
|
||||
for (ptr_plugin_handler = plugin_cmd_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (strcasecmp (ptr_plugin_handler->name, user_command) == 0)
|
||||
{
|
||||
#ifdef PLUGIN_PERL
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
wee_perl_exec (ptr_plugin_handler->function_name, arguments);
|
||||
#endif
|
||||
|
||||
/* command executed */
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* make gcc happy */
|
||||
(void) user_command;
|
||||
(void) arguments;
|
||||
#endif
|
||||
|
||||
/* no command executed */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_unload: unload all scripts for a plugin type
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_unload (int plugin_type, char *scriptname)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
switch (plugin_type)
|
||||
{
|
||||
case PLUGIN_TYPE_PERL:
|
||||
#ifdef PLUGIN_PERL
|
||||
/* unload one Perl script is not allowed */
|
||||
wee_perl_end ();
|
||||
wee_perl_init ();
|
||||
#endif
|
||||
break;
|
||||
case PLUGIN_TYPE_PYTHON:
|
||||
/* TODO: unload Python scripts */
|
||||
break;
|
||||
case PLUGIN_TYPE_RUBY:
|
||||
/* TODO: unload Ruby scripts */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_end: shutdown plugin interface
|
||||
*/
|
||||
|
||||
void
|
||||
plugin_end ()
|
||||
{
|
||||
plugin_handler_free_all (&plugin_msg_handlers, &last_plugin_msg_handler);
|
||||
plugin_handler_free_all (&plugin_cmd_handlers, &last_plugin_cmd_handler);
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
wee_perl_end();
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_PLUGINS_H
|
||||
#define __WEECHAT_PLUGINS_H 1
|
||||
|
||||
#define PLUGIN_TYPE_PERL 0
|
||||
#define PLUGIN_TYPE_PYTHON 1
|
||||
#define PLUGIN_TYPE_RUBY 2
|
||||
|
||||
typedef struct t_plugin_script t_plugin_script;
|
||||
|
||||
struct t_plugin_script
|
||||
{
|
||||
char *name; /* name of script */
|
||||
char *version; /* version of script */
|
||||
char *shutdown_func; /* function when script ends */
|
||||
char *description; /* description of script */
|
||||
t_plugin_script *prev_script; /* link to previous Perl script */
|
||||
t_plugin_script *next_script; /* link to next Perl script */
|
||||
};
|
||||
|
||||
typedef struct t_plugin_handler t_plugin_handler;
|
||||
|
||||
struct t_plugin_handler
|
||||
{
|
||||
int plugin_type; /* plugin type (Perl, Python, Ruby) */
|
||||
char *name; /* name of IRC command (PRIVMSG, ..)
|
||||
or command (without first '/') */
|
||||
char *function_name; /* name of function (handler) */
|
||||
t_plugin_handler *prev_handler; /* link to previous handler */
|
||||
t_plugin_handler *next_handler; /* link to next handler */
|
||||
};
|
||||
|
||||
extern t_plugin_handler *plugin_msg_handlers;
|
||||
extern t_plugin_handler *last_plugin_msg_handler;
|
||||
|
||||
extern t_plugin_handler *plugin_cmd_handlers;
|
||||
extern t_plugin_handler *last_plugin_cmd_handler;
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
extern t_plugin_script *perl_scripts;
|
||||
#endif
|
||||
|
||||
extern void plugin_init ();
|
||||
extern void plugin_load (int, char *);
|
||||
extern void plugin_unload (int, /*@null@*/ char *);
|
||||
extern t_plugin_handler *plugin_handler_search (t_plugin_handler *, char *);
|
||||
extern void plugin_handler_add (t_plugin_handler **, t_plugin_handler **,
|
||||
int, char *, char *);
|
||||
extern void plugin_handler_free_all_type (t_plugin_handler **,
|
||||
t_plugin_handler **, int);
|
||||
extern void plugin_event_msg (char *, char *);
|
||||
extern int plugin_exec_command (char *, /*@null@*/ char *);
|
||||
extern void plugin_end ();
|
||||
|
||||
#endif /* plugins.h */
|
||||
@@ -1,11 +1,13 @@
|
||||
.TH WEECHAT 1 "November 2003" "FlashCode"
|
||||
.TH WEECHAT 1 "February 2004" "FlashCode"
|
||||
|
||||
.SH NAME
|
||||
weechat \- Wee Enhanced Environment for Chat
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B weechat
|
||||
.RI [ options ]
|
||||
.RI [ options... ]
|
||||
or
|
||||
.RI [ url... ]
|
||||
.br
|
||||
|
||||
.SH DESCRIPTION
|
||||
@@ -17,6 +19,10 @@ It is compliant with RFCs 1459, 2810, 2811, 2812, and 2813.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-c, \-\-config
|
||||
.br
|
||||
display config file help (list of options)
|
||||
.TP
|
||||
.B \-h, \-\-help
|
||||
.br
|
||||
display summary of options
|
||||
@@ -29,6 +35,15 @@ display program license
|
||||
.br
|
||||
display WeeChat version
|
||||
|
||||
.SH URL
|
||||
WeeChat can use an URL (Uniform Resource Locator) to automatically connect
|
||||
to an IRC server. These are in the following form:
|
||||
.TP
|
||||
.B irc://[[nickname][:password]@]server[:port][/[#&+!]channel]
|
||||
.TP
|
||||
Exemple to join WeeChat channel support:
|
||||
irc://irc.freenode.net/weechat
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.B $HOME/.weechat/weechat.rc
|
||||
|
||||
+6
-2
@@ -1,5 +1,5 @@
|
||||
%define name weechat
|
||||
%define version 0.0.3
|
||||
%define version 0.0.5
|
||||
%define release 1
|
||||
|
||||
Name: %{name}
|
||||
@@ -22,7 +22,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%setup
|
||||
|
||||
%build
|
||||
./configure
|
||||
./configure --enable-perl
|
||||
make DESTDIR="$RPM_BUILD_ROOT" LOCALRPM="local"
|
||||
|
||||
%install
|
||||
@@ -40,6 +40,10 @@ rm -rf $RPM_BUILD_ROOT
|
||||
/usr/local/bin/weechat-curses
|
||||
|
||||
%changelog
|
||||
* Thu Feb 02 2004 FlashCode <flashcode@flashtux.org> 0.0.5-1
|
||||
- Released version 0.0.5
|
||||
* Thu Jan 01 2004 FlashCode <flashcode@flashtux.org> 0.0.4-1
|
||||
- Released version 0.0.4
|
||||
* Mon Nov 03 2003 FlashCode <flashcode@flashtux.org> 0.0.3-1
|
||||
- Released version 0.0.3
|
||||
* Sun Oct 05 2003 FlashCode <flashcode@flashtux.org> 0.0.2-1
|
||||
|
||||
+6
-3
@@ -1,17 +1,20 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
WeeChat known bugs, 2003-11-03
|
||||
WeeChat known bugs, 2004-02-07
|
||||
|
||||
- ./configure does not check that Curses header is installed
|
||||
- ./configure does not check that Curses headers are installed
|
||||
- ./configure does not check that Gtk 2.0 libraries are installed
|
||||
- ./configure does not check that Perl headers & libraries are installed
|
||||
- too much nicks in the channel (> height of window) => display bug
|
||||
- some IRC commands are marked as 'unknown' when received
|
||||
(IRC protocol is under dev!)
|
||||
- intercept Ctrl-C (do not quit immediately if Ctrl-C pressed!)
|
||||
- too much opened channels => display bug
|
||||
- when kicked, channel is not prefixed by '(' and sufixed by ')'
|
||||
- when function key (non used by WeeChat) is pressed, prompt is deleted
|
||||
- when quitting WeeChat term title is not restored (if look_set_title is ON)
|
||||
- command name for /server can not contain spaces
|
||||
- wrong alias is not created and not saved when quitting WeeChat
|
||||
- when many WeeChat are launched, log file is not properly written (cleared by
|
||||
each WeeChat at startup)
|
||||
- display problems with old Konsole versions (Kde terminal)
|
||||
|
||||
+25
-1
@@ -1,9 +1,33 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2003-11-03
|
||||
ChangeLog - 2004-02-07
|
||||
|
||||
|
||||
Version 0.0.5 (2004-02-07):
|
||||
* /set command to modify config options when WeeChat is running
|
||||
* fixed look_nicklist config option, now enables/disables nicklist
|
||||
* secured code to prevent buffer overflows and memory leaks
|
||||
* fixed QUIT IRC command: now sent to all connected servers (not only current)
|
||||
* URL command line parameter to connect to server(s)
|
||||
* new Perl script function to display message in info bar ("IRC::print_infobar")
|
||||
* info bar highlight notifications
|
||||
* info bar timestamp is added to config ("look_infobar_timestamp")
|
||||
* added info bar (optional, "look_infobar" to enable it, "on" by default)
|
||||
* fixed crash with /oper command
|
||||
* for default config file, nick is now based on un*x username (thanks to Witukind)
|
||||
* fixed crash when config file cannot be written
|
||||
* -c (or --config) command line parameter added to see config file options
|
||||
* highlight action messages
|
||||
|
||||
Version 0.0.4 (2004-01-01):
|
||||
* Perl plugin, with auto-load
|
||||
* when private window is created (another user is talking), WeeChat does not
|
||||
switch to this window
|
||||
* highlight when our nick is written in a channel/private window
|
||||
* ctrl-C now intercepted (ignored)
|
||||
* debug messages can be enabled via ./configure --enbale-debug option
|
||||
|
||||
Version 0.0.3 (2003-11-03):
|
||||
* ./configure script to build WeeChat
|
||||
* nicks are now correctly sorted (op, halfop, voice, other)
|
||||
|
||||
+27
-3
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
WeeChat FAQ, 2003-10-27
|
||||
WeeChat FAQ, 2004-01-01
|
||||
|
||||
|
||||
1- Compiling
|
||||
@@ -11,9 +11,13 @@ WeeChat FAQ, 2003-10-27
|
||||
|
||||
2- Using WeeChat
|
||||
|
||||
2.1 Why using WeeChat ? Irssi and xchat are so good...
|
||||
2.1 Why using WeeChat ? X-Chat and Irssi are so good...
|
||||
2.2 I've launched WeeChat, but I'm lost, what can I do?
|
||||
2.3 How can I customize key bindings?
|
||||
2.4 How can I load Perl scripts?
|
||||
Are Perl scripts compatible with X-chat or/and Irssi ?
|
||||
2.5 How can I load Python scripts?
|
||||
2.6 How can I load Ruby scripts?
|
||||
|
||||
3- Development
|
||||
|
||||
@@ -55,7 +59,7 @@ WeeChat FAQ, 2003-10-27
|
||||
\------------------------------------------------------------------------------/
|
||||
|
||||
|
||||
2.1 Why using WeeChat ? Irssi and xchat are so good...
|
||||
2.1 Why using WeeChat ? X-Chat and Irssi are so good...
|
||||
|
||||
Because WeeChat is very light and has new features.
|
||||
Some new features:
|
||||
@@ -77,6 +81,26 @@ WeeChat FAQ, 2003-10-27
|
||||
Today you can't do that. This will be available in a future version.
|
||||
|
||||
|
||||
2.4 How can I load Perl scripts?
|
||||
Are Perl scripts compatible with X-chat or/and Irssi ?
|
||||
|
||||
Yes, you can use /perl command to launch scripts
|
||||
(default path is ~/.weechat/perl).
|
||||
Note that scripts in ~/.weechat/perl/autoload are automatically loaded
|
||||
when WeeChat is starting up.
|
||||
WeeChat perl scripts are compatible with X-Chat, not with Irssi, sorry ;)
|
||||
|
||||
|
||||
2.5 How can I load Python scripts?
|
||||
|
||||
Today Python interface is not developed, so can't load any Python script.
|
||||
|
||||
|
||||
2.6 How can I load Ruby scripts?
|
||||
|
||||
Today Ruby interface is not developed, so can't load any Ruby script.
|
||||
|
||||
|
||||
/------------------------------------------------------------------------------\
|
||||
| 3- Development |
|
||||
\------------------------------------------------------------------------------/
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
* FlashCode, 2004-02-07
|
||||
|
||||
WeeChat 0.0.5 released.
|
||||
|
||||
* FlashCode, 2004-01-01
|
||||
|
||||
WeeChat 0.0.4 released.
|
||||
|
||||
* FlashCode, 2003-11-03
|
||||
|
||||
WeeChat 0.0.3 released.
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ Features
|
||||
Copyright
|
||||
---------
|
||||
|
||||
WeeChat (c) Copyright 2003
|
||||
WeeChat (c) Copyright 2004
|
||||
by: FlashCode <flashcode@flashtux.org>
|
||||
Xahlexx <xahlex@tuxisland.org>
|
||||
Bounga <bounga@altern.org>
|
||||
|
||||
+21
-22
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
TODO - 2003-11-03
|
||||
TODO - 2004-02-07
|
||||
|
||||
Legend:
|
||||
# done
|
||||
@@ -10,34 +10,37 @@ Legend:
|
||||
? is this really necessary?
|
||||
|
||||
|
||||
v0.0.3:
|
||||
v0.0.5:
|
||||
------
|
||||
|
||||
* General:
|
||||
# use of ./configure script for building WeeChat
|
||||
|
||||
* IRC protocol:
|
||||
# implement RFC 2812
|
||||
+ "/mode" command: change the user/channels modes
|
||||
# "/wallops" command: write the same string to all the
|
||||
persons with the flag +w enable
|
||||
# debug messages can be enabled via ./configure --enbale-debug option
|
||||
+ Solaris version
|
||||
|
||||
* WeeChat commands:
|
||||
+ "/set" command: allow the user to set the WeeChat variables
|
||||
under WeeChat without editing the config file (colours, time
|
||||
# "/set" command: allow the user to set the WeeChat variables
|
||||
under WeeChat without editing the config file (colors, time
|
||||
format, etc)
|
||||
|
||||
|
||||
* Interface:
|
||||
+ internationalization (traduce WeeChat in many languages)
|
||||
# info bar
|
||||
# add clock
|
||||
|
||||
* Configuration:
|
||||
# do not stop program if problem with options in config file
|
||||
|
||||
+ add missing options for config file
|
||||
+ add key bindings to config file
|
||||
|
||||
|
||||
Future versions:
|
||||
---------------
|
||||
|
||||
* General:
|
||||
- Windows version
|
||||
- *BSD version
|
||||
|
||||
* IRC protocol:
|
||||
+ "/mode" command: change the user/channels modes
|
||||
- "/dcc" command (for chat and sending/receiving files)
|
||||
- complete "/list" command: add regexp search, display only channels that
|
||||
match regexp
|
||||
@@ -69,7 +72,6 @@ Future versions:
|
||||
if WeeChat is running for long time, a lot of memory is used!)
|
||||
- improve completion (for example complete command parameters when possible)
|
||||
- understand incomplete commands if unambigous (for example: /he for /help is ok)
|
||||
- add clock (in status bar?)
|
||||
- log chats to file
|
||||
? Qt GUI
|
||||
|
||||
@@ -80,14 +82,11 @@ Future versions:
|
||||
- IPv6 protocol implementation
|
||||
|
||||
* Configuration:
|
||||
- add key bindings to config file
|
||||
- add missing options for config file
|
||||
- load config file after GUI (so init values by default (colors, ...) before
|
||||
loading config)
|
||||
|
||||
* Plugins:
|
||||
- add Perl plugin
|
||||
- add Python plugin
|
||||
- add Ruby plugin
|
||||
- "/load" and "/unload" commands to (un)load extension scripts
|
||||
(perl, python, ruby, ...)
|
||||
- Python plugin
|
||||
- "/python load" and "/python unload" commands to (un)load Python scripts
|
||||
- Ruby plugin
|
||||
- "/ruby load" and "/ruby unload" commands to (un)load Ruby scripts
|
||||
|
||||
+42
-15
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -19,10 +19,10 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.56)
|
||||
AC_INIT(WeeChat, 0.0.3, flashcode@flashtux.org)
|
||||
AC_INIT(WeeChat, 0.0.5, flashcode@flashtux.org)
|
||||
AC_CONFIG_SRCDIR([src/common/weechat.c])
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AM_INIT_AUTOMAKE([weechat], [0.0.3])
|
||||
AM_INIT_AUTOMAKE([weechat], [0.0.5])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
@@ -38,7 +38,7 @@ AC_CHECK_LIB([curses], [initscr], LIBCURSES_FOUND=1, LIBCURSES_FOUND=0)
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS([arpa/inet.h libintl.h limits.h locale.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
||||
AC_CHECK_HEADERS([arpa/inet.h libintl.h limits.h locale.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h sys/types.h unistd.h pwd.h errno.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_TIME
|
||||
@@ -51,29 +51,34 @@ AC_FUNC_SELECT_ARGTYPES
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_FUNCS([gethostbyname gethostname gettimeofday inet_ntoa memset mkdir select setlocale socket strcasecmp strchr strdup strncasecmp strpbrk strrchr strstr uname])
|
||||
|
||||
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
||||
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
||||
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
||||
|
||||
AC_ARG_ENABLE(curses, [ --disable-curses Turn off Curses interface (default=auto)],,enable_curses=yes)
|
||||
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=yes,enable_gtk=no)
|
||||
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=yes,enable_qt=no)
|
||||
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=yes,enable_perl=no)
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug Turn on debugging messages (default=no)],enable_debug=yes,enable_debug=no)
|
||||
|
||||
enable_plugins=no
|
||||
enable_perl=no
|
||||
PERL_CFLAGS=
|
||||
enable_python=no
|
||||
enable_plugins="no"
|
||||
enable_python="no"
|
||||
PYTHON_CFLAGS=
|
||||
enable_ruby=no
|
||||
enable_ruby="no"
|
||||
RUBY_CFLAGS=
|
||||
enable_debug=no
|
||||
DEBUG_CFLAGS=
|
||||
|
||||
AM_CONDITIONAL(GUI_CURSES, test "$enable_curses" = "yes")
|
||||
AM_CONDITIONAL(GUI_GTK, test "$enable_gtk" = "yes")
|
||||
AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
||||
AM_CONDITIONAL(GUI_CURSES, test "$enable_curses" = "yes")
|
||||
AM_CONDITIONAL(GUI_GTK, test "$enable_gtk" = "yes")
|
||||
AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
||||
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
||||
# AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
||||
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
||||
|
||||
if test "x$enable_curses" = "xyes" ; then
|
||||
if test "$LIBCURSES_FOUND" = "0" ; then
|
||||
AC_MSG_ERROR([Curses library not found! Install Curses library or run ./configure with --disable-curses parameter.])
|
||||
fi
|
||||
CURSES_LIBS=-lcurses
|
||||
CURSES_LIBS="-lcurses"
|
||||
AC_SUBST(CURSES_LIBS)
|
||||
fi
|
||||
|
||||
@@ -87,12 +92,34 @@ if test "x$enable_gtk" = "xyes" ; then
|
||||
AC_SUBST(GTK_LIBS)
|
||||
fi
|
||||
|
||||
PLUGINS_LIBS=
|
||||
|
||||
if test "x$enable_perl" = "xyes" ; then
|
||||
enable_plugins="yes"
|
||||
PLUGINS_LIBS="$PLUGINS_LIBS ../../plugins/perl/lib_weechat_perl.a `perl -MExtUtils::Embed -e ldopts`"
|
||||
PERL_CFLAGS=`perl -MExtUtils::Embed -e ccopts`
|
||||
AC_SUBST(PERL_CFLAGS)
|
||||
AC_DEFINE(PLUGIN_PERL)
|
||||
fi
|
||||
|
||||
if test "x$enable_plugins" = "xyes" ; then
|
||||
AC_DEFINE(PLUGINS)
|
||||
fi
|
||||
|
||||
AC_SUBST(PLUGINS_LIBS)
|
||||
|
||||
if test "x$enable_debug" = "xyes" ; then
|
||||
AC_DEFINE(DEBUG)
|
||||
fi
|
||||
|
||||
CFLAGS="-Wall -W -pipe -O2"
|
||||
|
||||
AC_OUTPUT([Makefile
|
||||
src/Makefile
|
||||
src/common/Makefile
|
||||
src/irc/Makefile
|
||||
src/plugins/Makefile
|
||||
src/plugins/perl/Makefile
|
||||
src/gui/Makefile
|
||||
src/gui/curses/Makefile
|
||||
src/gui/gtk/Makefile
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
weechat (0.0.5-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.5, see ChangeLog for detail.
|
||||
|
||||
-- FlashCode <flashcode@flashtux.org> Sat, 07 Feb 2004 20:30:00 +0200
|
||||
|
||||
weechat (0.0.4-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.4, see ChangeLog for detail.
|
||||
|
||||
-- FlashCode <flashcode@flashtux.org> Thu, 01 Jan 2004 13:00:00 +0200
|
||||
|
||||
weechat (0.0.3-1) unstable; urgency=low
|
||||
|
||||
* WeeChat version 0.0.3, see ChangeLog for detail.
|
||||
|
||||
@@ -2,7 +2,7 @@ Source: weechat
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: FlashCode <flashcode@flashtux.org>
|
||||
Build-Depends: debhelper (>> 4.0.0), libncurses5 (>= 5.2.20020112a-7)
|
||||
Build-Depends: debhelper (>> 4.0.0), libncurses5 (>= 5.2.20020112a-7), perl (>= 5.6.0-16), libperl-dev
|
||||
Standards-Version: 3.5.8
|
||||
|
||||
Package: weechat
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
This package was debianized by FlashCode <flashcode@flashtux.org> on
|
||||
Mon, 03 Nov 2003 23:15:00 +0200.
|
||||
Sat, 07 Feb 2004 20:30:00 +0200.
|
||||
|
||||
It was downloaded from http://weechat.flashtux.org/download
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ endif
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
./configure --prefix=/usr --sysconfdir=/etc --enable-gtk
|
||||
./configure --prefix=/usr --sysconfdir=/etc --enable-perl --enable-gtk
|
||||
touch configure-stamp
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Copyright (c) 2003 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
all: weechat_doc_fr.texi weechat_doc_en.texi weechat_doc_pt.texi
|
||||
export LANG=fr_FR && makeinfo --html --no-split --number-sections weechat_doc_fr.texi
|
||||
export LANG=fr_FR && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_fr.texi >weechat_doc_fr.txt
|
||||
export LANG=en_EN && makeinfo --html --no-split --number-sections weechat_doc_en.texi
|
||||
export LANG=en_EN && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_en.texi >weechat_doc_en.txt
|
||||
export LANG=pt_PT && makeinfo --html --no-split --number-sections weechat_doc_pt.texi
|
||||
export LANG=pt_PT && makeinfo --no-headers --no-warn --no-split --number-sections weechat_doc_pt.texi >weechat_doc_pt.txt
|
||||
export LANG=fr_FR && texi2pdf weechat_doc_fr.texi
|
||||
export LANG=en_EN && texi2pdf weechat_doc_en.texi
|
||||
export LANG=pt_PT && texi2pdf weechat_doc_pt.texi
|
||||
|
||||
clean:
|
||||
rm -rf weechat_doc_*.aux weechat_doc_*.cp weechat_doc_*.fn \
|
||||
weechat_doc_*.html weechat_doc_*.ky weechat_doc_*.log \
|
||||
weechat_doc_*.pdf weechat_doc_*.pg weechat_doc_*.toc \
|
||||
weechat_doc_*.tp weechat_doc_*.txt weechat_doc_*.vr
|
||||
@@ -0,0 +1,834 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_en.info
|
||||
@settitle WeeChat - fast, light and extensible IRC client
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (english version)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_en.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_en.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage en
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - User guide
|
||||
@subtitle Fast, light and extensible IRC client
|
||||
@subtitle Documentation for WeeChat v0.0.5-pre3 - January, 24 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
This manual documents WeeChat IRC client, it is part of WeeChat.@*
|
||||
@*
|
||||
Latest version of this document can be found on this page:@*
|
||||
@uref{http://weechat.flashtux.org/doc.php?lang=en}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
This document may be used under the terms the GNU General Public License
|
||||
version 2 or higher.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Page @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introduction, (dir), (dir)
|
||||
@menu
|
||||
* Introduction:: What is WeeChat ?
|
||||
* Installation:: WeeChat installation
|
||||
* Usage:: WeeChat usage
|
||||
* Extensions:: WeeChat extensions
|
||||
* Authors / Support:: Contact authors and get support
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introduction *******************************
|
||||
|
||||
@node Introduction, Installation, Top, Top
|
||||
@chapter Introduction
|
||||
|
||||
@menu
|
||||
* Description::
|
||||
* Pre-requisites::
|
||||
@end menu
|
||||
|
||||
@node Description, Pre-requisites, Introduction, Introduction
|
||||
@section Description
|
||||
|
||||
WeeChat (Wee Enhanced Environment for Chat) is a free IRC client, fast and light,
|
||||
designed for many operating systems.@*
|
||||
@*
|
||||
Main features are:
|
||||
@itemize @minus
|
||||
@item
|
||||
multi-servers connection
|
||||
@item
|
||||
many GUI (Graphical User Interface): Curses, Gtk and Qt
|
||||
@item
|
||||
small, fast and light
|
||||
@item
|
||||
customizable and extensible with scripts
|
||||
@item
|
||||
compliant with RFCs 1459, 2810, 2811, 2812, and 2813
|
||||
@item
|
||||
multi-platform (Gnu/Linux, *BSD, Windows and other)
|
||||
@item
|
||||
100% GPL, free software
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
WeeChat homepage is here:@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requisites, , Description, Introduction
|
||||
@section Pre-requisites
|
||||
|
||||
In order to install WeeChat, you @b{need}:@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
A running Gnu/Linux system (with compiler tools for source package)
|
||||
@item
|
||||
"root" privileges (to install WeeChat)
|
||||
@item
|
||||
According to GUI, one of the following libraries:
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: ncurses library,
|
||||
@item
|
||||
Gtk: *** GUI not developed ***,
|
||||
@item
|
||||
Qt: *** GUI not developed ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Installation *******************************
|
||||
|
||||
@node Installation, Usage, Introduction, Top
|
||||
@chapter Installation
|
||||
|
||||
@menu
|
||||
* Binary package::
|
||||
* Source package::
|
||||
* CVS sources::
|
||||
@end menu
|
||||
|
||||
@node Binary package, Source package, Installation, Installation
|
||||
@section Binary package
|
||||
|
||||
Binary packages are available for these distributions:
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (or any Debian compatible distribution)@*
|
||||
To install: @kbd{dpkg -i /path/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (or any RPM compatible distribution)@*
|
||||
To install: @kbd{rpm -i /path/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
To install: see Gentoo documentation
|
||||
@item
|
||||
*BSD (not available!)
|
||||
@item
|
||||
Slackware (not available!)
|
||||
@item
|
||||
Windows (not available!)
|
||||
@end itemize
|
||||
|
||||
where x.y.z is the version (for example 0.0.1)
|
||||
@*
|
||||
|
||||
@node Source package, CVS sources, Binary package, Installation
|
||||
@section Source package
|
||||
|
||||
All you have to do is to run in a console or a terminal:@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Nota: to build only some interfaces, you can give parameters
|
||||
to ./configure, type @kbd{./configure --help} for help about options.@*
|
||||
|
||||
Then get root privileges and install WeeChat:@*
|
||||
@kbd{su -}@*
|
||||
(enter root password)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node CVS sources, , Source package, Installation
|
||||
@section CVS sources
|
||||
|
||||
Warning: CVS sources are for advanced users: it may not compile or not be stable.
|
||||
You're warned!@*
|
||||
|
||||
To get CVS sources, issue these commands:@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(when prompted for a password, just press Enter key)@*
|
||||
|
||||
Execute this script:@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Then follow instructions for source package - @xref{Source package}.
|
||||
|
||||
|
||||
@c ********************************** Usage ***********************************
|
||||
|
||||
@node Usage, Extensions, Installation, Top
|
||||
@chapter Usage
|
||||
|
||||
@menu
|
||||
* Run WeeChat::
|
||||
* Config file::
|
||||
* Key bindings::
|
||||
* WeeChat commands::
|
||||
@end menu
|
||||
|
||||
@node Run WeeChat, Config file, Usage, Usage
|
||||
@section Run WeeChat
|
||||
|
||||
@subsection Command line parameters
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Display config file help (list of options)@*
|
||||
@item -h, --help
|
||||
Display help screen@*
|
||||
@item -l, --license
|
||||
Display WeeChat license@*
|
||||
@item -v, --version
|
||||
Display WeeChat version@*
|
||||
@end table
|
||||
|
||||
@subsection Run WeeChat
|
||||
|
||||
Just issue this command to run WeeChat:@*
|
||||
@kbd{weechat-curses} (for Curses front-end)@*
|
||||
or @kbd{weechat-gtk} (for Gtk front-end)@*
|
||||
or @kbd{weechat-qt} (for Qt front-end)@*
|
||||
|
||||
When you run WeeChat for the first time, a default configuration file is
|
||||
created, with default options.@*
|
||||
The default configuration file is: ~/.weechat/weechat.rc@*
|
||||
|
||||
You can edit this file at your convenience to configure WeeChat, or you can
|
||||
set parameters with @kbd{/set} command in WeeChat - @xref{WeeChat commands}.
|
||||
|
||||
@node Config file, Key bindings, Run WeeChat, Usage
|
||||
@section Config file
|
||||
|
||||
Here is a list of all options for config file:@*
|
||||
|
||||
@table @kbd
|
||||
@item look_set_title
|
||||
Set title for window (terminal for Curses GUI) with name & version@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_startup_logo
|
||||
Display WeeChat logo at startup@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_startup_version
|
||||
Display WeeChat version at startup@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_weechat_slogan
|
||||
WeeChat slogan (if empty, slogan is not used)@*
|
||||
Type: string (any string), default value: 'the geekest IRC client!'@*
|
||||
@item look_color_nicks
|
||||
Display nick names with different colors@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_color_actions
|
||||
Display actions with different colors@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_remove_colors_from_msgs
|
||||
Remove colors from incoming messages@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nicklist
|
||||
Display nicklist window (for channel windows)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nicklist_position
|
||||
Nicklist position (top, left, right (default), bottom)@*
|
||||
Type: string (values: 'left', 'right', 'top', 'bottom'), default value: 'right'@*
|
||||
@item look_nicklist_min_size
|
||||
Min size for nicklist (width or height, depending on look_nicklist_position (0 = no min size))@*
|
||||
Type: integer (values: between 0 and 100), default value: 0@*
|
||||
@item look_nicklist_max_size
|
||||
Max size for nicklist (width or height, depending on look_nicklist_position (0 = no max size; if min == max and > 0, then size is fixed))@*
|
||||
Type: integer (values: between 0 and 100), default value: 0@*
|
||||
@item look_no_nickname
|
||||
Text to display instead of nick when not connected@*
|
||||
Type: string (any string), default value: '-cmd-'@*
|
||||
@item look_nickmode
|
||||
Display nick mode ((half)op/voice) before each nick@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_nickmode_empty
|
||||
Display space if nick mode is not (half)op/voice@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'off'@*
|
||||
@item look_nick_completor
|
||||
The string inserted after nick completion@*
|
||||
Type: string (any string), default value: ':'@*
|
||||
@item look_infobar
|
||||
Enable info bar@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item look_infobar_timestamp
|
||||
Timestamp for time in infobar@*
|
||||
Type: string (any string), default value: '%B, %A %d %G - %H:%M'@*
|
||||
@item look_infobar_delay_highlight
|
||||
Delay (in seconds) for highlight messages in infobar (0 = disable highlight notifications in infobar)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 7@*
|
||||
@item col_title
|
||||
Color for title bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_title_bg
|
||||
Background for title bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_chat
|
||||
Color for chat text@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_chat_time
|
||||
Color for time in chat window@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_chat_time_sep
|
||||
Color for time separator (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'brown'@*
|
||||
@item col_chat_prefix1
|
||||
Color for 1st and 3rd char of prefix@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightcyan'@*
|
||||
@item col_chat_prefix2
|
||||
Color for middle char of prefix@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_chat_nick
|
||||
Color for nicks in actions (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightcyan'@*
|
||||
@item col_chat_host
|
||||
Color for hostnames (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'cyan'@*
|
||||
@item col_chat_channel
|
||||
Color for channel names in actions (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_chat_dark
|
||||
Color for dark separators (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'green'@*
|
||||
@item col_chat_highlight
|
||||
Color for highlighted nick (chat window)@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_chat_bg
|
||||
Background for chat window@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item col_status
|
||||
Color for status bar@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_status_active
|
||||
Color for active window (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_status_data_msg
|
||||
Color for window with new messages (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightred'@*
|
||||
@item col_status_data_other
|
||||
Color for window with new data (not messages) (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightmagenta'@*
|
||||
@item col_status_more
|
||||
Color for window with new data (status bar)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_status_bg
|
||||
Background for status window@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_infobar
|
||||
Color for info bar text@*
|
||||
Type: color (Curses or Gtk color), default value: 'black'@*
|
||||
@item col_infobar_highlight
|
||||
Color for info bar highlight notification@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_infobar_bg
|
||||
Background for info bar window@*
|
||||
Type: color (Curses or Gtk color), default value: 'cyan'@*
|
||||
@item col_input
|
||||
Color for input text@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_input_channel
|
||||
Color for input text (channel name)@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_input_nick
|
||||
Color for input text (nick name)@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightgreen'@*
|
||||
@item col_input_bg
|
||||
Background for input window@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item col_nick
|
||||
Color for nicknames@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_nick_op
|
||||
Color for operator symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightgreen'@*
|
||||
@item col_nick_halfop
|
||||
Color for half-operator symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'lightmagenta'@*
|
||||
@item col_nick_voice
|
||||
Color for voice symbol@*
|
||||
Type: color (Curses or Gtk color), default value: 'yellow'@*
|
||||
@item col_nick_sep
|
||||
Color for nick separator@*
|
||||
Type: color (Curses or Gtk color), default value: 'blue'@*
|
||||
@item col_nick_self
|
||||
Color for local nick@*
|
||||
Type: color (Curses or Gtk color), default value: 'white'@*
|
||||
@item col_nick_private
|
||||
Color for other nick in private window@*
|
||||
Type: color (Curses or Gtk color), default value: 'gray'@*
|
||||
@item col_nick_bg
|
||||
Background for nicknames@*
|
||||
Type: color (Curses or Gtk color), default value: 'default'@*
|
||||
@item history_max_lines
|
||||
Maximum number of lines in history for one server/channel/private window (0 = unlimited)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 4096@*
|
||||
@item history_max_commands
|
||||
Maximum number of user commands in history (0 = unlimited)@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 100@*
|
||||
@item log_auto_channels
|
||||
Automatically log channel chats@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item log_auto_private
|
||||
Automatically log private chats@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item log_path
|
||||
Path for WeeChat log files@*
|
||||
Type: string (any string), default value: '~/.weechat/logs/'@*
|
||||
@item log_name
|
||||
Name for log files (%S == irc server name, %N == channel name (or nickname if private chat)@*
|
||||
Type: string (any string), default value: '%S,%N.weechatlog'@*
|
||||
@item log_timestamp
|
||||
Timestamp for log (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item log_start_string
|
||||
Text written when starting new log file (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '--- Log started %a %b %d %Y %H:%M:%s'@*
|
||||
@item log_end_string
|
||||
Text written when ending log file (see man strftime for date/time specifiers)@*
|
||||
Type: string (any string), default value: '--- Log ended %a %b %d %Y %H:%M:%s'@*
|
||||
@item dcc_auto_accept_files
|
||||
Automatically accept incoming dcc files@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_auto_accept_max_size
|
||||
Maximum size for incoming file when automatically accepted@*
|
||||
Type: integer (values: between 0 and 2147483647), default value: 0@*
|
||||
@item dcc_auto_accept_chats
|
||||
Automatically accept dcc chats (use carefully!)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_timeout
|
||||
Timeout for dcc request (in seconds)@*
|
||||
Type: integer (values: between 1 and 2147483647), default value: 300@*
|
||||
@item dcc_download_path
|
||||
Path for writing incoming files with dcc (default: user home)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item dcc_upload_path
|
||||
Path for reading files when sending thru dcc (when no path is specified)@*
|
||||
Type: string (any string), default value: '~'@*
|
||||
@item dcc_auto_rename
|
||||
Rename incoming files if already exists (add '.1', '.2', ...)@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item dcc_auto_resume
|
||||
Automatically resume dcc transfer if connection with remote host is loosed@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item proxy_use
|
||||
Use a proxy server to connect to irc server@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'off'@*
|
||||
@item proxy_address
|
||||
Proxy server address (IP or hostname)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item proxy_port
|
||||
Port for connecting to proxy server@*
|
||||
Type: integer (values: between 0 and 65535), default value: 1080@*
|
||||
@item proxy_password
|
||||
Password for proxy server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_name
|
||||
Name associated to IRC server (for display only)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_autoconnect
|
||||
Automatically connect to server when WeeChat is starting@*
|
||||
Type: boolean (values: 'on' or 'off'), default value: 'on'@*
|
||||
@item server_address
|
||||
IP address or hostname of IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_port
|
||||
Port for connecting to server@*
|
||||
Type: integer (values: between 0 and 65535), default value: 6667@*
|
||||
@item server_password
|
||||
Password for IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick1
|
||||
Nickname to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick2
|
||||
Alternate nickname to use on IRC server (if nickname is already used)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_nick3
|
||||
2nd alternate nickname to use on IRC server (if alternate nickname is already used)@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_username
|
||||
User name to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_realname
|
||||
Real name to use on IRC server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_command
|
||||
First command to run when connected to server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@item server_autojoin
|
||||
Comma separated list of channels to join when connected to server@*
|
||||
Type: string (any string), default value: ''@*
|
||||
@end table
|
||||
|
||||
Colors for Curses GUI are:@*
|
||||
@itemize @minus
|
||||
@item
|
||||
@kbd{default}: default color (transparent for background)
|
||||
@item
|
||||
@kbd{black}: black
|
||||
@item
|
||||
@kbd{red}: dark red
|
||||
@item
|
||||
@kbd{lightred}: light red
|
||||
@item
|
||||
@kbd{green}: dark green
|
||||
@item
|
||||
@kbd{lightgreen}: light green
|
||||
@item
|
||||
@kbd{brown}: brown
|
||||
@item
|
||||
@kbd{yellow}: yellow
|
||||
@item
|
||||
@kbd{blue}: dark blue
|
||||
@item
|
||||
@kbd{lightblue}: light blue
|
||||
@item
|
||||
@kbd{magenta}: dark magenta
|
||||
@item
|
||||
@kbd{lightmagenta}: light magenta
|
||||
@item
|
||||
@kbd{cyan}: dark cyan
|
||||
@item
|
||||
@kbd{lightcyan}: light cyan
|
||||
@item
|
||||
@kbd{gray}: gray
|
||||
@item
|
||||
@kbd{white}: white
|
||||
@end itemize
|
||||
|
||||
@node Key bindings, WeeChat commands, Config file, Usage
|
||||
@section Key bindings
|
||||
|
||||
@table @kbd
|
||||
@item Left arrow / Right arrow
|
||||
Go to previous / next char in command line@*
|
||||
@*
|
||||
@item Ctrl + left arrow / Ctrl + right arrow
|
||||
Go to previous / next word in command line@*
|
||||
@*
|
||||
@item Home / End
|
||||
Go to the beginning / end of command line@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Erase previous / next char of command line@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Erase previous word of command line@*
|
||||
@*
|
||||
@item Tab
|
||||
Complete command or nick (@kbd{Tab} again: find next completion)@*
|
||||
@*
|
||||
@item Any char
|
||||
Insert char to cursor position in the command line@*
|
||||
@*
|
||||
@item Enter
|
||||
Execute command or send message@*
|
||||
@*
|
||||
@item Up arrow / Down arrow
|
||||
Call again last commands/messages@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Show window history@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Switch to previous / next window@*
|
||||
@*
|
||||
@item Alt + left arrow / Alt + right arrow
|
||||
Same as F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Remove last infobar message@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node WeeChat commands, , Key bindings, Usage
|
||||
@section WeeChat commands
|
||||
|
||||
NOT WRITTEN!
|
||||
|
||||
|
||||
@c ******************************* Extensions *********************************
|
||||
|
||||
@node Extensions, Authors / Support, Usage, Top
|
||||
@chapter Extensions
|
||||
|
||||
@menu
|
||||
* Perl scripts::
|
||||
* Python scripts::
|
||||
* Ruby scripts::
|
||||
@end menu
|
||||
|
||||
@node Perl scripts, Python scripts, Extensions, Extensions
|
||||
@section Perl scripts
|
||||
|
||||
@subsection Load/unload Perl scripts
|
||||
|
||||
Perl scripts are loaded and unloaded with @command{/perl} command.
|
||||
(type @kbd{/help perl} within WeeChat to get help about command).@*
|
||||
|
||||
@emph{Examples:}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Load a Perl script: @kbd{/perl load /tmp/sample.pl}@*
|
||||
@item
|
||||
Unload all Perl scripts: @kbd{/perl unload}@*
|
||||
@item
|
||||
List all Perl scripts: @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection WeeChat / Perl API
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( name, version, shutdown_function, description );}@*
|
||||
@*
|
||||
This is first function to call in Perl script.@*
|
||||
All Perl scripts for WeeChat should call this function.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: unique name to identify script (each script must have
|
||||
unique name)
|
||||
@item @option{version}: script's version
|
||||
@item @option{shutdown_function}: Perl function called when script is
|
||||
unloaded (optional parameter, empty string means nothing is called at the end)
|
||||
@item @option{description}: short description of script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::register ("sample", "1.0", "sample_end", "Sample script!");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( message );}@*
|
||||
@*
|
||||
Print message in current window (channel or server).@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::print ("message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( channel, [server,] message );}@*
|
||||
@*
|
||||
Print message in a channel.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{channel}: name of channel
|
||||
@item @option{server}: internal name of server
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Examples:}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "message");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( delay, message );}@*
|
||||
@*
|
||||
Print message in infobar.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{delay}: after this delay (in seconds), message will be erased
|
||||
(if 0, message will not be erased).
|
||||
@item @option{message}: message to display
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::print_infobar (5, "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( name, function );}@*
|
||||
@*
|
||||
Attach a Perl function to an IRC message.@*
|
||||
Function will be called each time IRC message will be received.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: name of IRC message@*
|
||||
To know list of IRC messages, please refer to RFC 1459 and/or 2812:@*
|
||||
RFC 1459: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{function}: Perl function called when message is received
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::add_message_handler ("privmsg", my_function);}@*
|
||||
@code{sub my_function}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $channel, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($hostmask, $null, $channel) = split " ", $channel;}@*
|
||||
@code{@ @ @ @ IRC::print ("host=$hostmask, chan=$channel, msg=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( name, function );}@*
|
||||
@*
|
||||
Create new WeeChat command, linked with Perl function.@*
|
||||
Function will be called when user will launch command with @kbd{/name}.@*
|
||||
|
||||
@emph{Arguments:}
|
||||
@itemize @minus
|
||||
@item @option{name}: name of new command@*
|
||||
This name may be existing command, so that the command is overrided by
|
||||
Perl function. Be careful when overriding WeeChat commands, they'll not be
|
||||
available until your Perl script will be unloaded.
|
||||
@item @option{function}: Perl function linked with command
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Example:}@*
|
||||
@code{IRC::add_command_handler ("command", my_command);}@*
|
||||
@code{sub my_command}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Arguments: ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Python scripts, Ruby scripts, Perl scripts, Extensions
|
||||
@section Python scripts
|
||||
|
||||
Not developed!
|
||||
|
||||
@node Ruby scripts, , Python scripts, Extensions
|
||||
@section Ruby scripts
|
||||
|
||||
Not developed!
|
||||
|
||||
|
||||
@c **************************** Authors / Support *****************************
|
||||
|
||||
@node Authors / Support, , Extensions, Top
|
||||
@chapter Authors / Support
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Authors::
|
||||
* Get support::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Authors::
|
||||
* Get support::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Authors, Get support, Authors / Support, Authors / Support
|
||||
@section Authors
|
||||
|
||||
WeeChat is developed by:@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Get support, Copyright, Authors, Authors / Support
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Get support, , Authors, Authors / Support
|
||||
@end ifnothtml
|
||||
@section Get support
|
||||
|
||||
Before asking for support, be sure you've read documentation and FAQ provided
|
||||
with WeeChat.@*
|
||||
(documentation is this document, if you don't read all lines until this sentence,
|
||||
you can start again!)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Support with IRC:@*
|
||||
- server: @b{irc.freenode.net}@*
|
||||
- channel: @b{#weechat}@*@*
|
||||
@item
|
||||
WeeChat forum: soon!@*@*
|
||||
@item
|
||||
Support with mailing list:@*
|
||||
- to subscribe/unsubscribe:@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- to send mail to all mailing list subscribers, send your mail to@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Mailing archives are available here:@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Look for WeeChat support page for detail:@*
|
||||
@uref{http://weechat.flashtux.org/support.php?lang=en}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Get support, Authors / Support
|
||||
@section Copyright
|
||||
|
||||
This manual documents WeeChat IRC client, it is part of WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
This document may be used under the terms the GNU General Public License
|
||||
version 2 or higher.
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
@@ -0,0 +1,834 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_fr.info
|
||||
@settitle WeeChat - Client IRC rapide, leger et extensible
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (french version)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_fr.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_fr.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage fr
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - Guide utilisateur
|
||||
@subtitle Client IRC rapide, l@'eger et extensible
|
||||
@subtitle Documentation pour WeeChat v0.0.5-pre3 - 24 janvier 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
Ce manuel documente le client IRC WeeChat, il fait partie de WeeChat.@*
|
||||
@*
|
||||
La derni@`ere version de ce document peut @^etre t@'el@'echarg@'ee sur cette page :@*
|
||||
@uref{http://weechat.flashtux.org/doc.php}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Ce document peut @^etre utilis@'e sous les termes de la licence GNU General Public
|
||||
License version 2 ou plus.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Page @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introduction, (dir), (dir)
|
||||
@menu
|
||||
* Introduction:: Description de WeeChat
|
||||
* Installation:: Installation de WeeChat
|
||||
* Utilisation:: Utilisation de WeeChat
|
||||
* Extensions:: Extensions de WeeChat
|
||||
* Auteurs / Support:: Contacter les auteurs et obtenir du support
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introduction *******************************
|
||||
|
||||
@node Introduction, Installation, Top, Top
|
||||
@chapter Introduction
|
||||
@menu
|
||||
* Description::
|
||||
* Pre-requis::
|
||||
@end menu
|
||||
|
||||
@node Description, Pre-requis, Introduction, Introduction
|
||||
@section Description
|
||||
|
||||
WeeChat (Wee Enhanced Environment for Chat) est un client IRC libre, rapide et l@'eger,
|
||||
concu pour diff@'erents syst@`emes d'exploitation.@*
|
||||
@*
|
||||
Ses principales caract@'eristiques sont les suivantes :
|
||||
@itemize @minus
|
||||
@item
|
||||
connexion multi-serveurs
|
||||
@item
|
||||
plusieurs interfaces : Curses, Gtk et Qt
|
||||
@item
|
||||
petit, rapide et l@'eger
|
||||
@item
|
||||
param@'etrable et extensible avec des scripts
|
||||
@item
|
||||
conforme aux RFCs 1459, 2810, 2811, 2812, et 2813
|
||||
@item
|
||||
multi-plateformes (Gnu/Linux, *BSD, Windows et d'autres syst@`emes)
|
||||
@item
|
||||
100% GPL, logiciel libre
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
La page d'accueil de WeeChat est ici :@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requis, , Description, Introduction
|
||||
@section Pr@'e-requis
|
||||
|
||||
Pour installer WeeChat, vous @b{devez} avoir :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Un syst@`eme Gnu/Linux (avec le compilateur et les outils associ@'es pour le paquet des sources)
|
||||
@item
|
||||
Droits "root" (pour installer WeeChat)
|
||||
@item
|
||||
Selon l'interface, une des biblioth@`eques suivantes :
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: la librairie ncurses,
|
||||
@item
|
||||
Gtk: *** interface non d@'evelopp@'ee ***,
|
||||
@item
|
||||
Qt: *** interface non d@'evelopp@'ee ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Installation *******************************
|
||||
|
||||
@node Installation, Utilisation, Introduction, Top
|
||||
@chapter Installation
|
||||
|
||||
@menu
|
||||
* Paquet binaire::
|
||||
* Paquet source::
|
||||
* Sources CVS::
|
||||
@end menu
|
||||
|
||||
@node Paquet binaire, Paquet source, Installation, Installation
|
||||
@section Paquet binaire
|
||||
|
||||
Les paquets binaires sont disponibles pour les distributions suivantes :
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (ou toute distribution compatible Debian)@*
|
||||
Pour installer : @kbd{dpkg -i /chemin/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (ou toute distribution compatible avec les RPM)@*
|
||||
Pour installer : @kbd{rpm -i /chemin/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
Pour installer : voir la documentation Gentoo
|
||||
@item
|
||||
*BSD (non disponible !)
|
||||
@item
|
||||
Slackware (non disponible !)
|
||||
@item
|
||||
Windows (non disponible !)
|
||||
@end itemize
|
||||
|
||||
o@`u x.y.z est la version (par exemple 0.0.1)
|
||||
@*
|
||||
|
||||
@node Paquet source, Sources CVS, Paquet binaire, Installation
|
||||
@section Paquet source
|
||||
|
||||
Tapez simplement dans une console ou un terminal :@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Note: pour ne construire que certaines interfaces, vous pouvez passer des param@`etres
|
||||
@`a ./configure, tapez @kbd{./configure --help} pour de l'aide sur ces options.@*
|
||||
|
||||
Obtenez les droits root et installez WeeChat :@*
|
||||
@kbd{su -}@*
|
||||
(entrez le mot de passe de root)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node Sources CVS, , Paquet source, Installation
|
||||
@section Sources CVS
|
||||
|
||||
Attention: les sources CVS sont r@'eserv@'es aux utilisateurs avanc@'es : il se peut
|
||||
que WeeChat ne compile pas et qu'il soit tr@`s instable.
|
||||
Vous @^etes pr@'evenus !@*
|
||||
|
||||
Pour r@'ecup@'erer les sources CVS, tapez ces commandes :@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(lorsqu'un mot de passe est demand@'e, tapez simplement sur Entr@'ee)@*
|
||||
|
||||
Ex@'ecutez ce script :@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Suivez alors les instructions du paquet sources - @xref{Paquet source}.
|
||||
|
||||
|
||||
@c ******************************* Utilisation ********************************
|
||||
|
||||
@node Utilisation, Extensions, Installation, Top
|
||||
@chapter Utilisation
|
||||
|
||||
@menu
|
||||
* Lancer WeeChat::
|
||||
* Fichier de configuration::
|
||||
* Raccourcis clavier::
|
||||
* Commandes WeeChat::
|
||||
@end menu
|
||||
|
||||
@node Lancer WeeChat, Fichier de configuration, Utilisation, Utilisation
|
||||
@section Lancer WeeChat
|
||||
|
||||
@subsection Param@`etres de ligne de commande
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Afficher l'aide sur le fichier de config (liste des options)@*
|
||||
@item -h, --help
|
||||
Afficher l'aide@*
|
||||
@item -l, --license
|
||||
Afficher la licence de WeeChat@*
|
||||
@item -v, --version
|
||||
Afficher la version de WeeChat@*
|
||||
@end table
|
||||
|
||||
@subsection Lancer WeeChat
|
||||
|
||||
Tapez simplement cette commande pour lancer WeeChat :@*
|
||||
@kbd{weechat-curses} (pour l'interface Curses)@*
|
||||
ou @kbd{weechat-gtk} (pour l'interface Gtk)@*
|
||||
ou @kbd{weechat-qt} (pour l'interface Qt)@*
|
||||
|
||||
Lorsque vous lancez WeeChat pour la premi@`ere fois, un fichier de configuration
|
||||
par d@'efaut est cr@'e@'e, avec les options par d@'efaut.@*
|
||||
Le fichier de configuration par d@'efaut est : ~/.weechat/weechat.rc@*
|
||||
|
||||
Vous pouvez @'editer ce fichier pour configurer WeeChat @`a votre convenance, ou
|
||||
vous pouvez modifier les param@`etres dans WeeChat avec la commande @kbd{/set} - @xref{Commandes WeeChat}.
|
||||
|
||||
@node Fichier de configuration, Raccourcis clavier, Lancer WeeChat, Utilisation
|
||||
@section Fichier de configuration
|
||||
|
||||
Liste des options du fichier de configuration :@*
|
||||
|
||||
@table @kbd
|
||||
@item look_set_title
|
||||
D@'efinit le titre de la fen@^etre (terminal pour l'interface Curses) avec le nom et la version@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_startup_logo
|
||||
Afficher le logo WeeChat au d@'emarrage@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_startup_version
|
||||
Afficher la version de WeeChat au d@'emarrage@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_weechat_slogan
|
||||
Slogan WeeChat (si vide, le slogan ne sera pas utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: 'the geekest IRC client!'@*
|
||||
@item look_color_nicks
|
||||
Afficher les utilisateurs avec diff@'erentes couleurs@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_color_actions
|
||||
Afficher les actions avec diff@'erentes couleurs@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_remove_colors_from_msgs
|
||||
Supprimer les couleurs dans les messages entrants@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nicklist
|
||||
Afficher la fen@^etre des utilisateurs (pour les fen@^etres de canaux)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nicklist_position
|
||||
Position de la fen@^etre d'utilisateurs (haut (top), gauche (left), droite (right, par d@'efaut), bas (bottom))@*
|
||||
Type: cha@^ine (valeurs: 'left', 'right', 'top', 'bottom'), valeur par d@'efaut: 'right'@*
|
||||
@item look_nicklist_min_size
|
||||
Taille minimum pour la fen@^etre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille minimum))@*
|
||||
Type: entier (valeurs: entre 0 et 100), valeur par d@'efaut: 0@*
|
||||
@item look_nicklist_max_size
|
||||
Taille maximum pour la fen@^etre d'utilisateurs (largeur ou hauteur, selon look_nicklist_position (0 = pas de taille maximum; si min == max et > 0, alors la taille est fixe))@*
|
||||
Type: entier (valeurs: entre 0 et 100), valeur par d@'efaut: 0@*
|
||||
@item look_no_nickname
|
||||
Texte @`a afficher en lieu et place du nom d'utilisateur lorsque la connexion n'est pas active@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '-cmd-'@*
|
||||
@item look_nickmode
|
||||
Afficher le mode de l'utilisateur ((half)op/voice) devant chaque utilisateur@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_nickmode_empty
|
||||
Afficher un espace si le mode utilisateur n'est pas (half)op/voice@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'off'@*
|
||||
@item look_nick_completor
|
||||
La cha@^ine affich@'ee apr@`es la compl@'etion des utilisateurs@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ':'@*
|
||||
@item look_infobar
|
||||
Active la barre d'infos@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item look_infobar_timestamp
|
||||
Horodatage pour les conversations sauvegard@'ees@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '%B, %A %d %G - %H:%M'@*
|
||||
@item look_infobar_delay_highlight
|
||||
D@'elai (en secondes) pour la notification des messages dans la barre d'infos (0 = d@'esactiver les notifications dans la barre d'infos)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 7@*
|
||||
@item col_title
|
||||
Couleur pour la barre de titre@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_title_bg
|
||||
Couleur de fond pour la barre de titre@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_chat
|
||||
Couleur pour le texte de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_chat_time
|
||||
Couleur pour l'heure dans la fen@^etre de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_chat_time_sep
|
||||
Couleur pour la s@'eparation de l'heure (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'brown'@*
|
||||
@item col_chat_prefix1
|
||||
Couleur pour le 1er et le 3@`eme caract@`ere du pr@'efixe@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightcyan'@*
|
||||
@item col_chat_prefix2
|
||||
Couleur pour le caract@`ere du milieu du pr@'efixe@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_chat_nick
|
||||
Couleur pour les noms d'utilisateurs dans les actions (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightcyan'@*
|
||||
@item col_chat_host
|
||||
Couleur pour les noms de machines (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'cyan'@*
|
||||
@item col_chat_channel
|
||||
Couleur pour les canaux dans les actions (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_chat_dark
|
||||
Couleur pour les s@'eparateurs sombres (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'green'@*
|
||||
@item col_chat_highlight
|
||||
Couleur pour le pseudo surlign@'e (fen@^etre de discussion)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_chat_bg
|
||||
Couleur de fond pour la fen@^etre de discussion@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item col_status
|
||||
Couleur pour la barre de statut@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_status_active
|
||||
Couleur pour la fen@^etre active (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_status_data_msg
|
||||
Couleur pour une fen@^etre avec de nouvelles infos (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightred'@*
|
||||
@item col_status_data_other
|
||||
Couleur pour une fen@^etre avec des nouvelles donn@'ees (pas des infos) (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightmagenta'@*
|
||||
@item col_status_more
|
||||
Couleur pour une fen@^etre avec des nouvelles donn@'ees (barre de statut)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_status_bg
|
||||
Couleur de fond pour la fen@^etre de statut@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_infobar
|
||||
Couleur pour la barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'black'@*
|
||||
@item col_infobar_highlight
|
||||
Couleur pour la notification dans la barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_infobar_bg
|
||||
Couleur de fond pour la fen@^etre de barre d'infos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'cyan'@*
|
||||
@item col_input
|
||||
Couleur pour le texte saisi@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_input_channel
|
||||
Couleur pour le texte saisi (nom du canal)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_input_nick
|
||||
Couleur pour le texte saisi (pseudo)@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightgreen'@*
|
||||
@item col_input_bg
|
||||
Couleur de fond pour la fen@^etre de saisie@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item col_nick
|
||||
Couleur pour les pseudos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_nick_op
|
||||
Couleur pour le symbole op@'erateur@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightgreen'@*
|
||||
@item col_nick_halfop
|
||||
Couleur pour le symbole demi-op@'erateur@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'lightmagenta'@*
|
||||
@item col_nick_voice
|
||||
Couleur pour le symbole voix@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'yellow'@*
|
||||
@item col_nick_sep
|
||||
Couleur pour le s@'eparateur de pseudo@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'blue'@*
|
||||
@item col_nick_self
|
||||
Couleur pour le pseudo local@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'white'@*
|
||||
@item col_nick_private
|
||||
Couleur pour l'autre pseudo dans la fen@^etre priv@'ee@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'gray'@*
|
||||
@item col_nick_bg
|
||||
Couleur de fond pour les pseudos@*
|
||||
Type: couleur (couleur Curses ou Gtk), valeur par d@'efaut: 'default'@*
|
||||
@item history_max_lines
|
||||
Nombre maximum de lignes dans l'historique pour un serveur/fen@^etre/fen@^etre priv@'ee (0 = sans limite)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 4096@*
|
||||
@item history_max_commands
|
||||
Nombre maximum de commandes utilisateur dans l'historique (0 = sans limite)@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 100@*
|
||||
@item log_auto_channels
|
||||
Enregistrer automatiquement les conversations des canaux@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item log_auto_private
|
||||
Enregistrer automatiquement les conversations priv@'ees@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item log_path
|
||||
Chemin pour les conversations sauvegard@'ees par WeeChat@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~/.weechat/logs/'@*
|
||||
@item log_name
|
||||
Nom des conversations saivegard@'ees (%S == nom du serveur irc, %N == nom du canal (ou pseudo si fen@^etre priv@'ee)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '%S,%N.weechatlog'@*
|
||||
@item log_timestamp
|
||||
Horodatage pour les conversations sauvegard@'ees (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item log_start_string
|
||||
Texte @'ecrit en d@'emarrant la sauvegarde d'une discussion (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '--- Log started %a %b %d %Y %H:%M:%s'@*
|
||||
@item log_end_string
|
||||
Texte @'ecrit @`a la fin d'une discussion sauvegard@'ees (voir man strftime pour le format de date/heure)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '--- Log ended %a %b %d %Y %H:%M:%s'@*
|
||||
@item dcc_auto_accept_files
|
||||
Accepte automatiquement les fichiers dcc entrants@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_auto_accept_max_size
|
||||
Taille maximum pour un fichier entrant lorsqu'il est accept@'e automatiquement@*
|
||||
Type: entier (valeurs: entre 0 et 2147483647), valeur par d@'efaut: 0@*
|
||||
@item dcc_auto_accept_chats
|
||||
Accepte automatiquement les demandes de discussion dcc (@`a utiliser avec pr@'ecaution !)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_timeout
|
||||
D@'elai d'attente pour les requ@^etes dcc (en secondes)@*
|
||||
Type: entier (valeurs: entre 1 et 2147483647), valeur par d@'efaut: 300@*
|
||||
@item dcc_download_path
|
||||
Chemin pour @'ecrire les fichiers re@,{c}us par dcc (par d@'efaut: r@'epertoire de l'utilisateur)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item dcc_upload_path
|
||||
Chemin pour lire les fichiers lorsqu'ils sont envoy@'es par dcc (quand aucun chemin n'est sp@'ecifi@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: '~'@*
|
||||
@item dcc_auto_rename
|
||||
Renommer les fichiers re@,{c}us s'ils existent d@'ej@`a (ajoute '.1', '.2', ...)@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item dcc_auto_resume
|
||||
Continuer automatiquement les transferts dcc si la connexion avec la machine distante a @'et@'e perdue@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item proxy_use
|
||||
Utiliser un proxy pour se connecter au serveur irc@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'off'@*
|
||||
@item proxy_address
|
||||
Adresse du serveur proxy (IP ou nom)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item proxy_port
|
||||
Port pour se connecter au serveur proxy@*
|
||||
Type: entier (valeurs: entre 0 et 65535), valeur par d@'efaut: 1080@*
|
||||
@item proxy_password
|
||||
Mot de passe pour le serveur proxy@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_name
|
||||
Nom associ@'e au serveur IRC (pour affichage seulement)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_autoconnect
|
||||
Connexion automatique au serveur quand WeeChat d@'emarre@*
|
||||
Type: bool@'een (valeurs: 'on' ou 'off'), valeur par d@'efaut: 'on'@*
|
||||
@item server_address
|
||||
Adresse IP ou nom du serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_port
|
||||
Port pour se connecter au serveur@*
|
||||
Type: entier (valeurs: entre 0 et 65535), valeur par d@'efaut: 6667@*
|
||||
@item server_password
|
||||
Mot de passe pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick1
|
||||
Pseudo @`a utiliser sur le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick2
|
||||
Pseudo alternatif pour le serveur IRC (si le pseudo est d@'ej@`a utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_nick3
|
||||
2nd pseudo alternatif pour le serveur IRC (si le pseudo alternatif est d@'ej@`a utilis@'e)@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_username
|
||||
Nom d'utilisateur pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_realname
|
||||
Nom r@'eel pour le serveur IRC@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_command
|
||||
Commande @`a ex@'ecuter en premier lorsque connect@'e au serveur@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@item server_autojoin
|
||||
Liste des canaux (s@'epar@'es par des virgules) @`a rejoindre lorsque connect@'e au serveur@*
|
||||
Type: cha@^ine (toute cha@^ine), valeur par d@'efaut: ''@*
|
||||
@end table
|
||||
|
||||
Les couleurs pour l'interface Curses sont :@*
|
||||
@itemize @minus
|
||||
@item
|
||||
@kbd{default}: couleur par d@'efaut (transparent pour le fond)
|
||||
@item
|
||||
@kbd{black}: noir
|
||||
@item
|
||||
@kbd{red}: rouge fonc@'e
|
||||
@item
|
||||
@kbd{lightred}: rouge clair
|
||||
@item
|
||||
@kbd{green}: vert fonc@'e
|
||||
@item
|
||||
@kbd{lightgreen}: vert clair
|
||||
@item
|
||||
@kbd{brown}: marron
|
||||
@item
|
||||
@kbd{yellow}: jaune
|
||||
@item
|
||||
@kbd{blue}: bleu fonc@'e
|
||||
@item
|
||||
@kbd{lightblue}: bleu clair
|
||||
@item
|
||||
@kbd{magenta}: violet fonc@'e
|
||||
@item
|
||||
@kbd{lightmagenta}: violet clair
|
||||
@item
|
||||
@kbd{cyan}: cyan fonc@'e
|
||||
@item
|
||||
@kbd{lightcyan}: cyan clair
|
||||
@item
|
||||
@kbd{gray}: gris
|
||||
@item
|
||||
@kbd{white}: blanc
|
||||
@end itemize
|
||||
|
||||
@node Raccourcis clavier, Commandes WeeChat, Fichier de configuration, Utilisation
|
||||
@section Raccourcis clavier
|
||||
|
||||
@table @kbd
|
||||
@item Fl@`eche gauche / Fl@`eche droite
|
||||
Aller au caract@`ere pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Ctrl + fl@`eche gauche / Ctrl + fl@`eche droite
|
||||
Aller au mot pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Home / End
|
||||
Aller au d@'ebut / @`a la fin de la ligne de commande@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Effacer le mot pr@'ec@'edent / suivant sur la ligne de commande@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Effacer le mot pr@'ec@'edent sur la ligne de commande@*
|
||||
@*
|
||||
@item Tab
|
||||
Compl@'eter la commande ou le pseudo (@kbd{Tab} @`a nouveau : trouver la compl@'etion suivante)@*
|
||||
@*
|
||||
@item Tout caract@`ere
|
||||
Ins@'erer le caract@`ere @`a la position du curseur sur la ligne de commande@*
|
||||
@*
|
||||
@item Entr@'ee
|
||||
Ex@'ecuter la commande ou envoyer le message@*
|
||||
@*
|
||||
@item Fl@`eche haut / Fl@`eche bas
|
||||
Rappeler les derni@`eres commandes/messages@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Afficher l'historique de la fen@^etre@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Aller @`a la fen@^etre pr@'ec@'edente / suivante@*
|
||||
@*
|
||||
@item Alt + fl@`eche gauche / Alt + fl@`eche droite
|
||||
Identique @`a F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Effacer le dernier message de la barre d'infos@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node Commandes WeeChat, , Raccourcis clavier, Utilisation
|
||||
@section Commandes WeeChat
|
||||
|
||||
NON ECRIT !
|
||||
|
||||
|
||||
@c ******************************* Extensions *********************************
|
||||
|
||||
@node Extensions, Auteurs / Support, Utilisation, Top
|
||||
@chapter Extensions
|
||||
|
||||
@menu
|
||||
* Scripts Perl::
|
||||
* Scripts Python::
|
||||
* Scripts Ruby::
|
||||
@end menu
|
||||
|
||||
@node Scripts Perl, Scripts Python, Extensions, Extensions
|
||||
@section Scripts Perl
|
||||
|
||||
@subsection Charger/d@'echarger des scripts Perl
|
||||
|
||||
Les scripts Perl sont charg@'es et d@'echarg@'es avec la commande @command{/perl}
|
||||
(tapez @kbd{/help perl} dans WeeChat pour obtenir de l'aide sur la commande).@*
|
||||
|
||||
@emph{Exemples :}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Charger un script Perl : @kbd{/perl load /tmp/essai.pl}@*
|
||||
@item D@'echarger tous les scripts Perl : @kbd{/perl unload}@*
|
||||
@item
|
||||
Lister les scripts Perl charg@'es : @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection Interface WeeChat / Perl
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( nom, version, fonction_de_fin, description );}@*
|
||||
@*
|
||||
C'est la premi@`ere fonction @`a appeler dans le script Perl.@*
|
||||
Tout script Perl pour WeeChat doit appeler cette fonction.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom unique pour identifier le script (chaque script doit
|
||||
avoir un nom diff@'erent)
|
||||
@item @option{version}: version du script
|
||||
@item @option{fonction_de_fin}: fonction Perl appel@'ee quand le script est
|
||||
d@'echarg@'e (param@`etre facultatif, une cha@^ine vide signifiant qu'il n'y a pas
|
||||
de fonction @`a appeler)
|
||||
@item @option{description}: description br@`eve du script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::register ("essai", "1.0", "fin_essai", "Script d'essai !");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( message );}@*
|
||||
@*
|
||||
Affiche un message dans la fen@^etre courante (canal ou serveur).@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::print ("message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( canal, [serveur,] message );}@*
|
||||
@*
|
||||
Affiche un message dans un canal.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{canal}: nom du canal
|
||||
@item @option{serveur}: nom interne du serveur
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemples :}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "message");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( d@'elai, message );}@*
|
||||
@*
|
||||
Affiche un message dans la barre d'infos.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{d@'elai}: d@'elai (en secondes) pendant lequel le message est affich@'e
|
||||
(si 0, le message ne sera pas effac@'e).
|
||||
@item @option{message}: message @`a afficher
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::print_infobar (5, "message");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( nom, fonction );}@*
|
||||
@*
|
||||
Attache une fonction Perl @`a un message IRC particulier.@*
|
||||
La fonction sera appel@'ee @`a chaque fois que le message IRC sera re@,{c}u.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom du message IRC pour lequel la fonction est appel@'ee@*
|
||||
Pour conna@^itre la liste des messages IRC disponibles, merci de consulter les
|
||||
RFC 1459 et/ou 2812 :@*
|
||||
RFC 1459 : @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812 : @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{fonction}: fonction Perl appel@'ee lorsque le message est re@,{c}u
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::add_message_handler ("privmsg", ma_fonction);}@*
|
||||
@code{sub ma_fonction}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $canal, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($masque, $null, $canal) = split " ", $canal;}@*
|
||||
@code{@ @ @ @ IRC::print ("masque=$masque, canal=$canal, message=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( nom, fonction );}@*
|
||||
@*
|
||||
Cr@'e@'e une nouvelle commande WeeChat, associ@'ee @`a une fonction Perl.@*
|
||||
La fonction sera appel@'ee lorsque l'utilisateur lancera la commande par @kbd{/nom}.@*
|
||||
|
||||
@emph{Param@`etres :}
|
||||
@itemize @minus
|
||||
@item @option{nom}: nom de la nouvelle commande@*
|
||||
Il peut s'agir d'une commande existante, auquel cas celle-ci est @'ecras@'ee par
|
||||
la fonction Perl. Soyez prudent en @'ecrasant les commandes WeeChat, car elles
|
||||
ne seront plus accessibles tant que le script Perl sera charg@'e.
|
||||
@item @option{fonction}: fonction Perl associ@'ee @`a la commande
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemple :}@*
|
||||
@code{IRC::add_command_handler ("commande", ma_commande);}@*
|
||||
@code{sub ma_commande}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Param@`etres : ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Scripts Python, Scripts Ruby, Scripts Perl, Extensions
|
||||
@section Scripts Python
|
||||
|
||||
Non d@'evelopp@'e !
|
||||
|
||||
@node Scripts Ruby, , Scripts Python, Extensions
|
||||
@section Scripts Ruby
|
||||
|
||||
Non d@'evelopp@'e !
|
||||
|
||||
@c **************************** Auteurs / Support *****************************
|
||||
|
||||
@node Auteurs / Support, , Extensions, Top
|
||||
@chapter Auteurs / Support
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Auteurs::
|
||||
* Obtenir du support::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Auteurs::
|
||||
* Obtenir du support::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Auteurs, Obtenir du support, Auteurs / Support, Auteurs / Support
|
||||
@section Auteurs
|
||||
|
||||
WeeChat est d@'evelopp@'e par :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Obtenir du support, Copyright, Auteurs, Auteurs / Support
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Obtenir du support, , Auteurs, Auteurs / Support
|
||||
@end ifnothtml
|
||||
@section Obtenir du support
|
||||
|
||||
Avant de faire appel au support, merci de lire la documentation et la
|
||||
FAQ de WeeChat.@*
|
||||
(la documentation est le document que vous @^etes en train de lire, si vous
|
||||
n'avez pas tout lu jusqu'ici, il est encore temps de recommencer !)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Support par IRC:@*
|
||||
- serveur : @b{irc.freenode.net}@*
|
||||
- canal : @b{#weechat}@*@*
|
||||
@item
|
||||
Forum WeeChat : bient@^ot !@*@*
|
||||
@item
|
||||
Support par la liste de diffusion :@*
|
||||
- pour souscrire/d@'esinscrire :@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- pour envoyer un mail @`a la liste de diffusion, envoyer @`a :@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Les archives de la liste de diffusion sont ici :@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Voir la page support WeeChat pour plus de d@'etails :@*
|
||||
@uref{http://weechat.flashtux.org/support.php}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Obtenir du support, Auteurs / Support
|
||||
@section Copyright
|
||||
|
||||
Ce manuel documente le client IRC WeeChat, il fait partie de WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Ce document peut @^etre utilis@'e sous les termes de la licence GNU General Public
|
||||
License version 2 ou plus.
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
@@ -0,0 +1,528 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename weechat_doc_pt.info
|
||||
@settitle WeeChat - Um cliente de IRC rapido, leve e extencivel
|
||||
@c %**end of header
|
||||
|
||||
@c WeeChat documentation (vers@~ao partuguesa)
|
||||
@c
|
||||
@c Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
@c
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2
|
||||
@c or any later version published by the Free Software Foundation;
|
||||
@c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
@c A copy of the license is included in the section entitled "GNU
|
||||
@c Free Documentation License".
|
||||
|
||||
@c pdf : texi2pdf weechat_doc_pt.texi
|
||||
@c html: makeinfo --html --no-split --number-sections weechat_doc_pt.texi
|
||||
|
||||
@c tex
|
||||
@c \overfullrule=0pt
|
||||
@c end tex
|
||||
|
||||
@documentlanguage pt
|
||||
|
||||
@titlepage
|
||||
|
||||
@title WeeChat - Guia do Utilizador
|
||||
@subtitle Cliente de IRC rapido, leve e extencivel
|
||||
@subtitle Documenta@,{c}@~ao do WeeChat v0.0.5-pre2 - 21 de Janeiro de 2004
|
||||
|
||||
@image{weechat_image}
|
||||
|
||||
@author FlashCode <@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
|
||||
@page
|
||||
|
||||
Este manual documenta o cliente de IRC WeeChat, ele faz parte do WeeChat.@*
|
||||
@*
|
||||
A ultima versĂŁo deste documento pode ser descarregada de :@*
|
||||
@uref{http://weechat.flashtux.org/doc.php}@*
|
||||
@*
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
@*
|
||||
Este documento pode ser utilizado sobre os termos da Licen@,{c}a P@'ublica geral GNU (GNU General Public
|
||||
License) vers@~ao 2 ou superior.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@everyheading @thischapter @| @|
|
||||
@everyfooting @thistitle @| @| Pagina @thispage
|
||||
|
||||
@contents
|
||||
|
||||
@node Top, Introducao, (dir), (dir)
|
||||
@menu
|
||||
* Introducao:: Descri@,{c}@~ao do WeeChat
|
||||
* Instalacao:: Instala@,{c}@~ao do WeeChat
|
||||
* Utilizacao:: Utiliza@,{c}@~ao do WeeChat
|
||||
* Extencoes:: Exten@,{c}@~oes do Weechat
|
||||
* Autores/Suporte:: Contactar os autores e obter suporte
|
||||
@end menu
|
||||
|
||||
|
||||
@c ******************************* Introducao *******************************
|
||||
|
||||
@node Introducao, Instalacao, Top, Top
|
||||
@chapter Introdu@,{c}@~ao
|
||||
@menu
|
||||
* Descricao::
|
||||
* Pre-requisitos::
|
||||
@end menu
|
||||
|
||||
@node Descricao, Pre-requisitos, Introducao, Introducao
|
||||
@section Descri@,{c}@~ao
|
||||
|
||||
O WeeChat (Wee Enhanced Environment for Chat) @'e um cliente de IRC livre, r@'apido e leve,
|
||||
concebido para funcionar em diversos sistemas operativos.@*
|
||||
@*
|
||||
As suas caracter@'isticas prinicpais s@~ao as seguintes :
|
||||
@itemize @minus
|
||||
@item
|
||||
liga@,{c}@~ao a m@'ultiplos servidores
|
||||
@item
|
||||
v@'arias interfaces : Curses, Gtk e Qt
|
||||
@item
|
||||
pequeno r@'apido e leve
|
||||
@item
|
||||
configuravel e extenc@'ivel com scripts
|
||||
@item
|
||||
compat@'ivel com RFCs 1459, 2810, 2811, 2812, e 2813
|
||||
@item
|
||||
multiplataforma (Gnu/Linux, *BSD, Windows e outros)
|
||||
@item
|
||||
100% GPL, Software Livre
|
||||
@end itemize
|
||||
|
||||
@*
|
||||
A p@'agina Web do Weechat @'e aqui :@*
|
||||
@uref{http://weechat.flashtux.org}@*
|
||||
|
||||
@node Pre-requisitos, ,Descricao, Introducao
|
||||
@section Pr@'e-requisitos
|
||||
|
||||
Para instalar o Weechat, vais @b{precisar} de ter :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Um sistema Gnu/Linux (com um compilador e outros utilit@'arios associados aos pacotes de c@'odigo fonte)
|
||||
@item
|
||||
Direitos de "root" (para instalar)
|
||||
@item
|
||||
Consoante a interface escolhida, uma das seguintes bibliotecas :
|
||||
@itemize @minus
|
||||
@item
|
||||
Curses: a biblioteca ncurses,
|
||||
@item
|
||||
Gtk: *** interface n@~ao desenvolvida ***,
|
||||
@item
|
||||
Qt: *** interface n@~ao desenvolvida ***,
|
||||
@end itemize
|
||||
@end itemize
|
||||
|
||||
|
||||
@c ******************************* Instalacao *******************************
|
||||
|
||||
@node Instalacao, Utilizacao, Introducao, Top
|
||||
@chapter Instala@,{c}@~ao
|
||||
@menu
|
||||
* Binarios::
|
||||
* Codigo Fonte::
|
||||
* Codigo Fonte via CVS::
|
||||
@end menu
|
||||
|
||||
@node Binarios, Codigo Fonte, Instalacao, Instalacao
|
||||
@section Bin@'arios
|
||||
|
||||
Os pacotes bin@'arios est@'ao dispon@'iveis para as seguintes distribui@,{c}@~oes :
|
||||
@itemize @bullet
|
||||
@item
|
||||
Debian (ou compat@'ivel)@*
|
||||
Instala@,{c}@~ao : @kbd{dpkg -i /chemin/weechat_x.y.z-1_i386.deb}
|
||||
@item
|
||||
Mandrake/Redhat (ou outra distro compat@'ivel com RPMs)@*
|
||||
Instala@,{c}@~ao : @kbd{rpm -i /chemin/weechat-x.y.z-1.i386.rpm}
|
||||
@item
|
||||
Gentoo@*
|
||||
Instala@,{c}@~ao : ver a documenta@,{c}@~ao da Gentoo
|
||||
@item
|
||||
*BSD (non disponible !)
|
||||
@item
|
||||
Slackware (n@~ao dispon@'ivel !)
|
||||
@item
|
||||
Windows (n@~ao dispon@'ivel !)
|
||||
@end itemize
|
||||
|
||||
Onde x.y.z @'e a vers@~ao (por exemplo 0.0.1)
|
||||
@*
|
||||
|
||||
@node Codigo Fonte, Codigo Fonte via CVS, Binarios, Instalacao
|
||||
@section C@'odigo Fonte
|
||||
|
||||
Escreve simplesmente numa consola ou num terminal :@*
|
||||
@kbd{./configure}@*
|
||||
@kbd{make}@*
|
||||
Nota: Para compilar certas interfaces, podes passar par@^ametros
|
||||
ao ./configure, escreve @kbd{./configure --help} para veres as op@,{c}@~oes.@*
|
||||
|
||||
Obter os direitos do root e instalar o Weechat :@*
|
||||
@kbd{su -}@*
|
||||
(escreve aqui a palavra-passe do superutilizador)@*
|
||||
@kbd{make install}@*
|
||||
|
||||
@node Codigo Fonte via CVS, , Codigo Fonte, Instalacao
|
||||
@section C@'odigo Fonte via CVS
|
||||
|
||||
Aten@,{c}@~ao: o c@'odigo fonte CVS est@'a reservado aos utilizadores avan@,{c}ados : o WeeChat pode n@~ao compilar ou ficar inst@'avel.@*
|
||||
Considera-te avisado !@*
|
||||
|
||||
Para sacares o c@'odigo fonte via CVS, escreve estes comandos :@*
|
||||
@kbd{cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat login}@*
|
||||
@kbd{cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/weechat co weechat}@*
|
||||
(quando te pedirem a palavra-passe, primen simplesmente Enter)@*
|
||||
|
||||
Executa o script :@*
|
||||
@kbd{./autogen.sh}@*
|
||||
|
||||
Segue agora as instru@,{c}@~oes para compilar o c@'odigo fonte - @xref{Codigo Fonte}.
|
||||
|
||||
|
||||
@c ******************************* Utilizacao ********************************
|
||||
|
||||
@node Utilizacao, Extencoes, Instalacao, Top
|
||||
@chapter Utiliza@,{c}@~ao
|
||||
|
||||
@menu
|
||||
* Invocar o WeeChat::
|
||||
* Recursos de teclado::
|
||||
* Comandos do WeeChat::
|
||||
@end menu
|
||||
|
||||
@node Invocar o WeeChat, Recursos de teclado, Utilizacao, Utilizacao
|
||||
@section Invocar o WeeChat
|
||||
|
||||
@subsection Par@^ametros de linha de comandos
|
||||
|
||||
@table @code
|
||||
@item -c, --config
|
||||
Mostrar da lima dos config da exposi@,{c}@~ao (lista das op@,{c}@~oes)
|
||||
@item -h, --help
|
||||
Mostrar a ajuda@*
|
||||
@item -l, --license
|
||||
Mostrar a licen@,{c}a do WeeChat@*
|
||||
@item -v, --version
|
||||
Mostrar a vers@~ao do WeeChat@*
|
||||
@end table
|
||||
|
||||
@subsection Invocar o WeeChat
|
||||
|
||||
Escreve simplesmente este comando para invoceres o WeeChat :@*
|
||||
@kbd{weechat-curses} (para a interface em Curses)@*
|
||||
ou @kbd{weechat-gtk} (para a interface em Gtk)@*
|
||||
ou @kbd{weechat-qt} (para a interface em Qt)@*
|
||||
|
||||
Logo que lan@,{c}ares o WeeChat pela primeira vez, um ficheiro de configura@,{c}@~ao
|
||||
por defeito @'e criado, com as configura@,{c}@~oes por defeito.@*
|
||||
O ficheiro de configura@,{c}@~ao por defeito @'e : ~/.weechat/weechat.rc@*
|
||||
|
||||
Podes editar esse ficheiro para configurar o WeeChat @`a tua maneira, man tamb@'em podes modificar os par@^ametros dentro do WeeChat utilizando o comando @kbd{/set} - @xref{Comandos do WeeChat}.
|
||||
|
||||
@node Recursos de teclado, Comandos do WeeChat, Invocar o WeeChat, Utilizacao
|
||||
@section Recursos de teclado
|
||||
|
||||
@table @kbd
|
||||
@item Seta esquerda / Seta direita
|
||||
Ir um caractere para traz / para a frente na linha de comando@*
|
||||
@*
|
||||
@item Ctrl + Seta esquerda / Ctrl + Seta Direita
|
||||
Ir uma palavra para traz / para a frente na linha de comando@*
|
||||
@*
|
||||
@item Home / End
|
||||
Ir para o in@'icio / para o fim da linha de comando@*
|
||||
@*
|
||||
@item Backspace / Delete
|
||||
Apagar o caractere anterior / seguinte na linha de comando@*
|
||||
@*
|
||||
@item Ctrl + Backspace
|
||||
Apagar a palavra anterior na linha de comando
|
||||
@*
|
||||
@item Tab
|
||||
Completar o comando ou o nick (@kbd{Tab} novamente : encontrar a pr@'oxima sugest@~ao)@*
|
||||
@*
|
||||
@item Qualquer caractere
|
||||
Inserir o caractere na linha de comando, no s@'itio do cursor@*
|
||||
@*
|
||||
@item Enter
|
||||
Executa o comando ou envia a mensagem@*
|
||||
@*
|
||||
@item Seta para cima / Seta para baixo
|
||||
Repetir os ultimos comandos/mensagens@*
|
||||
@*
|
||||
@item PageUp / PageDown
|
||||
Navegar no hist@'orico da janela@*
|
||||
@*
|
||||
@item F6 / F7
|
||||
Ir para a janela anterior/seguinte@*
|
||||
@*
|
||||
@item Alt + Seta da esquerda / Alt + Seta da direita
|
||||
Identico a F6 / F7@*
|
||||
@*
|
||||
@item F10
|
||||
Apagar a @'ultima mensagem da barra do info@*
|
||||
@*
|
||||
@end table
|
||||
|
||||
@node Comandos do WeeChat, , Recursos de teclado, Utilizacao
|
||||
@section Comandos do WeeChat
|
||||
|
||||
N@~AO ESCRITO !
|
||||
|
||||
|
||||
@c ******************************* Extencoes *********************************
|
||||
|
||||
@node Extencoes, Autores/Suporte, Utilizacao, Top
|
||||
@chapter Exten@,{c}@~oes
|
||||
|
||||
@menu
|
||||
* Scripts Perl::
|
||||
* Scripts Python::
|
||||
* Scripts Ruby::
|
||||
@end menu
|
||||
|
||||
@node Scripts Perl, Scripts Python, Extencoes, Extencoes
|
||||
@section Scripts Perl
|
||||
|
||||
@subsection Carregar/Descarregar Scripts Perl
|
||||
|
||||
Os Scripts Perl s@~ao carregados e descarregados com o comando @command{/perl}.
|
||||
(escreve @kbd{/help perl} dentro do WeeChat para obteres ajuda acerca do comando).@*
|
||||
|
||||
@emph{Exemplos:}@*
|
||||
@itemize @bullet
|
||||
@item
|
||||
Carregar um Script Perl: @kbd{/perl load /tmp/sample.pl}@*
|
||||
@item
|
||||
Descarregar todos os Scripts Perl: @kbd{/perl unload}@*
|
||||
@item
|
||||
Listar todos os Scripts Perl: @kbd{/perl}@*
|
||||
@end itemize
|
||||
|
||||
@subsection Interface WeeChat / Perl
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@command{IRC::register ( nome, vers@~ao, fun@,{c}@~ao_de_shutdown, descri@,{c}@~ao );}@*
|
||||
@*
|
||||
Esta @'e a primeira fun@,{c}@~ao a invocar num Script Perl.@*
|
||||
Todos os Scripts Perl para o Weechat devem invocar esta fun@,{c}@~ao.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome @'unico que indentifique o script (cada Script Perl deve ter um @'unico nome)
|
||||
@item @option{vers@~ao}: vers@~ao do script
|
||||
@item @option{fun@,{c}@~ao_de_shutdown}: fun@,{c}@~ao Perl invocada quando o script Ă© descarregado (par@^ametro opcional, se deixado em branco significa que nada deve ser chamado)
|
||||
@item @option{descri@,{c}@~ao}: breve descri@,{c}@~ao do script.
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::register ("sample", "1.0", "sample_end", "Sample script!");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print ( mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na janela actual (canal ou servidor).@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::print ("mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_with_channel ( canal, [servidor,] mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na canal.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{canal}: nome da canal
|
||||
@item @option{servidor}: nome interno da servidor
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplos:}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "freenode", "mensagem");}@*
|
||||
@code{IRC::print_with_channel ("#weechat", "mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::print_infobar ( atrasa, mensagem );}@*
|
||||
@*
|
||||
Imprimne uma mensagem na barra do info.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{atrasa}: depois que isto atrasa (nos segundos), a mensagem estar@'a apagada
|
||||
(se 0, mensagem n@~ao forem apagados).
|
||||
@item @option{mensagem}: mensagem a mostrar
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::print_infobar (5, "mensagem");}@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_message_handler ( nome, fun@,{c}@~ao );}@*
|
||||
@*
|
||||
Anexa uma fun@,{c}@~ao Perl a uma mensagem de IRC.@*
|
||||
A fun@,{c}@~ao ser@'a invocada de cada vez que a mensagem IRC for recebida.@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome da mensagem IRC@*
|
||||
Para conheceres uma lista de mensagens de IRC, por favor lĂŞ o RFC 1459 e/ou o 2812:@*
|
||||
RFC 1459: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt}@*
|
||||
RFC 2812: @uref{ftp://ftp.rfc-editor.org/in-notes/rfc2812.txt}
|
||||
@item @option{fun@,{c}@~ao}: fun@,{c}@~ao Perl invocada quando a mensagem Ă© recebida
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::add_message_handler ("privmsg", my_function);}@*
|
||||
@code{sub my_function}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ ($null, $channel, $message) = split ":",@@_[0],3;}@*
|
||||
@code{@ @ @ @ ($hostmask, $null, $channel) = split " ", $channel;}@*
|
||||
@code{@ @ @ @ IRC::print ("host=$hostmask, chan=$channel, msg=$message\n");}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@item
|
||||
@command{IRC::add_command_handler ( nome, fun@,{c}@~ao );}@*
|
||||
@*
|
||||
Cria um novo comando do Weechat, ligado a uma fun@,{c}@~ao Perl.@*
|
||||
A fun@,{c}@~ao ser@'a chamada quando o utilizador a invocar utilizando @command{/nome}@*
|
||||
|
||||
@emph{Argumentos:}
|
||||
@itemize @minus
|
||||
@item @option{nome}: nome do novo comando@*
|
||||
Este nome pode pertencer a um comando já existente, o qual ser@'a sobreposto pela fun@,{c}@~ao Perl. Tem cuidado quando fizeres isto: os comandos originais não estar@~ao acessiveis antes de teres descarregado o Script Perl.
|
||||
@item @option{fun@,{c}@~ao}: fun@,{c}@~ao Perl ligada ao comando
|
||||
@end itemize
|
||||
@*
|
||||
@emph{Exemplo:}@*
|
||||
@code{IRC::add_command_handler ("command", my_command);}@*
|
||||
@code{sub my_command}@*
|
||||
@code{@{ }@*
|
||||
@code{@ @ @ @ IRC::print("Argumentos: ".@@_[0]);}@*
|
||||
@code{@ @ @ @ return 0;}@*
|
||||
@code{@} }@*
|
||||
@*
|
||||
|
||||
@end itemize
|
||||
|
||||
@node Scripts Python, Scripts Ruby, Scripts Perl, Extencoes
|
||||
@section Scripts Python
|
||||
|
||||
N@~AO DESENVOLVIDO!
|
||||
|
||||
@node Scripts Ruby, , Scripts Python, Extencoes
|
||||
@section Scripts Ruby
|
||||
|
||||
N@~AO DESENVOLVIDO!
|
||||
|
||||
|
||||
@c **************************** Autores/Suporte *****************************
|
||||
|
||||
@node Autores/Suporte, , Extencoes, Top
|
||||
@chapter Autores / Suporte
|
||||
|
||||
@ifhtml
|
||||
@menu
|
||||
* Autores::
|
||||
* Obter Suporte::
|
||||
* Copyright::
|
||||
@end menu
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@menu
|
||||
* Autores::
|
||||
* Obter Suporte::
|
||||
@end menu
|
||||
@end ifnothtml
|
||||
|
||||
@node Autores, Obter Suporte, Autores/Suporte, Autores/Suporte
|
||||
@section Autores
|
||||
|
||||
O WeeChat @'e desenvolvido por :@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>
|
||||
@item
|
||||
Bounga
|
||||
<@email{bounga@@altern.org, bounga AT altern.org}>
|
||||
@item
|
||||
Xahlexx
|
||||
<@email{xahlexx@@tuxfamily.org, xahlexx AT tuxfamily.org}>
|
||||
@item
|
||||
Crevetor
|
||||
<@email{crevetor@@caramail.com, crevetor AT caramail.com}>
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Obter Suporte, Copyright, Autores, Autores/Suporte
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@node Obter Suporte, , Autores, Autores/Suporte
|
||||
@end ifnothtml
|
||||
@section Obter Suporte
|
||||
|
||||
Antes de pedires suporte, agradecemos se leres toda a documenta@,{c}@~ao e a FAQ.@*
|
||||
(a documenta@,{c}@~ao @'e este documento que est@'as a ler, se n@~ao leste tudo at@'e aqui, est@'a na hora de come@,{c}ares do in@'icio !)@*
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Suporte por IRC:@*
|
||||
- servidor : @b{irc.freenode.net}@*
|
||||
- canal : @b{#weechat}@*@*
|
||||
@item
|
||||
Forum do WeeChat : mais tarde !@*@*
|
||||
@item
|
||||
Suporte por lista de correio-e :@*
|
||||
- para te inscreveres/desinscreveres :@*@uref{http://mail.nongnu.org/mailman/listinfo/weechat-support}.@*
|
||||
- para enviares uma mensagem para a lista :@*@email{weechat-support@@nongnu.org}.@*
|
||||
|
||||
Os arquivos da lista est@~ao aqui :@*
|
||||
@uref{http://mail.nongnu.org/archive/html/weechat-support}@*@*
|
||||
@item
|
||||
Para mais detalhes, v@^e tamb@'em a p@'agina de suporte do WeeChat :@*
|
||||
@uref{http://weechat.flashtux.org/support.php}
|
||||
|
||||
@end itemize
|
||||
|
||||
@ifhtml
|
||||
@node Copyright, , Obter Suporte, Autores/Suporte
|
||||
@section Copyright
|
||||
|
||||
Este manual documenta o cliente de IRC WeeChat, Ele faz parte do WeeChat.@*
|
||||
|
||||
Copyright @copyright{} 2004 FlashCode
|
||||
<@email{flashcode@@flashtux.org, flashcode AT flashtux.org}>@*
|
||||
Tradu@,{c}@~ao portuguesa de Jo@~ao Jer@'onimo <@email{j_j_b_o@@sapo.pt, j_j_b_o AT sapo.pt}>@*
|
||||
@*
|
||||
A utiliza@,{c}@~ao deste documento @'e regida pela GNU General Public
|
||||
License vers@~ao 2 ou posterior.@*
|
||||
|
||||
@end ifhtml
|
||||
|
||||
@bye
|
||||
|
||||
Binary file not shown.
@@ -1,24 +1,28 @@
|
||||
./src/irc/irc-nick.c
|
||||
./src/irc/irc-server.c
|
||||
./src/irc/irc-channel.c
|
||||
./src/irc/irc.h
|
||||
./src/irc/irc-commands.c
|
||||
./src/irc/irc-display.c
|
||||
./src/irc/irc-send.c
|
||||
./src/irc/irc-recv.c
|
||||
./src/plugins/perl/wee-perl.c
|
||||
./src/plugins/perl/wee-perl.h
|
||||
./src/plugins/plugins.c
|
||||
./src/plugins/plugins.h
|
||||
./src/gui/curses/gui-input.c
|
||||
./src/gui/curses/gui-display.c
|
||||
./src/gui/gtk/gui-display.c
|
||||
./src/gui/gtk/gui-input.c
|
||||
./src/gui/gui.h
|
||||
./src/gui/gui-common.c
|
||||
./src/common/command.c
|
||||
./src/common/completion.c
|
||||
./src/common/history.c
|
||||
./src/common/weechat.c
|
||||
./src/common/weeconfig.c
|
||||
./src/irc/irc.h
|
||||
./src/gui/gui.h
|
||||
./src/common/command.h
|
||||
./src/common/completion.h
|
||||
./src/common/history.h
|
||||
./src/common/weechat.h
|
||||
./src/common/weeconfig.c
|
||||
./src/common/weeconfig.h
|
||||
|
||||
+1446
-1096
File diff suppressed because it is too large
Load Diff
+1947
-1748
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,4 +15,4 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
SUBDIRS = common irc gui
|
||||
SUBDIRS = common irc plugins gui
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
+448
-217
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -34,6 +32,7 @@
|
||||
#include "weeconfig.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* WeeChat internal commands */
|
||||
@@ -59,6 +58,11 @@ t_weechat_command weechat_commands[] =
|
||||
{ "help", N_("display help about commands"),
|
||||
N_("[command]"), N_("command: name of a WeeChat or IRC command"),
|
||||
0, 1, weechat_cmd_help, NULL },
|
||||
{ "perl", N_("list/load/unload Perl scripts"),
|
||||
N_("[load filename] | [unload]"),
|
||||
N_("filename: Perl script (file) to load\n"
|
||||
"Without argument, /perl command lists all loaded Perl scripts."),
|
||||
0, 2, weechat_cmd_perl, NULL },
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[servername hostname port [-auto | -noauto] [-pwd password] [-nicks nick1 "
|
||||
@@ -80,7 +84,7 @@ t_weechat_command weechat_commands[] =
|
||||
0, 1, weechat_cmd_save, NULL },
|
||||
{ "set", N_("set config parameters"),
|
||||
N_("[option [value]]"), N_("option: name of an option\nvalue: value for option"),
|
||||
0, 2, weechat_cmd_set, NULL },
|
||||
0, MAX_ARGS, NULL, weechat_cmd_set },
|
||||
{ "unalias", N_("remove an alias"),
|
||||
N_("alias_name"), N_("alias_name: name of alias to remove"),
|
||||
1, 1, NULL, weechat_cmd_unalias },
|
||||
@@ -203,14 +207,14 @@ index_command_build ()
|
||||
i = 0;
|
||||
while (weechat_commands[i].command_name)
|
||||
{
|
||||
index_command_new (weechat_commands[i].command_name);
|
||||
(void) index_command_new (weechat_commands[i].command_name);
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while (irc_commands[i].command_name)
|
||||
{
|
||||
if (irc_commands[i].cmd_function_args || irc_commands[i].cmd_function_1arg)
|
||||
index_command_new (irc_commands[i].command_name);
|
||||
(void) index_command_new (irc_commands[i].command_name);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -359,8 +363,11 @@ alias_new (char *alias_name, char *alias_command)
|
||||
{
|
||||
new_alias->alias_name = strdup (alias_name);
|
||||
new_alias->alias_command = (char *)malloc (strlen (alias_command) + 2);
|
||||
new_alias->alias_command[0] = '/';
|
||||
strcpy (new_alias->alias_command + 1, alias_command);
|
||||
if (new_alias->alias_command)
|
||||
{
|
||||
new_alias->alias_command[0] = '/';
|
||||
strcpy (new_alias->alias_command + 1, alias_command);
|
||||
}
|
||||
alias_insert_sorted (new_alias);
|
||||
return new_alias;
|
||||
}
|
||||
@@ -405,7 +412,7 @@ alias_free (t_weechat_alias *alias)
|
||||
*/
|
||||
|
||||
char **
|
||||
explode_string (char *string, char *separators, int num_items_max,
|
||||
explode_string (/*@null@*/ char *string, char *separators, int num_items_max,
|
||||
int *num_items)
|
||||
{
|
||||
int i, n_items;
|
||||
@@ -498,7 +505,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
char *command, *pos, *ptr_args, **argv, *alias_command;
|
||||
t_weechat_alias *ptr_alias;
|
||||
|
||||
if ((!string[0]) || (string[0] != '/'))
|
||||
if ((!string) || (!string[0]) || (string[0] != '/'))
|
||||
return 0;
|
||||
|
||||
command = strdup (string);
|
||||
@@ -517,154 +524,165 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
ptr_args = NULL;
|
||||
}
|
||||
|
||||
argv = explode_string (ptr_args, " ", 0, &argc);
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
if (!plugin_exec_command (command + 1, ptr_args))
|
||||
{
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
argv = explode_string (ptr_args, " ", 0, &argc);
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
{
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
{
|
||||
if (weechat_commands[i].min_arg ==
|
||||
weechat_commands[i].max_arg)
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
else
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (weechat_commands[i].cmd_function_args)
|
||||
return_code = (int) (weechat_commands[i].cmd_function_args)
|
||||
(argc, argv);
|
||||
else
|
||||
return_code = (int) (weechat_commands[i].cmd_function_1arg)
|
||||
(ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s %s command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
if ((argc < irc_commands[i].min_arg)
|
||||
|| (argc > irc_commands[i].max_arg))
|
||||
{
|
||||
if (irc_commands[i].min_arg == irc_commands[i].max_arg)
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((irc_commands[i].need_connection) &&
|
||||
((!server) || (!server->is_connected)))
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s command \"%s\" needs a server connection!\n"),
|
||||
WEECHAT_ERROR, irc_commands[i].command_name);
|
||||
return 0;
|
||||
if (weechat_commands[i].min_arg ==
|
||||
weechat_commands[i].max_arg)
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
else
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for %s command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
}
|
||||
if (irc_commands[i].cmd_function_args)
|
||||
return_code = (int) (irc_commands[i].cmd_function_args)
|
||||
(server, argc, argv);
|
||||
else
|
||||
return_code = (int) (irc_commands[i].cmd_function_1arg)
|
||||
(server, ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, command + 1);
|
||||
{
|
||||
if (weechat_commands[i].cmd_function_args)
|
||||
return_code = (int) (weechat_commands[i].cmd_function_args)
|
||||
(argc, argv);
|
||||
else
|
||||
return_code = (int) (weechat_commands[i].cmd_function_1arg)
|
||||
(ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s %s command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, PACKAGE_NAME, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if (ptr_args)
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
length1 = strlen (ptr_alias->alias_command);
|
||||
length2 = strlen (ptr_args);
|
||||
alias_command = (char *)malloc (length1 + 1 + length2 + 1);
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
if ((argc < irc_commands[i].min_arg)
|
||||
|| (argc > irc_commands[i].max_arg))
|
||||
{
|
||||
if (irc_commands[i].min_arg == irc_commands[i].max_arg)
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
gui_printf
|
||||
(NULL,
|
||||
_("%s wrong argument count for IRC command \"%s\" "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((irc_commands[i].need_connection) &&
|
||||
((!server) || (!server->is_connected)))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s command \"%s\" needs a server connection!\n"),
|
||||
WEECHAT_ERROR, irc_commands[i].command_name);
|
||||
return 0;
|
||||
}
|
||||
if (irc_commands[i].cmd_function_args)
|
||||
return_code = (int) (irc_commands[i].cmd_function_args)
|
||||
(server, argc, argv);
|
||||
else
|
||||
return_code = (int) (irc_commands[i].cmd_function_1arg)
|
||||
(server, ptr_args);
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
}
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
if (ptr_args)
|
||||
{
|
||||
length1 = strlen (ptr_alias->alias_command);
|
||||
length2 = strlen (ptr_args);
|
||||
alias_command = (char *)malloc (length1 + 1 + length2 + 1);
|
||||
if (alias_command)
|
||||
{
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
}
|
||||
(void) exec_weechat_command (server, alias_command);
|
||||
if (alias_command)
|
||||
free (alias_command);
|
||||
}
|
||||
else
|
||||
(void) exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command \"%s\" (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
}
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command \"%s\" (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
free (argv[j]);
|
||||
free (argv);
|
||||
}
|
||||
free (command);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -683,7 +701,7 @@ user_command (t_irc_server *server, char *command)
|
||||
if ((command[0] == '/') && (command[1] != '/'))
|
||||
{
|
||||
/* WeeChat internal command (or IRC command) */
|
||||
exec_weechat_command (server, command);
|
||||
(void) exec_weechat_command (server, command);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -759,9 +777,9 @@ weechat_cmd_alias (char *arguments)
|
||||
WEECHAT_ERROR, "alias");
|
||||
return -1;
|
||||
}
|
||||
index_command_new (arguments);
|
||||
if (!alias_new (arguments, pos))
|
||||
return -1;
|
||||
(void) index_command_new (arguments);
|
||||
gui_printf (NULL, _("Alias \"%s\" => \"%s\" created\n"),
|
||||
arguments, pos);
|
||||
}
|
||||
@@ -840,7 +858,10 @@ weechat_cmd_connect (int argc, char **argv)
|
||||
return -1;
|
||||
}
|
||||
if (!ptr_server->window)
|
||||
gui_window_new (ptr_server, NULL);
|
||||
{
|
||||
if (!gui_window_new (ptr_server, NULL, 1))
|
||||
return -1;
|
||||
}
|
||||
if (server_connect (ptr_server))
|
||||
{
|
||||
irc_login (ptr_server);
|
||||
@@ -973,6 +994,155 @@ weechat_cmd_help (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_perl: list/load/unload Perl scripts
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_perl (int argc, char **argv)
|
||||
{
|
||||
#ifdef PLUGINS
|
||||
t_plugin_script *ptr_plugin_script;
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
int handler_found, path_length;
|
||||
char *path_script;
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
switch (argc)
|
||||
{
|
||||
case 0:
|
||||
/* list registered Perl scripts */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Registered Perl scripts:\n"));
|
||||
if (perl_scripts)
|
||||
{
|
||||
for (ptr_plugin_script = perl_scripts; ptr_plugin_script;
|
||||
ptr_plugin_script = ptr_plugin_script->next_script)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, " %s v%s%s%s\n",
|
||||
ptr_plugin_script->name,
|
||||
ptr_plugin_script->version,
|
||||
(ptr_plugin_script->description[0]) ? " - " : "",
|
||||
ptr_plugin_script->description);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
/* list Perl message handlers */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl message handlers:\n"));
|
||||
handler_found = 0;
|
||||
for (ptr_plugin_handler = plugin_msg_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
{
|
||||
handler_found = 1;
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" IRC(%s) => Perl(%s)\n"),
|
||||
ptr_plugin_handler->name,
|
||||
ptr_plugin_handler->function_name);
|
||||
}
|
||||
}
|
||||
if (!handler_found)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
/* list Perl command handlers */
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl command handlers:\n"));
|
||||
handler_found = 0;
|
||||
for (ptr_plugin_handler = plugin_cmd_handlers; ptr_plugin_handler;
|
||||
ptr_plugin_handler = ptr_plugin_handler->next_handler)
|
||||
{
|
||||
if (ptr_plugin_handler->plugin_type == PLUGIN_TYPE_PERL)
|
||||
{
|
||||
handler_found = 1;
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" Command /%s => Perl(%s)\n"),
|
||||
ptr_plugin_handler->name,
|
||||
ptr_plugin_handler->function_name);
|
||||
}
|
||||
}
|
||||
if (!handler_found)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _(" (none)\n"));
|
||||
}
|
||||
|
||||
break;
|
||||
case 1:
|
||||
if (strcmp (argv[0], "unload") == 0)
|
||||
{
|
||||
/* unload all Perl scripts */
|
||||
plugin_unload (PLUGIN_TYPE_PERL, NULL);
|
||||
irc_display_prefix (NULL, PREFIX_PLUGIN);
|
||||
gui_printf (NULL, _("Perl scripts unloaded\n"));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (strcmp (argv[0], "load") == 0)
|
||||
{
|
||||
/* load Perl script */
|
||||
if (strstr(argv[1], DIR_SEPARATOR))
|
||||
path_script = NULL;
|
||||
else
|
||||
{
|
||||
path_length = strlen (weechat_home) + strlen (argv[1]) + 7;
|
||||
path_script = (char *) malloc (path_length * sizeof (char));
|
||||
snprintf (path_script, path_length, "%s%s%s%s%s",
|
||||
weechat_home, DIR_SEPARATOR, "perl",
|
||||
DIR_SEPARATOR, argv[1]);
|
||||
}
|
||||
plugin_load (PLUGIN_TYPE_PERL,
|
||||
(path_script) ? path_script : argv[1]);
|
||||
if (path_script)
|
||||
free (path_script);
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s unknown option for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "perl");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gui_printf (NULL,
|
||||
_("%s wrong argument count for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "perl");
|
||||
}
|
||||
#else
|
||||
gui_printf (NULL,
|
||||
_("WeeChat was build without Perl support.\n"
|
||||
"Please rebuild WeeChat with "
|
||||
"\"--enable-perl\" option for ./configure script\n"));
|
||||
/* make gcc happy */
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#endif /* PLUGIN_PERL */
|
||||
|
||||
#endif /* PLUGINS */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_save: save options to disk
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_save (int argc, char **argv)
|
||||
{
|
||||
return (config_write ((argc == 1) ? argv[0] : NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_server: list, add or remove server(s)
|
||||
*/
|
||||
@@ -1012,8 +1182,11 @@ weechat_cmd_server (int argc, char **argv)
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Autoconnect: %s\n"),
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"));
|
||||
_(" Autoconnect: %s%s\n"),
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"),
|
||||
(ptr_server->command_line) ?
|
||||
_(" (temporary server, will not be saved)") :
|
||||
"");
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
@@ -1244,11 +1417,11 @@ weechat_cmd_server (int argc, char **argv)
|
||||
}
|
||||
|
||||
/* create new server */
|
||||
new_server = server_new (server.name, server.autoconnect, server.address,
|
||||
server.port, server.password, server.nick1,
|
||||
server.nick2, server.nick3, server.username,
|
||||
server.realname, server.command,
|
||||
server.autojoin);
|
||||
new_server = server_new (server.name, server.autoconnect, 0,
|
||||
server.address, server.port, server.password,
|
||||
server.nick1, server.nick2, server.nick3,
|
||||
server.username, server.realname,
|
||||
server.command, server.autojoin);
|
||||
if (new_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
@@ -1268,7 +1441,7 @@ weechat_cmd_server (int argc, char **argv)
|
||||
|
||||
if (new_server->autoconnect)
|
||||
{
|
||||
gui_window_new (new_server, NULL);
|
||||
(void) gui_window_new (new_server, NULL, 1);
|
||||
if (server_connect (new_server))
|
||||
irc_login (new_server);
|
||||
}
|
||||
@@ -1278,87 +1451,145 @@ weechat_cmd_server (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_save: set options
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_save (int argc, char **argv)
|
||||
{
|
||||
return (config_write ((argc == 1) ? argv[0] : NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_set: set options
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_set (int argc, char **argv)
|
||||
weechat_cmd_set (char *arguments)
|
||||
{
|
||||
char *option, *value;
|
||||
int i, j, section_displayed;
|
||||
char *color_name;
|
||||
t_config_option *ptr_option;
|
||||
int number_found;
|
||||
|
||||
/* TODO: complete /set command */
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
option = NULL;
|
||||
value = NULL;
|
||||
if (arguments && arguments[0])
|
||||
{
|
||||
section_displayed = 0;
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
option = arguments;
|
||||
value = strchr (option, ' ');
|
||||
if (value)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
value[0] = '\0';
|
||||
value++;
|
||||
while (value[0] == ' ')
|
||||
value++;
|
||||
}
|
||||
}
|
||||
|
||||
if (value && value[0])
|
||||
{
|
||||
ptr_option = config_option_search (option);
|
||||
if (ptr_option)
|
||||
{
|
||||
if (ptr_option->handler_change == NULL)
|
||||
{
|
||||
if ((argc == 0) ||
|
||||
((argc > 0)
|
||||
&& (strstr (weechat_options[i][j].option_name, argv[0])
|
||||
!= NULL)))
|
||||
gui_printf (NULL,
|
||||
_("%s option '%s' can not be changed while WeeChat is running\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (config_option_set_value (ptr_option, value) == 0)
|
||||
{
|
||||
if (!section_displayed)
|
||||
(void) (ptr_option->handler_change());
|
||||
gui_printf (NULL, "[%s]\n", config_get_section (ptr_option));
|
||||
gui_printf (NULL, " %s = %s\n", option, value);
|
||||
}
|
||||
else
|
||||
gui_printf (NULL, _("%s incorrect value for option '%s'\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_printf (NULL, _("%s config option '%s' not found\n"),
|
||||
WEECHAT_ERROR, option);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
number_found = 0;
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
section_displayed = 0;
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
if ((!option) ||
|
||||
((option) && (option[0])
|
||||
&& (strstr (weechat_options[i][j].option_name, option)
|
||||
!= NULL)))
|
||||
{
|
||||
gui_printf (NULL, "[%s]\n",
|
||||
config_sections[i].section_name);
|
||||
section_displayed = 1;
|
||||
}
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(*weechat_options[i][j].ptr_int) ?
|
||||
"ON" : "OFF");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
gui_printf (NULL,
|
||||
" %s = %d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
*weechat_options[i][j].ptr_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
color_name = gui_get_color_by_value (*weechat_options[i][j].ptr_int);
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(color_name) ? color_name : _("(unknown)"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].
|
||||
option_name,
|
||||
(*weechat_options[i][j].
|
||||
ptr_string) ?
|
||||
*weechat_options[i][j].
|
||||
ptr_string : "");
|
||||
break;
|
||||
if (!section_displayed)
|
||||
{
|
||||
gui_printf (NULL, "[%s]\n",
|
||||
config_sections[i].section_name);
|
||||
section_displayed = 1;
|
||||
}
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(*weechat_options[i][j].ptr_int) ?
|
||||
"ON" : "OFF");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
gui_printf (NULL,
|
||||
" %s = %d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
*weechat_options[i][j].ptr_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
color_name = gui_get_color_by_value (*weechat_options[i][j].ptr_int);
|
||||
gui_printf (NULL,
|
||||
" %s = %s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(color_name) ? color_name : _("(unknown)"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
gui_printf (NULL, " %s = %s\n",
|
||||
weechat_options[i][j].
|
||||
option_name,
|
||||
(*weechat_options[i][j].
|
||||
ptr_string) ?
|
||||
*weechat_options[i][j].
|
||||
ptr_string : "");
|
||||
break;
|
||||
}
|
||||
number_found++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (number_found == 0)
|
||||
{
|
||||
if (value)
|
||||
gui_printf (NULL, _("No config option found with '%s'\n"),
|
||||
value);
|
||||
else
|
||||
gui_printf (NULL, _("No config option found with '%s'\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value)
|
||||
gui_printf (NULL, _("%d config option(s) found with '%s'\n"),
|
||||
number_found, value);
|
||||
else
|
||||
gui_printf (NULL, _("%d config option(s) found\n"),
|
||||
number_found);
|
||||
}
|
||||
}
|
||||
gui_printf (NULL, "(TODO) \"/set\" command not fully developed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -62,6 +60,7 @@ struct t_index_command
|
||||
extern t_weechat_alias *weechat_alias;
|
||||
extern t_index_command *index_commands;
|
||||
|
||||
extern t_index_command *index_command_search (char *);
|
||||
extern t_index_command *index_command_new (char *);
|
||||
extern void index_command_build ();
|
||||
extern t_weechat_alias *alias_new (char *, char *);
|
||||
@@ -72,9 +71,10 @@ extern int weechat_cmd_clear (int, char **);
|
||||
extern int weechat_cmd_connect (int, char **);
|
||||
extern int weechat_cmd_disconnect (int, char **);
|
||||
extern int weechat_cmd_help (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_perl (int, char **);
|
||||
extern int weechat_cmd_save (int, char **);
|
||||
extern int weechat_cmd_set (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_set (char *);
|
||||
extern int weechat_cmd_unalias (char *);
|
||||
|
||||
#endif /* command.h */
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
|
||||
+308
-137
@@ -16,10 +16,8 @@
|
||||
* ### ###
|
||||
* ############################################################################
|
||||
*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -50,26 +48,40 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "weeconfig.h"
|
||||
#include "command.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* char *display_name; */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
char *weechat_home; /* WeeChat home dir. (example: /home/toto/.weechat) */
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log) */
|
||||
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
int server_cmd_line; /* at least one server on WeeChat command line */
|
||||
|
||||
|
||||
/*
|
||||
* log_printf: displays a message in WeeChat log (~/.weechat/weechat.log)
|
||||
* my_sigint: SIGINT handler, do nothing (just ignore this signal)
|
||||
* Prevents user for exiting with Ctrl-C
|
||||
*/
|
||||
|
||||
void
|
||||
log_printf (char *message, ...)
|
||||
my_sigint ()
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_log_printf: displays a message in WeeChat log (~/.weechat/weechat.log)
|
||||
*/
|
||||
|
||||
void
|
||||
wee_log_printf (char *message, ...)
|
||||
{
|
||||
static char buffer[4096];
|
||||
va_list argptr;
|
||||
@@ -85,13 +97,89 @@ log_printf (char *message, ...)
|
||||
|
||||
seconds = time (NULL);
|
||||
date_tmp = localtime (&seconds);
|
||||
fprintf (log_file, "[%04d-%02d-%02d %02d:%02d:%02d] %s",
|
||||
date_tmp->tm_year + 1900, date_tmp->tm_mon + 1, date_tmp->tm_mday,
|
||||
date_tmp->tm_hour, date_tmp->tm_min, date_tmp->tm_sec,
|
||||
buffer);
|
||||
if (date_tmp)
|
||||
fprintf (log_file, "[%04d-%02d-%02d %02d:%02d:%02d] %s",
|
||||
date_tmp->tm_year + 1900, date_tmp->tm_mon + 1, date_tmp->tm_mday,
|
||||
date_tmp->tm_hour, date_tmp->tm_min, date_tmp->tm_sec,
|
||||
buffer);
|
||||
else
|
||||
fprintf (log_file, "[????-??-?? ??:??:??] %s", buffer);
|
||||
fflush (log_file);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_display_config_options: display config options
|
||||
*/
|
||||
|
||||
void wee_display_config_options ()
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
printf (_("WeeChat configuration options (~/.weechat/weechat.rc):\n\n"));
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if (weechat_options[i])
|
||||
{
|
||||
j = 0;
|
||||
while (weechat_options[i][j].option_name)
|
||||
{
|
||||
printf ("* %s:\n",
|
||||
weechat_options[i][j].option_name);
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
printf (_(" . type boolean (values: 'on' or 'off')\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_int == BOOL_TRUE) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
printf (_(" . type integer (values: between %d and %d)\n"),
|
||||
weechat_options[i][j].min,
|
||||
weechat_options[i][j].max);
|
||||
printf (_(" . default value: %d\n"),
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
printf (_(" . type string (values: "));
|
||||
k = 0;
|
||||
while (weechat_options[i][j].array_values[k])
|
||||
{
|
||||
printf ("'%s'",
|
||||
weechat_options[i][j].array_values[k]);
|
||||
if (weechat_options[i][j].array_values[k + 1])
|
||||
printf (", ");
|
||||
k++;
|
||||
}
|
||||
printf (")\n");
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
printf (_(" . type color (Curses or Gtk color, look at WeeChat doc)\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
printf (_(" . type string (any string)\n"));
|
||||
printf (_(" . default value: '%s'\n"),
|
||||
(weechat_options[i][j].default_string) ?
|
||||
weechat_options[i][j].default_string : _("empty"));
|
||||
break;
|
||||
}
|
||||
printf (_(" . description: %s\n\n"),
|
||||
gettext (weechat_options[i][j].long_description));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf (_("Moreover, you can define aliases in [alias] section, by adding lines like:\n"));
|
||||
printf ("j=join\n");
|
||||
printf (_("where 'j' is alias name, and 'join' associated command.\n\n"));
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_parse_args: parse command line args
|
||||
*/
|
||||
@@ -100,39 +188,56 @@ void
|
||||
wee_parse_args (int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
t_irc_server server_tmp;
|
||||
|
||||
server_cmd_line = 0;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if ((strcmp (argv[i], "-h") == 0)
|
||||
|| (strcmp (argv[i], "--help") == 0))
|
||||
if ((strcmp (argv[i], "-c") == 0)
|
||||
|| (strcmp (argv[i], "--config") == 0))
|
||||
{
|
||||
printf ("\n%s%s", WEE_USAGE);
|
||||
exit (0);
|
||||
wee_display_config_options ();
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strcmp (argv[i], "-h") == 0)
|
||||
|| (strcmp (argv[i], "--help") == 0))
|
||||
{
|
||||
printf ("\n" WEE_USAGE1, argv[0], argv[0]);
|
||||
printf ("%s", WEE_USAGE2);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strcmp (argv[i], "-l") == 0)
|
||||
|| (strcmp (argv[i], "--license") == 0))
|
||||
{
|
||||
printf ("\n%s%s", WEE_LICENSE);
|
||||
exit (0);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
/*else if ((strcmp (argv[i], "-d") == 0)
|
||||
|| (strcmp (argv[i], "--display") == 0))
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
fprintf (stderr,
|
||||
_("%s no display specified (parameter '%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
else
|
||||
{
|
||||
display_name = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
}*/
|
||||
else if ((strcmp (argv[i], "-v") == 0)
|
||||
|| (strcmp (argv[i], "--version") == 0))
|
||||
{
|
||||
printf (PACKAGE_VERSION "\n");
|
||||
exit (0);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
else if ((strncasecmp (argv[i], "irc://", 6) == 0))
|
||||
{
|
||||
if (server_init_with_url (argv[i], &server_tmp) < 0)
|
||||
{
|
||||
fprintf (stderr, _("%s invalid syntax for IRC server ('%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!server_new (server_tmp.name, 0, 1,
|
||||
server_tmp.address, server_tmp.port,
|
||||
server_tmp.password, server_tmp.nick1,
|
||||
server_tmp.nick2, server_tmp.nick3,
|
||||
NULL, NULL, NULL, server_tmp.autojoin))
|
||||
fprintf (stderr, _("%s unable to create server ('%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
server_destroy (&server_tmp);
|
||||
server_cmd_line = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -144,30 +249,112 @@ wee_parse_args (int argc, char *argv[])
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_create_home_dir: create weechat home directory (if not found)
|
||||
* wee_create_dir: create a directory
|
||||
* return: 1 if ok (or directory already exists)
|
||||
* 0 if error
|
||||
*/
|
||||
|
||||
void
|
||||
wee_create_home_dir ()
|
||||
int
|
||||
wee_create_dir (char *directory)
|
||||
{
|
||||
char *weechat_home_dir;
|
||||
int return_code;
|
||||
|
||||
weechat_home_dir =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (weechat_home_dir, "%s/.weechat", getenv ("HOME"));
|
||||
return_code = mkdir (weechat_home_dir, 0755);
|
||||
if (return_code < 0)
|
||||
if (mkdir (directory, 0755) < 0)
|
||||
{
|
||||
/* exit if error (except if directory already exists) */
|
||||
if (errno != EEXIST)
|
||||
{
|
||||
fprintf (stderr, _("%s cannot create directory \"%s\"\n"),
|
||||
WEECHAT_ERROR, weechat_home_dir);
|
||||
free (weechat_home_dir);
|
||||
exit (1);
|
||||
WEECHAT_ERROR, directory);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
free (weechat_home_dir);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_create_home_dirs: create (if not found):
|
||||
* - WeeChat home directory ("~/.weechat")
|
||||
* - "perl" directory (and "autoload")
|
||||
* - "ruby" directory (and "autoload")
|
||||
* - "python" directory (and "autoload")
|
||||
*/
|
||||
|
||||
void
|
||||
wee_create_home_dirs ()
|
||||
{
|
||||
char *ptr_home, *dir_name;
|
||||
int dir_length;
|
||||
|
||||
/* TODO: rewrite this code for Windows version */
|
||||
ptr_home = getenv ("HOME");
|
||||
if (!ptr_home)
|
||||
{
|
||||
fprintf (stderr, _("%s unable to get HOME directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
dir_length = strlen (ptr_home) + 10;
|
||||
weechat_home =
|
||||
(char *) malloc (dir_length * sizeof (char));
|
||||
if (!weechat_home)
|
||||
{
|
||||
fprintf (stderr, _("%s not enough memory for home directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
snprintf (weechat_home, dir_length, "%s%s.weechat", ptr_home,
|
||||
DIR_SEPARATOR);
|
||||
|
||||
/* create home directory "~/.weechat" ; error is fatal */
|
||||
if (!wee_create_dir (weechat_home))
|
||||
{
|
||||
fprintf (stderr, _("%s unable to create ~/.weechat directory\n"),
|
||||
WEECHAT_ERROR);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
dir_length = strlen (weechat_home) + 64;
|
||||
dir_name = (char *) malloc (dir_length * sizeof (char));
|
||||
|
||||
#ifdef PLUGIN_PERL
|
||||
/* create "~/.weechat/perl" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"perl");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/perl/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "perl", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLUGIN_PYTHON
|
||||
/* create "~/.weechat/python" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"python");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/python/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "python", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLUGIN_RUBY
|
||||
/* create "~/.weechat/ruby" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s", weechat_home, DIR_SEPARATOR,
|
||||
"ruby");
|
||||
if (wee_create_dir (dir_name))
|
||||
{
|
||||
/* create "~/.weechat/ruby/autoload" */
|
||||
snprintf (dir_name, dir_length, "%s%s%s%s%s", weechat_home,
|
||||
DIR_SEPARATOR, "ruby", DIR_SEPARATOR, "autoload");
|
||||
wee_create_dir (dir_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
free (dir_name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -192,86 +379,27 @@ wee_init_vars ()
|
||||
void
|
||||
wee_init_log ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_LOG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
snprintf (filename, filename_length, "%s/" WEECHAT_LOG_NAME, weechat_home);
|
||||
if ((log_file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
free (filename);
|
||||
fprintf (stderr,
|
||||
_("%s unable to create/append to log file (~/.weechat/"
|
||||
WEECHAT_LOG_NAME), WEECHAT_ERROR);
|
||||
}
|
||||
_("%s unable to create/append to log file (~/.weechat/%s)"),
|
||||
WEECHAT_WARNING, WEECHAT_LOG_NAME);
|
||||
free (filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
* weechat_welcome_message: display WeeChat welcome message - yeah!
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
weechat_welcome_message ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* pre-initiliaze interface */
|
||||
gui_pre_init (&argc, &argv);
|
||||
|
||||
/* initialize variables */
|
||||
wee_init_vars ();
|
||||
|
||||
/* parse command line args */
|
||||
wee_parse_args (argc, argv);
|
||||
|
||||
/* create weechat home directory */
|
||||
wee_create_home_dir ();
|
||||
|
||||
/* init log file */
|
||||
wee_init_log ();
|
||||
|
||||
/* build commands index (sorted), for completion */
|
||||
index_command_build ();
|
||||
|
||||
/* read configuration */
|
||||
switch (config_read ())
|
||||
{
|
||||
case 0: /* success */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* init gui */
|
||||
gui_init ();
|
||||
|
||||
/* Welcome message - yeah! */
|
||||
if (cfg_look_startup_logo)
|
||||
{
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
@@ -303,27 +431,70 @@ main (int argc, char *argv[])
|
||||
cfg_look_startup_version)
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
gui_main_loop ();
|
||||
server_disconnect_all ();
|
||||
|
||||
/* save config file */
|
||||
config_write (NULL);
|
||||
|
||||
/* program ending */
|
||||
wee_shutdown ();
|
||||
|
||||
/* make gcc happy (statement never executed) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, ""); /* initialize gettext */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
signal (SIGINT, my_sigint); /* ignore SIGINT signal */
|
||||
gui_pre_init (&argc, &argv); /* pre-initiliaze interface */
|
||||
wee_init_vars (); /* initialize some variables */
|
||||
wee_parse_args (argc, argv); /* parse command line args */
|
||||
wee_create_home_dirs (); /* create WeeChat directories */
|
||||
wee_init_log (); /* init log file */
|
||||
index_command_build (); /* build commands index for completion */
|
||||
|
||||
switch (config_read ()) /* read configuration */
|
||||
{
|
||||
case 0: /* config file OK */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
if (config_create_default () < 0)
|
||||
return EXIT_FAILURE;
|
||||
if (config_read () != 0)
|
||||
return EXIT_FAILURE;
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
gui_init (); /* init WeeChat interface */
|
||||
plugin_init (); /* init plugin interface(s) */
|
||||
weechat_welcome_message (); /* display WeeChat welcome message */
|
||||
/* auto-connect to servers */
|
||||
server_auto_connect (server_cmd_line);
|
||||
|
||||
gui_main_loop (); /* WeeChat main loop */
|
||||
|
||||
plugin_end (); /* end plugin interface(s) */
|
||||
server_disconnect_all (); /* disconnect from all servers */
|
||||
(void) config_write (NULL); /* save config file */
|
||||
wee_shutdown (); /* quit WeeChat (oh no, why?) */
|
||||
|
||||
return EXIT_SUCCESS; /* make gcc happy (never executed) */
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -45,15 +43,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
#define WEECHAT_COPYRIGHT PACKAGE_NAME " (c) 2003 by Wee Team"
|
||||
#define WEECHAT_COPYRIGHT PACKAGE_NAME " (c) 2004 by Wee Team"
|
||||
#define WEECHAT_WEBSITE "http://weechat.flashtux.org"
|
||||
|
||||
#define WEECHAT_ERROR _(PACKAGE_NAME " Error:")
|
||||
#define WEECHAT_WARNING _(PACKAGE_NAME " Warning:")
|
||||
|
||||
/* debug mode, 0=normal use, 1=some debug msg, 2=full debug (developers only) */
|
||||
#define DEBUG 0
|
||||
|
||||
/* log file */
|
||||
|
||||
#define WEECHAT_LOG_NAME "weechat.log"
|
||||
@@ -61,10 +56,11 @@
|
||||
/* license */
|
||||
|
||||
#define WEE_LICENSE \
|
||||
PACKAGE_STRING " (c) Copyright 2003, compiled on " __DATE__ __TIME__ \
|
||||
"Developed by FlashCode <flashcode@flashtux.org>\n" \
|
||||
PACKAGE_STRING " (c) Copyright 2004, compiled on " __DATE__ " " __TIME__ \
|
||||
"\nDeveloped by FlashCode <flashcode@flashtux.org>\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n" \
|
||||
"Website: " WEECHAT_WEBSITE "\n\n" \
|
||||
"This program is free software; you can redistribute it and/or modify\n" \
|
||||
"it under the terms of the GNU General Public License as published by\n" \
|
||||
"the Free Software Foundation; either version 2 of the License, or\n" \
|
||||
@@ -80,29 +76,32 @@
|
||||
"along with this program; if not, write to the Free Software\n" \
|
||||
"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n"
|
||||
|
||||
#define WEE_USAGE \
|
||||
PACKAGE_STRING " (c) Copyright 2003, compiled on " __DATE__ __TIME__ \
|
||||
"Developed by FlashCode <flashcode@flashtux.org>\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" Bounga <bounga@altern.org>\n" \
|
||||
" Xahlexx <xahlexx@tuxisland.org>\n\n" \
|
||||
" -h, --help this help screen\n", \
|
||||
#define WEE_USAGE1 \
|
||||
PACKAGE_STRING " (c) Copyright 2004, compiled on " __DATE__ " " __TIME__ \
|
||||
"\nDeveloped by FlashCode, Bounga and Xahlexx - " WEECHAT_WEBSITE "\n\n" \
|
||||
"Usage: %s [options ...]\n" \
|
||||
" or: %s [irc://[nickname[:password]@]irc.example.org[:port][/channel] ...]\n\n"
|
||||
|
||||
#define WEE_USAGE2 \
|
||||
" -c, --config config file help (list of options)\n" \
|
||||
" -h, --help this help screen\n" \
|
||||
" -l, --license display WeeChat license\n" \
|
||||
" -v, --version display WeeChat version\n\n"
|
||||
|
||||
/* " -d, --display choose X display\n" \*/
|
||||
/* directory separator, depending on OS */
|
||||
|
||||
#ifdef _WIN32
|
||||
#define DIR_SEPARATOR "\\"
|
||||
#else
|
||||
#define DIR_SEPARATOR "/"
|
||||
#endif
|
||||
|
||||
/*#define DEFAULT_DISPLAY ":0" */
|
||||
|
||||
|
||||
/*extern char *display_name; */
|
||||
int quit_weechat;
|
||||
/* global variables and functions */
|
||||
|
||||
extern int quit_weechat;
|
||||
extern char *weechat_home;
|
||||
|
||||
extern void log_printf (char *, ...);
|
||||
extern void wee_log_printf (char *, ...);
|
||||
extern void wee_shutdown ();
|
||||
|
||||
#endif /* weechat.h */
|
||||
|
||||
+332
-186
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -19,7 +17,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* config.c: WeeChat configuration */
|
||||
/* weeconfig.c: WeeChat configuration */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@@ -27,10 +25,14 @@
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <time.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "weeconfig.h"
|
||||
@@ -71,70 +73,86 @@ int cfg_look_nickmode;
|
||||
int cfg_look_nickmode_empty;
|
||||
char *cfg_look_no_nickname;
|
||||
char *cfg_look_completor;
|
||||
int cfg_look_infobar;
|
||||
char *cfg_look_infobar_timestamp;
|
||||
int cfg_look_infobar_delay_highlight;
|
||||
|
||||
t_config_option weechat_options_look[] =
|
||||
{ { "look_set_title", N_("set title for terminal window (curses GUI) with name & version"),
|
||||
N_("set title for terminal window (curses GUI) with name & version"),
|
||||
{ { "look_set_title", N_("set title for window (terminal for Curses GUI) with name & version"),
|
||||
N_("set title for window (terminal for Curses GUI) with name & version"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_set_title, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_set_title, NULL, config_change_title },
|
||||
{ "look_startup_logo", N_("display WeeChat logo at startup"),
|
||||
N_("display WeeChat logo at startup"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_startup_logo, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_startup_logo, NULL, config_change_noop },
|
||||
{ "look_startup_version", N_("display WeeChat version at startup"),
|
||||
N_("display WeeChat version at startup"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_startup_version, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_startup_version, NULL, config_change_noop },
|
||||
{ "look_weechat_slogan", N_("WeeChat slogan"),
|
||||
N_("WeeChat slogan (if empty, slogan is not used)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"the geekest IRC client!", NULL, NULL, &cfg_look_weechat_slogan, NULL },
|
||||
"the geekest IRC client!", NULL, NULL, &cfg_look_weechat_slogan, config_change_noop },
|
||||
{ "look_color_nicks", N_("display nick names with different colors"),
|
||||
N_("display nick names with different colors"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_color_nicks, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_color_nicks, NULL, config_change_noop },
|
||||
{ "look_color_actions", N_("display actions with different colors"),
|
||||
N_("display actions with different colors"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_color_actions, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_color_actions, NULL, config_change_noop },
|
||||
{ "look_remove_colors_from_msgs", N_("remove colors from incoming messages"),
|
||||
N_("remove colors from incoming messages"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_remove_colors_from_msgs, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_remove_colors_from_msgs, NULL, config_change_noop },
|
||||
{ "look_nicklist", N_("display nicklist window"),
|
||||
N_("display nicklist window (for channel windows)"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_nicklist, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist, NULL, config_change_windows },
|
||||
{ "look_nicklist_position", N_("nicklist position"),
|
||||
N_("nicklist position (top, left, right (default), bottom)"),
|
||||
OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
|
||||
"right", cfg_look_nicklist_position_values, &cfg_look_nicklist_position, NULL, NULL },
|
||||
"right", cfg_look_nicklist_position_values, &cfg_look_nicklist_position, NULL, config_change_windows },
|
||||
{ "look_nicklist_min_size", N_("min size for nicklist"),
|
||||
N_("min size for nicklist (width or height, depending on look_nicklist_position "
|
||||
"(0 = no min size))"),
|
||||
OPTION_TYPE_INT, 0, 100, 0,
|
||||
NULL, NULL, &cfg_look_nicklist_min_size, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist_min_size, NULL, config_change_windows },
|
||||
{ "look_nicklist_max_size", N_("max size for nicklist"),
|
||||
N_("max size for nicklist (width or height, depending on look_nicklist_position "
|
||||
"(0 = no max size; if min == max and > 0, then size is fixed))"),
|
||||
OPTION_TYPE_INT, 0, 100, 0,
|
||||
NULL, NULL, &cfg_look_nicklist_max_size, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nicklist_max_size, NULL, config_change_windows },
|
||||
{ "look_no_nickname", N_("text to display instead of nick when not connected"),
|
||||
N_("text to display instead of nick when not connected"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"-cmd-", NULL, NULL, &cfg_look_no_nickname, NULL },
|
||||
"-cmd-", NULL, NULL, &cfg_look_no_nickname, config_change_window_content },
|
||||
{ "look_nickmode", N_("display nick mode ((half)op/voice) before each nick"),
|
||||
N_("display nick mode ((half)op/voice) before each nick"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_nickmode, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nickmode, NULL, config_change_windows },
|
||||
{ "look_nickmode_empty", N_("display space if nick mode is not (half)op/voice"),
|
||||
N_("display space if nick mode is not (half)op/voice"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
|
||||
NULL, NULL, &cfg_look_nickmode_empty, NULL, NULL },
|
||||
NULL, NULL, &cfg_look_nickmode_empty, NULL, config_change_windows },
|
||||
{ "look_nick_completor", N_("the string inserted after nick completion"),
|
||||
N_("the string inserted after nick completion"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
":", NULL, NULL, &cfg_look_completor, NULL },
|
||||
":", NULL, NULL, &cfg_look_completor, config_change_noop },
|
||||
{ "look_infobar", N_("enable info bar"),
|
||||
N_("enable info bar"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &cfg_look_infobar, NULL, config_change_windows },
|
||||
{ "look_infobar_timestamp", N_("timestamp for time in infobar"),
|
||||
N_("timestamp for time in infobar"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"%B, %A %d %G - %H:%M", NULL, NULL, &cfg_look_infobar_timestamp, config_change_window_content },
|
||||
{ "look_infobar_delay_highlight", N_("delay (in seconds) for highlight messages in infobar"),
|
||||
N_("delay (in seconds) for highlight messages in infobar "
|
||||
"(0 = disable highlight notifications in infobar)"),
|
||||
OPTION_TYPE_INT, 0, INT_MAX, 7,
|
||||
NULL, NULL, &cfg_look_infobar_delay_highlight, NULL, config_change_noop },
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -151,6 +169,7 @@ int cfg_col_chat_nick;
|
||||
int cfg_col_chat_host;
|
||||
int cfg_col_chat_channel;
|
||||
int cfg_col_chat_dark;
|
||||
int cfg_col_chat_highlight;
|
||||
int cfg_col_chat_bg;
|
||||
int cfg_col_status;
|
||||
int cfg_col_status_active;
|
||||
@@ -158,6 +177,9 @@ int cfg_col_status_data_msg;
|
||||
int cfg_col_status_data_other;
|
||||
int cfg_col_status_more;
|
||||
int cfg_col_status_bg;
|
||||
int cfg_col_infobar;
|
||||
int cfg_col_infobar_highlight;
|
||||
int cfg_col_infobar_bg;
|
||||
int cfg_col_input;
|
||||
int cfg_col_input_channel;
|
||||
int cfg_col_input_nick;
|
||||
@@ -176,131 +198,149 @@ t_config_option weechat_options_colors[] =
|
||||
{ "col_title", N_("color for title bar"),
|
||||
N_("color for title bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_title, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_title, NULL, &config_change_color },
|
||||
{ "col_title_bg", N_("background for title bar"),
|
||||
N_("background for title bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_title_bg, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_title_bg, NULL, &config_change_color },
|
||||
|
||||
/* chat window */
|
||||
{ "col_chat", N_("color for chat text"),
|
||||
N_("color for chat text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_chat, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_chat, NULL, &config_change_color },
|
||||
{ "col_chat_time", N_("color for time"),
|
||||
N_("color for time in chat window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_chat_time, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_chat_time, NULL, &config_change_color },
|
||||
{ "col_chat_time_sep", N_("color for time separator"),
|
||||
N_("color for time separator (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"brown", NULL, &cfg_col_chat_time_sep, NULL, NULL },
|
||||
"brown", NULL, &cfg_col_chat_time_sep, NULL, &config_change_color },
|
||||
{ "col_chat_prefix1", N_("color for 1st and 3rd char of prefix"),
|
||||
N_("color for 1st and 3rd char of prefix"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightcyan", NULL, &cfg_col_chat_prefix1, NULL, NULL },
|
||||
"lightcyan", NULL, &cfg_col_chat_prefix1, NULL, &config_change_color },
|
||||
{ "col_chat_prefix2", N_("color for middle char of prefix"),
|
||||
N_("color for middle char of prefix"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_chat_prefix2, NULL, NULL },
|
||||
"white", NULL, &cfg_col_chat_prefix2, NULL, &config_change_color },
|
||||
{ "col_chat_nick", N_("color for nicks in actions"),
|
||||
N_("color for nicks in actions (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightcyan", NULL, &cfg_col_chat_nick, NULL, NULL },
|
||||
"lightcyan", NULL, &cfg_col_chat_nick, NULL, &config_change_color },
|
||||
{ "col_chat_host", N_("color for hostnames"),
|
||||
N_("color for hostnames (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"cyan", NULL, &cfg_col_chat_host, NULL, NULL },
|
||||
"cyan", NULL, &cfg_col_chat_host, NULL, &config_change_color },
|
||||
{ "col_chat_channel", N_("color for channel names in actions"),
|
||||
N_("color for channel names in actions (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_chat_channel, NULL, NULL },
|
||||
"white", NULL, &cfg_col_chat_channel, NULL, &config_change_color },
|
||||
{ "col_chat_dark", N_("color for dark separators"),
|
||||
N_("color for dark separators (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"green", NULL, &cfg_col_chat_dark, NULL, NULL },
|
||||
"green", NULL, &cfg_col_chat_dark, NULL, &config_change_color },
|
||||
{ "col_chat_highlight", N_("color for highlighted nick"),
|
||||
N_("color for highlighted nick (chat window)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_chat_highlight, NULL, &config_change_color },
|
||||
{ "col_chat_bg", N_("background for chat"),
|
||||
N_("background for chat window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_chat_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_chat_bg, NULL, &config_change_color },
|
||||
|
||||
/* status window */
|
||||
{ "col_status", N_("color for status bar"),
|
||||
N_("color for status bar"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_status, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_status, NULL, &config_change_color },
|
||||
{ "col_status_active", N_("color for active window"),
|
||||
N_("color for active window (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_status_active, NULL, NULL },
|
||||
"yellow", NULL, &cfg_col_status_active, NULL, &config_change_color },
|
||||
{ "col_status_data_msg", N_("color for window with new messages"),
|
||||
N_("color for window with new messages (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightred", NULL, &cfg_col_status_data_msg, NULL, NULL },
|
||||
"lightred", NULL, &cfg_col_status_data_msg, NULL, &config_change_color },
|
||||
{ "col_status_data_other", N_("color for window with new data (not messages)"),
|
||||
N_("color for window with new data (not messages) (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightmagenta", NULL, &cfg_col_status_data_other, NULL, NULL },
|
||||
"lightmagenta", NULL, &cfg_col_status_data_other, NULL, &config_change_color },
|
||||
{ "col_status_more", N_("color for \"*MORE*\" text"),
|
||||
N_("color for window with new data (status bar)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_status_more, NULL, NULL },
|
||||
"white", NULL, &cfg_col_status_more, NULL, &config_change_color },
|
||||
{ "col_status_bg", N_("background for status window"),
|
||||
N_("background for status window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_status_bg, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_status_bg, NULL, &config_change_color },
|
||||
|
||||
/* infobar window */
|
||||
{ "col_infobar", N_("color for info bar text"),
|
||||
N_("color for info bar text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"black", NULL, &cfg_col_infobar, NULL, &config_change_color },
|
||||
{ "col_infobar_highlight", N_("color for info bar highlight notification"),
|
||||
N_("color for info bar highlight notification"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_infobar_highlight, NULL, &config_change_color },
|
||||
{ "col_infobar_bg", N_("background for info bar window"),
|
||||
N_("background for info bar window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"cyan", NULL, &cfg_col_infobar_bg, NULL, &config_change_color },
|
||||
|
||||
/* input window */
|
||||
{ "col_input", N_("color for input text"),
|
||||
N_("color for input text"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_input, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_input, NULL, &config_change_color },
|
||||
{ "col_input_channel", N_("color for input text (channel name)"),
|
||||
N_("color for input text (channel name)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_input_channel, NULL, NULL },
|
||||
"white", NULL, &cfg_col_input_channel, NULL, &config_change_color },
|
||||
{ "col_input_nick", N_("color for input text (nick name)"),
|
||||
N_("color for input text (nick name)"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightgreen", NULL, &cfg_col_input_nick, NULL, NULL },
|
||||
"lightgreen", NULL, &cfg_col_input_nick, NULL, &config_change_color },
|
||||
{ "col_input_bg", N_("background for input window"),
|
||||
N_("background for input window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_input_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_input_bg, NULL, &config_change_color },
|
||||
|
||||
/* nick window */
|
||||
{ "col_nick", N_("color for nicknames"),
|
||||
N_("color for nicknames"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"gray", NULL, &cfg_col_nick, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_nick, NULL, &config_change_color },
|
||||
{ "col_nick_op", N_("color for operator symbol"),
|
||||
N_("color for operator symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightgreen", NULL, &cfg_col_nick_op, NULL, NULL },
|
||||
"lightgreen", NULL, &cfg_col_nick_op, NULL, &config_change_color },
|
||||
{ "col_nick_halfop", N_("color for half-operator symbol"),
|
||||
N_("color for half-operator symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"lightmagenta", NULL, &cfg_col_nick_halfop, NULL, NULL },
|
||||
"lightmagenta", NULL, &cfg_col_nick_halfop, NULL, &config_change_color },
|
||||
{ "col_nick_voice", N_("color for voice symbol"),
|
||||
N_("color for voice symbol"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"yellow", NULL, &cfg_col_nick_voice, NULL, NULL },
|
||||
"yellow", NULL, &cfg_col_nick_voice, NULL, &config_change_color },
|
||||
{ "col_nick_sep", N_("color for nick separator"),
|
||||
N_("color for nick separator"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"blue", NULL, &cfg_col_nick_sep, NULL, NULL },
|
||||
"blue", NULL, &cfg_col_nick_sep, NULL, &config_change_color },
|
||||
{ "col_nick_self", N_("color for local nick"),
|
||||
N_("color for local nick"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"white", NULL, &cfg_col_nick_self, NULL, NULL },
|
||||
"white", NULL, &cfg_col_nick_self, NULL, &config_change_color },
|
||||
{ "col_nick_private", N_("color for other nick in private window"),
|
||||
N_("color for other nick in private window"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"brown", NULL, &cfg_col_nick_private, NULL, NULL },
|
||||
"gray", NULL, &cfg_col_nick_private, NULL, &config_change_color },
|
||||
{ "col_nick_bg", N_("background for nicknames"),
|
||||
N_("background for nicknames"),
|
||||
OPTION_TYPE_COLOR, 0, 0, 0,
|
||||
"default", NULL, &cfg_col_nick_bg, NULL, NULL },
|
||||
"default", NULL, &cfg_col_nick_bg, NULL, &config_change_color },
|
||||
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
@@ -398,8 +438,8 @@ t_config_option weechat_options_dcc[] =
|
||||
NULL, NULL, &cfg_dcc_timeout, NULL, NULL },
|
||||
{ "dcc_download_path", N_("path for incoming files with dcc"),
|
||||
N_("path for writing incoming files with dcc (default: user home)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0, "~",
|
||||
NULL, NULL, &cfg_dcc_download_path, NULL },
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"~", NULL, NULL, &cfg_dcc_download_path, NULL },
|
||||
{ "dcc_upload_path", N_("default path for sending files with dcc"),
|
||||
N_("path for reading files when sending thru dcc (when no path is specified)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0, "~",
|
||||
@@ -528,6 +568,83 @@ get_pos_array_values (char **array, char *string)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_get_section: get section name from option pointer
|
||||
*/
|
||||
|
||||
char *
|
||||
config_get_section (t_config_option *ptr_option)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
/* if option found, return pointer to section name */
|
||||
if (ptr_option == &weechat_options[i][j])
|
||||
return config_sections[i].section_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* option not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_noop: called when an option is changed by /set command
|
||||
* and that no special action is needed after that
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_noop ()
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_title: called when title is changed
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_title ()
|
||||
{
|
||||
gui_set_window_title ();
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_windows: called when windows change (for example nicklist)
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_windows ()
|
||||
{
|
||||
gui_switch_to_window (gui_current_window);
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_window_content: called when content of a window changes
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_window_content ()
|
||||
{
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* config_change_color: called when a color is changed by /set command
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_color()
|
||||
{
|
||||
gui_init_colors ();
|
||||
}
|
||||
|
||||
/*
|
||||
* config_option_set_value: set new value for an option
|
||||
* return: 0 if success
|
||||
@@ -575,14 +692,12 @@ config_option_set_value (t_config_option *option, char *value)
|
||||
}
|
||||
|
||||
/*
|
||||
* config_set_value: set new value for an option (found by name)
|
||||
* return: 0 if success
|
||||
* -1 if bad value for option
|
||||
* -2 if option is not found
|
||||
* config_option_search: look for an option and return pointer to this option
|
||||
* if option is not found, NULL is returned
|
||||
*/
|
||||
|
||||
int
|
||||
config_set_value (char *option_name, char *value)
|
||||
t_config_option *
|
||||
config_option_search (char *option_name)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
@@ -592,14 +707,33 @@ config_set_value (char *option_name, char *value)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
/* if option found, assign value and exit */
|
||||
/* if option found, return pointer */
|
||||
if (strcasecmp (weechat_options[i][j].option_name, option_name) == 0)
|
||||
return config_option_set_value (&weechat_options[i][j], value);
|
||||
return &weechat_options[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
/* option not found */
|
||||
return -2;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_set_value: set new value for an option (found by name)
|
||||
* return: 0 if success
|
||||
* -1 if bad value for option
|
||||
* -2 if option is not found
|
||||
*/
|
||||
|
||||
int
|
||||
config_set_value (char *option_name, char *value)
|
||||
{
|
||||
t_config_option *ptr_option;
|
||||
|
||||
ptr_option = config_option_search (option_name);
|
||||
if (ptr_option)
|
||||
return config_option_set_value (ptr_option, value);
|
||||
else
|
||||
return -2;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -634,7 +768,7 @@ config_allocate_server (char *filename, int line_number)
|
||||
return 0;
|
||||
}
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.autoconnect, 0, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname,
|
||||
cfg_server.command, cfg_server.autojoin))
|
||||
@@ -714,15 +848,20 @@ config_default_values ()
|
||||
int
|
||||
config_read ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
FILE *file;
|
||||
int section, line_number, i, option_number;
|
||||
int server_found;
|
||||
char line[1024], *ptr_line, *pos, *pos2;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
if ((file = fopen (filename, "rt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s config file \"%s\" not found.\n"),
|
||||
@@ -899,21 +1038,6 @@ config_read ()
|
||||
}
|
||||
}
|
||||
|
||||
/* set default colors for colors not set */
|
||||
/*for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if (i != CONFIG_SECTION_SERVER)
|
||||
{
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
if ((weechat_options[i][j].option_type == OPTION_TYPE_COLOR) &&
|
||||
(*weechat_options[i][j].ptr_int == COLOR_NOT_SET))
|
||||
*weechat_options[i][j].ptr_int =
|
||||
gui_get_color_by_name (weechat_options[i][j].default_string);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
|
||||
@@ -930,15 +1054,21 @@ config_read ()
|
||||
int
|
||||
config_create_default ()
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
char line[1024];
|
||||
FILE *file;
|
||||
int i, j;
|
||||
time_t current_time;
|
||||
struct passwd *my_passwd;
|
||||
char *realname, *pos;
|
||||
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
|
||||
@@ -948,99 +1078,128 @@ config_create_default ()
|
||||
}
|
||||
|
||||
printf (_("%s: creating default config file...\n"), PACKAGE_NAME);
|
||||
log_printf (_("creating default config file\n"));
|
||||
wee_log_printf (_("creating default config file\n"));
|
||||
|
||||
current_time = time (NULL);
|
||||
sprintf (line, _("#\n# %s configuration file, created by "
|
||||
fprintf (file, _("#\n# %s configuration file, created by "
|
||||
"%s v%s on %s#\n"),
|
||||
PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
|
||||
ctime (¤t_time));
|
||||
fputs (line, file);
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
sprintf (line, "\n[%s]\n", config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
fprintf (file, "\n[%s]\n", config_sections[i].section_name);
|
||||
if ((i == CONFIG_SECTION_HISTORY) || (i == CONFIG_SECTION_LOG) ||
|
||||
(i == CONFIG_SECTION_DCC) || (i == CONFIG_SECTION_PROXY))
|
||||
{
|
||||
sprintf (line,
|
||||
fprintf (file,
|
||||
"# WARNING!!! Options for section \"%s\" are not developed!\n",
|
||||
config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
}
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].default_int) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
sprintf (line, "%s=%d\n",
|
||||
fprintf (file, "%s=%d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
case OPTION_TYPE_COLOR:
|
||||
case OPTION_TYPE_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
}
|
||||
fputs (line, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* default aliases */
|
||||
/* TODO: remove comments when missing commands will be ok */
|
||||
fputs ("\n[alias]\n", file);
|
||||
fputs ("SAY=msg *\n", file);
|
||||
fputs ("BYE=quit\n", file);
|
||||
fputs ("EXIT=quit\n", file);
|
||||
fputs ("SIGNOFF=quit\n", file);
|
||||
fputs ("C=clear\n", file);
|
||||
fputs ("CL=clear\n", file);
|
||||
fputs ("# CHAT=dcc chat\n", file);
|
||||
fputs ("# GET=dcc get\n", file);
|
||||
fputs ("# IG=ignore\n", file);
|
||||
fputs ("J=join\n", file);
|
||||
fputs ("K=kick\n", file);
|
||||
fputs ("# KB=kickban\n", file);
|
||||
fputs ("# KN=knockout\n", file);
|
||||
fputs ("LEAVE=part\n", file);
|
||||
fputs ("M=msg\n", file);
|
||||
fputs ("# MUB=unban *\n", file);
|
||||
fputs ("N=names\n", file);
|
||||
fputs ("T=topic\n", file);
|
||||
fputs ("# UB=unban\n", file);
|
||||
fputs ("# UNIG=unignore\n", file);
|
||||
fputs ("# W=who\n", file);
|
||||
fputs ("WC=part\n", file);
|
||||
fputs ("WI=whois\n", file);
|
||||
fputs ("# WW=whowas\n", file);
|
||||
fprintf (file, "\n[alias]\n");
|
||||
fprintf (file, "SAY=msg *\n");
|
||||
fprintf (file, "BYE=quit\n");
|
||||
fprintf (file, "EXIT=quit\n");
|
||||
fprintf (file, "SIGNOFF=quit\n");
|
||||
fprintf (file, "C=clear\n");
|
||||
fprintf (file, "CL=clear\n");
|
||||
fprintf (file, "# CHAT=dcc chat\n");
|
||||
fprintf (file, "# GET=dcc get\n");
|
||||
fprintf (file, "# IG=ignore\n");
|
||||
fprintf (file, "J=join\n");
|
||||
fprintf (file, "K=kick\n");
|
||||
fprintf (file, "# KB=kickban\n");
|
||||
fprintf (file, "# KN=knockout\n");
|
||||
fprintf (file, "LEAVE=part\n");
|
||||
fprintf (file, "M=msg\n");
|
||||
fprintf (file, "# MUB=unban *\n");
|
||||
fprintf (file, "N=names\n");
|
||||
fprintf (file, "T=topic\n");
|
||||
fprintf (file, "# UB=unban\n");
|
||||
fprintf (file, "# UNIG=unignore\n");
|
||||
fprintf (file, "W=who\n");
|
||||
fprintf (file, "WC=part\n");
|
||||
fprintf (file, "WI=whois\n");
|
||||
fprintf (file, "WW=whowas\n");
|
||||
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
fputs ("server_name=freenode\n", file);
|
||||
fputs ("server_autoconnect=on\n", file);
|
||||
fputs ("server_address=irc.freenode.net\n", file);
|
||||
fputs ("server_port=6667\n", file);
|
||||
fputs ("server_password=\n", file);
|
||||
fputs ("server_nick1=weechat_user\n", file);
|
||||
fputs ("server_nick2=weechat2\n", file);
|
||||
fputs ("server_nick3=weechat3\n", file);
|
||||
fputs ("server_username=weechat\n", file);
|
||||
fputs ("server_realname=WeeChat default realname\n", file);
|
||||
fputs ("server_command=\n", file);
|
||||
fputs ("server_autojoin=\n", file);
|
||||
fprintf (file, "\n[server]\n");
|
||||
fprintf (file, "server_name=freenode\n");
|
||||
fprintf (file, "server_autoconnect=on\n");
|
||||
fprintf (file, "server_address=irc.freenode.net\n");
|
||||
fprintf (file, "server_port=6667\n");
|
||||
fprintf (file, "server_password=\n");
|
||||
|
||||
/* Get the user's name from /etc/passwd */
|
||||
if ((my_passwd = getpwuid (geteuid ())) != NULL)
|
||||
{
|
||||
fprintf (file, "server_nick1=%s\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_nick2=%s1\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_nick3=%s2\n", my_passwd->pw_name);
|
||||
fprintf (file, "server_username=%s\n", my_passwd->pw_name);
|
||||
if ((!my_passwd->pw_gecos)
|
||||
|| (my_passwd->pw_gecos[0] == '\0')
|
||||
|| (my_passwd->pw_gecos[0] == ',')
|
||||
|| (my_passwd->pw_gecos[0] == ' '))
|
||||
fprintf (file, "server_realname=%s\n", my_passwd->pw_name);
|
||||
else
|
||||
{
|
||||
realname = strdup (my_passwd->pw_gecos);
|
||||
pos = strchr (realname, ',');
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
fprintf (file, "server_realname=%s\n",
|
||||
realname);
|
||||
if (pos)
|
||||
pos[0] = ',';
|
||||
free (realname);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* default values if /etc/passwd can't be read */
|
||||
fprintf (stderr, "%s: %s (%s).",
|
||||
WEECHAT_WARNING,
|
||||
_("Unable to get user's name"),
|
||||
strerror (errno));
|
||||
fprintf (file, "server_nick1=weechat1\n");
|
||||
fprintf (file, "server_nick2=weechat2\n");
|
||||
fprintf (file, "server_nick3=weechat3\n");
|
||||
fprintf (file, "server_username=weechat\n");
|
||||
fprintf (file, "server_realname=WeeChat default realname\n");
|
||||
}
|
||||
|
||||
fprintf (file, "server_command=\n");
|
||||
fprintf (file, "server_autojoin=\n");
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
@@ -1056,8 +1215,8 @@ config_create_default ()
|
||||
int
|
||||
config_write (char *config_name)
|
||||
{
|
||||
int filename_length;
|
||||
char *filename;
|
||||
char line[1024];
|
||||
FILE *file;
|
||||
int i, j;
|
||||
time_t current_time;
|
||||
@@ -1068,9 +1227,13 @@ config_write (char *config_name)
|
||||
filename = strdup (config_name);
|
||||
else
|
||||
{
|
||||
filename_length = strlen (weechat_home) + 64;
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc (filename_length * sizeof (char));
|
||||
if (!filename)
|
||||
return -2;
|
||||
snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
|
||||
weechat_home, DIR_SEPARATOR);
|
||||
}
|
||||
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
@@ -1081,118 +1244,101 @@ config_write (char *config_name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
log_printf (_("saving config to disk\n"));
|
||||
wee_log_printf (_("saving config to disk\n"));
|
||||
|
||||
current_time = time (NULL);
|
||||
sprintf (line, _("#\n# %s configuration file, created by "
|
||||
fprintf (file, _("#\n# %s configuration file, created by "
|
||||
"%s v%s on %s#\n"),
|
||||
PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
|
||||
ctime (¤t_time));
|
||||
fputs (line, file);
|
||||
|
||||
for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
|
||||
{
|
||||
if ((i != CONFIG_SECTION_ALIAS) && (i != CONFIG_SECTION_SERVER))
|
||||
{
|
||||
sprintf (line, "\n[%s]\n", config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
fprintf (file, "\n[%s]\n", config_sections[i].section_name);
|
||||
if ((i == CONFIG_SECTION_HISTORY) || (i == CONFIG_SECTION_LOG) ||
|
||||
(i == CONFIG_SECTION_DCC) || (i == CONFIG_SECTION_PROXY))
|
||||
{
|
||||
sprintf (line,
|
||||
fprintf (file,
|
||||
"# WARNING!!! Options for section \"%s\" are not developed!\n",
|
||||
config_sections[i].section_name);
|
||||
fputs (line, file);
|
||||
}
|
||||
for (j = 0; weechat_options[i][j].option_name; j++)
|
||||
{
|
||||
switch (weechat_options[i][j].option_type)
|
||||
{
|
||||
case OPTION_TYPE_BOOLEAN:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int &&
|
||||
*weechat_options[i][j].ptr_int) ?
|
||||
"on" : "off");
|
||||
break;
|
||||
case OPTION_TYPE_INT:
|
||||
sprintf (line, "%s=%d\n",
|
||||
fprintf (file, "%s=%d\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
*weechat_options[i][j].ptr_int :
|
||||
weechat_options[i][j].default_int);
|
||||
break;
|
||||
case OPTION_TYPE_INT_WITH_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int] :
|
||||
weechat_options[i][j].array_values[weechat_options[i][j].default_int]);
|
||||
break;
|
||||
case OPTION_TYPE_COLOR:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_int) ?
|
||||
gui_get_color_by_value (*weechat_options[i][j].ptr_int) :
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
case OPTION_TYPE_STRING:
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
weechat_options[i][j].option_name,
|
||||
(weechat_options[i][j].ptr_string) ?
|
||||
*weechat_options[i][j].ptr_string :
|
||||
weechat_options[i][j].default_string);
|
||||
break;
|
||||
}
|
||||
fputs (line, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* alias section */
|
||||
fputs ("\n[alias]\n", file);
|
||||
fprintf (file, "\n[alias]\n");
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
sprintf (line, "%s=%s\n",
|
||||
fprintf (file, "%s=%s\n",
|
||||
ptr_alias->alias_name, ptr_alias->alias_command + 1);
|
||||
fputs (line, file);
|
||||
}
|
||||
|
||||
/* server section */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
sprintf (line, "server_name=%s\n", ptr_server->name);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autoconnect=%s\n",
|
||||
(ptr_server->autoconnect) ? "on" : "off");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_address=%s\n", ptr_server->address);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_port=%d\n", ptr_server->port);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_password=%s\n",
|
||||
(ptr_server->password) ? ptr_server->password : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick1=%s\n", ptr_server->nick1);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick2=%s\n", ptr_server->nick2);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_nick3=%s\n", ptr_server->nick3);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_username=%s\n", ptr_server->username);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_realname=%s\n", ptr_server->realname);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
fputs (line, file);
|
||||
if (!ptr_server->command_line)
|
||||
{
|
||||
fprintf (file, "\n[server]\n");
|
||||
fprintf (file, "server_name=%s\n", ptr_server->name);
|
||||
fprintf (file, "server_autoconnect=%s\n",
|
||||
(ptr_server->autoconnect) ? "on" : "off");
|
||||
fprintf (file, "server_address=%s\n", ptr_server->address);
|
||||
fprintf (file, "server_port=%d\n", ptr_server->port);
|
||||
fprintf (file, "server_password=%s\n",
|
||||
(ptr_server->password) ? ptr_server->password : "");
|
||||
fprintf (file, "server_nick1=%s\n", ptr_server->nick1);
|
||||
fprintf (file, "server_nick2=%s\n", ptr_server->nick2);
|
||||
fprintf (file, "server_nick3=%s\n", ptr_server->nick3);
|
||||
fprintf (file, "server_username=%s\n", ptr_server->username);
|
||||
fprintf (file, "server_realname=%s\n", ptr_server->realname);
|
||||
fprintf (file, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fprintf (file, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
}
|
||||
}
|
||||
|
||||
fclose (file);
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -72,7 +70,7 @@ struct t_config_option
|
||||
char **array_values;
|
||||
int *ptr_int;
|
||||
char **ptr_string;
|
||||
int (*handler_change)(int *, char **);
|
||||
void (*handler_change)();
|
||||
};
|
||||
|
||||
extern int cfg_look_set_title;
|
||||
@@ -90,6 +88,9 @@ extern int cfg_look_nickmode;
|
||||
extern int cfg_look_nickmode_empty;
|
||||
extern char *cfg_look_no_nickname;
|
||||
extern char *cfg_look_completor;
|
||||
extern int cfg_look_infobar;
|
||||
extern char *cfg_look_infobar_timestamp;
|
||||
extern int cfg_look_infobar_delay_highlight;
|
||||
|
||||
extern int cfg_col_title;
|
||||
extern int cfg_col_title_bg;
|
||||
@@ -102,6 +103,7 @@ extern int cfg_col_chat_nick;
|
||||
extern int cfg_col_chat_host;
|
||||
extern int cfg_col_chat_channel;
|
||||
extern int cfg_col_chat_dark;
|
||||
extern int cfg_col_chat_highlight;
|
||||
extern int cfg_col_chat_bg;
|
||||
extern int cfg_col_status;
|
||||
extern int cfg_col_status_active;
|
||||
@@ -109,6 +111,9 @@ extern int cfg_col_status_data_msg;
|
||||
extern int cfg_col_status_data_other;
|
||||
extern int cfg_col_status_more;
|
||||
extern int cfg_col_status_bg;
|
||||
extern int cfg_col_infobar;
|
||||
extern int cfg_col_infobar_highlight;
|
||||
extern int cfg_col_infobar_bg;
|
||||
extern int cfg_col_input;
|
||||
extern int cfg_col_input_channel;
|
||||
extern int cfg_col_input_nick;
|
||||
@@ -150,8 +155,17 @@ extern char *cfg_proxy_password;
|
||||
extern t_config_section config_sections [CONFIG_NUMBER_SECTIONS];
|
||||
extern t_config_option * weechat_options [CONFIG_NUMBER_SECTIONS];
|
||||
|
||||
extern char *config_get_section ();
|
||||
extern void config_change_noop ();
|
||||
extern void config_change_title ();
|
||||
extern void config_change_windows ();
|
||||
extern void config_change_window_content ();
|
||||
extern void config_change_color ();
|
||||
extern int config_option_set_value (t_config_option *, char *);
|
||||
extern t_config_option *config_option_search (char *);
|
||||
extern int config_set_value (char *, char *);
|
||||
extern int config_read ();
|
||||
extern int config_create_default ();
|
||||
extern int config_write ();
|
||||
|
||||
#endif /* config.h */
|
||||
#endif /* weeconfig.h */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,11 +15,14 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\"
|
||||
|
||||
bin_PROGRAMS = weechat-curses
|
||||
|
||||
weechat_curses_LDADD = ../../common/lib_weechat_main.a \
|
||||
../../irc/lib_weechat_irc.a \
|
||||
$(CURSES_LIBS)
|
||||
$(CURSES_LIBS) \
|
||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS)
|
||||
|
||||
weechat_curses_SOURCES = ../gui.h \
|
||||
../gui-common.c \
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -161,7 +159,7 @@ gui_window_set_color (WINDOW *window, int num_color)
|
||||
int
|
||||
gui_window_has_nicklist (t_gui_window *window)
|
||||
{
|
||||
return (window->win_nick != NULL);
|
||||
return ((window->win_nick != NULL) ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +182,7 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
|
||||
/* init chat & nicklist settings */
|
||||
/* TODO: calculate values from function parameters */
|
||||
if (WIN_IS_CHANNEL(window))
|
||||
if (cfg_look_nicklist && WIN_IS_CHANNEL(window))
|
||||
{
|
||||
max_length = nick_get_max_length (CHANNEL(window));
|
||||
|
||||
@@ -194,21 +192,37 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = max_length + 2;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS - max_length - 2;
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = max_length + 2;
|
||||
window->win_nick_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_chat_height = LINES - 4;
|
||||
window->win_nick_height = LINES - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_height = LINES - 3;
|
||||
}
|
||||
break;
|
||||
case CFG_LOOK_NICKLIST_RIGHT:
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS - max_length - 2;
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_x = COLS - max_length - 2;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = max_length + 2;
|
||||
window->win_nick_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_chat_height = LINES - 4;
|
||||
window->win_nick_height = LINES - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_nick_height = LINES - 3;
|
||||
}
|
||||
break;
|
||||
case CFG_LOOK_NICKLIST_TOP:
|
||||
nick_count (CHANNEL(window), &num_nicks, &num_op, &num_halfop,
|
||||
@@ -220,7 +234,10 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1 + (lines + 1);
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 3 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = 1;
|
||||
window->win_nick_width = COLS;
|
||||
@@ -236,9 +253,15 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 3 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_chat_height = LINES - 3 - (lines + 1);
|
||||
window->win_nick_x = 0;
|
||||
window->win_nick_y = LINES - 2 - (lines + 1);
|
||||
if (cfg_look_infobar)
|
||||
window->win_nick_y = LINES - 2 - (lines + 1) - 1;
|
||||
else
|
||||
window->win_nick_y = LINES - 2 - (lines + 1);
|
||||
window->win_nick_width = COLS;
|
||||
window->win_nick_height = lines + 1;
|
||||
break;
|
||||
@@ -252,7 +275,10 @@ gui_calculate_pos_size (t_gui_window *window)
|
||||
window->win_chat_x = 0;
|
||||
window->win_chat_y = 1;
|
||||
window->win_chat_width = COLS;
|
||||
window->win_chat_height = LINES - 3;
|
||||
if (cfg_look_infobar)
|
||||
window->win_chat_height = LINES - 4;
|
||||
else
|
||||
window->win_chat_height = LINES - 3;
|
||||
window->win_chat_cursor_x = 0;
|
||||
window->win_chat_cursor_y = 0;
|
||||
window->win_nick_x = -1;
|
||||
@@ -271,7 +297,6 @@ gui_curses_window_clear (WINDOW *window)
|
||||
{
|
||||
werase (window);
|
||||
wmove (window, 0, 0);
|
||||
//wrefresh (window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -296,7 +321,7 @@ gui_draw_window_title (t_gui_window *window)
|
||||
}
|
||||
if (CHANNEL(window))
|
||||
{
|
||||
sprintf (format, "%%-%ds", window->win_width);
|
||||
snprintf (format, 32, "%%-%ds", window->win_width);
|
||||
if (CHANNEL(window)->topic)
|
||||
mvwprintw (window->win_title, 0, 0, format,
|
||||
CHANNEL(window)->topic);
|
||||
@@ -365,7 +390,7 @@ gui_display_end_of_line (t_gui_window *window, t_gui_line *line, int count)
|
||||
t_gui_message *ptr_message;
|
||||
char saved_char, format_align[32];
|
||||
|
||||
sprintf (format_align, "%%-%ds", line->length_align);
|
||||
snprintf (format_align, 32, "%%-%ds", line->length_align);
|
||||
num_lines = gui_get_line_num_splits (window, line);
|
||||
ptr_message = line->messages;
|
||||
offset = 0;
|
||||
@@ -445,7 +470,7 @@ gui_display_line (t_gui_window *window, t_gui_line *line, int stop_at_end)
|
||||
t_gui_message *ptr_message;
|
||||
char saved_char, format_align[32];
|
||||
|
||||
sprintf (format_align, "%%-%ds", line->length_align);
|
||||
snprintf (format_align, 32, "%%-%ds", line->length_align);
|
||||
ptr_message = line->messages;
|
||||
offset = 0;
|
||||
while (ptr_message)
|
||||
@@ -640,7 +665,7 @@ gui_draw_window_nick (t_gui_window *window)
|
||||
window->win_nick_x);
|
||||
gui_draw_window_chat (window);
|
||||
}
|
||||
sprintf (format, "%%-%ds", max_length);
|
||||
snprintf (format, 32, "%%-%ds", max_length);
|
||||
|
||||
if (has_colors ())
|
||||
{
|
||||
@@ -777,7 +802,6 @@ gui_draw_window_status (t_gui_window *window)
|
||||
wborder (window->win_status, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_status);
|
||||
}
|
||||
//refresh ();
|
||||
wmove (window->win_status, 0, 0);
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
@@ -864,13 +888,13 @@ gui_draw_window_status (t_gui_window *window)
|
||||
}
|
||||
}
|
||||
|
||||
/* display "*MORE*" if last line is not displayed */
|
||||
/* display "-MORE-" if last line is not displayed */
|
||||
gui_window_set_color (window->win_status, COLOR_WIN_STATUS_MORE);
|
||||
if (window->sub_lines > 0)
|
||||
mvwprintw (window->win_status, 0, COLS - 7, _("-MORE-"));
|
||||
else
|
||||
{
|
||||
sprintf (format_more, "%%-%ds", strlen (_("-MORE-")));
|
||||
snprintf (format_more, 32, "%%-%ds", strlen (_("-MORE-")));
|
||||
mvwprintw (window->win_status, 0, COLS - 7, format_more, " ");
|
||||
}
|
||||
|
||||
@@ -893,6 +917,62 @@ gui_redraw_window_status (t_gui_window *window)
|
||||
gui_draw_window_status (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_infobar: draw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_draw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
time_t time_seconds;
|
||||
struct tm *local_time;
|
||||
char text[1024 + 1];
|
||||
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
if (has_colors ())
|
||||
{
|
||||
gui_window_set_color (window->win_infobar, COLOR_WIN_INFOBAR);
|
||||
wborder (window->win_infobar, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_infobar);
|
||||
}
|
||||
wmove (window->win_infobar, 0, 0);
|
||||
|
||||
time_seconds = time (NULL);
|
||||
local_time = localtime (&time_seconds);
|
||||
if (local_time)
|
||||
{
|
||||
strftime (text, 1024, cfg_look_infobar_timestamp, local_time);
|
||||
gui_window_set_color (window->win_infobar, COLOR_WIN_INFOBAR);
|
||||
wprintw (window->win_infobar, "%s", text);
|
||||
}
|
||||
if (gui_infobar)
|
||||
{
|
||||
gui_window_set_color (window->win_infobar, gui_infobar->color);
|
||||
wprintw (window->win_infobar, " | %s", gui_infobar->text);
|
||||
}
|
||||
|
||||
wrefresh (window->win_infobar);
|
||||
refresh ();
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_redraw_window_infobar: redraw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_redraw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
gui_curses_window_clear (window->win_infobar);
|
||||
gui_draw_window_infobar (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_get_input_width: return input width (max # chars displayed)
|
||||
*/
|
||||
@@ -933,7 +1013,6 @@ gui_draw_window_input (t_gui_window *window)
|
||||
wborder (window->win_input, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
wrefresh (window->win_input);
|
||||
}
|
||||
//refresh ();
|
||||
|
||||
if (window->input_buffer_size == 0)
|
||||
window->input_buffer[0] = '\0';
|
||||
@@ -963,7 +1042,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
}
|
||||
if (CHANNEL(window))
|
||||
{
|
||||
sprintf (format, "%%s %%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
|
||||
mvwprintw (window->win_input, 0, 0, format,
|
||||
CHANNEL(window)->name,
|
||||
SERVER(window)->nick,
|
||||
@@ -977,7 +1056,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
{
|
||||
if (SERVER(window))
|
||||
{
|
||||
sprintf (format, "%%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s> %%-%ds", input_width);
|
||||
if (SERVER(window) && (SERVER(window)->is_connected))
|
||||
ptr_nickname = SERVER(window)->nick;
|
||||
else
|
||||
@@ -991,7 +1070,7 @@ gui_draw_window_input (t_gui_window *window)
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf (format, "%%s> %%-%ds", input_width);
|
||||
snprintf (format, 32, "%%s> %%-%ds", input_width);
|
||||
if (SERVER(window) && (SERVER(window)->is_connected))
|
||||
ptr_nickname = SERVER(window)->nick;
|
||||
else
|
||||
@@ -1040,6 +1119,8 @@ gui_redraw_window (t_gui_window *window)
|
||||
if (window->win_nick)
|
||||
gui_redraw_window_nick (window);
|
||||
gui_redraw_window_status (window);
|
||||
if (cfg_look_infobar)
|
||||
gui_redraw_window_infobar (window);
|
||||
gui_redraw_window_input (window);
|
||||
}
|
||||
|
||||
@@ -1064,13 +1145,18 @@ gui_switch_to_window (t_gui_window *window)
|
||||
window->win_chat = ptr_win->win_chat;
|
||||
window->win_nick = ptr_win->win_nick;
|
||||
window->win_status = ptr_win->win_status;
|
||||
window->win_infobar = ptr_win->win_infobar;
|
||||
window->win_input = ptr_win->win_input;
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
ptr_win->is_displayed = 0;
|
||||
if (ptr_win != window)
|
||||
{
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_infobar = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
ptr_win->is_displayed = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1086,40 +1172,52 @@ gui_switch_to_window (t_gui_window *window)
|
||||
window->win_chat_width,
|
||||
window->win_chat_y,
|
||||
window->win_chat_x);
|
||||
if (CHANNEL(window))
|
||||
if (cfg_look_nicklist && CHANNEL(window))
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
else
|
||||
window->win_nick = NULL;
|
||||
window->win_status = newwin (1, COLS, LINES - 2, 0);
|
||||
window->win_input = newwin (1, COLS, LINES - 1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* create chat & nick windows */
|
||||
/* remove some windows */
|
||||
if (window->win_nick)
|
||||
{
|
||||
delwin (window->win_nick);
|
||||
window->win_nick = NULL;
|
||||
}
|
||||
if (window->win_status)
|
||||
{
|
||||
delwin (window->win_status);
|
||||
window->win_status = NULL;
|
||||
}
|
||||
if (window->win_infobar)
|
||||
{
|
||||
delwin (window->win_infobar);
|
||||
window->win_infobar = NULL;
|
||||
}
|
||||
|
||||
/* create windows */
|
||||
if (WIN_IS_CHANNEL(window))
|
||||
{
|
||||
/* (re)create nicklist window */
|
||||
if (window->win_nick)
|
||||
delwin (window->win_nick);
|
||||
delwin (window->win_chat);
|
||||
window->win_chat = newwin (window->win_chat_height,
|
||||
window->win_chat_width,
|
||||
window->win_chat_y,
|
||||
window->win_chat_x);
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
if (cfg_look_nicklist)
|
||||
window->win_nick = newwin (window->win_nick_height,
|
||||
window->win_nick_width,
|
||||
window->win_nick_y,
|
||||
window->win_nick_x);
|
||||
else
|
||||
window->win_nick = NULL;
|
||||
}
|
||||
if (!(WIN_IS_CHANNEL(window)))
|
||||
{
|
||||
/* remove nick list window */
|
||||
if (window->win_nick)
|
||||
delwin (window->win_nick);
|
||||
window->win_nick = NULL;
|
||||
delwin (window->win_chat);
|
||||
window->win_chat = newwin (window->win_chat_height,
|
||||
window->win_chat_width,
|
||||
@@ -1128,6 +1226,15 @@ gui_switch_to_window (t_gui_window *window)
|
||||
}
|
||||
}
|
||||
|
||||
/* create status/infobar windows */
|
||||
if (cfg_look_infobar)
|
||||
{
|
||||
window->win_infobar = newwin (1, COLS, LINES - 2, 0);
|
||||
window->win_status = newwin (1, COLS, LINES - 3, 0);
|
||||
}
|
||||
else
|
||||
window->win_status = newwin (1, COLS, LINES - 2, 0);
|
||||
|
||||
/* change current window to the new window */
|
||||
gui_current_window = window;
|
||||
|
||||
@@ -1234,12 +1341,15 @@ gui_curses_resize_handler ()
|
||||
delwin (ptr_win->win_nick);
|
||||
if (ptr_win->win_status)
|
||||
delwin (ptr_win->win_status);
|
||||
if (ptr_win->win_infobar)
|
||||
delwin (ptr_win->win_infobar);
|
||||
if (ptr_win->win_input)
|
||||
delwin (ptr_win->win_input);
|
||||
ptr_win->win_title = NULL;
|
||||
ptr_win->win_chat = NULL;
|
||||
ptr_win->win_nick = NULL;
|
||||
ptr_win->win_status = NULL;
|
||||
ptr_win->win_infobar = NULL;
|
||||
ptr_win->win_input = NULL;
|
||||
gui_switch_to_window (ptr_win);
|
||||
}
|
||||
@@ -1257,6 +1367,7 @@ gui_window_init_subwindows (t_gui_window *window)
|
||||
window->win_chat = NULL;
|
||||
window->win_nick = NULL;
|
||||
window->win_status = NULL;
|
||||
window->win_infobar = NULL;
|
||||
window->win_input = NULL;
|
||||
}
|
||||
|
||||
@@ -1306,6 +1417,8 @@ gui_init_colors ()
|
||||
cfg_col_chat_channel & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_CHAT_DARK,
|
||||
cfg_col_chat_dark & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_CHAT_HIGHLIGHT,
|
||||
cfg_col_chat_highlight & A_CHARTEXT, cfg_col_chat_bg);
|
||||
init_pair (COLOR_WIN_STATUS,
|
||||
cfg_col_status & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_STATUS_ACTIVE,
|
||||
@@ -1316,6 +1429,10 @@ gui_init_colors ()
|
||||
cfg_col_status_data_other & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_STATUS_MORE,
|
||||
cfg_col_status_more & A_CHARTEXT, cfg_col_status_bg);
|
||||
init_pair (COLOR_WIN_INFOBAR,
|
||||
cfg_col_infobar & A_CHARTEXT, cfg_col_infobar_bg);
|
||||
init_pair (COLOR_WIN_INFOBAR_HIGHLIGHT,
|
||||
cfg_col_infobar_highlight & A_CHARTEXT, cfg_col_infobar_bg);
|
||||
init_pair (COLOR_WIN_INPUT,
|
||||
cfg_col_input & A_CHARTEXT, cfg_col_input_bg);
|
||||
init_pair (COLOR_WIN_INPUT_CHANNEL,
|
||||
@@ -1356,11 +1473,14 @@ gui_init_colors ()
|
||||
color_attr[COLOR_WIN_CHAT_HOST - 1] = cfg_col_chat_host & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_CHANNEL - 1] = cfg_col_chat_channel & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_DARK - 1] = cfg_col_chat_dark & A_BOLD;
|
||||
color_attr[COLOR_WIN_CHAT_HIGHLIGHT - 1] = cfg_col_chat_highlight & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS - 1] = cfg_col_status & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_ACTIVE - 1] = cfg_col_status_active & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_DATA_MSG - 1] = cfg_col_status_data_msg & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_DATA_OTHER - 1] = cfg_col_status_data_other & A_BOLD;
|
||||
color_attr[COLOR_WIN_STATUS_MORE - 1] = cfg_col_status_more & A_BOLD;
|
||||
color_attr[COLOR_WIN_INFOBAR - 1] = cfg_col_infobar & A_BOLD;
|
||||
color_attr[COLOR_WIN_INFOBAR_HIGHLIGHT - 1] = cfg_col_infobar_highlight & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT - 1] = cfg_col_input & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT_CHANNEL - 1] = cfg_col_input_channel & A_BOLD;
|
||||
color_attr[COLOR_WIN_INPUT_NICK - 1] = cfg_col_input_nick & A_BOLD;
|
||||
@@ -1374,6 +1494,20 @@ gui_init_colors ()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_set_window_title: set terminal title
|
||||
*/
|
||||
|
||||
void
|
||||
gui_set_window_title ()
|
||||
{
|
||||
#ifdef __linux__
|
||||
/* set title for term window, not for console */
|
||||
if (strcmp (getenv ("TERM"), "linux") != 0)
|
||||
printf ("\e]2;" PACKAGE_NAME " " PACKAGE_VERSION "\a\e]1;" PACKAGE_NAME " " PACKAGE_VERSION "\a");
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_init: init GUI
|
||||
*/
|
||||
@@ -1391,16 +1525,15 @@ gui_init ()
|
||||
|
||||
gui_init_colors ();
|
||||
|
||||
gui_infobar = NULL;
|
||||
|
||||
/* create a new window */
|
||||
gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
|
||||
gui_current_window = gui_window_new (NULL, NULL, 1 /*0, 0, COLS, LINES*/);
|
||||
|
||||
signal (SIGWINCH, gui_curses_resize_handler);
|
||||
|
||||
#ifdef __linux__
|
||||
/* set title for term window, not for console */
|
||||
if (cfg_look_set_title && (strcmp (getenv ("TERM"), "linux") != 0))
|
||||
printf ("\e]2;" PACKAGE_NAME " " PACKAGE_VERSION "\a\e]1;" PACKAGE_NAME " " PACKAGE_VERSION "\a");
|
||||
#endif
|
||||
if (cfg_look_set_title)
|
||||
gui_set_window_title ();
|
||||
|
||||
gui_ready = 1;
|
||||
}
|
||||
@@ -1425,6 +1558,8 @@ gui_end ()
|
||||
delwin (ptr_win->win_nick);
|
||||
if (ptr_win->win_status)
|
||||
delwin (ptr_win->win_status);
|
||||
if (ptr_win->win_infobar)
|
||||
delwin (ptr_win->win_infobar);
|
||||
if (ptr_win->win_input)
|
||||
delwin (ptr_win->win_input);
|
||||
/* TODO: free input buffer, lines, messages, completion */
|
||||
@@ -1519,7 +1654,7 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
|
||||
if (window == NULL)
|
||||
{
|
||||
log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
wee_log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1540,13 +1675,13 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
if ((!window->last_line) || (window->line_complete))
|
||||
{
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "[");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_hour);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_hour);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME_SEP, ":");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_min);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_min);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME_SEP, ":");
|
||||
sprintf (timestamp, "%02d", date_tmp->tm_sec);
|
||||
snprintf (timestamp, 16, "%02d", date_tmp->tm_sec);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
|
||||
gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "] ");
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -59,10 +57,11 @@ gui_read_keyb ()
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
/* resize event: do nothing */
|
||||
/* resize event */
|
||||
case KEY_RESIZE:
|
||||
gui_redraw_window (gui_current_window);
|
||||
break;
|
||||
/* previous window */
|
||||
case KEY_F(6):
|
||||
gui_switch_to_previous_window ();
|
||||
break;
|
||||
@@ -70,6 +69,10 @@ gui_read_keyb ()
|
||||
case KEY_F(7):
|
||||
gui_switch_to_next_window ();
|
||||
break;
|
||||
/* remove last infobar message */
|
||||
case KEY_F(10):
|
||||
gui_infobar_remove ();
|
||||
break;
|
||||
/* cursor up */
|
||||
case KEY_UP:
|
||||
if (gui_current_window->ptr_history)
|
||||
@@ -354,10 +357,38 @@ gui_main_loop ()
|
||||
fd_set read_fd;
|
||||
static struct timeval timeout;
|
||||
t_irc_server *ptr_server;
|
||||
int old_min, old_sec;
|
||||
time_t new_time;
|
||||
struct tm *local_time;
|
||||
|
||||
quit_weechat = 0;
|
||||
old_min = -1;
|
||||
old_sec = -1;
|
||||
while (!quit_weechat)
|
||||
{
|
||||
new_time = time (NULL);
|
||||
local_time = localtime (&new_time);
|
||||
|
||||
/* minute has changed ? => redraw infobar */
|
||||
if (local_time->tm_min != old_min)
|
||||
{
|
||||
old_min = local_time->tm_min;
|
||||
gui_redraw_window_infobar (gui_current_window);
|
||||
}
|
||||
|
||||
/* second has changed ? => count down time for infobar, if needed */
|
||||
if (local_time->tm_sec != old_sec)
|
||||
{
|
||||
old_sec = local_time->tm_sec;
|
||||
/* TODO: manage splitted windows! */
|
||||
if (gui_infobar && gui_infobar->remaining_time > 0)
|
||||
{
|
||||
gui_infobar->remaining_time--;
|
||||
if (gui_infobar->remaining_time == 0)
|
||||
gui_infobar_remove ();
|
||||
}
|
||||
}
|
||||
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 10000;
|
||||
FD_ZERO (&read_fd);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2003 FlashCode <flashcode@flashtux.org>
|
||||
# Copyright (c) 2004 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
|
||||
@@ -15,13 +15,14 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
bin_PROGRAMS = weechat-gtk
|
||||
INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" $(GTK_CFLAGS)
|
||||
|
||||
INCLUDES = $(GTK_CFLAGS)
|
||||
bin_PROGRAMS = weechat-gtk
|
||||
|
||||
weechat_gtk_LDADD = ../../common/lib_weechat_main.a \
|
||||
../../irc/lib_weechat_irc.a \
|
||||
$(GTK_LIBS)
|
||||
$(GTK_LIBS) \
|
||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS)
|
||||
|
||||
weechat_gtk_SOURCES = ../gui.h \
|
||||
../gui-common.c \
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003 by FlashCode <flashcode@flashtux.org>
|
||||
* Bounga <bounga@altern.org>
|
||||
* Xahlexx <xahlexx@tuxisland.org>
|
||||
* See README for License detail.
|
||||
* Copyright (c) 2004 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* 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
|
||||
@@ -351,6 +349,35 @@ gui_redraw_window_status (t_gui_window *window)
|
||||
gui_draw_window_status (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_infobar: draw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_draw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
/* TODO: draw infobar window! */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_redraw_window_infobar: redraw infobar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_redraw_window_infobar (t_gui_window *window)
|
||||
{
|
||||
/* TODO: manage splitted windows! */
|
||||
if (window != gui_current_window)
|
||||
return;
|
||||
|
||||
/* TODO: first delete window content */
|
||||
gui_draw_window_infobar (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_draw_window_input: draw input window
|
||||
*/
|
||||
@@ -572,6 +599,16 @@ gui_init_colors ()
|
||||
/* TODO: init colors for Gtk */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_set_window_title: set window title
|
||||
*/
|
||||
|
||||
void
|
||||
gui_set_window_title ()
|
||||
{
|
||||
/* TODO: set window title for Gtk */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_init: init GUI
|
||||
*/
|
||||
@@ -625,7 +662,7 @@ gui_init ()
|
||||
gtk_widget_show_all (gtk_main_window);
|
||||
|
||||
/* create a new window */
|
||||
gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
|
||||
gui_current_window = gui_window_new (NULL, NULL, 1 /*0, 0, COLS, LINES*/);
|
||||
|
||||
/* TODO: set gui_ready to 1 when Gtk display functions will be ok */
|
||||
gui_ready = 1;
|
||||
@@ -710,7 +747,7 @@ gui_printf_color_type (t_gui_window *window, int type, int color, char *message,
|
||||
|
||||
if (window == NULL)
|
||||
{
|
||||
log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
wee_log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user