1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-20 18:14:46 +02:00

Compare commits

...

85 Commits

Author SHA1 Message Date
Sebastien Helleu fc95f86528 v0.0.6 doc 2004-06-05 10:59:14 +00:00
Sebastien Helleu d7287a71e5 Version 0.0.6 2004-06-05 09:20:35 +00:00
Sebastien Helleu b861403369 Updated FAQ, added french FAQ 2004-05-31 21:13:55 +00:00
Sebastien Helleu d8a790e8eb New license for doc (FDL => GPL) 2004-05-31 16:26:45 +00:00
Sebastien Helleu 9211a67fb4 Improved channel highlight (priority to message vs join/part) 2004-05-31 15:16:34 +00:00
Sebastien Helleu d0babb2896 Fixed bug in /away command 2004-05-31 15:14:06 +00:00
Sebastien Helleu ad345c0bce Added WeeChat forum URL. 2004-05-13 15:58:04 +00:00
Sebastien Helleu 3b7b459522 Updated TODO 2004-04-25 10:46:33 +00:00
Sebastien Helleu a99e6f3d95 Fixed bug when a user changes nick (do not change private window name if nick is not the same) 2004-04-19 21:53:12 +00:00
Sebastien Helleu 35d6c43f85 Fixed bug when opened private win and remote user changes his nick 2004-03-27 15:09:36 +00:00
Sebastien Helleu db235b23fa /query command added, IRC messages 476, 477 now displayed 2004-03-20 11:19:00 +00:00
Sebastien Helleu a4ed5069c1 Fixed IRC channel for support 2004-03-07 19:04:18 +00:00
Sebastien Helleu 0bd38072f2 Display channel modes when joining channel that already exists (i.e. with modes already set) 2004-02-29 21:16:22 +00:00
Sebastien Helleu 81da0f41d7 Added modes channel (and /mode command is now ok), dcc skeleton, fixed display bug for nicklist 2004-02-29 16:31:26 +00:00
Sebastien Helleu 070e1b6ec7 Fixed display bug (text was blinking when scrolling) 2004-02-24 23:29:58 +00:00
Sebastien Helleu 4e86ff9682 CTCP Version reply is now in english only and doesn't show host (security reason) 2004-02-21 13:26:28 +00:00
Sebastien Helleu 867b881bac Version 0.0.6-pre1 2004-02-07 21:25:53 +00:00
Sebastien Helleu 2c31a11aeb Version 0.0.5 2004-02-07 19:35:26 +00:00
Sebastien Helleu 1d2a83b055 Version 0.0.5 2004-02-07 19:22:53 +00:00
Sebastien Helleu 915ea408f0 Updated doc 2004-01-25 14:13:42 +00:00
Sebastien Helleu c9a469f51b Channel can be specified at the end of command line URL with /channel 2004-01-24 21:53:22 +00:00
Sebastien Helleu 69cb87251e /set command is now ok 2004-01-24 20:17:01 +00:00
Sebastien Helleu 8bcbc3dcae Secured code to prevent buffer overflows and memory leaks 2004-01-24 12:59:57 +00:00
Sebastien Helleu dcb3b6fc7e Secured code to prevent buffer overflows and memory leaks 2004-01-24 02:22:16 +00:00
Sebastien Helleu 16717f8322 Fixed memory leak in exec_weechat_command() 2004-01-23 19:44:59 +00:00
Sebastien Helleu dc38b59849 Infobar highlight notifications 2004-01-21 18:40:13 +00:00
Sebastien Helleu 7d91cdcbb3 Updated bugs 2004-01-21 15:57:20 +00:00
Sebastien Helleu 885fe7434f Fixed QUIT command: now sent to all connected servers (not only current) 2004-01-21 15:55:25 +00:00
Sebastien Helleu 84677f2835 Added IRC::print_infobar Perl function 2004-01-21 15:29:43 +00:00
Sebastien Helleu c20a3fdfa4 Added look_infobar_timestamp config option 2004-01-19 23:16:07 +00:00
Sebastien Helleu f97a5555ca Removed unused variables 2004-01-19 00:00:43 +00:00
Sebastien Helleu 59bd0b825d Fixed minor typo 2004-01-19 00:00:13 +00:00
Sebastien Helleu 38bf163c17 Servers allowed on command line (irc://nick:passwd@irc.example.org:port) 2004-01-18 23:53:34 +00:00
Sebastien Helleu 09a36a5d8e Changed default color for info bar 2004-01-18 19:03:28 +00:00
Sebastien Helleu 10f0236ea9 Added info bar 2004-01-18 18:59:34 +00:00
Sebastien Helleu 6d7afb96c1 Fixed crash with /oper command 2004-01-18 18:58:38 +00:00
Sebastien Helleu 48941e3646 Updated ChangeLog 2004-01-17 10:47:37 +00:00
Sebastien Helleu 72cb070ee4 Fixed bug when un*x realname (in /etc/passwd) is not set 2004-01-17 10:33:11 +00:00
Sebastien Helleu 390a097718 Added check of sys/types.h pwd.h and errno.h 2004-01-17 10:23:01 +00:00
Sebastien Helleu f4733b970a Updated french translations 2004-01-17 10:17:21 +00:00
Sebastien Helleu b80086cfac Nick for default config file is now based on un*x user 2004-01-17 10:15:27 +00:00
Sebastien Helleu 984eaaf826 Updated Changelog 2004-01-15 23:09:18 +00:00
Sebastien Helleu 0dddf86ab7 Fixed crash when config file can not be created 2004-01-15 21:51:55 +00:00
Sebastien Helleu c057937c7b Create plugin directories only if plugin is built when WeeChat is compiled 2004-01-15 21:33:18 +00:00
Sebastien Helleu 938cc50f5e Added LOCALEDIR define 2004-01-15 21:00:27 +00:00
Sebastien Helleu aac1a0a08c Added default values for --config option 2004-01-11 22:54:20 +00:00
Sebastien Helleu b77e441dc4 Added config file options 2004-01-11 22:53:13 +00:00
Sebastien Helleu f9279df092 Added -c (--config) command line parameter to see config file options 2004-01-11 17:45:37 +00:00
Sebastien Helleu d84b1fa58f Added -c (--config) command line parameter to see config file options 2004-01-11 17:29:56 +00:00
Sebastien Helleu 12941227d7 Updated doc for v0.0.4 2004-01-03 10:37:33 +00:00
Sebastien Helleu 25f79c7bba Highlight action messages 2004-01-01 23:14:20 +00:00
Sebastien Helleu ac3f6dfa7b Version 0.0.5-pre1 2004-01-01 23:13:42 +00:00
Sebastien Helleu 65704c6fea Added --enable-perl for ./configure and Perl dependency for Debian package (for building v0.0.4 RPM & Debian packages) 2004-01-01 11:48:46 +00:00
Sebastien Helleu 85c32048cf Modified revision date 2004-01-01 11:22:27 +00:00
Sebastien Helleu ffbc4c0b0c Version 0.0.4 2004-01-01 11:10:22 +00:00
Sebastien Helleu 4e138f3dca Removed Qt sources (not used today) 2004-01-01 10:57:13 +00:00
Sebastien Helleu df66856a28 New copyright 2003-12-31 17:02:57 +00:00
Sebastien Helleu 6950745079 New copyright 2003-12-31 16:56:11 +00:00
Sebastien Helleu 3b6bf81ad6 Updated FAQ. 2003-12-31 16:45:50 +00:00
Sebastien Helleu fd3e94070a When private window is created (another user is talking), WeeChat does not switch to this window 2003-12-31 16:00:20 +00:00
uid67137 0708f1a571 Added highlight (when our nick is written in a channel/private window), added "col_chat_highlight" configuration option 2003-12-26 19:36:52 +00:00
uid67137 3ea696bbc0 Perl scripts auto-load, if no path given, look in ~/.weechat/perl when loading Perl script, auto create plugin directories at startup (~/.weechat/perl, /perl/autoload, /python, /python/autoload, /ruby, /ruby/autoload) 2003-12-26 12:59:31 +00:00
uid67137 57e00428ca Added problem with WeeChat and KDE Konsole 2003-12-24 09:28:49 +00:00
uid67137 555a4191d4 Updated Portuguese doc. 2003-12-23 21:20:02 +00:00
Sebastien Helleu a1f09df80f - added IRC::get_info function for Perl scripts
- cleanup code in main() function of weechat.c
- fixed bug when unloading all Perl scripts (now end and restart Perl interpreter)
2003-11-30 19:18:06 +00:00
Sebastien Helleu c8c5ff3d68 Added "Perl scripts unloaded" message when unloading all Perl scripts 2003-11-30 15:09:04 +00:00
Sebastien Helleu e2e384df49 Added "print_with_channel" function (for Perl scripts) 2003-11-29 16:18:02 +00:00
Sebastien Helleu 507a5c17c0 Added plugin prefix ("=P=") in front of scripts messages 2003-11-29 10:37:37 +00:00
Sebastien Helleu 4f23a3c621 SIGINT signal (Ctrl-C) intercepted, handler does nothing 2003-11-28 23:15:17 +00:00
Sebastien Helleu ba618d3276 Updated TODO 2003-11-23 17:41:13 +00:00
Sebastien Helleu 2f1af3b53e Updated french translation 2003-11-23 17:40:58 +00:00
Sebastien Helleu 10a170bf7d - Perl unloading is now ok (unload all scripts),
- /perl prints all Perl scripts,
- error if registering 2 Perl scripts with same (internal) name.
2003-11-23 17:40:19 +00:00
Sebastien Helleu 7a3ee901a4 Updated doc 2003-11-23 17:29:18 +00:00
Sebastien Helleu e469f0ef48 WeeChat documentation 2003-11-23 13:15:27 +00:00
Sebastien Helleu ba65f5ec30 Renamed PLUGIN_* macros and fixed bug in "IRC::add_message_handler" function 2003-11-22 16:55:56 +00:00
Sebastien Helleu 7779b2f78e Added Perl command handlers 2003-11-22 14:14:30 +00:00
Sebastien Helleu edcc01bcf0 Added Perl message handlers 2003-11-17 21:07:17 +00:00
Sebastien Helleu fe4ca01615 Added Perl handlers 2003-11-16 23:46:48 +00:00
Sebastien Helleu 62fabde373 Removed perl.c 2003-11-16 19:52:43 +00:00
Sebastien Helleu 8758555b19 Updated (Perl interface ok) 2003-11-16 19:47:14 +00:00
Sebastien Helleu d4ec2e46aa Perl plugin support 2003-11-16 19:40:36 +00:00
Sebastien Helleu fd9512bbbc Perl plugin skeleton 2003-11-09 00:08:01 +00:00
Sebastien Helleu 176198fdc6 DEBUG macro moved to config.h 2003-11-09 00:03:57 +00:00
Sebastien Helleu 97d5c9bd0e Fixed display bug in --help and --license options 2003-11-03 22:59:36 +00:00
Sebastien Helleu 13949e2ace Version 0.0.4-pre1 2003-11-03 22:59:16 +00:00
128 changed files with 20190 additions and 8422 deletions
+6 -3
View File
@@ -1,17 +1,20 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
WeeChat known bugs, 2003-11-03
WeeChat known bugs, 2004-06-05
- ./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)
+34 -1
View File
@@ -1,9 +1,42 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2003-11-03
ChangeLog - 2004-06-05
Version 0.0.6 (2004-06-05):
* improved channel highlight (priority to message vs join/part)
* fixed bug when opened private win and remote user changes his nick
* /query command added (starts private conversation)
* IRC messages 476, 477 added
* /mode command is now ok and channel flags are displayed in status bar
* fixed display bug (text was blinking when scrolling)
* CTCP Version reply is now in english only and doesn't show host (security reason)
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)
+120 -97
View File
@@ -1,134 +1,157 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
WeeChat FAQ, 2004-05-31
=======================
WeeChat FAQ, 2003-10-27
Intended audience:
All WeeChat users.
Before reading the following:
the following Q/A list is *not* exhaustive.
It is also possible that you won't find any Q/A that matches your problem.
Please read them anyway, they may provide you help in fixing your problem
anyway.
And even if your problem is listed below, it is possible that the answers don't
help you anymore to solve it. Then, please contact us, we will try to help you
finding a solution.
1 - Compiling
2 - Using WeeChat
3 - Development
1.1
================================================================================
Q: I heard about many GUI for WeeChat. How can I compile/use them?
A: Curses GUI is built by default.
To build Gtk or Qt GUI you've to specify extra options to ./configure script:
--enable-gtk to enable Gtk GUI
--enable-qt to enable Qt QUI
Type ./configure --help to see available options.
WARNING: only Curses GUI is ok today. Other GUI are under development!
1- Compiling
1.2
================================================================================
Q: I can't compile WeeChat CVS.
1.1 I heard about many GUI for WeeChat. How can I compile/use them?
1.2 I can't compile WeeChat CVS.
2- Using WeeChat
2.1 Why using WeeChat ? Irssi and xchat 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?
3- Development
3.1 How should I report bugs?
3.2 How should I submit patches?
3.3 How should I submit new feature request?
3.4 Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows?
3.5 I want to help WeeChat developers. What can I do?
3.6 Can I give money or other things to WeeChat developers?
A: Check that you have latest version of autoconf and automake.
WeeChat has been developed with autoconf version 2.56 and automake
version 1.7.
You should have at least these versions in order to compile WeeChat CVS.
If you can't or don't want to install these versions, you can download and
install "devel package", a package built almost every day, based on CVS.
Note that this package may not correspond exactly to CVS base.
/------------------------------------------------------------------------------\
| 1- Compiling |
\------------------------------------------------------------------------------/
2.1
================================================================================
Q: Why using WeeChat ? X-Chat and Irssi are so good...
A: Because WeeChat is very light and has new features.
Some new features:
* many GUI (Curses, Gtk, Qt),
* extensible with scripts (Perl, Python, Ruby),
* developed from scratch (not based on any other IRC client)
* multi-platform
* 100% GPL and free
This is the "geekest Irc client" ;)
1.1 I heard about many GUI for WeeChat. How can I compile/use them?
2.2
================================================================================
Q: I've launched WeeChat, but I'm lost, what can I do?
Curses GUI is built by default.
To build Gtk or Qt GUI you've to specify extra options to ./configure script:
--enable-gtk to enable gtk GUI
--enable-qt to enable Qt QUI
Type ./configure --help to see available options.
WARNING: only Curses GUI is ok today. Other GUI are under development!
A: For help you can type /help. For help about a command, type /help command.
1.2 I can't compile WeeChat CVS.
2.3
================================================================================
Q: How can I customize key bindings?
Check that you have latest version of autoconf and automake.
WeeChat has been developed with autoconf version 2.56 and automake version 1.7.
You should have at least these versions in order to compile WeeChat CVS.
If you can't or don't want to install these versions, you can download and
install "devel package", a package built almost every day, based on CVS.
Note that this package may not correspond exactly to CVS base.
A: Today you can't do that. This will be available in a future version.
/------------------------------------------------------------------------------\
| 2- Using WeeChat |
\------------------------------------------------------------------------------/
2.4
================================================================================
Q: How can I load Perl scripts?
Are Perl scripts compatible with X-chat or/and Irssi ?
A: You can use /perl command to load 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.1 Why using WeeChat ? Irssi and xchat are so good...
2.5
================================================================================
Q: How can I load Python scripts?
Because WeeChat is very light and has new features.
Some new features:
* many GUI (Curses, Gtk, Qt),
* extensible with scripts (Perl, Python, Ruby),
* developed from scratch (not based on any other IRC client)
* multi-platform
* 100% GPL and free
This is the "geekest Irc client" ;)
A: Today Python interface is not developed, so can't load any Python script.
2.2 I've launched WeeChat, but I'm lost, what can I do?
2.6
================================================================================
Q: How can I load Ruby scripts?
For help you can type /help. For help about a command, type /help command.
A: Today Ruby interface is not developed, so can't load any Ruby script.
2.3 How can I customize key bindings?
3.1
================================================================================
Q: How should I report bugs?
Today you can't do that. This will be available in a future version.
A: There is 3 ways to report bugs:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can submit your bug at this url:
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. you can mail your problem, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
/------------------------------------------------------------------------------\
| 3- Development |
\------------------------------------------------------------------------------/
3.2
================================================================================
Q: How should I submit patches?
A: There is 3 ways to submit patches:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can submit your patch at this url:
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. you can mail your patch, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
3.1 How should I report bugs?
3.3
================================================================================
Q: How should I submit new feature request?
There is 3 ways to report bugs:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can submit your bug at this url:
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. you can mail your problem, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: There is 2 ways to submit your feature request:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can mail your feature request, look at support page for developer's
mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
3.2 How should I submit patches?
3.4
================================================================================
Q: Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows ?
There is 3 ways to submit patches:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can submit your patch at this url:
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. you can mail your patch, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: Yes. Future versions will be available for these OS.
3.3 How should I submit new feature request?
3.5
================================================================================
Q: I want to help WeeChat developers. What can I do?
There is 2 ways to submit your feature request:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can mail your feature request, look at support page for developer's
mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: There's many tasks to do (code, documentation, ...)
Please contact us with IRC or mail, look at support page:
http://weechat.flashtux.org/support.php
3.4 Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows ?
3.6
================================================================================
Q: Can I give money or other things to WeeChat developers?
Yes. Future versions will be available for these OS.
3.5 I want to help WeeChat developers. What can I do?
There's many tasks to do (code, documentation, ...)
Please contact us with IRC or mail, look at support page:
http://weechat.flashtux.org/support.php
3.6 Can I give money or other things to WeeChat developers?
No.
A: No.
+172
View File
@@ -0,0 +1,172 @@
WeeChat FAQ, 2004-05-31
=======================
Public concerné :
Tous les utilisateurs de WeeChat.
Avant de lire la suite ceci :
la liste suivante de questions/réponses n'est *pas* exhaustive.
Il est donc possible que vous ne trouviez pas de question/réponse correspondant
à votre problème.
Lisez les quand même SVP, elles peuvent vous aider à corriger votre problème.
Et même si votre problème est mentionné ci-dessous, il est possible que la
réponse ne vous aide pas à corriger le problème. Dans ce cas, contactez-nous,
nous essaierons de vous aider Ă  trouver une solution.
1 - Compilation
2 - Utilisation de WeeChat
3 - Développement
1.1
================================================================================
Q: J'ai entendu parler de plusieurs interfaces pour WeeChat.
Comment puis-je les compiler/utiliser ?
R: L'interface Curses est construite par défaut.
Pour construire l'interface Gtk ou Qt, vous devez spécifier des options
pour le script ./configure :
--enable-gtk pour activer l'interface Gtk
--enable-qt pour activer l'interface Qt
Tapez ./configure --help pour voir les options disponibles.
ATTENTION : seule l'interface Curses est ok aujourd'hui.
Les autres interfaces sont en développement.
1.2
================================================================================
Q: Je ne peux pas compiler le CVS WeeChat.
R: Vérifiez que vous avez bien la dernière version d'autoconf et automake.
WeeChat a été développé avec autoconf version 2.56 et automake
version 1.7.
Vous devez avoir au moins ces versions pour compiler le CVS WeeChat.
Si vous n'avez pas ou ne souhaitez pas installer ces versions, vous
pouvez télécharger et installer le paquet "devel", un paquet construit
quasiment tous les jours, basé sur le CVS.
Notez que ce paquet peut ne pas correspondre exactement Ă  la base CVS.
2.1
================================================================================
Q: Pourquoi utiliser WeeChat ? X-Chat et Irssi sont si bien...
R: Parce que WeeChat est très léger et a de nouvelles fonctionnalités.
Quelques nouvelles fonctionnalités :
* plusieurs interfaces (Curses, Gtk, Qt),
* extensible par des scripts (Perl, Python, Ruby),
* développé à partir de zéro (non basé sur un quelconque client IRC)
* multi-platformes
* 100% GPL et libre
C'est le client le plus "geek" ;)
2.2
================================================================================
Q: J'ai lancé WeeChat, mais je suis perdu, que puis-je faire ?
R: Pour obtenir de l'aide tapez /help. Pour de l'aide sur une commande,
tapez /help commande.
2.3
================================================================================
Q: Comment puis-je configurer les raccourcis clavier ?
R: Aujourd'hui vous ne pouvez pas le faire. Ce sera possible dans une
version future.
2.4
================================================================================
Q: Comment puis-je charger des scripts Perl ?
Les scripts Perl sont-ils compatibles avec X-chat et/ou Irssi ?
R: La commande /perl permet de charger les scripts Perl
(le chemin par défaut est ~/.weechat/perl).
Notez que les scripts dans ~/.weechat/perl/autoload sont automatiquement
chargés par WeeChat lorsqu'il démarre.
Les scripts Perl WeeChat sont compatibles avec X-Chat, pas Irssi,
désolé ;)
2.5
================================================================================
Q: Comment puis-je charger les scripts Python ?
R: Aujourd'hui l'interface Python n'est pas déceloppée.
Vous ne pouvez donc charger aucun script Python.
2.6
================================================================================
Q: Comment puis-je charger des scripts Ruby ?
R: Aujourd'hui l'interface Ruby n'est pas développée.
Vous ne pouvez donc charger aucun script Ruby.
3.1
================================================================================
Q: Comment dois-je reporter les bugs ?
R: Il y a 3 manières de reporter les bugs :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, canal #weechat
2. vous pouvez soumettre votre bug Ă  cette adresse :
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. vous pouvez envoyer votre problem par mail, consultez la page
support pour les mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.2
================================================================================
Q: Comment dois-je soumettre les patches ?
R: Il y a 3 manières de soumettre les patches :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, canal #weechat
2. vous pouvez soumettre votre patch Ă  cette adresse :
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. vous pouvez envoyer votre patch par mail, consultez la page
support pour les mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.3
================================================================================
Q: Comment dois-je soumettre les demandes de nouvelles fonctionnalités ?
R: Il y a 2 manières :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, channel #weechat
2. vous pouvez envoyer un mail, consultez la page support pour les
mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.4
================================================================================
Q: WeeChat sera-t-il porté sur *BSD, QNX, MacOS X, Microsoft Windows ?
R: Oui. Les futures versions seront disponibles pour ces OS.
3.5
================================================================================
Q: Je souhaiterai aider les développeurs WeeChat. Que puis-je faire ?
R: Il y a plusieurs choses Ă  faire (code, documentation, ...)
Merci de prendre contact avec nous par IRC ou mail, consultez la page
support :
http://weechat.flashtux.org/support.php
3.6
================================================================================
Q: Puis-je donner de l'argent ou d'autres choses aux développeurs WeeChat ?
R: Non.
+2 -2
View File
@@ -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
@@ -17,6 +17,6 @@
SUBDIRS = po intl src
EXTRA_DIST = weechat.1 BUGS FAQ
EXTRA_DIST = weechat.1 BUGS FAQ FAQ.fr
man_MANS = weechat.1
+8
View File
@@ -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
View File
@@ -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 -24
View File
@@ -1,7 +1,7 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
TODO - 2003-11-03
TODO - 2004-06-05
Legend:
# done
@@ -10,35 +10,34 @@ Legend:
? is this really necessary?
v0.0.3:
v0.0.6:
------
* 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
- Windows version
+ Solaris version
* WeeChat commands:
+ "/set" command: allow the user to set the WeeChat variables
under WeeChat without editing the config file (colours, time
format, etc)
* IRC protocol:
# "/mode" command: change the user/channels modes
+ "/dcc" command (for chat and sending/receiving files)
# "/query" command: start private conversation
* Interface:
+ internationalization (traduce WeeChat in many languages)
# display current channel modes (example : #weechat(+nt))
* 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:
- *BSD version
* IRC protocol:
- "/dcc" command (for chat and sending/receiving files)
- complete "/list" command: add regexp search, display only channels that
match regexp
- "/ignore" and "/unignore" commands: hide all that is write by a given
@@ -58,10 +57,11 @@ Future versions:
and show us the output on the current window. An option to exec
like -o could send the output to the server, on the current
channel/private
- "/last": command to look for text in previous messages
* Interface:
+ Gtk GUI
- display current channel modes (example : #weechat(+nt))
- color for nicks (except own nick) when nick colors are disabled
- interpret special chars in messages (color & bold for example)
- many channel windows in one window/term (window split)
- add lag indicator
@@ -69,7 +69,7 @@ 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?)
- tab key with empty command line should switch to next window (like F7)
- log chats to file
? Qt GUI
@@ -80,14 +80,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
View File
@@ -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.6, 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.6])
# 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
+18
View File
@@ -1,3 +1,21 @@
weechat (0.0.6-1) unstable; urgency=low
* WeeChat version 0.0.6, see ChangeLog for detail.
-- FlashCode <flashcode@flashtux.org> Sat, 05 Jun 2004 11:30:00 +0200
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.
+1 -1
View File
@@ -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 -1
View File
@@ -1,5 +1,5 @@
This package was debianized by FlashCode <flashcode@flashtux.org> on
Mon, 03 Nov 2003 23:15:00 +0200.
Sat, 05 Jun 2004 11:30:00 +0200.
It was downloaded from http://weechat.flashtux.org/download
+1 -1
View File
@@ -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
+1
View File
@@ -3,6 +3,7 @@ BUGS
ChangeLog
COPYING
FAQ
FAQ.fr
INSTALL
NEWS
README
+33
View File
@@ -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
+841
View File
@@ -0,0 +1,841 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - June, 05 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: @uref{http://forums.flashtux.org}@*@*
@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
+841
View File
@@ -0,0 +1,841 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - 5 juin 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 : @uref{http://forums.flashtux.org}@*@*
@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
+535
View File
@@ -0,0 +1,535 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - 05 de Junho 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 : @uref{http://forums.flashtux.org}@*@*
@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
View File
@@ -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
+1559 -1159
View File
File diff suppressed because it is too large Load Diff
+2046 -1800
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -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 -1
View File
@@ -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
View 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
@@ -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;
}
+6 -6
View 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
@@ -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 */
+2 -4
View 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
+2 -4
View 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
+2 -4
View 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
+2 -4
View 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
+308 -137
View File
@@ -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
View 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
@@ -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 */
+333 -186
View 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
@@ -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,129 @@ 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 (&current_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, "Q=query\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 +1216,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 +1228,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 +1245,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 (&current_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
View 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 -1
View File
@@ -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
+5 -2
View File
@@ -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 \
+278 -75
View 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
@@ -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);
@@ -363,9 +388,9 @@ gui_display_end_of_line (t_gui_window *window, t_gui_line *line, int count)
{
int lines_displayed, num_lines, offset, remainder, num_displayed;
t_gui_message *ptr_message;
char saved_char, format_align[32];
char saved_char, format_align[32], format_empty[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;
@@ -421,7 +446,11 @@ gui_display_end_of_line (t_gui_window *window, t_gui_line *line, int count)
if (lines_displayed >= num_lines - count)
{
if (window->win_chat_cursor_x <= window->win_chat_width - 1)
wclrtoeol (window->win_chat);
{
snprintf (format_empty, 32, "%%-%ds",
window->win_chat_width - window->win_chat_cursor_x);
wprintw (window->win_chat, format_empty, " ");
}
window->win_chat_cursor_y++;
}
window->win_chat_cursor_x = 0;
@@ -443,9 +472,9 @@ gui_display_line (t_gui_window *window, t_gui_line *line, int stop_at_end)
{
int offset, remainder, num_displayed;
t_gui_message *ptr_message;
char saved_char, format_align[32];
char saved_char, format_align[32], format_empty[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)
@@ -514,7 +543,11 @@ gui_display_line (t_gui_window *window, t_gui_line *line, int stop_at_end)
(window->win_chat_cursor_x > window->win_chat_width - 1)))
{
if (window->win_chat_cursor_x <= window->win_chat_width - 1)
wclrtoeol (window->win_chat);
{
snprintf (format_empty, 32, "%%-%ds",
window->win_chat_width - window->win_chat_cursor_x);
wprintw (window->win_chat, format_empty, " ");
}
window->win_chat_cursor_y++;
}
window->win_chat_cursor_x = 0;
@@ -538,11 +571,7 @@ gui_draw_window_chat (t_gui_window *window)
return;
if (has_colors ())
{
gui_window_set_color (window->win_chat, COLOR_WIN_CHAT);
wborder (window->win_chat, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
wrefresh (window->win_chat);
}
ptr_line = window->last_line;
lines_used = 0;
@@ -598,11 +627,22 @@ gui_draw_window_chat (t_gui_window *window)
void
gui_redraw_window_chat (t_gui_window *window)
{
char format_empty[32];
int i;
/* TODO: manage splitted windows! */
if (window != gui_current_window)
return;
gui_curses_window_clear (window->win_chat);
if (has_colors ())
gui_window_set_color (window->win_chat, COLOR_WIN_CHAT);
snprintf (format_empty, 32, "%%-%ds", window->win_chat_width);
for (i = 0; i < window->win_chat_height; i++)
{
mvwprintw (window->win_chat, i, 0, format_empty, " ");
}
gui_draw_window_chat (window);
}
@@ -614,7 +654,7 @@ void
gui_draw_window_nick (t_gui_window *window)
{
int i, x, y, column, max_length;
char format[32];
char format[32], format_empty[32];
t_irc_nick *ptr_nick;
/* TODO: manage splitted windows! */
@@ -638,9 +678,18 @@ gui_draw_window_nick (t_gui_window *window)
window->win_nick_width,
window->win_nick_y,
window->win_nick_x);
gui_draw_window_chat (window);
gui_redraw_window_chat (window);
if (has_colors ())
gui_window_set_color (window->win_nick, COLOR_WIN_NICK);
snprintf (format_empty, 32, "%%-%ds", window->win_nick_width);
for (i = 0; i < window->win_nick_height; i++)
{
mvwprintw (window->win_nick, i, 0, format_empty, " ");
}
}
sprintf (format, "%%-%ds", max_length);
snprintf (format, 32, "%%-%ds", max_length);
if (has_colors ())
{
@@ -749,11 +798,22 @@ gui_draw_window_nick (t_gui_window *window)
void
gui_redraw_window_nick (t_gui_window *window)
{
char format_empty[32];
int i;
/* TODO: manage splitted windows! */
if (window != gui_current_window)
return;
gui_curses_window_clear (window->win_nick);
if (has_colors ())
gui_window_set_color (window->win_nick, COLOR_WIN_NICK);
snprintf (format_empty, 32, "%%-%ds", window->win_nick_width);
for (i = 0; i < window->win_nick_height; i++)
{
mvwprintw (window->win_nick, i, 0, format_empty, " ");
}
gui_draw_window_nick (window);
}
@@ -766,6 +826,7 @@ gui_draw_window_status (t_gui_window *window)
{
t_gui_window *ptr_win;
char format_more[32];
int i, first_mode;
/* TODO: manage splitted windows! */
if (window != gui_current_window)
@@ -777,7 +838,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)
{
@@ -855,7 +915,36 @@ gui_draw_window_status (t_gui_window *window)
gui_window_set_color (window->win_status,
COLOR_WIN_STATUS);
}
wprintw (window->win_status, "%s ", CHANNEL(ptr_win)->name);
wprintw (window->win_status, "%s", CHANNEL(ptr_win)->name);
if (gui_current_window == CHANNEL(ptr_win)->window)
{
/* display channel modes */
wprintw (window->win_status, "(");
i = 0;
first_mode = 1;
while (CHANNEL(ptr_win)->modes[i])
{
if (CHANNEL(ptr_win)->modes[i] != ' ')
{
if (first_mode)
{
wprintw (window->win_status, "+");
first_mode = 0;
}
wprintw (window->win_status, "%c",
CHANNEL(ptr_win)->modes[i]);
}
i++;
}
if (CHANNEL(ptr_win)->modes[CHANNEL_MODE_KEY] != ' ')
wprintw (window->win_status, ",%s",
CHANNEL(ptr_win)->key);
if (CHANNEL(ptr_win)->modes[CHANNEL_MODE_LIMIT] != ' ')
wprintw (window->win_status, ",%d",
CHANNEL(ptr_win)->limit);
wprintw (window->win_status, ")");
}
wprintw (window->win_status, " ");
}
if (!SERVER(ptr_win))
{
@@ -864,13 +953,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 +982,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 +1078,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 +1107,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 +1121,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 +1135,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 +1184,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 +1210,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 +1237,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 +1291,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;
@@ -1181,8 +1353,8 @@ gui_move_page_up ()
if (!gui_current_window->first_line_displayed)
{
gui_current_window->sub_lines += gui_current_window->win_chat_height - 1;
gui_redraw_window_chat (gui_current_window);
gui_redraw_window_status (gui_current_window);
gui_draw_window_chat (gui_current_window);
gui_draw_window_status (gui_current_window);
}
}
@@ -1200,8 +1372,8 @@ gui_move_page_down ()
gui_current_window->sub_lines = 0;
if (gui_current_window->sub_lines == 0)
gui_current_window->unread_data = 0;
gui_redraw_window_chat (gui_current_window);
gui_redraw_window_status (gui_current_window);
gui_draw_window_chat (gui_current_window);
gui_draw_window_status (gui_current_window);
}
}
@@ -1234,12 +1406,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 +1432,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 +1482,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 +1494,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 +1538,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 +1559,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 +1590,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 +1623,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 */
@@ -1484,8 +1684,11 @@ gui_add_message (t_gui_window *window, int type, int color, char *message)
}
if ((window != gui_current_window) || (window->sub_lines > 0))
{
window->unread_data = 1 + window->last_line->line_with_message;
gui_redraw_window_status (gui_current_window);
if (window->unread_data < 1 + window->last_line->line_with_message)
{
window->unread_data = 1 + window->last_line->line_with_message;
gui_redraw_window_status (gui_current_window);
}
}
}
}
@@ -1519,7 +1722,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 +1743,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, "] ");
}
+36 -5
View 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
@@ -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);
+5 -4
View File
@@ -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 \
+43 -6
View 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
@@ -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;
}
}
+2 -4
View 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
+66 -10
View 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
@@ -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
View 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
@@ -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 -1
View File
@@ -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
View 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
+2 -4
View 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
+4 -1
View File
@@ -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 \
@@ -24,4 +26,5 @@ lib_weechat_irc_a_SOURCES = irc.h \
irc-server.c \
irc-channel.c \
irc-nick.c \
irc-dcc.c \
irc-display.c
+10 -10
View 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
@@ -34,6 +32,7 @@
t_irc_channel *current_channel = NULL;
char *channel_modes = "iklmnst";
/*
@@ -41,13 +40,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)
@@ -60,6 +56,10 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name)
new_channel->type = channel_type;
new_channel->name = strdup (channel_name);
new_channel->topic = NULL;
memset (new_channel->modes, ' ', sizeof (new_channel->modes));
new_channel->modes[sizeof (new_channel->modes) - 1] = '\0';
new_channel->limit = 0;
new_channel->key = NULL;
new_channel->nicks = NULL;
new_channel->last_nick = NULL;
@@ -72,7 +72,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;
+26 -11
View 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
@@ -46,6 +44,12 @@ t_irc_command irc_commands[] =
N_("nickname type"),
N_("nickname: user to send ctcp to\ntype: \"action\" or \"version\""),
2, MAX_ARGS, 1, NULL, irc_cmd_send_ctcp, NULL },
{ "dcc", N_("starts DCC (file or chat)"),
N_("action nickname [file]"),
N_("action: 'send' (file) or 'chat'\n"
"nickname: nickname to send file or chat\n"
"file: filename (on local host)"),
2, 3, 1, NULL, irc_cmd_send_dcc, NULL },
{ "deop", N_("removes channel operator status from nickname(s)"),
N_("nickname [nickname]"), "",
1, 1, 1, irc_cmd_send_deop, NULL, NULL },
@@ -121,15 +125,15 @@ t_irc_command irc_commands[] =
" w: user receives wallops\n"
" o: operator flag\n"),
1, MAX_ARGS, 1, NULL, irc_cmd_send_mode, irc_cmd_recv_mode },
{ "msg", N_("send message to a nick or channel"),
N_("receiver[,receiver] text"),
N_("receiver: nick or channel (may be mask, '*' = current channel)"
"\ntext: text to send"),
1, MAX_ARGS, 1, NULL, irc_cmd_send_msg, NULL },
{ "motd", N_("get the \"Message Of The Day\""),
N_("[target]"),
N_("target: server name"),
0, 1, 1, NULL, irc_cmd_send_motd, NULL },
{ "msg", N_("send message to a nick or channel"),
N_("receiver[,receiver] text"),
N_("receiver: nick or channel (may be mask, '*' = current channel)"
"\ntext: text to send"),
2, MAX_ARGS, 1, NULL, irc_cmd_send_msg, NULL },
{ "names", N_("list nicknames on channels"),
N_("[channel[,channel]]"), N_("channel: channel name"),
0, MAX_ARGS, 1, NULL, irc_cmd_send_names, NULL },
@@ -160,6 +164,11 @@ t_irc_command irc_commands[] =
{ "privmsg", N_("message received"),
"", "",
0, 0, 1, NULL, NULL, irc_cmd_recv_privmsg },
{ "query", N_("send a private message to a nick"),
N_("nickname [text]"),
N_("nickname: nickname for private conversation"
"\ntext: text to send"),
1, MAX_ARGS, 1, NULL, irc_cmd_send_query, NULL },
{ "quit", N_("close all connections & quit " PACKAGE_NAME),
N_("[quit_message]"),
N_("quit_message: quit message (displayed to other users)"),
@@ -268,8 +277,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 },
@@ -282,6 +291,8 @@ t_irc_command irc_commands[] =
{ "321", N_("/list start"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_321 },
{ "322", N_("channel (for /list)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_322 },
{ "323", N_("/list end"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_323 },
{ "324", N_("channel mode"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_324 },
{ "329", "???", "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_329 },
{ "331", N_("no topic for channel"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_331 },
{ "332", N_("topic of channel"),
N_("channel :topic"),
@@ -385,6 +396,10 @@ t_irc_command irc_commands[] =
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
{ "475", N_("cannot join channel (bad channel key)"),
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
{ "476", N_("bad channel mask"),
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
{ "477", N_("channel doesn't support modes"),
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
{ "481", N_("you're not an IRC operator"),
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
{ "482", N_("you're not channel operator"),
+16 -11
View 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
@@ -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
View 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
+585 -198
View 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
@@ -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;
}
@@ -266,6 +271,256 @@ irc_cmd_recv_kick (t_irc_server *server, char *host, char *arguments)
return 0;
}
/*
* irc_get_channel_modes: get channel modes
*/
void irc_get_channel_modes (t_irc_channel *ptr_channel, char *channel_name,
char *nick_host, char *modes, char *parm)
{
char *pos, set_flag;
t_irc_nick *ptr_nick;
set_flag = '+';
while (modes && modes[0])
{
switch (modes[0])
{
case '+':
set_flag = '+';
break;
case '-':
set_flag = '-';
break;
case 'b':
pos = NULL;
if (parm)
{
pos = strchr (parm, ' ');
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "b", nick_host,
(set_flag == '+') ?
_("sets ban on") :
_("removes ban on"),
(parm) ? parm : NULL);
/* look for next parameter */
if (parm && pos)
{
pos++;
while (pos[0] == ' ')
pos++;
parm = pos;
}
break;
case 'i':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "i", nick_host,
(set_flag == '+') ?
_("sets invite-only channel flag") :
_("removes invite-only channel flag"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_INVITE);
break;
case 'k':
pos = NULL;
if (parm)
{
pos = strchr (parm, ' ');
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "k", nick_host,
(set_flag == '+') ?
_("sets channel key to") :
_("removes channel key"),
(set_flag == '+') ?
((parm) ? parm : NULL) :
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_KEY);
if (ptr_channel->key)
free (ptr_channel->key);
ptr_channel->key = strdup (parm);
/* look for next parameter */
if (parm && pos)
{
pos++;
while (pos[0] == ' ')
pos++;
parm = pos;
}
break;
case 'l':
pos = NULL;
if (parm)
{
pos = strchr (parm, ' ');
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "l", nick_host,
(set_flag == '+') ?
_("sets the user limit to") :
_("removes user limit"),
(set_flag == '+') ?
((parm) ? parm : NULL) :
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_LIMIT);
ptr_channel->limit = atoi (parm);
/* look for next parameter */
if (parm && pos)
{
pos++;
while (pos[0] == ' ')
pos++;
parm = pos;
}
break;
case 'm':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "m", nick_host,
(set_flag == '+') ?
_("sets moderated channel flag") :
_("removes moderated channel flag"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_MODERATED);
break;
case 'n':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "n", nick_host,
(set_flag == '+') ?
_("sets messages from channel only flag") :
_("removes messages from channel only flag"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_NO_MSG_OUT);
break;
case 'o':
pos = NULL;
if (parm)
{
pos = strchr (parm, ' ');
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "o", nick_host,
(set_flag == '+') ?
_("gives channel operator status to") :
_("removes channel operator status from"),
(parm) ? parm : NULL);
if (parm)
{
ptr_nick = nick_search (ptr_channel, parm);
if (ptr_nick)
{
ptr_nick->is_op = (set_flag == '+') ? 1 : 0;
nick_resort (ptr_channel, ptr_nick);
gui_redraw_window_nick (ptr_channel->window);
}
}
/* look for next parameter */
if (parm && pos)
{
pos++;
while (pos[0] == ' ')
pos++;
parm = pos;
}
break;
case 'p':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "p", nick_host,
(set_flag == '+') ?
_("sets private channel flag") :
_("removes private channel flag"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_SECRET);
break;
case 's':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "s", nick_host,
(set_flag == '+') ?
_("sets secret channel flag") :
_("removes secret channel flag"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_SECRET);
break;
case 't':
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "t", nick_host,
(set_flag == '+') ?
_("sets topic protection") :
_("removes topic protection"),
NULL);
SET_CHANNEL_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_MODE_TOPIC);
break;
case 'v':
pos = NULL;
if (parm)
{
pos = strchr (parm, ' ');
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (ptr_channel->window,
channel_name, set_flag, "v", nick_host,
(set_flag == '+') ?
_("gives voice to") :
_("removes voice from"),
(parm) ? parm : NULL);
if (parm)
{
ptr_nick = nick_search (ptr_channel, parm);
if (ptr_nick)
{
ptr_nick->has_voice = (set_flag == '+') ? 1 : 0;
nick_resort (ptr_channel, ptr_nick);
gui_redraw_window_nick (ptr_channel->window);
}
}
/* look for next parameter */
if (parm && pos)
{
pos++;
while (pos[0] == ' ')
pos++;
parm = pos;
}
break;
}
modes++;
}
}
/*
* irc_cmd_recv_mode: 'mode' message received
*/
@@ -273,10 +528,8 @@ irc_cmd_recv_kick (t_irc_server *server, char *host, char *arguments)
int
irc_cmd_recv_mode (t_irc_server *server, char *host, char *arguments)
{
char *pos, *pos2, *pos_parm;
char set_flag;
char *pos, *pos_parm;
t_irc_channel *ptr_channel;
t_irc_nick *ptr_nick;
/* no host => we can't identify sender of message! */
if (host == NULL)
@@ -312,127 +565,15 @@ irc_cmd_recv_mode (t_irc_server *server, char *host, char *arguments)
pos_parm++;
while (pos_parm[0] == ' ')
pos_parm++;
pos2 = strchr (pos_parm, ' ');
if (pos2)
pos2[0] = '\0';
}
set_flag = '+';
if (string_is_channel (arguments))
{
ptr_channel = channel_search (server, arguments);
if (ptr_channel)
{
/* channel modes */
while (pos && pos[0])
{
switch (pos[0])
{
case '+':
set_flag = '+';
break;
case '-':
set_flag = '-';
break;
case 'b':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "b", host,
(set_flag == '+') ?
_("sets ban on") :
_("removes ban on"),
pos_parm);
/* TODO: change & redraw channel modes */
break;
case 'i':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "i", host,
(set_flag == '+') ?
_("sets invite-only channel flag") :
_("removes invite-only channel flag"),
NULL);
/* TODO: change & redraw channel modes */
break;
case 'l':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "l", host,
(set_flag == '+') ?
_("sets the user limit to") :
_("removes user limit"),
(set_flag == '+') ? pos_parm : NULL);
/* TODO: change & redraw channel modes */
break;
case 'm':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "m", host,
(set_flag == '+') ?
_("sets moderated channel flag") :
_("removes moderated channel flag"),
NULL);
/* TODO: change & redraw channel modes */
break;
case 'o':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "o", host,
(set_flag == '+') ?
_("gives channel operator status to") :
_("removes channel operator status from"),
pos_parm);
ptr_nick = nick_search (ptr_channel, pos_parm);
if (ptr_nick)
{
ptr_nick->is_op = (set_flag == '+') ? 1 : 0;
nick_resort (ptr_channel, ptr_nick);
gui_redraw_window_nick (ptr_channel->window);
}
break;
/* TODO: remove this obsolete (?) channel flag? */
case 'p':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "p", host,
(set_flag == '+') ?
_("sets private channel flag") :
_("removes private channel flag"),
NULL);
/* TODO: change & redraw channel modes */
break;
case 's':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "s", host,
(set_flag == '+') ?
_("sets secret channel flag") :
_("removes secret channel flag"),
NULL);
/* TODO: change & redraw channel modes */
break;
case 't':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "t", host,
(set_flag == '+') ?
_("sets topic protection") :
_("removes topic protection"),
NULL);
/* TODO: change & redraw channel modes */
break;
case 'v':
irc_display_mode (ptr_channel->window,
arguments, set_flag, "v", host,
(set_flag == '+') ?
_("gives voice to") :
_("removes voice from"),
pos_parm);
ptr_nick = nick_search (ptr_channel, pos_parm);
if (ptr_nick)
{
ptr_nick->has_voice = (set_flag == '+') ? 1 : 0;
nick_resort (ptr_channel, ptr_nick);
gui_redraw_window_nick (ptr_channel->window);
}
break;
}
pos++;
}
irc_get_channel_modes (ptr_channel, arguments, host, pos, pos_parm);
gui_draw_window_status (gui_current_window);
}
else
{
@@ -461,6 +602,7 @@ irc_cmd_recv_nick (t_irc_server *server, char *host, char *arguments)
t_irc_channel *ptr_channel;
t_irc_nick *ptr_nick;
int nick_is_me;
t_gui_window *ptr_window;
/* no host => we can't identify sender of message! */
if (host == NULL)
@@ -482,7 +624,23 @@ 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);
/* change nickname in any opened private window */
for (ptr_window = gui_windows; ptr_window;
ptr_window = ptr_window->next_window)
{
if ((SERVER(ptr_window) == server) && WIN_IS_PRIVATE(ptr_window))
{
if ((CHANNEL(ptr_window)->name)
&& (strcmp (ptr_nick->nick, CHANNEL(ptr_window)->name) == 0))
{
free (CHANNEL(ptr_window)->name);
CHANNEL(ptr_window)->name = strdup (arguments);
}
}
}
/* change nickname on channel */
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)
@@ -514,6 +672,7 @@ irc_cmd_recv_nick (t_irc_server *server, char *host, char *arguments)
free (server->nick);
server->nick = strdup (arguments);
}
gui_redraw_window_status (gui_current_window);
gui_redraw_window_input (gui_current_window);
return 0;
@@ -736,6 +895,7 @@ int
irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
{
char *pos, *pos2, *host2;
char *pos_file, *pos_addr, *pos_port, *pos_size; /* for DCC */
t_irc_channel *ptr_channel;
t_irc_nick *ptr_nick;
struct utsname *buf;
@@ -782,8 +942,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 +965,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 +1022,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, running "
"%s %s / %s%s",
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
&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 "));
@@ -854,65 +1048,144 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
COLOR_WIN_CHAT, _("from"));
gui_printf_color (server->window,
COLOR_WIN_CHAT_NICK, " %s\n", host);
return 0;
}
/* ping request from another user => answer */
if (strncmp (pos, "\01PING", 5) == 0)
{
pos += 5;
while (pos[0] == ' ')
pos++;
pos2 = strchr (pos, '\01');
if (pos2)
pos2[0] = '\0';
else
pos = NULL;
if (pos && !pos[0])
pos = NULL;
if (pos)
server_sendf (server, "NOTICE %s :\01PING %s\01\r\n",
host, pos);
else
server_sendf (server, "NOTICE %s :\01PING\01\r\n",
host);
return 0;
}
/* incoming DCC file */
if (strncmp (pos, "\01DCC SEND", 9) == 0)
{
pos2 = strchr (pos, '\01');
if (!pos2)
{
gui_printf (server->window,
_("%s cannot parse \"%s\" command\n"),
WEECHAT_ERROR, "privmsg");
return -1;
}
pos2[0] = '\0';
pos_file = pos + 9;
while (pos_file[0] == ' ')
pos_file++;
/* look for file size */
pos_size = strrchr (pos_file, ' ');
if (!pos_size)
{
gui_printf (server->window,
_("%s cannot parse \"%s\" command\n"),
WEECHAT_ERROR, "privmsg");
return -1;
}
pos2 = pos_size;
pos_size++;
while (pos2[0] == ' ')
pos2--;
pos2[1] = '\0';
/* look for DCC port */
pos_port = strrchr (pos_file, ' ');
if (!pos_port)
{
gui_printf (server->window,
_("%s cannot parse \"%s\" command\n"),
WEECHAT_ERROR, "privmsg");
return -1;
}
pos2 = pos_port;
pos_port++;
while (pos2[0] == ' ')
pos2--;
pos2[1] = '\0';
/* look for DCC address (IP) */
pos_addr = strrchr (pos_file, ' ');
if (!pos_addr)
{
gui_printf (server->window,
_("%s cannot parse \"%s\" command\n"),
WEECHAT_ERROR, "privmsg");
return -1;
}
pos2 = pos_addr;
pos_addr++;
while (pos2[0] == ' ')
pos2--;
pos2[1] = '\0';
wee_log_printf ("Incoming DCC file (NOT DEVELOPED!): "
"\"%s\", address=\"%s\", port=\"%s\", size=\"%s\"\n",
pos_file, pos_addr, pos_port, pos_size);
return 0;
}
/* private message received => display it */
ptr_channel = channel_search (server, host);
if (!ptr_channel)
{
ptr_channel = channel_new (server, CHAT_PRIVATE, host, 0);
if (!ptr_channel)
{
gui_printf (server->window,
_("%s cannot create new private window \"%s\"\n"),
WEECHAT_ERROR, host);
return -1;
}
}
if (!ptr_channel->topic)
{
ptr_channel->topic = strdup (host2);
gui_redraw_window_title (ptr_channel->window);
}
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_NICK,
COLOR_WIN_CHAT_DARK, "<");
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
{
/* ping request from another user => answer */
if (strncmp (pos, "\01PING", 5) == 0)
{
pos += 5;
while (pos[0] == ' ')
pos++;
pos2 = strchr (pos, '\01');
if (pos2)
pos2[0] = '\0';
else
pos = NULL;
if (pos && !pos[0])
pos = NULL;
if (pos)
server_sendf (server, "NOTICE %s :\01PING %s\01\r\n",
host, pos);
else
server_sendf (server, "NOTICE %s :\01PING\01\r\n",
host);
}
else
{
/* private message received => display it */
ptr_channel = channel_search (server, host);
if (!ptr_channel)
{
ptr_channel = channel_new (server, CHAT_PRIVATE, host);
if (!ptr_channel)
{
gui_printf (server->window,
_("%s cannot create new private window \"%s\"\n"),
WEECHAT_ERROR, host);
return -1;
}
}
if (!ptr_channel->topic)
{
ptr_channel->topic = strdup (host2);
gui_redraw_window_title (ptr_channel->window);
}
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);
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_NICK,
COLOR_WIN_CHAT_DARK, "> ");
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_MSG,
COLOR_WIN_CHAT, "%s\n", pos);
}
}
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, "> ");
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_MSG,
COLOR_WIN_CHAT, "%s\n", pos);
}
else
{
@@ -1326,6 +1599,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)
*/
@@ -1903,6 +2226,69 @@ irc_cmd_recv_323 (t_irc_server *server, char *host, char *arguments)
return 0;
}
/*
* irc_cmd_recv_324: '324' command (channel mode)
*/
int
irc_cmd_recv_324 (t_irc_server *server, char *host, char *arguments)
{
char *pos_chan, *pos, *pos_parm;
t_irc_channel *ptr_channel;
/* make gcc happy */
(void) host;
pos_chan = strchr (arguments, ' ');
if (pos_chan)
{
pos_chan[0] = '\0';
pos_chan++;
while (pos_chan[0] == ' ')
pos_chan++;
pos = strchr (pos_chan, ' ');
if (pos)
{
pos[0] = '\0';
pos++;
while (pos[0] == ' ')
pos++;
pos_parm = strchr (pos, ' ');
if (pos_parm)
{
pos_parm[0] = '\0';
pos_parm++;
while (pos_parm[0] == ' ')
pos_parm++;
}
ptr_channel = channel_search (server, pos_chan);
if (ptr_channel)
{
irc_get_channel_modes (ptr_channel, NULL, NULL, pos, pos_parm);
gui_draw_window_status (gui_current_window);
}
}
}
return 0;
}
/*
* irc_cmd_recv_329: '329' command (???)
*/
int
irc_cmd_recv_329 (t_irc_server *server, char *host, char *arguments)
{
/* make gcc happy */
(void) server;
(void) host;
(void) arguments;
return 0;
}
/*
* irc_cmd_recv_331: '331' command received (no topic for channel)
*/
@@ -2412,6 +2798,7 @@ irc_cmd_recv_366 (t_irc_server *server, char *host, char *arguments)
_("normal"));
gui_printf_color (ptr_channel->window,
COLOR_WIN_CHAT_DARK, ")\n");
irc_cmd_send_mode (server, ptr_channel->name);
}
else
{
+102 -26
View 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
@@ -103,7 +101,7 @@ irc_cmd_send_away (t_irc_server *server, char *arguments)
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (server->is_connected)
if (ptr_server->is_connected)
{
if (pos)
server_sendf (ptr_server, "AWAY :%s\r\n", pos);
@@ -180,6 +178,17 @@ irc_cmd_send_ctcp (t_irc_server *server, char *arguments)
return 0;
}
/*
* irc_cmd_send_dcc: starts DCC (file or chat)
*/
int
irc_cmd_send_dcc (t_irc_server *server, char *arguments)
{
/* TODO: write this command! */
return 0;
}
/*
* irc_cmd_send_deop: remove operator privileges from nickname(s)
*/
@@ -407,6 +416,20 @@ irc_cmd_send_mode (t_irc_server *server, char *arguments)
return 0;
}
/*
* irc_cmd_send_motd: get the "Message Of The Day"
*/
int
irc_cmd_send_motd (t_irc_server *server, char *arguments)
{
if (arguments)
server_sendf (server, "MOTD %s\r\n", arguments);
else
server_sendf (server, "MOTD\r\n");
return 0;
}
/*
* irc_cmd_send_msg: send a message to a nick or channel
*/
@@ -487,7 +510,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,
@@ -528,20 +551,6 @@ irc_cmd_send_msg (t_irc_server *server, char *arguments)
return 0;
}
/*
* irc_cmd_send_motd: get the "Message Of The Day"
*/
int
irc_cmd_send_motd (t_irc_server *server, char *arguments)
{
if (arguments)
server_sendf (server, "MOTD %s\r\n", arguments);
else
server_sendf (server, "MOTD\r\n");
return 0;
}
/*
* irc_cmd_send_names: list nicknames on channels
*/
@@ -624,7 +633,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;
}
@@ -716,6 +725,64 @@ irc_cmd_send_pong (t_irc_server *server, char *arguments)
return 0;
}
/*
* irc_cmd_send_query: start private conversation with a nick
*/
int
irc_cmd_send_query (t_irc_server *server, char *arguments)
{
char *pos;
t_irc_channel *ptr_channel;
pos = strchr (arguments, ' ');
if (pos)
{
pos[0] = '\0';
pos++;
while (pos[0] == ' ')
pos++;
if (!pos[0])
pos = NULL;
}
/* create private window if not already opened */
ptr_channel = channel_search (server, arguments);
if (!ptr_channel)
{
ptr_channel = channel_new (server, CHAT_PRIVATE, arguments, 1);
if (!ptr_channel)
{
gui_printf (server->window,
_("%s cannot create new private window \"%s\"\n"),
WEECHAT_ERROR,
arguments);
return -1;
}
gui_redraw_window_title (ptr_channel->window);
}
/* display text if given */
if (pos)
{
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_SELF,
"%s", server->nick);
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_NICK,
COLOR_WIN_CHAT_DARK, "> ");
gui_printf_color_type (ptr_channel->window,
MSG_TYPE_MSG,
COLOR_WIN_CHAT, "%s\n", pos);
server_sendf (server, "PRIVMSG %s :%s\r\n", arguments, pos);
}
return 0;
}
/*
* irc_cmd_send_quit: disconnect from all servers and quit WeeChat
*/
@@ -723,12 +790,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
View 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
@@ -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
*/
+42 -10
View 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
@@ -32,9 +30,26 @@
#define PREFIX_PART "<--"
#define PREFIX_QUIT "<--"
#define PREFIX_ERROR "=!="
#define PREFIX_PLUGIN "-P-"
#define CHANNEL_PREFIX "#&+!"
#define NUM_CHANNEL_MODES 7
#define CHANNEL_MODE_INVITE 0
#define CHANNEL_MODE_KEY 1
#define CHANNEL_MODE_LIMIT 2
#define CHANNEL_MODE_MODERATED 3
#define CHANNEL_MODE_NO_MSG_OUT 4
#define CHANNEL_MODE_SECRET 5
#define CHANNEL_MODE_TOPIC 6
#define SET_CHANNEL_MODE(channel, set, mode) \
if (set) \
channel->modes[mode] = channel_modes[mode]; \
else \
channel->modes[mode] = ' ';
#define DEFAULT_IRC_PORT 6667
/* nick types */
typedef struct t_irc_nick t_irc_nick;
@@ -63,6 +78,9 @@ struct t_irc_channel
int type; /* channel type */
char *name; /* name of channel (exemple: "#abc") */
char *topic; /* topic of channel (host for private) */
char modes[NUM_CHANNEL_MODES+1];/* channel modes */
int limit; /* user limit (0 is limit not set) */
char *key; /* channel key (NULL if no key is set) */
t_irc_nick *nicks; /* nicks on the channel */
t_irc_nick *last_nick; /* last nick on the channel */
t_gui_window *window; /* GUI window allocated for channel */
@@ -79,6 +97,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 */
@@ -137,20 +156,23 @@ extern t_irc_command irc_commands[];
extern t_irc_server *irc_servers, *current_irc_server;
extern t_irc_message *recv_msgq, *msgq_last_msg;
extern t_irc_channel *current_channel;
extern char *channel_modes;
/* 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 +181,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 *);
@@ -176,21 +198,26 @@ extern t_irc_nick *nick_search (t_irc_channel *, char *);
extern void nick_count (t_irc_channel *, int *, int *, int *, int *, int *);
extern int nick_get_max_length (t_irc_channel *);
/* DCC functions (irc-dcc.c) */
extern void dcc_send ();
/* 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 *);
extern int irc_cmd_send_away (t_irc_server *, char *);
extern int irc_cmd_send_ctcp (t_irc_server *, char *);
extern int irc_cmd_send_dcc (t_irc_server *, char *);
extern int irc_cmd_send_deop (t_irc_server *, int, char **);
extern int irc_cmd_send_devoice (t_irc_server *, int, char **);
extern int irc_cmd_send_die (t_irc_server *, char *);
@@ -205,8 +232,8 @@ extern int irc_cmd_send_list (t_irc_server *, char *);
extern int irc_cmd_send_lusers (t_irc_server *, char *);
extern int irc_cmd_send_me (t_irc_server *, char *);
extern int irc_cmd_send_mode (t_irc_server *, char *);
extern int irc_cmd_send_msg (t_irc_server *, char *);
extern int irc_cmd_send_motd (t_irc_server *, char *);
extern int irc_cmd_send_msg (t_irc_server *, char *);
extern int irc_cmd_send_names (t_irc_server *, char *);
extern int irc_cmd_send_nick (t_irc_server *, int, char **);
extern int irc_cmd_send_notice (t_irc_server *, char *);
@@ -215,6 +242,7 @@ extern int irc_cmd_send_oper (t_irc_server *, char *);
extern int irc_cmd_send_part (t_irc_server *, char *);
extern int irc_cmd_send_ping (t_irc_server *, char *);
extern int irc_cmd_send_pong (t_irc_server *, char *);
extern int irc_cmd_send_query (t_irc_server *, char *);
extern int irc_cmd_send_quit (t_irc_server *, char *);
extern int irc_cmd_send_quote (t_irc_server *, char *);
extern int irc_cmd_send_rehash (t_irc_server *, char *);
@@ -255,6 +283,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 *);
@@ -266,6 +296,8 @@ extern int irc_cmd_recv_320 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_321 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_322 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_323 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_324 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_329 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_331 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_332 (t_irc_server *, char *, char *);
extern int irc_cmd_recv_333 (t_irc_server *, char *, char *);
+38
View File
@@ -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
View File
@@ -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.
+23
View File
@@ -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
+578
View File
@@ -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;
}
}
+34
View File
@@ -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 */
+373
View File
@@ -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
}
+74
View File
@@ -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 */
+17 -2
View File
@@ -1,11 +1,13 @@
.TH WEECHAT 1 "November 2003" "FlashCode"
.TH WEECHAT 1 "June 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
+10 -3
View File
@@ -1,5 +1,5 @@
%define name weechat
%define version 0.0.3
%define version 0.0.6
%define release 1
Name: %{name}
@@ -10,6 +10,7 @@ Source: http://weechat.flashtux.org/download/%{name}-%{version}.tar.gz
URL: http://weechat.flashtux.org
Group: Networking/IRC
BuildRoot: %{_tmppath}/%{name}-buildroot
Requires: perl
License: GPL
%description
@@ -22,7 +23,7 @@ rm -rf $RPM_BUILD_ROOT
%setup
%build
./configure
./configure --enable-perl
make DESTDIR="$RPM_BUILD_ROOT" LOCALRPM="local"
%install
@@ -35,11 +36,17 @@ rm -rf $RPM_BUILD_ROOT
%files -f %{name}.lang
%defattr(-,root,root,0755)
%doc AUTHORS BUGS ChangeLog COPYING FAQ INSTALL NEWS README TODO
%doc AUTHORS BUGS ChangeLog COPYING FAQ FAQ.fr INSTALL NEWS README TODO
/usr/local/man/man1/weechat.1*
/usr/local/bin/weechat-curses
%changelog
* Sat Jun 05 2004 FlashCode <flashcode@flashtux.org> 0.0.6-1
- Released version 0.0.6
* 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
View File
@@ -1,17 +1,20 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
WeeChat known bugs, 2003-11-03
WeeChat known bugs, 2004-06-05
- ./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)
+34 -1
View File
@@ -1,9 +1,42 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2003-11-03
ChangeLog - 2004-06-05
Version 0.0.6 (2004-06-05):
* improved channel highlight (priority to message vs join/part)
* fixed bug when opened private win and remote user changes his nick
* /query command added (starts private conversation)
* IRC messages 476, 477 added
* /mode command is now ok and channel flags are displayed in status bar
* fixed display bug (text was blinking when scrolling)
* CTCP Version reply is now in english only and doesn't show host (security reason)
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)
+120 -97
View File
@@ -1,134 +1,157 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
WeeChat FAQ, 2004-05-31
=======================
WeeChat FAQ, 2003-10-27
Intended audience:
All WeeChat users.
Before reading the following:
the following Q/A list is *not* exhaustive.
It is also possible that you won't find any Q/A that matches your problem.
Please read them anyway, they may provide you help in fixing your problem
anyway.
And even if your problem is listed below, it is possible that the answers don't
help you anymore to solve it. Then, please contact us, we will try to help you
finding a solution.
1 - Compiling
2 - Using WeeChat
3 - Development
1.1
================================================================================
Q: I heard about many GUI for WeeChat. How can I compile/use them?
A: Curses GUI is built by default.
To build Gtk or Qt GUI you've to specify extra options to ./configure script:
--enable-gtk to enable Gtk GUI
--enable-qt to enable Qt QUI
Type ./configure --help to see available options.
WARNING: only Curses GUI is ok today. Other GUI are under development!
1- Compiling
1.2
================================================================================
Q: I can't compile WeeChat CVS.
1.1 I heard about many GUI for WeeChat. How can I compile/use them?
1.2 I can't compile WeeChat CVS.
2- Using WeeChat
2.1 Why using WeeChat ? Irssi and xchat 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?
3- Development
3.1 How should I report bugs?
3.2 How should I submit patches?
3.3 How should I submit new feature request?
3.4 Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows?
3.5 I want to help WeeChat developers. What can I do?
3.6 Can I give money or other things to WeeChat developers?
A: Check that you have latest version of autoconf and automake.
WeeChat has been developed with autoconf version 2.56 and automake
version 1.7.
You should have at least these versions in order to compile WeeChat CVS.
If you can't or don't want to install these versions, you can download and
install "devel package", a package built almost every day, based on CVS.
Note that this package may not correspond exactly to CVS base.
/------------------------------------------------------------------------------\
| 1- Compiling |
\------------------------------------------------------------------------------/
2.1
================================================================================
Q: Why using WeeChat ? X-Chat and Irssi are so good...
A: Because WeeChat is very light and has new features.
Some new features:
* many GUI (Curses, Gtk, Qt),
* extensible with scripts (Perl, Python, Ruby),
* developed from scratch (not based on any other IRC client)
* multi-platform
* 100% GPL and free
This is the "geekest Irc client" ;)
1.1 I heard about many GUI for WeeChat. How can I compile/use them?
2.2
================================================================================
Q: I've launched WeeChat, but I'm lost, what can I do?
Curses GUI is built by default.
To build Gtk or Qt GUI you've to specify extra options to ./configure script:
--enable-gtk to enable gtk GUI
--enable-qt to enable Qt QUI
Type ./configure --help to see available options.
WARNING: only Curses GUI is ok today. Other GUI are under development!
A: For help you can type /help. For help about a command, type /help command.
1.2 I can't compile WeeChat CVS.
2.3
================================================================================
Q: How can I customize key bindings?
Check that you have latest version of autoconf and automake.
WeeChat has been developed with autoconf version 2.56 and automake version 1.7.
You should have at least these versions in order to compile WeeChat CVS.
If you can't or don't want to install these versions, you can download and
install "devel package", a package built almost every day, based on CVS.
Note that this package may not correspond exactly to CVS base.
A: Today you can't do that. This will be available in a future version.
/------------------------------------------------------------------------------\
| 2- Using WeeChat |
\------------------------------------------------------------------------------/
2.4
================================================================================
Q: How can I load Perl scripts?
Are Perl scripts compatible with X-chat or/and Irssi ?
A: You can use /perl command to load 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.1 Why using WeeChat ? Irssi and xchat are so good...
2.5
================================================================================
Q: How can I load Python scripts?
Because WeeChat is very light and has new features.
Some new features:
* many GUI (Curses, Gtk, Qt),
* extensible with scripts (Perl, Python, Ruby),
* developed from scratch (not based on any other IRC client)
* multi-platform
* 100% GPL and free
This is the "geekest Irc client" ;)
A: Today Python interface is not developed, so can't load any Python script.
2.2 I've launched WeeChat, but I'm lost, what can I do?
2.6
================================================================================
Q: How can I load Ruby scripts?
For help you can type /help. For help about a command, type /help command.
A: Today Ruby interface is not developed, so can't load any Ruby script.
2.3 How can I customize key bindings?
3.1
================================================================================
Q: How should I report bugs?
Today you can't do that. This will be available in a future version.
A: There is 3 ways to report bugs:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can submit your bug at this url:
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. you can mail your problem, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
/------------------------------------------------------------------------------\
| 3- Development |
\------------------------------------------------------------------------------/
3.2
================================================================================
Q: How should I submit patches?
A: There is 3 ways to submit patches:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can submit your patch at this url:
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. you can mail your patch, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
3.1 How should I report bugs?
3.3
================================================================================
Q: How should I submit new feature request?
There is 3 ways to report bugs:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can submit your bug at this url:
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. you can mail your problem, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: There is 2 ways to submit your feature request:
1. you can join us on IRC: irc.freenode.net, channel #weechat
2. you can mail your feature request, look at support page for developer's
mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
3.2 How should I submit patches?
3.4
================================================================================
Q: Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows ?
There is 3 ways to submit patches:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can submit your patch at this url:
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. you can mail your patch, look at support page for developer's mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: Yes. Future versions will be available for these OS.
3.3 How should I submit new feature request?
3.5
================================================================================
Q: I want to help WeeChat developers. What can I do?
There is 2 ways to submit your feature request:
1. you can join us on IRC: irc.freenode.net, channel #eci
If no one can help you (huh?), try another way, see below.
2. you can mail your feature request, look at support page for developer's
mails:
http://weechat.flashtux.org/support.php
(you can subscribe and send to "support" mailing list)
A: There's many tasks to do (code, documentation, ...)
Please contact us with IRC or mail, look at support page:
http://weechat.flashtux.org/support.php
3.4 Will WeeChat be ported to *BSD, QNX, MacOS X, Microsoft Windows ?
3.6
================================================================================
Q: Can I give money or other things to WeeChat developers?
Yes. Future versions will be available for these OS.
3.5 I want to help WeeChat developers. What can I do?
There's many tasks to do (code, documentation, ...)
Please contact us with IRC or mail, look at support page:
http://weechat.flashtux.org/support.php
3.6 Can I give money or other things to WeeChat developers?
No.
A: No.
+172
View File
@@ -0,0 +1,172 @@
WeeChat FAQ, 2004-05-31
=======================
Public concerné :
Tous les utilisateurs de WeeChat.
Avant de lire la suite ceci :
la liste suivante de questions/réponses n'est *pas* exhaustive.
Il est donc possible que vous ne trouviez pas de question/réponse correspondant
à votre problème.
Lisez les quand même SVP, elles peuvent vous aider à corriger votre problème.
Et même si votre problème est mentionné ci-dessous, il est possible que la
réponse ne vous aide pas à corriger le problème. Dans ce cas, contactez-nous,
nous essaierons de vous aider Ă  trouver une solution.
1 - Compilation
2 - Utilisation de WeeChat
3 - Développement
1.1
================================================================================
Q: J'ai entendu parler de plusieurs interfaces pour WeeChat.
Comment puis-je les compiler/utiliser ?
R: L'interface Curses est construite par défaut.
Pour construire l'interface Gtk ou Qt, vous devez spécifier des options
pour le script ./configure :
--enable-gtk pour activer l'interface Gtk
--enable-qt pour activer l'interface Qt
Tapez ./configure --help pour voir les options disponibles.
ATTENTION : seule l'interface Curses est ok aujourd'hui.
Les autres interfaces sont en développement.
1.2
================================================================================
Q: Je ne peux pas compiler le CVS WeeChat.
R: Vérifiez que vous avez bien la dernière version d'autoconf et automake.
WeeChat a été développé avec autoconf version 2.56 et automake
version 1.7.
Vous devez avoir au moins ces versions pour compiler le CVS WeeChat.
Si vous n'avez pas ou ne souhaitez pas installer ces versions, vous
pouvez télécharger et installer le paquet "devel", un paquet construit
quasiment tous les jours, basé sur le CVS.
Notez que ce paquet peut ne pas correspondre exactement Ă  la base CVS.
2.1
================================================================================
Q: Pourquoi utiliser WeeChat ? X-Chat et Irssi sont si bien...
R: Parce que WeeChat est très léger et a de nouvelles fonctionnalités.
Quelques nouvelles fonctionnalités :
* plusieurs interfaces (Curses, Gtk, Qt),
* extensible par des scripts (Perl, Python, Ruby),
* développé à partir de zéro (non basé sur un quelconque client IRC)
* multi-platformes
* 100% GPL et libre
C'est le client le plus "geek" ;)
2.2
================================================================================
Q: J'ai lancé WeeChat, mais je suis perdu, que puis-je faire ?
R: Pour obtenir de l'aide tapez /help. Pour de l'aide sur une commande,
tapez /help commande.
2.3
================================================================================
Q: Comment puis-je configurer les raccourcis clavier ?
R: Aujourd'hui vous ne pouvez pas le faire. Ce sera possible dans une
version future.
2.4
================================================================================
Q: Comment puis-je charger des scripts Perl ?
Les scripts Perl sont-ils compatibles avec X-chat et/ou Irssi ?
R: La commande /perl permet de charger les scripts Perl
(le chemin par défaut est ~/.weechat/perl).
Notez que les scripts dans ~/.weechat/perl/autoload sont automatiquement
chargés par WeeChat lorsqu'il démarre.
Les scripts Perl WeeChat sont compatibles avec X-Chat, pas Irssi,
désolé ;)
2.5
================================================================================
Q: Comment puis-je charger les scripts Python ?
R: Aujourd'hui l'interface Python n'est pas déceloppée.
Vous ne pouvez donc charger aucun script Python.
2.6
================================================================================
Q: Comment puis-je charger des scripts Ruby ?
R: Aujourd'hui l'interface Ruby n'est pas développée.
Vous ne pouvez donc charger aucun script Ruby.
3.1
================================================================================
Q: Comment dois-je reporter les bugs ?
R: Il y a 3 manières de reporter les bugs :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, canal #weechat
2. vous pouvez soumettre votre bug Ă  cette adresse :
http://savannah.nongnu.org/bugs/?func=addbug&group=weechat
3. vous pouvez envoyer votre problem par mail, consultez la page
support pour les mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.2
================================================================================
Q: Comment dois-je soumettre les patches ?
R: Il y a 3 manières de soumettre les patches :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, canal #weechat
2. vous pouvez soumettre votre patch Ă  cette adresse :
http://savannah.nongnu.org/patch/?func=addpatch&group=weechat
3. vous pouvez envoyer votre patch par mail, consultez la page
support pour les mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.3
================================================================================
Q: Comment dois-je soumettre les demandes de nouvelles fonctionnalités ?
R: Il y a 2 manières :
1. vous pouvez nous joindre sur IRC: irc.freenode.net, channel #weechat
2. vous pouvez envoyer un mail, consultez la page support pour les
mails des développeurs :
http://weechat.flashtux.org/support.php
(vous pouvez souscrire et envoyer Ă  la liste de diffusion
"support")
3.4
================================================================================
Q: WeeChat sera-t-il porté sur *BSD, QNX, MacOS X, Microsoft Windows ?
R: Oui. Les futures versions seront disponibles pour ces OS.
3.5
================================================================================
Q: Je souhaiterai aider les développeurs WeeChat. Que puis-je faire ?
R: Il y a plusieurs choses Ă  faire (code, documentation, ...)
Merci de prendre contact avec nous par IRC ou mail, consultez la page
support :
http://weechat.flashtux.org/support.php
3.6
================================================================================
Q: Puis-je donner de l'argent ou d'autres choses aux développeurs WeeChat ?
R: Non.
+2 -2
View File
@@ -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
@@ -17,6 +17,6 @@
SUBDIRS = po intl src
EXTRA_DIST = weechat.1 BUGS FAQ
EXTRA_DIST = weechat.1 BUGS FAQ FAQ.fr
man_MANS = weechat.1
+8
View File
@@ -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
View File
@@ -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 -24
View File
@@ -1,7 +1,7 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
TODO - 2003-11-03
TODO - 2004-06-05
Legend:
# done
@@ -10,35 +10,34 @@ Legend:
? is this really necessary?
v0.0.3:
v0.0.6:
------
* 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
- Windows version
+ Solaris version
* WeeChat commands:
+ "/set" command: allow the user to set the WeeChat variables
under WeeChat without editing the config file (colours, time
format, etc)
* IRC protocol:
# "/mode" command: change the user/channels modes
+ "/dcc" command (for chat and sending/receiving files)
# "/query" command: start private conversation
* Interface:
+ internationalization (traduce WeeChat in many languages)
# display current channel modes (example : #weechat(+nt))
* 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:
- *BSD version
* IRC protocol:
- "/dcc" command (for chat and sending/receiving files)
- complete "/list" command: add regexp search, display only channels that
match regexp
- "/ignore" and "/unignore" commands: hide all that is write by a given
@@ -58,10 +57,11 @@ Future versions:
and show us the output on the current window. An option to exec
like -o could send the output to the server, on the current
channel/private
- "/last": command to look for text in previous messages
* Interface:
+ Gtk GUI
- display current channel modes (example : #weechat(+nt))
- color for nicks (except own nick) when nick colors are disabled
- interpret special chars in messages (color & bold for example)
- many channel windows in one window/term (window split)
- add lag indicator
@@ -69,7 +69,7 @@ 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?)
- tab key with empty command line should switch to next window (like F7)
- log chats to file
? Qt GUI
@@ -80,14 +80,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
View File
@@ -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.6, 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.6])
# 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
+18
View File
@@ -1,3 +1,21 @@
weechat (0.0.6-1) unstable; urgency=low
* WeeChat version 0.0.6, see ChangeLog for detail.
-- FlashCode <flashcode@flashtux.org> Sat, 05 Jun 2004 11:30:00 +0200
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.
+1 -1
View File
@@ -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 -1
View File
@@ -1,5 +1,5 @@
This package was debianized by FlashCode <flashcode@flashtux.org> on
Mon, 03 Nov 2003 23:15:00 +0200.
Sat, 05 Jun 2004 11:30:00 +0200.
It was downloaded from http://weechat.flashtux.org/download
+1 -1
View File
@@ -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
+1
View File
@@ -3,6 +3,7 @@ BUGS
ChangeLog
COPYING
FAQ
FAQ.fr
INSTALL
NEWS
README
+33
View File
@@ -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
+841
View File
@@ -0,0 +1,841 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - June, 05 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: @uref{http://forums.flashtux.org}@*@*
@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
+841
View File
@@ -0,0 +1,841 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - 5 juin 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 : @uref{http://forums.flashtux.org}@*@*
@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
+535
View File
@@ -0,0 +1,535 @@
\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 This manual is free software; you can redistribute it and/or modify
@c it under the terms of the GNU General Public License as published by
@c the Free Software Foundation; either version 2 of the License, or
@c (at your option) any later version.
@c
@c This manual is distributed in the hope that it will be useful,
@c but WITHOUT ANY WARRANTY; without even the implied warranty of
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@c GNU General Public License for more details.
@c
@c You should have received a copy of the GNU General Public License
@c along with this program; if not, write to the Free Software
@c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@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.6 - 05 de Junho 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 : @uref{http://forums.flashtux.org}@*@*
@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
View File
@@ -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
+1559 -1159
View File
File diff suppressed because it is too large Load Diff
+2046 -1800
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -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 -1
View File
@@ -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
View 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
@@ -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;
}
+6 -6
View 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
@@ -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 */
+2 -4
View 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
+2 -4
View 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
+2 -4
View 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
+2 -4
View 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
+308 -137
View File
@@ -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
View 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
@@ -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 */
+333 -186
View 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
@@ -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,129 @@ 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 (&current_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, "Q=query\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 +1216,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 +1228,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 +1245,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 (&current_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
View 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 -1
View File
@@ -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
+5 -2
View File
@@ -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 \

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