]> WeeChat 0.1.8-cvs - Guide utilisateur Client IRC rapide, léger et extensible Sébastien Helleu flashcode AT flashtux.org 2006 Sébastien Helleu This manual is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Ce manuel documente le client IRC WeeChat, il fait partie de WeeChat. La dernière version de ce document peut être téléchargée sur cette page : http://weechat.flashtux.org/doc.php Introduction Ce chapître décrit WeeChat et les pré-requis pour son installation.
Description WeeChat (Wee Enhanced Environment for Chat) est un client IRC libre, rapide et léger, conçu pour différents systèmes d'exploitation. Ses principales caractéristiques sont les suivantes : connexion multi-serveurs (avec SSL, IPv6, proxy) plusieurs interfaces : Curses, wxWidgets, Gtk et Qt petit, rapide et léger paramétrable et extensible avec des extensions et des scripts conforme aux RFCs 1459, 2810, 2811, 2812 et 2813 multi-plateformes (GNU/Linux, *BSD, MacOS X, Windows et d'autres systèmes) 100% GPL, logiciel libre La page d'accueil de WeeChat est ici : http://weechat.flashtux.org
Pré-requis Pour installer WeeChat, vous devez avoir : un système GNU/Linux (avec le compilateur et les outils associés pour le paquet des sources) droits "root" (pour installer WeeChat) selon l'interface, une des bibliothèques suivantes : Curses : la bibliothèque ncurses Gtk : *** interface non développée *** WxWidgets : *** interface non développée *** Qt : *** interface non développée ***
Installation Ce chapître explique comment installer WeeChat.
Paquets binaires Les paquets binaires sont disponibles pour les distributions suivantes : Debian (ou toute distribution compatible Debian) : apt-get install weechat Mandriva/RedHat (ou toute distribution compatible avec les RPM) : rpm -i /chemin/weechat-x.y.z-1.i386.rpm Gentoo : emerge weechat Pour les autres distributions supportées, merci de vous référer au manuel de la distribution pour la méthode d'installation.
Paquet source Tapez simplement dans une console ou un terminal : $ ./configure $ make Obtenez les droits root et installez WeeChat : $ su (entrez le mot de passe root) # make install
Sources CVS Attention : les sources CVS sont réservées aux utilisateurs avancés : il se peut que WeeChat ne compile pas et qu'il soit très instable. Vous êtes prévenus ! Pour récupérer les sources CVS, tapez cette commande : $ cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/weechat co weechat Exécutez ce script : ./autogen.sh Suivez alors les instructions du paquet source (voir )
Utilisation Ce chapître explique comment lancer WeeChat, les touches utilisées par défaut, les commandes internes et IRC, le fichier de configuration et l'utilisation du tube FIFO.
Lancer WeeChat Paramètres de ligne de commande : Paramètre Description -a, --no-connect Supprimer la connexion automatique aux serveurs lors du démarrage -c, --config Afficher l'aide sur le fichier de config (liste des options) -d, --dir <répertoire> Définir le répertoire comme étant la base de WeeChat (utilisé pour les fichiers de configuration, logs, extensions et scripts de l'utilisateur). La valeur par défaut est "~/.weechat". NB: le répertoire est créé s'il n'est pas trouvé par WeeChat. -f, --key-functions Afficher la liste des fonctions internes WeeChat pour les touches -h, --help Afficher l'aide -i, --irc-commands Afficher la liste des commandes IRC -k, --keys Afficher les touches par défaut de WeeChat -l, --license Afficher la licence de WeeChat -p, --no-plugin Supprimer le chargement automatique des extensions au démarrage -v, --version Afficher la version de WeeChat -w, --weechat-commands Afficher la liste des commandes WeeChat Il est également possible de passer une URL pour un ou plusieurs serveurs IRC, de la forme : irc[6][s]://[pseudo[:mot_passe]@]irc.exemple.org[:port][/canal][,canal[...] Exemple pour rejoindre #weechat et #toto sur le serveur "irc.freenode.net", port par défaut (6667), sous le pseudo "nono" : $ weechat-curses irc://nono@irc.freenode.net/#weechat,#toto Pour lancer WeeChat, tapez cette commande : pour l'interface Curses : weechat-curses pour l'interface Gtk : weechat-gtk pour l'interface wxWidgets : weechat-wxwidgets pour l'interface Qt : weechat-qt Lorsque vous lancez WeeChat pour la première fois, un fichier de configuration par défaut est créé, avec les options par défaut. Le fichier de configuration par défaut est : "~/.weechat/weechat.rc" Vous pouvez éditer ce fichier pour configurer WeeChat à votre convenance (SEULEMENT si WeeChat ne tourne pas), ou vous pouvez modifier les paramètres dans WeeChat avec la commande "/set" (voir )
Raccourcis clavier Touche Action Flèche gauche Aller au caractère précédent sur la ligne de commande Flèche droite Aller au caractère suivant sur la ligne de commande Ctrl + flèche gauche Aller au mot précédent sur la ligne de commande Ctrl + flèche droite Aller au mot suivant sur la ligne de commande Home / Ctrl + A Aller au début de la ligne de commande End / Ctrl + E Aller à la fin de la ligne de commande Ctrl + K Effacer du curseur jusqu'à la fin de la ligne de commande Ctrl + L Réafficher toute la fenêtre Ctrl + U Effacer du curseur jusqu'au début de la ligne de commande Ctrl + W Effacer le mot précédent sur la ligne de commande Backspace Effacer le caractère précédent sur la ligne de commande Delete Effacer le caractère suivant sur la ligne de commande Tab Compléter la commande ou le pseudo (Tab de nouveau: trouver la complétion suivante) Tout caractère Insérer le caractère à la position du curseur sur la ligne de commande Entrée Exécuter la commande ou envoyer le message Flèche haut / flèche bas Rappeler les dernières commandes ou messages Ctrl + flèche haut / Ctrl + flèche bas Rappeler les dernières commandes ou messages dans l'historique global (commun à tous les tampons) PageUp / PageDown Monter / descendre d'une page dans l'historique du tampon Alt + PageUp / Alt + PageDown Monter / descendre de quelques lignes dans l'historique du tampon F5 / Alt + flèche gauche Aller au tampon précédent F6 / Alt + flèche droite Aller au tampon suivant F7 Aller à la fenêtre précédente F8 Aller à la fenêtre suivante F10 Effacer le dernier message de la barre d'infos F11 / F12 Faire défiler la liste des pseudos Alt + Home / Alt + End Aller au début / à la fin de la liste des pseudos Alt + A Sauter au prochain tampon avec activité (avec priorité : highlight, message, autre) Alt + B Aller au mot précédent Alt + D Effacer le mot suivant Alt + F Aller au mot suivant Alt + H Vider la hotlist (notification d'actitivé sur les autres tampons) Alt + J puis Alt + D Afficher le tampon des DCC Alt + J puis Alt + L Sauter au dernier tampon Alt + J puis Alt + S Sauter au tampon du serveur Alt + J puis Alt + X Sauter au premier canal du serveur suivant (ou tampon du serveur si aucun canal n'est ouvert) Alt + chiffre (0-9) Sauter au tampon qui porte ce numéro (0 = 10) Alt + J puis nombre (01-99) Sauter au tampon qui porte ce numéro Alt + K Capturer une touche et insérer son code sur la ligne de commande Alt + N Se positionner sur le highlight suivant Alt + P Se positionner sur le highlight précédent Alt + R Effacer entièrement la ligne de commande Alt + S Changer de serveur sur le tampon des serveurs (si l'option "look_one_server_buffer" est activée) Alt + U Se positionner sur la première ligne non lue du tampon Alt + W puis Alt + flèche Sauter à une fenêtre avec une direction
La ligne de commande La ligne de commande WeeChat (située en bas de la fenetre) permet d'envoyer du texte sur les canaux et d'exécuter des commandes WeeChat ou IRC (voir ). Les commandes débutent par un caractère "/", suivi du nom de la commande. Par exemple pour initier une conversation privée avec "toto" : /query toto Le texte envoyé à un canal est tout texte ne commençant pas par le caractère "/", par exemple pour envoyer "bonjour" sur le canal courant : bonjour Il est cependant possible de faire débuter un texte par "/" en le doublant. Par exemple pour envoyer le texte "/query toto" sur le canal courant : //query toto Si l'option d'envoi des couleurs IRC ("irc_colors_send") est activée, il est possible d'utiliser des codes couleur et attributs comme suit : Code Description %B texte gras %Cnn couleur du texte "nn" (voir le tableau des couleurs ci-dessous) %O désactiver la couleur et tous les attributs %R vidéo inverse (inversion de la couleur d'écriture et du fond) %U texte souligné %% afficher un seul "%" NB: le même code (sans le numéro pour %C) peut être utilisé pour stopper l'attribut défini. Les codes couleur pour %C sont : Code Couleur 00 blanc 01 noir 02 bleu foncé 03 vert foncé 04 rouge clair 05 rouge foncé 06 magenta 07 orange 08 jaune 09 vert clair 10 cyan 11 cyan clair 12 bleu clair 13 magenta clair 14 gris 15 gris clair (blanc) Exemple : affichage de "bonjour tout le monde !" avec "bonjour" en bleu clair gras, et "tout le monde" en rouge clair souligné : %C12%Bbonjour%B%C04%U tout le monde%U%C !
Commandes WeeChat / IRC Ce chapître liste toutes les commandes WeeChat et IRC.
Commandes WeeChat &weechat_commands.xml;
Fonctions pour les touches Fonction Description &key_functions.xml;
Commandes IRC &irc_commands.xml;
Fichier de configuration Liste des options du fichier de configuration : Option Type Valeurs Défaut Description &config.xml; Les couleurs pour l'interface Curses sont : Mot clé Couleur default couleur par défaut (transparent pour le fond) black noir red rouge foncé lightred rouge clair green vert foncé lightgreen vert clair brown marron yellow jaune blue bleu foncé lightblue bleu clair magenta violet foncé lightmagenta violet clair cyan cyan foncé lightcyan cyan clair white blanc
Tube FIFO Vous pouvez contrôler WeeChat à distance, en envoyant des commandes ou du texte dans un tube FIFO (l'option "irc_fifo_pipe" doit être activée, elle est désactivée par défaut). Le tube FIFO est dans le répertoire "~/.weechat/" et s'appelle "weechat_fifo_xxxxx" (où xxxxx est l'ID du processus (PID) du WeeChat qui tourne). Donc si plusieurs WeeChat tournent, il y a plusieurs tubes FIFO, un pour chaque session. La syntaxe pour envoyer des commandes ou du texte dans le tube FIFO est la suivante : serveur,canal *texte ou commande ici où le serveur et le canal sont facultatifs, mais si le canal est là, le serveur doit l'être aussi. Quelques exemples : changement du pseudo sur freenode en "pseudo|absent" : $ echo "freenode */nick pseudo|absent" >~/.weechat/weechat_fifo_12345 affichage de texte sur le canal #weechat : $ echo "freenode,#weechat *bonjour tout le monde !" >~/.weechat/weechat_fifo_12345 affichage de texte sur le canal courant (le tampon affiché par WeeChat) : $ echo "*bonjour !" >~/.weechat/weechat_fifo_12345 Attention : ceci est dangereux et vous ne devriez pas le faire sauf si vous savez ce que vous faites ! envoyer deux commandes pour décharger/recharger les scripts Perl (vous devez les séparer par "\n") : $ echo -e "freenode */perl unload\nfreenode */perl autoload" >~/.weechat/weechat_fifo_12345 Vous pouvez écrire un script qui envoie les commandes à tous les WeeChat qui tournent en même temps, par exemple : #!/bin/sh if [ $# -eq 1 ]; then for fifo in $(/bin/ls ~/.weechat/weechat_fifo_* 2>/dev/null); do echo -e "$1" >$fifo done fi Si le script s'appelle "auto_weechat_command", vous pouvez le lancer ainsi : $ ./auto_weechat_command "freenode,#weechat *bonjour"
Extensions Ce chapître décrit l'interface des extensions (API) et les extensions pour scripts (Perl, Python, Ruby), fournies avec WeeChat.
Les extensions dans WeeChat Une extension ("plugin" en anglais) est un programme écrit en C qui peut appeler des fonctions de WeeChat définies dans une interface. Ce programme C n'a pas besoin des sources WeeChat pour être compilé et peut être chargé/déchargé dynamiquement dans WeeChat via la commande /plugin. L'extension doit être au format bibliothèque, chargeable dynamiquement par le systême d'exploitation. Sous GNU/Linux, il s'agit d'un fichier ayant pour extension ".so", sous Windows ".dll".
Ecrire une extension L'extension doit inclure le fichier "weechat-plugin.h" (disponible dans les sources de WeeChat). Ce fichier définit les structures et types dont l'extension aura besoin pour communiquer avec WeeChat. L'extension doit comporter certaines variables et fonctions obligatoires (sans quoi l'extension ne peut être chargée) : Variable Description char plugin_name[] le nom de l'extension char plugin_version[] la version de l'extension char plugin_description[] une courte description de l'extension Fonction Description int weechat_plugin_init (t_weechat_plugin *plugin) fonction appelée au chargement de l'extension qui doit renvoyer PLUGIN_RC_OK en cas de succès, PLUGIN_RC_KO en cas d'erreur (si erreur, l'extension ne sera PAS chargée) void weechat_plugin_end (t_weechat_plugin *plugin) fonction appelée au déchargement de l'extension
Fonctions de l'interface (API)
ascii_strcasecmp Prototype : int ascii_strcasecmp (t_weechat_plugin *plugin, char *chaine1, char *chaine2) Effectue une comparaison entre deux chaînes, sans tenir compte des majuscules/minuscules ni de la locale. Paramètres : : pointeur vers la structure de l'extension : la première chaîne à comparer : la deuxième chaîne à comparer Valeur renvoyée : la différence entre les deux chaînes : négatif si chaine1 < chaine2, zéro si chaine1 == chaine2, positif si chaine1 > chaine2 Exemple : if (plugin->ascii_strcasecmp (plugin, "abc", "def") != 0) ...
ascii_strncasecmp Prototype : int ascii_strncasecmp (t_weechat_plugin *plugin, char *chaine1, char *chaine2, int max) Effectue une comparaison entre deux chaînes, sans tenir compte des majuscules/minuscules ni de la locale, en comparant au plus "max" caractères. Paramètres : : pointeur vers la structure de l'extension : la première chaîne à comparer : la deuxième chaîne à comparer : nombre de caractères max à comparer Valeur renvoyée : la différence entre les deux chaînes : négatif si chaine1 < chaine2, zéro si chaine1 == chaine 2, positif si chaine1 > chaine2 Exemple : if (plugin->ascii_strncasecmp (plugin, "abc", "def", 2) != 0) ...
explode_string Prototype : char **explode_string (t_weechat_plugin *plugin, char *chaine, char *separateurs, int num_items_max, int *num_items) Explose une chaîne en plusieurs selon un/des délimiteur(s). Paramètres : : pointeur vers la structure de l'extension : la chaîne à exploser : les délimiteurs utilisés pour exploser la chaîne : nombre maximum de sous-chaînes créées (0 = pas de limite) : pointeur vers un entier qui contiendra le nombre de sous-chaînes créées en retour Valeur renvoyée : un tableau de chaînes, ou NULL si un problème a été rencontré. Note : le résultat doit être libéré par un appel à la fonction "free_exploded_string" après utilisation. Exemple : char **argv; int argc; argv = plugin->explode_string (plugin, chaine, " ", 0, &argc); ... if (argv != NULL) plugin->free_exploded_string (plugin, argv);
free_exploded_string Prototype : char **free_exploded_string (t_weechat_plugin *plugin, char **chaine) Libère la mémoire utilisée pour une explosion de chaîne. Paramètres : : pointeur vers la structure de l'extension : la chaîne explosée par la fonction "explode_string" Valeur renvoyée : aucune. Exemple : char *argv; int argc; argv = plugin->explode_string (plugin, chaine, " ", 0, &argc); ... if (argv != NULL) plugin->free_exploded_string (plugin, argv);
exec_on_files Prototype : void exec_on_files (t_weechat_plugin *plugin, char *repertoire, int (*callback)(t_weechat_plugin *, char *)) Exécute une fonction sur tous les fichiers d'un répertoire. Paramètres : : pointeur vers la structure de l'extension : le répertoire où les fichiers sont recherchés : une fonction appelée pour chaque fichier trouvé Valeur renvoyée : aucune. Exemple : int callback (t_weechat_plugin *plugin, char *fichier) { plugin->printf_server (plugin, "fichier: %s", fichier); return 1; } ... plugin->exec_on_files (plugin, "/tmp", &callback);
printf Prototype : void printf (t_weechat_plugin *plugin, char *serveur, char *canal, char *message, ...) Affiche un message sur un tampon WeeChat, identifié par le serveur et le canal (tous deux pouvant être NULL pour le tampon courant). Paramètres : : pointeur vers la structure de l'extension : nom interne du serveur pour trouver le tampon dans lequel afficher (peut être NULL) : nom du canal pour trouver le tampon dans lequel afficher (peut être NULL) : message à afficher Valeur renvoyée : aucune. Exemples : plugin->printf (plugin, NULL, NULL, "hello"); plugin->printf (plugin, NULL, "#weechat", "hello"); plugin->printf (plugin, "freenode", "#weechat", "hello");
printf_server Prototype : void printf_server (t_weechat_plugin *plugin, char *message, ...) Affiche un message sur le tampon du serveur courant. Paramètres : : pointeur vers la structure de l'extension : message à afficher Valeur renvoyée : aucune. Exemple : plugin->printf_server (plugin, "hello");
printf_infobar Prototype : void printf_infobar (t_weechat_plugin *plugin, int temps, char *message, ...) Affiche un message sur la barre d'infos pour un temps déterminé. Paramètres : : pointeur vers la structure de l'extension : temps (en secondes) pendant lequel le message est affiché (0 = jamais effacé) Valeur renvoyée : aucune. Exemple : plugin->printf_infobar (plugin, 5, "hello");
msg_handler_add Prototype : t_plugin_handler *msg_handler_add (t_weechat_plugin *plugin, char *message, t_plugin_handler_func *fonction, char *handler_args, void *handler_pointer) Ajoute un gestionnaire de messages IRC, appelé dès qu'un message IRC est reçu. Paramètres : : pointeur vers la structure de l'extension : nom du message IRC pour lequel la fonction est appelée. Pour connaître la liste des messages IRC disponibles, merci de consulter les RFCs 1459 et 2812 : fonction appelée lorsque le message est reçu : paramètres passés à la fonction appelée : pointeur passé à la fonction appelée Valeur renvoyée : le pointeur vers le nouveau gestionnaire de messages. Note : la fonction appelée lorsque le message est reçu doit renvoyer une des valeurs suivantes : PLUGIN_RC_KO : la fonction a échoué PLUGIN_RC_OK : la fonction a réussi PLUGIN_RC_OK_IGNORE_WEECHAT : le message ne sera pas transmis à WeeChat PLUGIN_RC_OK_IGNORE_PLUGINS : le message ne sera pas transmis à d'autres extensions PLUGIN_RC_OK_IGNORE_ALL : le message ne sera ni transmis à WeeChat ni à d'autres extensions Exemple : int msg_kick (t_weechat_plugin *plugin, char *serveur, char *commande, char *arguments, char *handler_args, void *handler_pointer) { plugin->printf (plugin, serveur, NULL, "KICK reçu"); return PLUGIN_RC_OK; } ... plugin->msg_handler_add (plugin, "KICK", &msg_kick, NULL, NULL);
cmd_handler_add Prototype : t_plugin_handler *cmd_handler_add (t_weechat_plugin *plugin, char *commande, char *description, char *arguments, char *arguments_description, char *modele_completion, t_plugin_handler_func *fonction, char *handler_args, void *handler_pointer) Ajoute un gestionnaire de commande WeeChat, appelé dès que l'utilisateur utilise la commande (par exemple /commande). Paramètres : : pointeur vers la structure de l'extension : nom de la nouvelle commande, qui peut être une commande déjà existante (attention la commande remplacée ne sera plus disponible jusqu'à ce que l'extension soit déchargée) : brève description de la commande (affichée par /help commande) : brève description des paramètres de la commande (affichée par /help commande) : longue description des paramètres de la commande (affichée par /help commande) : modèle pour la complétion sous la forme "abc|%w def|%i" qui signigie "abc" ou une commande WeeChat pour le premier paramètre, et "def" ou une commande IRC pour le deuxième. Une chaîne vide indique à WeeChat de compléter tout paramètre avec un pseudo du canal courant, une valeur NULL désactive toute complétion pour tous les paramètres de la commande. Les codes suivants peuvent être utilisés : Code Description %- aucune complétion pour le paramètre %a alias %A alias et commandes (WeeChat, IRC et extensions) %c canal courant %C canaux du serveur courant %h commandes définies par des extensions %i commandes IRC (envoyées) %I commandes IRC (reçues) %k fonctions associées aux touches %n pseudos du canal courant %o options de configuration %p message de "part" par défaut %q message de "quit" par défaut %s nom du serveur courant %S tous les serveurs %t titre du canal courant %v valeur d'une option de configuration %w commandes WeeChat : fonction appelée lorsque la commande est exécutée : paramètres passés à la fonction appelée : pointeur passé à la fonction appelée Valeur renvoyée : le pointeur vers le nouveau gestionnaire de commande. Note : la fonction appelée lorsque la commande est exécutée doit renvoyer une des valeurs suivantes : PLUGIN_RC_KO : la fonction a échoué PLUGIN_RC_OK : la fonction a réussi Exemple : int cmd_test (t_weechat_plugin *plugin, char *serveur, char *commande, char *arguments, char *handler_args, void *handler_pointer) { plugin->printf (plugin, serveur, NULL, "commande test, pseudo: %s", (arguments) ? arguments : "aucun"); return PLUGIN_RC_OK; } ... plugin->cmd_handler_add (plugin, "test", "Commande test", "[pesudo]", "pseudo: un pseudo du canal", "%n", &cmd_test, NULL, NULL);
handler_remove Prototype : void handler_remove (t_weechat_plugin *plugin, t_plugin_handler *handler) Supprime un gestionnaire. Paramètres : : pointeur vers la structure de l'extension : le gestionnaire à supprimer Valeur renvoyée : aucune. Exemple : plugin->handler_remove (plugin, mon_handler);
handler_remove_all Prototype : void handler_remove_all (t_weechat_plugin *plugin) Supprime tous les gestionnaires d'une extension. Paramètres : : pointeur vers la structure de l'extension Valeur renvoyée : aucune. Exemple : plugin->handler_remove_all (plugin);
exec_command Prototype : void exec_command (t_weechat_plugin *plugin, char *serveur, char *canal, char *commande) Execute une commande WeeChat ou envoie un message à un canal. Paramètres : : pointeur vers la structure de l'extension : nom interne du serveur où exécuter la commande (peut être NULL) : nom du canal où exécuter la commande (peut être NULL) : la commande à exécuter Valeur renvoyée : aucune. Exemples : plugin->exec_command (plugin, NULL, NULL, "/help nick"); plugin->exec_command (plugin, "freenode", "#weechat", "bonjour");
get_info Prototype : char *get_info (t_weechat_plugin *plugin, char *info, char *serveur) Renvoie une information sur WeeChat ou un canal. Paramètres : : pointeur vers la structure de l'extension : nom de l'info à obtenir : Info Description version version de WeeChat nick pesudo channel nom du canal (NULL pour un serveur ou un privé) server nom du serveur away drapeau "away" weechat_dir répertoire maison de WeeChat (par défaut: ~/.weechat/) weechat_libdir répertoire "lib" système de WeeChat weechat_sharedir répertoire "share" système de WeeChat : nom interne du serveur où récupérer l'information (si nécessaire) Valeur renvoyée : l'information recherchée, NULL si non trouvée. Note : le résultat doit être libéré par un appel à la fonction "free" après utilisation. Exemples : char *version = plugin->get_info (plugin, "version", NULL); char *nick = plugin->get_info (plugin, "nick", "freenode");
get_dcc_info Prototype : t_plugin_info_dcc *get_dcc_info (t_weechat_plugin *plugin) Renvoie la liste des DCC en cours ou terminés. Paramètres : : pointeur vers la structure de l'extension Valeur renvoyée : la liste chaînée des DCC. Champ Description server le serveur IRC channel le canal IRC type le type de DCC : 0 = discussion reçue, 1 = discussion envoyée, 2 = fichier reçu, 3 = fichier envoyé status le statut du DCC : 0 = en attente, 1 = en cours de connexion, 2 = actif, 3 = terminé, 4 = échoué, 5 = interrompu par l'utilisateur start_time la date et heure de création du DCC start_transfer la date et heure de démarrage du transfert addr adresse IP de l'utilisateur distant port port utilisé pour le DCC nick pseudo de l'utilisateur distant filename nom de fichier local_filename nom de fichier local size taille du fichier pos position actuelle dans le fichier start_resume position de démarrage après une interruption bytes_per_sec nombre d'octets transmis par seconde depuis le début du transfert Note : le résultat doit être libéré par un appel à la fonction "free_dcc_info" après utilisation. Exemples : t_plugin_dcc_info *dcc_info = plugin->get_dcc_info (plugin); for (ptr_dcc = dcc_info; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) { plugin->printf_server (plugin, "DCC type=%d, avec: %s", ptr_dcc->type, ptr_dcc->nick); } if (dcc_info) plugin->free_dcc_info (plugin, dcc_info);
free_dcc_info Prototype : void free_dcc_info (t_weechat_plugin *plugin, t_plugin_dcc_info *dcc_info) Libère la mémoire utilisée par une liste de DCC. Paramètres : : pointeur vers la structure de l'extension : pointeur vers la liste DCC renvoyée par la fonction "get_dcc_info" Valeur renvoyée : aucune. Exemple : plugin->free_dcc_info (plugin, dcc_info);
get_config Prototype : char *get_config (t_weechat_plugin *plugin, char *option) Renvoie la valeur d'une option de configuration WeeChat. Paramètres : : pointeur vers la structure de l'extension : nom de l'option à lire Valeur renvoyée : la valeur de l'option, NULL si non trouvée. Note : le résultat doit être libéré par un appel à la fonction "free" après utilisation. Exemples : char *value1 = plugin->get_config (plugin, "look_set_title"); char *value2 = plugin->get_config (plugin, "freenode.server_autojoin");
set_config Prototype : int set_config (t_weechat_plugin *plugin, char *option, char *valeur) Modifie la valeur d'une option de configuration WeeChat. Paramètres : : pointeur vers la structure de l'extension : nom de l'option à mettre à jour : nouvelle valeur pour l'option Valeur renvoyée : 1 si l'option a été modifiée avec succès, 0 si une erreur s'est produite. Exemple : plugin->set_config (plugin, "look_nicklist", "off");
get_plugin_config Prototype : char *get_plugin_config (t_weechat_plugin *plugin, char *option) Renvoie la valeur d'une option de l'extension. L'option est lue depuis le fichier "~/.weechat/plugins.rc" et est sous cette forme : "extension.option=valeur" (NB : le nom de l'extension est ajouté automatiquement). Paramètres : : pointeur vers la structure de l'extension : nom de l'option à lire Valeur renvoyée : la valeur de l'option, NULL si non trouvée. Note : le résultat doit être libéré par un appel à la fonction "free" après utilisation. Exemple : char *value = plugin->get_plugin_config (plugin, "ma_variable");
set_plugin_config Prototype : int set_plugin_config (t_weechat_plugin *plugin, char *option, char *valeur) Modifie la valeur d'une option de l'extension. L'option est écrite dans le fichier "~/.weechat/plugins.rc" et est sous cette forme : "extension.option=valeur" (NB : le nom de l'extension est ajouté automatiquement). Paramètres : : pointeur vers la structure de l'extension : nom de l'option à mettre à jour : nouvelle valeur pour l'option Valeur renvoyée : 1 si l'option a été modifiée avec succès, 0 si une erreur s'est produite. Exemple : plugin->set_plugin_config (plugin, "ma_variable", "valeur");
Compiler l'extension La compilation ne nécessite pas les sources WeeChat, mais seulement le fichier "weechat-plugin.h". Pour compiler une extension composée d'un fichier "toto.c" (sous GNU/Linux) : $ gcc -fPIC -Wall -c toto.c $ gcc -shared -fPIC -o libtoto.so toto.o
Charger l'extension dans WeeChat Copier le fichier "libtoto.so" dans le répertoire système des extensions (par exemple "/usr/local/lib/weechat/plugins)" ou bien dans celui de l'utilisateur (par exemple "/home/xxxxx/.weechat/plugins"). Sous WeeChat : /plugin load toto
Exemple d'extension Un exemple complet d'extension, qui ajoute une commande /double affichant deux fois les paramètres passés sur le canal courant (d'accord ce n'est pas très utile mais ceci est un exemple !) : #include <stdlib.h> #include "weechat-plugin.h" char plugin_name[] = "Double"; char plugin_version[] = "0.1"; char plugin_description[] = "Plugin de test pour WeeChat"; /* gestionnaire de commande "/double" */ int double_cmd (t_weechat_plugin *plugin, char *serveur, char *commande, char *arguments, char *handler_args, void *handler_pointer) { if (arguments && arguments[0] && (arguments[0] != '/')) { plugin->exec_command (plugin, NULL, NULL, arguments); plugin->exec_command (plugin, NULL, NULL, arguments); } return PLUGIN_RC_OK; } int weechat_plugin_init (t_weechat_plugin *plugin) { plugin->cmd_handler_add (plugin, "double", "Affiche deux fois un message", "msg", "msg: message a afficher deux fois", NULL, &double_cmd, NULL, NULL); return PLUGIN_RC_OK; } void weechat_plugin_end (t_weechat_plugin *plugin) { /* on ne fait rien ici */ }
Extensions pour scripts Trois extensions sont fournies en standard avec WeeChat pour utiliser des langages de script : Perl, Python et Ruby.
Charger / décharger des scripts Les scripts sont chargés et déchargés avec les commandes /perl, /python et /ruby (tapez /help dans WeeChat pour obtenir de l'aide sur les commandes). Exemples : Charger un script Perl : /perl load /tmp/essai.pl Lister les scripts Perl chargés : /perl Charger un script Python : /python load /tmp/essai.py Lister les scripts Python chargés : /python Charger un script Ruby : /ruby load /tmp/essai.rb Lister les scripts Ruby chargés : /ruby
Interface WeeChat / scripts
register Prototype Perl : weechat::register ( nom, version, fonction_de_fin, description ); Prototype Python : weechat.register ( nom, version, fonction_de_fin, description ) Prototype Ruby : Weechat.register ( nom, version, fonction_de_fin, description ) C'est la première fonction à appeler dans le script. Tout script pour WeeChat doit appeler cette fonction. Paramètres : : nom unique pour identifier le script (chaque script doit avoir un nom différent) : version du script : fonction appelée quand le script est déchargé (paramètre facultatif, une chaîne vide signifiant qu'il n'y a pas de fonction à appeler) : brève description du script Valeur renvoyée : 1 si le script a été enregistré, 0 si une erreur s'est produite. Exemples : # perl weechat::register ("essai", "1.0", "fin_essai", "Script d'essai !"); # python weechat.register ("essai", "1.0", "fin_essai", "Script d'essai !") # ruby Weechat.register ("essai", "1.0", "fin_essai", "Script d'essai !")
print Prototype Perl : weechat::print ( message, [canal, [serveur]] ) Prototype Python : weechat.prnt ( message, [canal, [serveur]] ) Prototype Ruby : Weechat.print ( message, [canal, [serveur]] ) Affiche un message sur un tampon WeeChat, identifié par le serveur et le canal. Paramètres : : message à afficher : nom du canal pour trouver le tampon dans lequel afficher : nom interne du serveur pour trouver le tampon dans lequel afficher Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::print ("message"); weechat::print ("message", "#weechat"); weechat::print ("message", "#weechat", "freenode"); # python weechat.prnt ("message") weechat.prnt ("message", "#weechat") weechat.prnt ("message", "#weechat", "freenode") # ruby Weechat.print ("message") Weechat.print ("message", "#weechat") Weechat.print ("message", "#weechat", "freenode")
print_infobar Prototype Perl : weechat::print_infobar ( temps, message ); Prototype Python : weechat.print_infobar ( temps, message ) Prototype Ruby : Weechat.print_infobar ( temps, message ) Affiche un message sur la barre d'infos pour un temps déterminé. Paramètres : : temps (en secondes) pendant lequel le message est affiché (0 = jamais effacé) : message à afficher Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::print_infobar (5, "message"); # python weechat.print_infobar (5, "message") # ruby Weechat.print_infobar (5, "message")
add_message_handler Prototype Perl : weechat::add_message_handler ( message, fonction ); Prototype Python : weechat.add_message_handler ( message, fonction ) Prototype Ruby : Weechat.add_message_handler ( message, fonction ) Ajoute un gestionnaire de messages IRC, appelé dès qu'un message IRC est reçu. Paramètres : : nom du message IRC pour lequel la fonction est appelée. Pour connaître la liste des messages IRC disponibles, merci de consulter les RFCs 1459 et 2812 : fonction appelée lorsque le message est reçu Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::add_message_handler ("privmsg", ma_fonction); sub ma_fonction { weechat::print ("serveur=$_[0]\n"); ($null, $canal, $message) = split ":",$_[1],3; ($masque, $null, $canal) = split " ", $canal; weechat::print ("masque=$masque, canal=$canal, msg=$message\n"); return weechat::PLUGIN_RC_OK; } # python weechat.add_message_handler ("privmsg", ma_fonction) def ma_fonction(serveur, args): weechat.prnt("serveur="+serveur) null, canal, message = string.split(args, ":", 2) masque, null, canal = string.split(string.strip(canal), " ", 2) weechat.prnt("masque="+masque+", canal="+canal+", message="+message) return weechat.PLUGIN_RC_OK Note : la fonction appelée lorsque le message est reçu doit renvoyer une des valeurs suivantes (préfixée par "weechat::" pour Perl, "weechat." pour Python ou "Weechat." pour Ruby) : PLUGIN_RC_KO : la fonction a échoué PLUGIN_RC_OK : la fonction a réussi PLUGIN_RC_OK_IGNORE_WEECHAT : le message ne sera pas transmis à WeeChat PLUGIN_RC_OK_IGNORE_PLUGINS : le message ne sera pas transmis à d'autres extensions PLUGIN_RC_OK_IGNORE_ALL : le message ne sera ni transmis à WeeChat ni à d'autres extensions
add_command_handler Prototype Perl : weechat::add_command_handler ( commande, fonction, [description, arguments, arguments_description, modele_completion] ); Prototype Python : weechat.add_command_handler ( commande, fonction, [description, arguments, arguments_description, modele_completion] ) Prototype Ruby : Weechat.add_command_handler ( commande, fonction, [description, arguments, arguments_description, modele_completion] ) Ajoute un gestionnaire de commande WeeChat, appelé dès que l'utilisateur utilise la commande (par exemple /commande). Paramètres : : nom de la nouvelle commande, qui peut être une commande déjà existante (attention la commande remplacée ne sera plus disponible jusqu'à ce que le script soit déchargé) : fonction appelée lorsque la commande est exécutée : brève description des paramètres de la commande (affichée par /help commande) : longue description des paramètres de la commande (affichée par /help commande) : modèle pour la complétion sous la forme "abc|%w def|%i" qui signigie "abc" ou une commande WeeChat pour le premier paramètre, et "def" ou une commande IRC pour le deuxième. (voir ) Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::add_command_handler ("commande", ma_commande); sub ma_commande { weechat::print("Serveur: $_[0], paramètres: $_[1]\n"); return weechat::PLUGIN_RC_OK; } # python weechat.add_command_handler ("commande", ma_commande) def ma_commande(serveur, args): weechat.prnt("serveur:"+serveur+" paramètres:"+args) return weechat.PLUGIN_RC_OK Notes : la fonction appelée lorsque le message est exécutée doit renvoyer une des valeurs suivantes (préfixée par "weechat::" pour Perl, "weechat." pour Python ou "Weechat." pour Ruby) : PLUGIN_RC_KO : la fonction a échoué PLUGIN_RC_OK : la fonction a réussi
remove_handler Prototype Perl : weechat::remove_handler ( nom, fonction ); Prototype Python : weechat.remove_handler ( nom, fonction ) Prototype Ruby : Weechat.remove_handler ( nom, fonction ) Supprime un gestionnaire. Paramètres : : nom du message IRC ou de la commande : fonction associée Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::remove_handler ("commande", ma_commande); # python weechat.remove_handler ("commande", ma_commande) # ruby Weechat.remove_handler ("commande", ma_commande)
command Prototype Perl : weechat::command ( commande, [canal, [serveur]] ); Prototype Python : weechat.command ( commande, [canal, [serveur]] ) Prototype Ruby : Weechat.command ( commande, [canal, [serveur]] ) Exécute une commande ou envoie un message à un canal. Paramètres : : la commande à exécuter : nom du canal où exécuter la commande : nom interne du serveur où exécuter la commande Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::command ("bonjour tout le monde !"); weechat::command ("/kick toto merci de quitter ce canal", "#weechat"); weechat::command ("/nick newnick", "", "freenode"); # python weechat.command ("bonjour tout le monde !") weechat.command ("/kick toto merci de quitter ce canal", "#weechat") weechat.command ("/nick newnick", "", "freenode") # ruby Weechat.command ("bonjour tout le monde !") Weechat.command ("/kick toto merci de quitter ce canal", "#weechat") Weechat.command ("/nick newnick", "", "freenode")
get_info Prototype Perl : weechat::get_info ( nom, [serveur] ); Prototype Python : weechat.get_info ( nom, [serveur] ) Prototype Ruby : Weechat.get_info ( nom, [serveur] ) Renvoie une information sur WeeChat ou un canal. Paramètres : : nom de l'info à obtenir (voir ) : nom interne du serveur où récupérer l'information (si nécessaire) Valeur renvoyée : l'information demandée, chaîne vide si une erreur s'est produite ou que l'information n'a pas été trouvée. Exemples : # perl $version = get_info("version"); $nick = get_info("nick", "freenode"); # python version = weechat.get_info ("version") nick = weechat.get_info ("nick", "freenode")
get_dcc_info Prototype Perl : weechat::get_dcc_info ( ); Prototype Python : weechat.get_dcc_info ( ) Prototype Ruby : Weechat.get_dcc_info ( ) Renvoie la liste des DCC en cours ou terminés. Valeur renvoyée : la liste des DCC (voir ).
get_config Prototype Perl : weechat::get_config ( option ); Prototype Python : weechat.get_config ( option ) Prototype Ruby : Weechat.get_config ( option ) Renvoie la valeur d'une option de configuration WeeChat. Paramètres : : nom de l'option Valeur renvoyée : la valeur de l'option, chaîne vide si l'option n'a pas été trouvée. Exemples : # perl $value1 = weechat::get_config ("look_nicklist"); $value2 = weechat::get_config ("freenode.server_autojoin"); # python value1 = weechat.get_config ("look_nicklist") value2 = weechat.get_config ("freenode.server_autojoin")
set_config Prototype Perl : weechat::set_config ( option, valeur ); Prototype Python : weechat.set_config ( option, valeur ) Prototype Ruby : Weechat.set_config ( option, valeur ) Modifie la valeur d'une option de configuration WeeChat. Paramètres : : nom de l'option : la nouvelle valeur pour l'option Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::set_config ("look_nicklist", "off"); weechat::set_config ("freenode.server_autojoin, "#weechat"); # python weechat.set_config ("look_nicklist", "off") weechat.set_config ("freenode.server_autojoin, "#weechat") # ruby Weechat.set_config ("look_nicklist", "off") Weechat.set_config ("freenode.server_autojoin, "#weechat")
get_plugin_config Prototype Perl : weechat::get_plugin_config ( option ); Prototype Python : weechat.get_plugin_config ( option ) Prototype Ruby : Weechat.get_plugin_config ( option ) Renvoie la valeur d'une option de l'extension. L'option est lue depuis le fichier "~/.weechat/plugins.rc" et est sous cette forme : "extension.script.option=valeur" (NB : le nom de l'extension et du script sont ajoutés automatiquement). Paramètres : : nom de l'option Valeur renvoyée : la valeur de l'option, chaîne vide si l'option n'a pas été trouvée. Exemples : # perl $value = weechat::get_plugin_config ("ma_variable"); # python value = weechat.get_plugin_config ("ma_variable")
set_plugin_config Prototype Perl : weechat::set_plugin_config ( option, valeur ); Prototype Python : weechat.set_plugin_config ( option, valeur ) Prototype Ruby : Weechat.set_plugin_config ( option, valeur ) Modifie la valeur d'une option de l'extension. L'option est écrite dans le fichier "~/.weechat/plugins.rc" et est sous cette forme : "extension.script.option=valeur" (NB : le nom de l'extension et du script sont rajoutés automatiquement). Paramètres : : nom de l'option : la nouvelle valeur pour l'option Valeur renvoyée : 1 si succès, 0 si une erreur s'est produite. Exemples : # perl weechat::set_plugin_config ("ma_variable", "valeur"); # python weechat.set_plugin_config ("ma_variable", "valeur") # ruby Weechat.set_plugin_config ("ma_variable", "valeur")
Auteurs / Support Ce chapître liste les auteurs et contributeurs pour WeeChat, et indique les moyens d'obtenir du support.
Auteurs WeeChat est développé par : FlashCode (Sébastien Helleu) flashcode AT flashtux.org - développeur principal Kolter kolter AT free.fr - développeur Ptitlouis ptitlouis AT sysif.net - empaqueteur Debian
Contributeurs Les personnes suivantes ont contribué à WeeChat : Jiri Golembiovsky - traduction tchèque Rudolf Polzer - patchs Jim Ramsay - patchs Odin - RPM pour SuSE Pistos - patchs Gwenn - patchs
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 êtes en train de lire, si vous n'avez pas tout lu jusqu'ici, il est encore temps de recommencer !) IRC : serveur "irc.freenode.net", canal "#weechat" Forum WeeChat : http://forums.flashtux.org Liste de diffusion : Pour souscrire : http://mail.nongnu.org/mailman/listinfo/weechat-support Pour envoyer un mail à la liste de diffusion : weechat-support@nongnu.org Les archives de la liste de diffusion sont ici : http://mail.nongnu.org/archive/html/weechat-support