1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-28 05:46:38 +02:00

Partial support of bars, with custom items.

Today only root bars are partially working (refresh is not always performed),
and bars are not saved in configuration file. To be continued...
This commit is contained in:
Sebastien Helleu
2008-03-05 16:19:10 +01:00
parent d64e852a38
commit 14d393b11e
49 changed files with 5582 additions and 242 deletions
+3 -2
View File
@@ -1,10 +1,11 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2008-02-24
ChangeLog - 2008-03-05
Version 0.2.7 (under dev!):
* added custom bars, with custom items
* command /whois is now authorized in private without argument (task #7482)
* removed kernel info in CTCP VERSION reply (IRC plugin) (task #7494)
* use of many addresses for one IRC server (auto-switch when a connexion
@@ -18,7 +19,7 @@ Version 0.2.7 (under dev!):
* new plugins: IRC, alias, demo, fifo, logger, trigger
* added hooks: command, timer, file descriptor, print, signal, config,
completion, modifier
* new plugin API with many new functions: hooks, buffer management,
* new plugin API with many new functions: hooks, buffer management, bars,
config files, lists
* new display engine, with prefix and message for each line
* fixed nick completion bug (missing space after nick)
+6
View File
@@ -26,6 +26,7 @@
./src/core/wee-utf8.h
./src/core/wee-util.c
./src/core/wee-util.h
./src/gui/curses/gui-curses-bar.c
./src/gui/curses/gui-curses-chat.c
./src/gui/curses/gui-curses-color.c
./src/gui/curses/gui-curses.h
@@ -36,6 +37,7 @@
./src/gui/curses/gui-curses-nicklist.c
./src/gui/curses/gui-curses-status.c
./src/gui/curses/gui-curses-window.c
./src/gui/gtk/gui-gtk-bar.c
./src/gui/gtk/gui-gtk-chat.c
./src/gui/gtk/gui-gtk-color.c
./src/gui/gtk/gui-gtk.h
@@ -48,6 +50,10 @@
./src/gui/gtk/gui-gtk-window.c
./src/gui/gui-action.c
./src/gui/gui-action.h
./src/gui/gui-bar.c
./src/gui/gui-bar.h
./src/gui/gui-bar-item.c
./src/gui/gui-bar-item.h
./src/gui/gui-buffer.c
./src/gui/gui-buffer.h
./src/gui/gui-chat.c
+87 -16
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2007-09-06 12:44+0200\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -109,13 +109,68 @@ msgstr "%sVítejte do %s%s%s, %s\n"
msgid "compiled on"
msgstr "kompilováno"
msgid "Buffers list:"
#, fuzzy
msgid "List of bars:"
msgstr "Seznam pro aliasy:\n"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
#, fuzzy
msgid "height"
msgstr "vpravo"
msgid "width"
msgstr ""
#, fuzzy
msgid ", with separator"
msgstr "barva pro dělič času"
#, fuzzy
msgid "No bar defined"
msgstr "Žádné aliasy nejsou definovány.\n"
#, fuzzy
msgid "List of bar items:"
msgstr "Seznam pro aliasy:\n"
#, fuzzy, c-format
msgid " %s (plugin: %s)"
msgstr " (není plugin)\n"
#, fuzzy
msgid "No bar item defined"
msgstr "Žádné aliasy nejsou definovány.\n"
#, fuzzy, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%s chybí argumenty pro příkaz \"%s\"\n"
#, fuzzy, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%s špatný počet parametrů pro příkaz \"%s\"\n"
#, fuzzy, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%s neznámá volba pro příkaz \"%s\"\n"
#, fuzzy, c-format
msgid "%sBar \"%s\" created"
msgstr "Alias \"%s\" => \"%s\" vytvořen\n"
#, fuzzy, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%s selhalo uložení nastavení pluginů\n"
#, fuzzy, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%s špatný počet parametrů pro příkaz \"%s\"\n"
msgid "Buffers list:"
msgstr ""
#, fuzzy, c-format
msgid "%sError: incorrect buffer number"
msgstr "%s nekorektní číslo bufferu\n"
@@ -436,6 +491,24 @@ msgstr ""
"%s nemohu spojit okna, není zde další okno se stejnou velikostí poblíž "
"aktuálního okna.\n"
#, fuzzy
msgid "manage bars"
msgstr "řídit buffery"
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr "řídit buffery"
@@ -1482,6 +1555,10 @@ msgstr "-VÍCE-"
msgid "server"
msgstr "server"
#, fuzzy
msgid "(MORE)"
msgstr "-VÍCE-"
#, fuzzy, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr ""
@@ -1820,6 +1897,14 @@ msgstr ""
" buffer: vypíše obsah bufferu s hexadecimálními hodnotami do log souboru\n"
"windows: zobrazit strom oken"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO roura je otevřena\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -3278,14 +3363,6 @@ msgstr "Ruším aktivní DCC: \"%s\" od %s\n"
msgid "IRC debug messages"
msgstr "vypsat debug zprávy"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO roura je otevřena\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, fuzzy, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%sServer: %s%s %s[%s%s%s]\n"
@@ -5503,9 +5580,6 @@ msgstr "%s špatné parametry pro příkaz \"%s\"\n"
#~ msgid "left"
#~ msgstr "vlevo"
#~ msgid "right"
#~ msgstr "vpravo"
#~ msgid "Open panels:\n"
#~ msgstr "Otevřené panely:\n"
@@ -5655,9 +5729,6 @@ msgstr "%s špatné parametry pro příkaz \"%s\"\n"
#~ msgid "if set, uses real white color"
#~ msgstr "pokud je nastaveno, použije se skutečná bílá barva"
#~ msgid "color for time separator"
#~ msgstr "barva pro dělič času"
#~ msgid "color for time separator (chat window)"
#~ msgstr "barva pro dělič času (okno rozhovoru)"
+87 -16
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2007-09-06 12:44+0200\n"
"Last-Translator: Thomas Schuetz <i18n@internet-villa.de>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -114,13 +114,68 @@ msgstr "%sWillkommen in %s%s%s, %s\n"
msgid "compiled on"
msgstr "kompiliert am"
msgid "Buffers list:"
#, fuzzy
msgid "List of bars:"
msgstr "Liste der Aliases:\n"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
#, fuzzy
msgid "height"
msgstr "right"
msgid "width"
msgstr ""
#, fuzzy
msgid ", with separator"
msgstr "Farbe für den Zeit-Separator"
#, fuzzy
msgid "No bar defined"
msgstr "Keine Aliases definiert.\n"
#, fuzzy
msgid "List of bar items:"
msgstr "Liste der Aliases:\n"
#, fuzzy, c-format
msgid " %s (plugin: %s)"
msgstr " (kein Plugin)\n"
#, fuzzy
msgid "No bar item defined"
msgstr "Keine Aliases definiert.\n"
#, fuzzy, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%s fehlende Argumente für den \"%s\"-Befehl\n"
#, fuzzy, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%s fehlerhafte Anzahl von Argumenten für der \"%s\"-Befehl\n"
#, fuzzy, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%s unbekannte Option für den \"%s\"-Befehl\n"
#, fuzzy, c-format
msgid "%sBar \"%s\" created"
msgstr "Alias \"%s\" => \"%s\" angelegt\n"
#, fuzzy, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%s konnte die Plugin-Konfigurationsdatei nicht sichern\n"
#, fuzzy, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%s fehlerhafte Anzahl von Argumenten für der \"%s\"-Befehl\n"
msgid "Buffers list:"
msgstr ""
#, fuzzy, c-format
msgid "%sError: incorrect buffer number"
msgstr "%s falsche Puffernummer\n"
@@ -444,6 +499,24 @@ msgstr ""
"%s kann Fenster nicht vereinigen, es ist kein Fenster mit der gleichen Größe "
"in der Nähe des aktuellen Fensters.\n"
#, fuzzy
msgid "manage bars"
msgstr "Puffer verwalten"
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr "Puffer verwalten"
@@ -1482,6 +1555,10 @@ msgstr "-MEHR-"
msgid "server"
msgstr "Server"
#, fuzzy
msgid "(MORE)"
msgstr "-MEHR-"
#, fuzzy, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr ""
@@ -1823,6 +1900,14 @@ msgstr ""
"Programmabsturz)\n"
"windows: zeigt Fensterdaten an"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO ist offen\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -3266,14 +3351,6 @@ msgstr "Aktiver DCC wird abgebrochen: \"%s\" von %s\n"
msgid "IRC debug messages"
msgstr "Debugging-Nachricht ausgeben"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO ist offen\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, fuzzy, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%sServer: %s%s %s[%s%s%s]\n"
@@ -5509,9 +5586,6 @@ msgstr "%s fehlerhafte Argumente für der \"%s\"-Befehl\n"
#~ msgid "left"
#~ msgstr "left"
#~ msgid "right"
#~ msgstr "right"
#~ msgid "Open panels:\n"
#~ msgstr "Offene Panel:\n"
@@ -5665,9 +5739,6 @@ msgstr "%s fehlerhafte Argumente für der \"%s\"-Befehl\n"
#~ msgid "if set, uses real white color"
#~ msgstr "wenn gesetzt, benutze echtes Weiß"
#~ msgid "color for time separator"
#~ msgstr "Farbe für den Zeit-Separator"
#~ msgid "color for time separator (chat window)"
#~ msgstr "Farbe für den Zeit-Separator im Chatfenster"
+86 -13
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2007-09-19 12:09+0200\n"
"Last-Translator: Roberto González Cardenete <robert.glez@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -111,13 +111,67 @@ msgstr "%sBienvenido a %s%s%s, %s\n"
msgid "compiled on"
msgstr "compilado en"
msgid "Buffers list:"
#, fuzzy
msgid "List of bars:"
msgstr "Lista de alias:\n"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
msgid "height"
msgstr ""
msgid "width"
msgstr ""
#, fuzzy
msgid ", with separator"
msgstr "color para el separador de la hora"
#, fuzzy
msgid "No bar defined"
msgstr "Ningún alias definido.\n"
#, fuzzy
msgid "List of bar items:"
msgstr "Lista de alias:\n"
#, fuzzy, c-format
msgid " %s (plugin: %s)"
msgstr " (sin plugins)\n"
#, fuzzy
msgid "No bar item defined"
msgstr "Ningún alias definido.\n"
#, fuzzy, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%s faltan argumentos para el comando \"%s\"\n"
#, fuzzy, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%s número de argumentos incorrecto para el comando \"%s\"\n"
#, fuzzy, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%s opción desconocida para el comando \"%s\"\n"
#, fuzzy, c-format
msgid "%sBar \"%s\" created"
msgstr "Alias \"%s\" => \"%s\" creado\n"
#, fuzzy, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%s falló al salvar el archivo de configuración\n"
#, fuzzy, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%s número de argumentos incorrecto para el comando \"%s\"\n"
msgid "Buffers list:"
msgstr ""
#, fuzzy, c-format
msgid "%sError: incorrect buffer number"
msgstr "%s número de búfer incorrecto\n"
@@ -441,6 +495,24 @@ msgstr ""
"%s no puede fusionar ventanas, no hay ninguna otra ventana con el mismo tamaÃ"
"±o que la actual.\n"
#, fuzzy
msgid "manage bars"
msgstr "gestionar los búfers"
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr "gestionar los búfers"
@@ -1470,6 +1542,10 @@ msgstr "-MÁS-"
msgid "server"
msgstr "servidor"
#, fuzzy
msgid "(MORE)"
msgstr "-MÁS-"
#, fuzzy, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr ""
@@ -1810,6 +1886,14 @@ msgstr ""
"(el mismo volcado se escribe cuando Weechat se cuelga)\n"
"ventanas: mostrar árbol de ventanas"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "La tubería FIFO está abierta\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -3271,14 +3355,6 @@ msgstr "Abandonar el DCC activo: \"%s\" de %s\n"
msgid "IRC debug messages"
msgstr "imprime mensajes de depuración"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "La tubería FIFO está abierta\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, fuzzy, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%sServidor:%s%s %s[%s%s%s]\n"
@@ -5677,9 +5753,6 @@ msgstr "%s argumentos incorrectos para el comando \"%s\"\n"
#~ msgid "if set, uses real white color"
#~ msgstr "si se establece, usa el color blanco verdadero"
#~ msgid "color for time separator"
#~ msgstr "color para el separador de la hora"
#~ msgid "color for time separator (chat window)"
#~ msgstr "color para el separador de la hora (ventana de conversación)"
+90 -12
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"PO-Revision-Date: 2008-02-22 14:18+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2008-03-05 14:04+0100\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"MIME-Version: 1.0\n"
@@ -107,13 +107,62 @@ msgstr "%sBienvenue dans %s%s%s, %s"
msgid "compiled on"
msgstr "compilé le"
msgid "Buffers list:"
msgstr "Liste des tampons:"
msgid "List of bars:"
msgstr "Liste des barres:"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr " %d. %s: %s, %s, %s: %d, objets: %s%s (extension: %s)"
msgid "height"
msgstr "hauteur"
msgid "width"
msgstr "largeur"
msgid ", with separator"
msgstr ", avec séparateur"
msgid "No bar defined"
msgstr "Pas de barre définie"
msgid "List of bar items:"
msgstr "Liste des objets de barres:"
#, c-format
msgid " %s (plugin: %s)"
msgstr " %s (extension: %s)"
msgid "No bar item defined"
msgstr "Pas d'objet de barre défini"
#, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%sErreur: paramètres manquants pour la commande \"%s\""
#, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%sErreur: type erroné \"%s\" pour la barre \"%s\""
#, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%sErreur: position erronée \"%s\" pour la barre \"%s\""
#, c-format
msgid "%sBar \"%s\" created"
msgstr "%sBarre \"%s\" créée"
#, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%sErreur: impossible de créer la barre \"%s\""
#, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%sErreur: taille erronée \"%s\" pour la barre \"%s\""
msgid "Buffers list:"
msgstr "Liste des tampons:"
#, c-format
msgid "%sError: incorrect buffer number"
msgstr "%sErreur: numéro de tampon incorrect"
@@ -404,6 +453,32 @@ msgstr ""
"%sErreur: impossible de fusionner les fenêtres, aucun autre fenêtre avec la "
"même taille à coté de la fenêtre actuelle"
msgid "manage bars"
msgstr "gestion des barres"
msgid "[add name type position size [separator]] | [list]"
msgstr "[add nom type position taille [separateur]] | [list]"
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
" add: ajoute une nouvelle barre\n"
" nom: nom de la barre (doit être unique)\n"
" type: \"root\" (en dehors des fenêtres), \"window_active\" (dans la "
"fenêtre active), \"window_inactive\" (dans chaque fenêtre inactive)\n"
" position: bottom (bas), top (haut), left (gauche) ou right (droite)\n"
" taille: taille de la barre (en caractères)\n"
"separateur: 1 pour utiliser un séparateur (ligne), 0 ou rien signifie sans "
"séparateur\n"
" list: liste toutes les barres"
msgid "manage buffers"
msgstr "gestion des tampons"
@@ -1390,6 +1465,9 @@ msgstr "-PLUS-"
msgid "server"
msgstr "serveur"
msgid "(MORE)"
msgstr "(PLUS)"
#, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr "%sErreur: un tampon avec le même nom existe déjà (%s / %s)"
@@ -1734,6 +1812,14 @@ msgstr ""
"windows: affiche l'arbre des fenêtres<\n"
" texte: envoie le signal \"debug\" avec \"texte\" comme paramètre"
#, c-format
msgid "%s: debug enabled"
msgstr "%s: debug activé"
#, c-format
msgid "%s: debug disabled"
msgstr "%s: debug désactivé"
msgid "demo message without prefix"
msgstr "message de démonstration sans préfixe"
@@ -3197,14 +3283,6 @@ msgstr "Abandon du DCC actif: \"%s\" de %s"
msgid "IRC debug messages"
msgstr "Messages de debug IRC"
#, c-format
msgid "%s: debug enabled"
msgstr "%s: debug activé"
#, c-format
msgid "%s: debug disabled"
msgstr "%s: debug désactivé"
#, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%sServeur: %s%s %s[%s%s%s]"
+87 -16
View File
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2007-10-10 18:07+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -115,13 +115,68 @@ msgstr "%sÜdvözöli a %s%s%s, %s\n"
msgid "compiled on"
msgstr "lefordítva:"
msgid "Buffers list:"
#, fuzzy
msgid "List of bars:"
msgstr "Aliaszok listája:\n"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
#, fuzzy
msgid "height"
msgstr "jobb"
msgid "width"
msgstr ""
#, fuzzy
msgid ", with separator"
msgstr "időelválasztó színe"
#, fuzzy
msgid "No bar defined"
msgstr "Nincs aliasz definiálva.\n"
#, fuzzy
msgid "List of bar items:"
msgstr "Aliaszok listája:\n"
#, fuzzy, c-format
msgid " %s (plugin: %s)"
msgstr " (nem található bővítőmodul)\n"
#, fuzzy
msgid "No bar item defined"
msgstr "Nincs aliasz definiálva.\n"
#, fuzzy, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%s hiányzó argumentum a \"%s\" parancsnak\n"
#, fuzzy, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%s rossz argumentum szám a \"%s\" parancsnak\n"
#, fuzzy, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%s ismeretlen opció a \"%s\" parancsnak\n"
#, fuzzy, c-format
msgid "%sBar \"%s\" created"
msgstr "A \"%s\" => \"%s\" aliasz elkészült\n"
#, fuzzy, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%s nem sikerült a modul opciókat elmenteni\n"
#, fuzzy, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%s rossz argumentum szám a \"%s\" parancsnak\n"
msgid "Buffers list:"
msgstr ""
#, fuzzy, c-format
msgid "%sError: incorrect buffer number"
msgstr "%s helytelen pufferszám\n"
@@ -442,6 +497,24 @@ msgstr ""
"%s nem sikerült az ablakokat összefésülni: nincs a közelben azonos méretű "
"ablak.\n"
#, fuzzy
msgid "manage bars"
msgstr "pufferek kezelése"
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr "pufferek kezelése"
@@ -1487,6 +1560,10 @@ msgstr "-TOVÁBB-"
msgid "server"
msgstr "szerver"
#, fuzzy
msgid "(MORE)"
msgstr "-TOVÁBB-"
#, fuzzy, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr "%s nem sikerült a \"%s\" modult betölteni: már van ilyen nevű modul\n"
@@ -1827,6 +1904,14 @@ msgstr ""
" buffer: hexadecimális puffertartalom logba írása\n"
"windows: ablakfa megjelenítése"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO cső nyitva\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -3284,14 +3369,6 @@ msgstr "\"%s\" aktív DCC megszakítása a következővel: %s\n"
msgid "IRC debug messages"
msgstr "hibakereső üzenetek megjelenítése"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO cső nyitva\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, fuzzy, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%s Szerver: %s%s %s[%s%s%s]\n"
@@ -5505,9 +5582,6 @@ msgstr "%s rossz argumentum a \"%s\" parancsnak\n"
#~ msgid "left"
#~ msgstr "bal"
#~ msgid "right"
#~ msgstr "jobb"
#~ msgid "Open panels:\n"
#~ msgstr "Nyitott panelek:\n"
@@ -5642,9 +5716,6 @@ msgstr "%s rossz argumentum a \"%s\" parancsnak\n"
#~ msgid "if set, uses real white color"
#~ msgstr "ha be van állítva, akkor valódi fehér színt használ"
#~ msgid "color for time separator"
#~ msgstr "időelválasztó színe"
#~ msgid "color for time separator (chat window)"
#~ msgstr "időelválasztó színe (beszédablak)"
+87 -16
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.2.7-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: 2007-09-06 12:44+0200\n"
"Last-Translator: Pavel Shevchuk <stlwrt@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -111,13 +111,68 @@ msgstr "%sДобро пожаловать в %s%s%s, %s\n"
msgid "compiled on"
msgstr "собран:"
msgid "Buffers list:"
#, fuzzy
msgid "List of bars:"
msgstr "Список сокращений:\n"
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
#, fuzzy
msgid "height"
msgstr "справа"
msgid "width"
msgstr ""
#, fuzzy
msgid ", with separator"
msgstr "цвет разделителя времени"
#, fuzzy
msgid "No bar defined"
msgstr "Сокращения не заданы.\n"
#, fuzzy
msgid "List of bar items:"
msgstr "Список сокращений:\n"
#, fuzzy, c-format
msgid " %s (plugin: %s)"
msgstr " (нет pluginа)\n"
#, fuzzy
msgid "No bar item defined"
msgstr "Сокращения не заданы.\n"
#, fuzzy, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr "%s нет аргументов для \"%s\" команды\n"
#, fuzzy, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr "%s некорректное количество аргументов команды \"%s\"\n"
#, fuzzy, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr "%s неизвестный параметр для команды \"%s\"\n"
#, fuzzy, c-format
msgid "%sBar \"%s\" created"
msgstr "Сокращение \"%s\" => \"%s\" создано\n"
#, fuzzy, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr "%s не могу сохранить конфигурационный файл pluginов\n"
#, fuzzy, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr "%s некорректное количество аргументов команды \"%s\"\n"
msgid "Buffers list:"
msgstr ""
#, fuzzy, c-format
msgid "%sError: incorrect buffer number"
msgstr "%s неправильный номер буфера\n"
@@ -438,6 +493,24 @@ msgstr ""
"%s не могу объединить окна, есть другое окно такого-же размера рядом с "
"текущим.\n"
#, fuzzy
msgid "manage bars"
msgstr "управление буферами"
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr "управление буферами"
@@ -1488,6 +1561,10 @@ msgstr "-ДАЛЬШЕ-"
msgid "server"
msgstr "сервер"
#, fuzzy
msgid "(MORE)"
msgstr "-ДАЛЬШЕ-"
#, fuzzy, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr ""
@@ -1829,6 +1906,14 @@ msgstr ""
"файл\n"
"windows: отобразить дерево окон"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO pipe открыт\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -3272,14 +3357,6 @@ msgstr "Отменяю активное DCC-сединение: \"%s\" от %s\n
msgid "IRC debug messages"
msgstr "выводить отладочные сообщения"
#, fuzzy, c-format
msgid "%s: debug enabled"
msgstr "FIFO pipe открыт\n"
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, fuzzy, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr "%sСервер: %s%s %s[%s%s%s]\n"
@@ -5505,9 +5582,6 @@ msgstr "%s некорректные аргументы команды \"%s\"\n"
#~ msgid "left"
#~ msgstr "слева"
#~ msgid "right"
#~ msgstr "справа"
#~ msgid "Open panels:\n"
#~ msgstr "Открытые панели:\n"
@@ -5657,9 +5731,6 @@ msgstr "%s некорректные аргументы команды \"%s\"\n"
#~ msgid "if set, uses real white color"
#~ msgstr "если установлено - использовать настоящий белый цвет"
#~ msgid "color for time separator"
#~ msgstr "цвет разделителя времени"
#~ msgid "color for time separator (chat window)"
#~ msgstr "цвет разделителя времени в окне чата"
+6
View File
@@ -27,6 +27,7 @@ SET(WEECHAT_SOURCES
./src/core/wee-utf8.h
./src/core/wee-util.c
./src/core/wee-util.h
./src/gui/curses/gui-curses-bar.c
./src/gui/curses/gui-curses-chat.c
./src/gui/curses/gui-curses-color.c
./src/gui/curses/gui-curses.h
@@ -37,6 +38,7 @@ SET(WEECHAT_SOURCES
./src/gui/curses/gui-curses-nicklist.c
./src/gui/curses/gui-curses-status.c
./src/gui/curses/gui-curses-window.c
./src/gui/gtk/gui-gtk-bar.c
./src/gui/gtk/gui-gtk-chat.c
./src/gui/gtk/gui-gtk-color.c
./src/gui/gtk/gui-gtk.h
@@ -49,6 +51,10 @@ SET(WEECHAT_SOURCES
./src/gui/gtk/gui-gtk-window.c
./src/gui/gui-action.c
./src/gui/gui-action.h
./src/gui/gui-bar.c
./src/gui/gui-bar.h
./src/gui/gui-bar-item.c
./src/gui/gui-bar-item.h
./src/gui/gui-buffer.c
./src/gui/gui-buffer.h
./src/gui/gui-chat.c
+79 -10
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2008-02-22 14:17+0100\n"
"POT-Creation-Date: 2008-03-05 14:04+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -90,13 +90,62 @@ msgstr ""
msgid "compiled on"
msgstr ""
msgid "Buffers list:"
msgid "List of bars:"
msgstr ""
#, c-format
msgid " %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"
msgstr ""
msgid "height"
msgstr ""
msgid "width"
msgstr ""
msgid ", with separator"
msgstr ""
msgid "No bar defined"
msgstr ""
msgid "List of bar items:"
msgstr ""
#, c-format
msgid " %s (plugin: %s)"
msgstr ""
msgid "No bar item defined"
msgstr ""
#, c-format
msgid "%sError: missing arguments for \"%s\" command"
msgstr ""
#, c-format
msgid "%sError: wrong type \"%s\" for bar \"%s\""
msgstr ""
#, c-format
msgid "%sError: wrong position \"%s\" for bar \"%s\""
msgstr ""
#, c-format
msgid "%sBar \"%s\" created"
msgstr ""
#, c-format
msgid "%sError: failed to create bar \"%s\""
msgstr ""
#, c-format
msgid "%sError: wrong size \"%s\" for bar \"%s\""
msgstr ""
msgid "Buffers list:"
msgstr ""
#, c-format
msgid "%sError: incorrect buffer number"
msgstr ""
@@ -383,6 +432,23 @@ msgid ""
"current one"
msgstr ""
msgid "manage bars"
msgstr ""
msgid "[add name type position size [separator]] | [list]"
msgstr ""
msgid ""
" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" (inside active "
"window), or \"window_inactive\" (inside each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing means no separator\n"
" list: list all bars"
msgstr ""
msgid "manage buffers"
msgstr ""
@@ -1198,6 +1264,9 @@ msgstr ""
msgid "server"
msgstr ""
msgid "(MORE)"
msgstr ""
#, c-format
msgid "%sError: a buffer with same name already exists (%s / %s)"
msgstr ""
@@ -1508,6 +1577,14 @@ msgid ""
" text: send \"debug\" signal with \"text\" as argument"
msgstr ""
#, c-format
msgid "%s: debug enabled"
msgstr ""
#, c-format
msgid "%s: debug disabled"
msgstr ""
msgid "demo message without prefix"
msgstr ""
@@ -2749,14 +2826,6 @@ msgstr ""
msgid "IRC debug messages"
msgstr ""
#, c-format
msgid "%s: debug enabled"
msgstr ""
#, c-format
msgid "%s: debug disabled"
msgstr ""
#, c-format
msgid "%sServer: %s%s %s[%s%s%s]"
msgstr ""
+173
View File
@@ -40,6 +40,8 @@
#include "wee-string.h"
#include "wee-utf8.h"
#include "wee-list.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
#include "../gui/gui-buffer.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-color.h"
@@ -52,6 +54,162 @@
#include "../plugins/plugin-config.h"
/*
* command_bar: manage bars
*/
int
command_bar (void *data, struct t_gui_buffer *buffer,
int argc, char **argv, char **argv_eol)
{
int i, type, position, size, separator;
long number;
char *error;
struct t_gui_bar *ptr_bar;
struct t_gui_bar_item *ptr_item;
/* make C compiler happy */
(void) data;
(void) buffer;
(void) argc;
(void) argv;
(void) argv_eol;
if ((argc == 1)
|| ((argc == 2) && (string_strcasecmp (argv[1], "list") == 0)))
{
/* list of bars */
if (gui_bars)
{
gui_chat_printf (NULL, "");
gui_chat_printf (NULL, _("List of bars:"));
for (ptr_bar = gui_bars; ptr_bar;
ptr_bar = ptr_bar->next_bar)
{
gui_chat_printf (NULL,
_(" %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"),
ptr_bar->number,
ptr_bar->name,
gui_bar_type_str[ptr_bar->type],
gui_bar_position_str[ptr_bar->position],
((ptr_bar->position == GUI_BAR_POSITION_BOTTOM)
|| (ptr_bar->position == GUI_BAR_POSITION_TOP)) ?
_("height") : _("width"),
ptr_bar->size,
(ptr_bar->items) ? ptr_bar->items : "-",
(ptr_bar->separator) ?
_(", with separator") : "",
(ptr_bar->plugin) ? ptr_bar->plugin->name : "-");
}
}
else
gui_chat_printf (NULL, _("No bar defined"));
/* list of bar items */
if (gui_bar_items)
{
gui_chat_printf (NULL, "");
gui_chat_printf (NULL, _("List of bar items:"));
for (ptr_item = gui_bar_items; ptr_item;
ptr_item = ptr_item->next_item)
{
gui_chat_printf (NULL,
_(" %s (plugin: %s)"),
ptr_item->name,
(ptr_item->plugin) ? ptr_item->plugin->name : "-");
}
}
else
gui_chat_printf (NULL, _("No bar item defined"));
}
else
{
if (string_strcasecmp (argv[1], "add") == 0)
{
if (argc < 8)
{
gui_chat_printf (NULL,
_("%sError: missing arguments for \"%s\" "
"command"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
"bar");
return WEECHAT_RC_ERROR;
}
type = -1;
for (i = 0; i < GUI_BAR_NUM_TYPES; i++)
{
if (string_strcasecmp (argv[3], gui_bar_type_str[i]) == 0)
{
type = i;
break;
}
}
if (type < 0)
{
gui_chat_printf (NULL,
_("%sError: wrong type \"%s\" for bar "
"\"%s\""),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[3], argv[2]);
return WEECHAT_RC_ERROR;
}
position = -1;
for (i = 0; i < GUI_BAR_NUM_POSITIONS; i++)
{
if (string_strcasecmp (argv[4], gui_bar_position_str[i]) == 0)
{
position = i;
break;
}
}
if (position < 0)
{
gui_chat_printf (NULL,
_("%sError: wrong position \"%s\" for bar "
"\"%s\""),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[4], argv[2]);
return WEECHAT_RC_ERROR;
}
error = NULL;
number = strtol (argv[5], &error, 10);
if (error && (error[0] == '\0'))
{
size = number;
separator = 0;
if (strcmp (argv[6], "0") != 0)
separator = 1;
/* create bar */
if (gui_bar_new (NULL, argv[2], argv[3], argv[4], size,
separator, argv[7]))
gui_chat_printf (NULL, _("%sBar \"%s\" created"),
gui_chat_prefix[GUI_CHAT_PREFIX_INFO],
argv[2]);
else
gui_chat_printf (NULL, _("%sError: failed to create bar "
"\"%s\""),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
}
else
{
gui_chat_printf (NULL,
_("%sError: wrong size \"%s\" for bar "
"\"%s\""),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[5], argv[2]);
return WEECHAT_RC_ERROR;
}
}
else
{
}
}
return WEECHAT_RC_OK;
}
/*
* command_buffer: manage buffers
*/
@@ -1870,6 +2028,21 @@ command_window (void *data, struct t_gui_buffer *buffer,
void
command_init ()
{
hook_command (NULL, "bar",
N_("manage bars"),
N_("[add name type position size [separator]] | [list]"),
N_(" add: add a new bar\n"
" name: name of bar (must be unique)\n"
" type: \"root\" (outside windows), \"window_active\" "
"(inside active window), or \"window_inactive\" (inside "
"each inactive window)\n"
" position: bottom, top, left or right\n"
" size: size of bar (in chars)\n"
"separator: 1 for using separator (line), 0 or nothing "
"means no separator\n"
" list: list all bars"),
"list",
&command_bar, NULL);
hook_command (NULL, "buffer",
N_("manage buffers"),
N_("[action [args] | number | [[server] [channel]]]"),
+1 -1
View File
@@ -1015,7 +1015,7 @@ config_weechat_init ()
weechat_config_file, ptr_section,
"color_status_more", "color",
N_("text color for buffer with new data (status bar)"),
NULL, GUI_COLOR_STATUS_MORE, 0, "white", &config_change_color, NULL);
NULL, GUI_COLOR_STATUS_MORE, 0, "yellow", &config_change_color, NULL);
/* infobar window */
config_color_infobar = config_file_new_option (
weechat_config_file, ptr_section,
+4
View File
@@ -31,6 +31,8 @@
#include "wee-log.h"
#include "wee-hook.h"
#include "wee-string.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
#include "../gui/gui-buffer.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-hotlist.h"
@@ -73,6 +75,8 @@ debug_dump (int crash)
gui_window_print_log ();
gui_buffer_print_log ();
gui_bar_print_log ();
gui_bar_item_print_log ();
gui_hotlist_print_log ();
hook_print_log ();
+1 -1
View File
@@ -34,7 +34,7 @@ enum t_hook_type
HOOK_TYPE_SIGNAL, /* signal */
HOOK_TYPE_CONFIG, /* config option */
HOOK_TYPE_COMPLETION, /* custom completions */
HOOK_TYPE_MODIFIER, /* stirng modifier */
HOOK_TYPE_MODIFIER, /* string modifier */
/* number of hook types */
HOOK_NUM_TYPES,
};
+5 -4
View File
@@ -18,10 +18,11 @@ IF(NOT DISABLE_NCURSES)
SUBDIRS( curses )
ENDIF(NOT DISABLE_NCURSES)
SET(LIB_GUI_COMMON_SRC gui-action.c gui-action.h gui-buffer.c gui-buffer.h
gui-chat.c gui-chat.h gui-color.c gui-color.h gui-completion.c gui-completion.h
gui-history.c gui-history.h gui-hotlist.c gui-hotlist.h gui-infobar.c
gui-infobar.h gui-input.c gui-input.h gui-keyboard.c gui-keyboard.h gui-main.h
SET(LIB_GUI_COMMON_SRC gui-action.c gui-action.h gui-bar.c gui-bar.h
gui-bar-item.c gui-bar-item.h gui-buffer.c gui-buffer.h gui-chat.c gui-chat.h
gui-color.c gui-color.h gui-completion.c gui-completion.h gui-history.c
gui-history.h gui-hotlist.c gui-hotlist.h gui-infobar.c gui-infobar.h
gui-input.c gui-input.h gui-keyboard.c gui-keyboard.h gui-main.h
gui-nicklist.c gui-nicklist.h gui-status.h gui-window.c gui-window.h)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
+4
View File
@@ -20,6 +20,10 @@ noinst_LIBRARIES = lib_weechat_gui_common.a
lib_weechat_gui_common_a_SOURCES = gui-action.c \
gui-action.h \
gui-bar.c \
gui-bar.h \
gui-bar-item.c \
gui-bar-item.h \
gui-buffer.c \
gui-buffer.h \
gui-chat.c \
+3 -3
View File
@@ -14,9 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
SET(WEECHAT_CURSES_SRC gui-curses-chat.c gui-curses-color.c gui-curses-infobar.c
gui-curses-input.c gui-curses-keyboard.c gui-curses-main.c gui-curses-nicklist.c
gui-curses-status.c gui-curses-window.c gui-curses.h)
SET(WEECHAT_CURSES_SRC gui-curses-bar.c gui-curses-chat.c gui-curses-color.c
gui-curses-infobar.c gui-curses-input.c gui-curses-keyboard.c gui-curses-main.c
gui-curses-nicklist.c gui-curses-status.c gui-curses-window.c gui-curses.h)
SET(EXECUTABLE weechat-curses)
+2 -1
View File
@@ -37,7 +37,8 @@ weechat_curses_LDADD = ../../core/weechat.o \
$(PLUGINS_LFLAGS) \
$(NCURSES_LFLAGS)
weechat_curses_SOURCES = gui-curses-chat.c \
weechat_curses_SOURCES = gui-curses-bar.c \
gui-curses-chat.c \
gui-curses-color.c \
gui-curses-infobar.c \
gui-curses-input.c \
+399
View File
@@ -0,0 +1,399 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
/* gui-curses-bar.c: bar functions for Curses GUI */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "../../core/weechat.h"
#include "../../core/wee-log.h"
#include "../gui-bar.h"
#include "../gui-bar-item.h"
#include "../gui-chat.h"
#include "../gui-color.h"
#include "../gui-window.h"
#include "gui-curses.h"
/*
* gui_bar_window_get_size: get total bar size (window bars) for a position
* bar is optional, if not NULL, size is computed
* from bar 1 to bar # - 1
*/
int
gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
int position)
{
struct t_gui_bar_window *ptr_bar_window;
int total_size;
total_size = 0;
for (ptr_bar_window = GUI_CURSES(window)->bar_windows; ptr_bar_window;
ptr_bar_window = ptr_bar_window->next_bar_window)
{
/* stop before bar */
if (bar && (ptr_bar_window->bar == bar))
return total_size;
if ((ptr_bar_window->bar->type != GUI_BAR_TYPE_ROOT)
&& (ptr_bar_window->bar->position == position))
{
switch (position)
{
case GUI_BAR_POSITION_BOTTOM:
case GUI_BAR_POSITION_TOP:
total_size += ptr_bar_window->height;
break;
case GUI_BAR_POSITION_LEFT:
case GUI_BAR_POSITION_RIGHT:
total_size += ptr_bar_window->width;
break;
}
if (ptr_bar_window->bar->separator)
total_size++;
}
}
return total_size;
}
/*
* gui_bar_window_calculate_pos_size: calculate position and size of a bar
*/
void
gui_bar_window_calculate_pos_size (struct t_gui_bar_window *bar_window,
struct t_gui_window *window)
{
int x1, y1, x2, y2;
int add_bottom, add_top, add_left, add_right;
if (window)
{
x1 = window->win_x;
y1 = window->win_y + 1;
x2 = x1 + window->win_width - 1;
y2 = y1 + window->win_height - 1;
add_left = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_RIGHT);
add_top = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_TOP);
add_bottom = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_BOTTOM);
}
else
{
x1 = 0;
y1 = 0;
x2 = gui_window_get_width () - 1;
y2 = gui_window_get_height () - 1;
add_bottom = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_BOTTOM);
add_top = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_TOP);
add_left = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_RIGHT);
}
switch (bar_window->bar->position)
{
case GUI_BAR_POSITION_BOTTOM:
bar_window->x = x1 + add_left;
bar_window->y = y2 - add_bottom - bar_window->bar->size + 1;
bar_window->width = x2 - add_right - x1 + 1;
bar_window->height = bar_window->bar->size - add_top - add_bottom;
break;
case GUI_BAR_POSITION_TOP:
bar_window->x = x1 + add_left;
bar_window->y = y1 + add_top;
bar_window->width = x2 - x1 + 1;
bar_window->height = bar_window->bar->size - add_left - add_right;
break;
case GUI_BAR_POSITION_LEFT:
bar_window->x = x1 + add_left;
bar_window->y = y1 + add_top;
bar_window->width = bar_window->bar->size - add_left - add_right;
bar_window->height = y2 - add_top - add_bottom - y1 + 1;
break;
case GUI_BAR_POSITION_RIGHT:
bar_window->x = x2 - add_right - bar_window->bar->size + 1;
bar_window->y = y1 + add_top;
bar_window->width = bar_window->bar->size - add_left - add_right;
bar_window->height = y2 - y1 + 1;
break;
}
}
/*
* gui_bar_window_new: create a new "window bar" for a bar, in screen or a window
* if window is not NULL, bar window will be in this window
*/
int
gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window)
{
struct t_gui_bar_window *new_bar_window;
new_bar_window = (struct t_gui_bar_window *) malloc (sizeof (struct t_gui_bar_window));
if (new_bar_window)
{
new_bar_window->bar = bar;
if (window)
{
bar->bar_window = NULL;
new_bar_window->next_bar_window = GUI_CURSES(window)->bar_windows;
GUI_CURSES(window)->bar_windows = new_bar_window;
}
else
{
bar->bar_window = new_bar_window;
new_bar_window->next_bar_window = NULL;
}
gui_bar_window_calculate_pos_size (new_bar_window, window);
new_bar_window->win_bar = newwin (new_bar_window->height,
new_bar_window->width,
new_bar_window->y,
new_bar_window->x);
new_bar_window->win_separator = NULL;
if (new_bar_window->bar->separator)
{
switch (bar->position)
{
case GUI_BAR_POSITION_BOTTOM:
new_bar_window->win_separator = newwin (1,
new_bar_window->width,
new_bar_window->y - 1,
new_bar_window->x);
break;
case GUI_BAR_POSITION_TOP:
new_bar_window->win_separator = newwin (1,
new_bar_window->width,
new_bar_window->y + new_bar_window->height,
new_bar_window->x);
break;
case GUI_BAR_POSITION_LEFT:
new_bar_window->win_separator = newwin (new_bar_window->height,
1,
new_bar_window->y,
new_bar_window->x + new_bar_window->width);
break;
case GUI_BAR_POSITION_RIGHT:
new_bar_window->win_separator = newwin (new_bar_window->height,
1,
new_bar_window->y,
new_bar_window->x - 1);
break;
}
}
return 1;
}
/* failed to create bar window */
return 0;
}
/*
* gui_bar_window_print: print text on a bar window
*/
void
gui_bar_window_print (struct t_gui_bar_window *bar_win, char *text,
int *max_width)
{
int weechat_color;
char str_color[3];
if ((bar_win->bar->position == GUI_BAR_POSITION_LEFT)
|| (bar_win->bar->position == GUI_BAR_POSITION_RIGHT))
gui_window_set_weechat_color (bar_win->win_bar, GUI_COLOR_CHAT);
else
gui_window_set_weechat_color (bar_win->win_bar, GUI_COLOR_STATUS);
while (text && text[0])
{
if (text[0] == GUI_COLOR_COLOR_CHAR)
{
text++;
if (isdigit (text[0]) && isdigit (text[1]))
{
str_color[0] = text[0];
str_color[1] = text[1];
str_color[2] = '\0';
text += 2;
sscanf (str_color, "%d", &weechat_color);
gui_window_set_weechat_color (bar_win->win_bar, weechat_color);
}
}
else
{
wprintw (bar_win->win_bar, "%c", text[0]);
(*max_width)--;
text++;
}
}
}
/*
* gui_bar_window_draw: draw a bar for a window
*/
void
gui_bar_window_draw (struct t_gui_window *window,
struct t_gui_bar_window *bar_win)
{
int i, max_width;
char *item_value;
struct t_gui_bar_item *ptr_item;
if ((bar_win->bar->position == GUI_BAR_POSITION_LEFT)
|| (bar_win->bar->position == GUI_BAR_POSITION_RIGHT))
gui_window_curses_clear (bar_win->win_bar, GUI_COLOR_CHAT);
else
gui_window_curses_clear (bar_win->win_bar, GUI_COLOR_STATUS);
max_width = bar_win->width;
for (i = 0; i < bar_win->bar->items_count; i++)
{
ptr_item = gui_bar_item_search (bar_win->bar->items_array[i]);
if (ptr_item && ptr_item->build_callback)
{
item_value = (ptr_item->build_callback) (ptr_item->build_callback_data,
ptr_item, window,
max_width);
if (item_value)
{
if (item_value[0])
{
gui_bar_window_print (bar_win, item_value, &max_width);
if (max_width < 0)
max_width = 0;
}
free (item_value);
}
}
}
wnoutrefresh (bar_win->win_bar);
if (bar_win->bar->separator)
{
switch (bar_win->bar->position)
{
case GUI_BAR_POSITION_BOTTOM:
gui_window_set_weechat_color (bar_win->win_separator,
GUI_COLOR_SEPARATOR);
mvwhline (bar_win->win_separator, 0, 0, ACS_HLINE,
bar_win->width);
break;
case GUI_BAR_POSITION_TOP:
gui_window_set_weechat_color (bar_win->win_separator,
GUI_COLOR_SEPARATOR);
mvwhline (bar_win->win_separator, 0, 0, ACS_HLINE,
bar_win->width);
break;
case GUI_BAR_POSITION_LEFT:
gui_window_set_weechat_color (bar_win->win_separator,
GUI_COLOR_SEPARATOR);
mvwvline (bar_win->win_separator, 0, 0, ACS_VLINE,
bar_win->height);
break;
case GUI_BAR_POSITION_RIGHT:
gui_window_set_weechat_color (bar_win->win_separator,
GUI_COLOR_SEPARATOR);
mvwvline (bar_win->win_separator, 0, 0, ACS_VLINE,
bar_win->height);
break;
}
wnoutrefresh (bar_win->win_separator);
}
refresh ();
}
/*
* gui_bar_draw: draw a bar
*/
void
gui_bar_draw (struct t_gui_bar *bar)
{
struct t_gui_window *ptr_win;
struct t_gui_bar_window *ptr_bar_win;
if (bar->bar_window)
{
/* root bar */
gui_bar_window_draw (NULL, bar->bar_window);
}
else
{
/* bar on each window */
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
for (ptr_bar_win = GUI_CURSES(ptr_win)->bar_windows; ptr_bar_win;
ptr_bar_win = ptr_bar_win->next_bar_window)
{
if (ptr_bar_win->bar == bar)
{
gui_bar_window_draw (ptr_win, ptr_bar_win);
}
}
}
}
}
/*
* gui_bar_window_free: delete a bar window
*/
void
gui_bar_window_free (struct t_gui_bar_window *bar_window)
{
/* delete Curses windows */
if (bar_window->win_bar)
delwin (bar_window->win_bar);
if (bar_window->win_separator)
delwin (bar_window->win_separator);
/* free bar window */
free (bar_window);
}
/*
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
*/
void
gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
{
log_printf ("");
log_printf (" [window bar (addr:0x%x)]", bar_window);
log_printf (" bar . . . . . . . : 0x%x", bar_window->bar);
log_printf (" x . . . . . . . . : %d", bar_window->x);
log_printf (" y . . . . . . . . : %d", bar_window->y);
log_printf (" width . . . . . . : %d", bar_window->width);
log_printf (" height. . . . . . : %d", bar_window->height);
log_printf (" win_bar . . . . . : 0x%x", bar_window->win_bar);
log_printf (" win_separator . . : 0x%x", bar_window->win_separator);
}
+11 -1
View File
@@ -29,8 +29,10 @@
#include "../../core/weechat.h"
#include "../../core/wee-config.h"
#include "../../core/wee-hook.h"
#include "../../core/wee-string.h"
#include "../../core/wee-utf8.h"
#include "../../plugins/plugin.h"
#include "../gui-buffer.h"
#include "../gui-chat.h"
#include "../gui-color.h"
@@ -963,7 +965,7 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
struct t_gui_line *ptr_line;
/*t_irc_dcc *dcc_first, *dcc_selected, *ptr_dcc;*/
char format_empty[32];
int i, line_pos, count;
int i, line_pos, count, old_scroll;
/*int j, num_bars;
unsigned long pct_complete;
char *unit_name[] = { N_("bytes"), N_("KB"), N_("MB"), N_("GB") };
@@ -1173,6 +1175,8 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
ptr_line = ptr_line->next_line;
}
old_scroll = ptr_win->scroll;
ptr_win->scroll = (ptr_win->win_chat_cursor_y > ptr_win->win_chat_height - 1);
/* check if last line of buffer is entirely displayed and scrolling */
@@ -1183,6 +1187,12 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
ptr_win->scroll = 0;
}
if (ptr_win->scroll != old_scroll)
{
hook_signal_send ("window_scrolled",
WEECHAT_HOOK_SIGNAL_POINTER, ptr_win);
}
if (!ptr_win->scroll && (ptr_win->start_line == ptr_win->buffer->lines))
{
ptr_win->start_line = NULL;
+3 -3
View File
@@ -345,7 +345,7 @@ gui_color_init_weechat ()
{
int i;
gui_color[GUI_COLOR_SEPARATOR] = gui_color_build (GUI_COLOR_SEPARATOR, CONFIG_COLOR(config_color_separator), CONFIG_COLOR(config_color_separator));
gui_color[GUI_COLOR_SEPARATOR] = gui_color_build (GUI_COLOR_SEPARATOR, CONFIG_COLOR(config_color_separator), CONFIG_COLOR(config_color_chat_bg));
gui_color[GUI_COLOR_TITLE] = gui_color_build (GUI_COLOR_TITLE, CONFIG_COLOR(config_color_title), CONFIG_COLOR(config_color_title_bg));
gui_color[GUI_COLOR_TITLE_MORE] = gui_color_build (GUI_COLOR_TITLE_MORE, CONFIG_COLOR(config_color_title_more), CONFIG_COLOR(config_color_title_bg));
@@ -378,8 +378,8 @@ gui_color_init_weechat ()
gui_color[GUI_COLOR_STATUS] = gui_color_build (GUI_COLOR_STATUS, CONFIG_COLOR(config_color_status), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_DELIMITERS] = gui_color_build (GUI_COLOR_STATUS_DELIMITERS, CONFIG_COLOR(config_color_status_delimiters), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_NUMBER] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_number), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_CATEGORY] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_category), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_NUMBER] = gui_color_build (GUI_COLOR_STATUS_NUMBER, CONFIG_COLOR(config_color_status_number), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_CATEGORY] = gui_color_build (GUI_COLOR_STATUS_CATEGORY, CONFIG_COLOR(config_color_status_category), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_NAME] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_name), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_DATA_MSG] = gui_color_build (GUI_COLOR_STATUS_DATA_MSG, CONFIG_COLOR(config_color_status_data_msg), CONFIG_COLOR(config_color_status_bg));
gui_color[GUI_COLOR_STATUS_DATA_PRIVATE] = gui_color_build (GUI_COLOR_STATUS_DATA_PRIVATE, CONFIG_COLOR(config_color_status_data_private), CONFIG_COLOR(config_color_status_bg));
+8 -1
View File
@@ -38,6 +38,7 @@
#include "../../core/wee-util.h"
#include "../../plugins/plugin.h"
#include "../gui-main.h"
#include "../gui-bar-item.h"
#include "../gui-buffer.h"
#include "../gui-chat.h"
#include "../gui-color.h"
@@ -97,7 +98,10 @@ gui_main_init ()
/* get time length */
gui_chat_time_length = util_get_time_length (CONFIG_STRING(config_look_buffer_time_format));
/* init bar items */
gui_bar_item_init ();
/* create new window/buffer */
if (gui_window_new (NULL, 0, 0, COLS, LINES, 100, 100))
{
@@ -243,6 +247,9 @@ gui_main_loop ()
void
gui_main_end ()
{
/* remove bar items */
gui_bar_item_end ();
/* free clipboard buffer */
if (gui_input_clipboard)
free (gui_input_clipboard);
+121 -73
View File
@@ -31,6 +31,7 @@
#include "../../core/wee-log.h"
#include "../../core/wee-string.h"
#include "../gui-window.h"
#include "../gui-bar.h"
#include "../gui-buffer.h"
#include "../gui-chat.h"
#include "../gui-color.h"
@@ -82,6 +83,7 @@ gui_window_objects_init (struct t_gui_window *window)
GUI_CURSES(window)->win_infobar = NULL;
GUI_CURSES(window)->win_input = NULL;
GUI_CURSES(window)->win_separator = NULL;
GUI_CURSES(window)->bar_windows = NULL;
return 1;
}
else
@@ -192,10 +194,16 @@ int
gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
{
int max_length, max_height, lines, width_used;
int add_top, add_bottom, add_left, add_right;
if (!gui_ok)
return 0;
add_bottom = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_BOTTOM);
add_top = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_TOP);
add_left = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_RIGHT);
/* init chat & nicklist settings */
if (window->buffer->nicklist)
{
@@ -219,7 +227,8 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
}
else
{
width_used = window->win_width - (window->win_width % (max_length + 2));
width_used = (window->win_width - add_left - add_right)
- ((window->win_width - add_left - add_right) % (max_length + 2));
if (((max_length + 2) * window->buffer->nicklist_visible_count) % width_used == 0)
lines = ((max_length + 2) * window->buffer->nicklist_visible_count) / width_used;
else
@@ -231,8 +240,8 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
&& (lines < CONFIG_INTEGER(config_look_nicklist_min_size)))
lines = CONFIG_INTEGER(config_look_nicklist_min_size);
max_height = (CONFIG_BOOLEAN(config_look_infobar)) ?
window->win_height - 3 - 4 :
window->win_height - 2 - 4;
window->win_height - add_top - add_bottom - 3 - 4 :
window->win_height - add_top - add_bottom - 2 - 4;
if (lines > max_height)
lines = max_height;
if (!force_calculate
@@ -244,85 +253,84 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
switch (CONFIG_INTEGER(config_look_nicklist_position))
{
case CONFIG_LOOK_NICKLIST_LEFT:
window->win_chat_x = window->win_x + max_length +
window->win_chat_x = window->win_x + add_left + max_length +
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_chat_y = window->win_y + 1;
window->win_chat_y = window->win_y + add_top + 1;
window->win_chat_width = window->win_width - max_length -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_x = window->win_x + 0;
window->win_nick_y = window->win_y + 1;
window->win_nick_x = window->win_x + add_left + 0;
window->win_nick_y = window->win_y + add_top + 1;
window->win_nick_width = max_length +
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
if (CONFIG_BOOLEAN(config_look_infobar))
{
window->win_chat_height = window->win_height - 4;
window->win_nick_height = window->win_height - 4;
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
window->win_nick_height = window->win_height - add_top - add_bottom - 4;
}
else
{
window->win_chat_height = window->win_height - 3;
window->win_nick_height = window->win_height - 3;
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
window->win_nick_height = window->win_height - add_top - add_bottom - 3;
}
window->win_nick_num_max = window->win_nick_height;
break;
case CONFIG_LOOK_NICKLIST_RIGHT:
window->win_chat_x = window->win_x;
window->win_chat_y = window->win_y + 1;
window->win_chat_width = window->win_width - max_length -
window->win_chat_x = window->win_x + add_left;
window->win_chat_y = window->win_y + add_top + 1;
window->win_chat_width = window->win_width - add_left - add_right - max_length -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_x = window->win_x + window->win_width -
max_length -
window->win_nick_x = window->win_x + window->win_width - add_right - max_length -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_y = window->win_y + 1;
window->win_nick_y = window->win_y + add_top + 1;
window->win_nick_width = max_length +
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
if (CONFIG_BOOLEAN(config_look_infobar))
{
window->win_chat_height = window->win_height - 4;
window->win_nick_height = window->win_height - 4;
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
window->win_nick_height = window->win_height - add_top - add_bottom - 4;
}
else
{
window->win_chat_height = window->win_height - 3;
window->win_nick_height = window->win_height - 3;
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
window->win_nick_height = window->win_height - add_top - add_bottom - 3;
}
window->win_nick_num_max = window->win_nick_height;
break;
case CONFIG_LOOK_NICKLIST_TOP:
window->win_chat_x = window->win_x;
window->win_chat_y = window->win_y + 1 + lines +
window->win_chat_x = window->win_x + add_left;
window->win_chat_y = window->win_y + add_top + 1 + lines +
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_chat_width = window->win_width;
window->win_chat_width = window->win_width - add_left - add_right;
if (CONFIG_BOOLEAN(config_look_infobar))
window->win_chat_height = window->win_height - 3 - lines -
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
else
window->win_chat_height = window->win_height - 3 - lines -
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_x = window->win_x;
window->win_nick_y = window->win_y + 1;
window->win_nick_width = window->win_width;
window->win_nick_x = window->win_x + add_left;
window->win_nick_y = window->win_y + add_top + 1;
window->win_nick_width = window->win_width - add_left - add_right;
window->win_nick_height = lines +
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_num_max = lines * (window->win_nick_width / (max_length + 1));
break;
case CONFIG_LOOK_NICKLIST_BOTTOM:
window->win_chat_x = window->win_x;
window->win_chat_y = window->win_y + 1;
window->win_chat_width = window->win_width;
window->win_chat_x = window->win_x + add_left;
window->win_chat_y = window->win_y + add_top + 1;
window->win_chat_width = window->win_width - add_left - add_right;
if (CONFIG_BOOLEAN(config_look_infobar))
window->win_chat_height = window->win_height - 3 - lines -
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
else
window->win_chat_height = window->win_height - 3 - lines -
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_x = window->win_x;
if (CONFIG_BOOLEAN(config_look_infobar))
window->win_nick_y = window->win_y + window->win_height -
window->win_nick_y = window->win_y + window->win_height - add_bottom -
2 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
else
window->win_nick_y = window->win_y + window->win_height -
window->win_nick_y = window->win_y + window->win_height - add_bottom -
2 - lines -
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
window->win_nick_width = window->win_width;
@@ -332,20 +340,20 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
break;
}
window->win_chat_cursor_x = window->win_x;
window->win_chat_cursor_y = window->win_y;
window->win_chat_cursor_x = window->win_x + add_left;
window->win_chat_cursor_y = window->win_y + add_top;
}
else
{
window->win_chat_x = window->win_x;
window->win_chat_y = window->win_y + 1;
window->win_chat_width = window->win_width;
window->win_chat_x = window->win_x + add_left;
window->win_chat_y = window->win_y + add_top + 1;
window->win_chat_width = window->win_width - add_left - add_right;
if (CONFIG_BOOLEAN(config_look_infobar))
window->win_chat_height = window->win_height - 4;
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
else
window->win_chat_height = window->win_height - 3;
window->win_chat_cursor_x = window->win_x;
window->win_chat_cursor_y = window->win_y;
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
window->win_chat_cursor_x = window->win_x + add_left;
window->win_chat_cursor_y = window->win_y + add_top;
window->win_nick_x = -1;
window->win_nick_y = -1;
window->win_nick_width = -1;
@@ -354,26 +362,26 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
}
/* title window */
window->win_title_x = window->win_x;
window->win_title_y = window->win_y;
window->win_title_width = window->win_width;
window->win_title_x = window->win_x + add_left;
window->win_title_y = window->win_y + add_top;
window->win_title_width = window->win_width - add_left - add_right;
window->win_title_height = 1;
/* status window */
window->win_status_x = window->win_x;
window->win_status_x = window->win_x + add_left;
if (CONFIG_BOOLEAN(config_look_infobar))
window->win_status_y = window->win_y + window->win_height - 3;
window->win_status_y = window->win_y + window->win_height - add_bottom - 3;
else
window->win_status_y = window->win_y + window->win_height - 2;
window->win_status_width = window->win_width;
window->win_status_y = window->win_y + window->win_height - add_bottom - 2;
window->win_status_width = window->win_width - add_left - add_right;
window->win_status_height = 1;
/* infobar window */
if (CONFIG_BOOLEAN(config_look_infobar))
{
window->win_infobar_x = window->win_x;
window->win_infobar_y = window->win_y + window->win_height - 2;
window->win_infobar_width = window->win_width;
window->win_infobar_x = window->win_x + add_left;
window->win_infobar_y = window->win_y + window->win_height - add_bottom - 2;
window->win_infobar_width = window->win_width - add_left - add_right;
window->win_infobar_height = 1;
}
else
@@ -385,9 +393,9 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
}
/* input window */
window->win_input_x = window->win_x;
window->win_input_y = window->win_y + window->win_height - 1;
window->win_input_width = window->win_width;
window->win_input_x = window->win_x + add_left;
window->win_input_y = window->win_y + window->win_height - add_bottom - 1;
window->win_input_width = window->win_width - add_left - add_right;
window->win_input_height = 1;
return 1;
@@ -403,7 +411,7 @@ gui_window_draw_separator (struct t_gui_window *window)
if (GUI_CURSES(window)->win_separator)
delwin (GUI_CURSES(window)->win_separator);
if (window->win_x > 0)
if (window->win_x > gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT))
{
GUI_CURSES(window)->win_separator = newwin (window->win_height,
1,
@@ -411,8 +419,8 @@ gui_window_draw_separator (struct t_gui_window *window)
window->win_x - 1);
gui_window_set_weechat_color (GUI_CURSES(window)->win_separator,
GUI_COLOR_SEPARATOR);
wborder (GUI_CURSES(window)->win_separator,
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
mvwvline (GUI_CURSES(window)->win_separator, 0, 0, ACS_VLINE,
window->win_height);
wnoutrefresh (GUI_CURSES(window)->win_separator);
refresh ();
}
@@ -928,15 +936,32 @@ gui_window_refresh_windows ()
{
struct t_gui_window *ptr_win, *old_current_window;
struct t_gui_buffer *ptr_buffer;
struct t_gui_bar *ptr_bar;
int add_bottom, add_top, add_left, add_right;
if (!gui_ok)
return;
old_current_window = gui_current_window;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (ptr_bar->type == GUI_BAR_TYPE_ROOT)
{
gui_bar_window_calculate_pos_size (ptr_bar->bar_window, NULL);
gui_bar_draw (ptr_bar);
}
}
if (gui_window_auto_resize (gui_windows_tree, 0, 0,
gui_window_get_width (),
gui_window_get_height (), 0) < 0)
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
if (gui_window_auto_resize (gui_windows_tree, add_left, add_top,
gui_window_get_width () - add_left - add_right,
gui_window_get_height () - add_top - add_bottom,
0) < 0)
gui_window_merge_all (gui_current_window);
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
@@ -1048,7 +1073,7 @@ void
gui_window_resize (struct t_gui_window *window, int pourcentage)
{
struct t_gui_window_tree *parent;
int old_split_pct;
int old_split_pct, add_bottom, add_top, add_left, add_right;
if (!gui_ok)
return;
@@ -1062,9 +1087,16 @@ gui_window_resize (struct t_gui_window *window, int pourcentage)
parent->split_pct = pourcentage;
else
parent->split_pct = 100 - pourcentage;
if (gui_window_auto_resize (gui_windows_tree, 0, 0,
gui_window_get_width (),
gui_window_get_height (), 1) < 0)
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
if (gui_window_auto_resize (gui_windows_tree, add_left, add_top,
gui_window_get_width () - add_left - add_right,
gui_window_get_height () - add_top - add_bottom,
1) < 0)
parent->split_pct = old_split_pct;
else
gui_window_refresh_windows ();
@@ -1126,7 +1158,7 @@ gui_window_merge (struct t_gui_window *window)
void
gui_window_merge_all (struct t_gui_window *window)
{
int num_deleted;
int num_deleted, add_bottom, add_top, add_left, add_right;
if (!gui_ok)
return;
@@ -1143,12 +1175,19 @@ gui_window_merge_all (struct t_gui_window *window)
gui_window_tree_free (&gui_windows_tree);
gui_window_tree_init (window);
window->ptr_tree = gui_windows_tree;
window->win_x = 0;
window->win_y = 0;
window->win_width = gui_window_get_width ();
window->win_height = gui_window_get_height ();
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
window->win_x = add_left;
window->win_y = add_top;
window->win_width = gui_window_get_width () - add_left - add_right;
window->win_height = gui_window_get_height () - add_top - add_bottom;
window->win_width_pct = 100;
window->win_height_pct = 100;
gui_current_window = window;
gui_window_switch_to_buffer (window, window->buffer);
gui_window_redraw_buffer (window->buffer);
@@ -1450,6 +1489,9 @@ gui_window_title_reset ()
void
gui_window_objects_print_log (struct t_gui_window *window)
{
struct t_gui_bar_window *ptr_bar_win;
log_printf ("");
log_printf (" win_title . . . . . : 0x%x", GUI_CURSES(window)->win_title);
log_printf (" win_chat. . . . . . : 0x%x", GUI_CURSES(window)->win_chat);
log_printf (" win_nick. . . . . . : 0x%x", GUI_CURSES(window)->win_nick);
@@ -1457,4 +1499,10 @@ gui_window_objects_print_log (struct t_gui_window *window)
log_printf (" win_infobar . . . . : 0x%x", GUI_CURSES(window)->win_infobar);
log_printf (" win_input . . . . . : 0x%x", GUI_CURSES(window)->win_input);
log_printf (" win_separator . . . : 0x%x", GUI_CURSES(window)->win_separator);
for (ptr_bar_win = GUI_CURSES(window)->bar_windows; ptr_bar_win;
ptr_bar_win = ptr_bar_win->next_bar_window)
{
gui_bar_window_print_log (ptr_bar_win);
}
}
+17
View File
@@ -33,6 +33,18 @@
#define GUI_CURSES(window) ((t_gui_curses_objects *)(window->gui_objects))
struct t_gui_bar_window
{
struct t_gui_bar *bar; /* pointer to bar */
int x, y; /* position of window */
int width, height; /* window size */
WINDOW *win_bar; /* bar Curses window */
WINDOW *win_separator; /* separator (optional) */
struct t_gui_bar_window *next_bar_window;
/* link to next bar window */
/* (only used if bar is in windows) */
};
typedef struct t_gui_curses_objects t_gui_curses_objects;
struct t_gui_curses_objects
@@ -44,6 +56,7 @@ struct t_gui_curses_objects
WINDOW *win_infobar; /* info bar window */
WINDOW *win_input; /* input window */
WINDOW *win_separator; /* separation between 2 splited (V) win */
struct t_gui_bar_window *bar_windows; /* bar windows */
};
extern struct t_gui_color gui_weechat_colors[];
@@ -52,6 +65,10 @@ extern struct t_gui_color gui_weechat_colors[];
extern int gui_color_get_pair (int num_color);
extern void gui_color_init ();
/* bar functions */
extern void gui_bar_window_calculate_pos_size (struct t_gui_bar_window *bar_window,
struct t_gui_window *window);
/* chat functions */
extern void gui_chat_calculate_line_diff (struct t_gui_window *window,
struct t_gui_line **line,
+3 -3
View File
@@ -14,9 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
SET(WEECHAT_GTK_SRC gui-gtk-chat.c gui-gtk-color.c gui-gtk-infobar.c
gui-gtk-input.c gui-gtk-keyboard.c gui-gtk-main.c gui-gtk-nicklist.c
gui-gtk-status.c gui-gtk-window.c gui-gtk.h)
SET(WEECHAT_GTK_SRC gui-gtk-bar.c gui-gtk-chat.c gui-gtk-color.c
gui-gtk-infobar.c gui-gtk-input.c gui-gtk-keyboard.c gui-gtk-main.c
gui-gtk-nicklist.c gui-gtk-status.c gui-gtk-window.c gui-gtk.h)
SET(EXECUTABLE weechat-gtk)
+2 -1
View File
@@ -37,7 +37,8 @@ weechat_gtk_LDADD = ../../core/weechat.o \
$(PLUGINS_LFLAGS) \
$(GTK_LFLAGS)
weechat_gtk_SOURCES = gui-gtk-chat.c \
weechat_gtk_SOURCES = gui-gtk-bar.c \
gui-gtk-chat.c \
gui-gtk-color.c \
gui-gtk-infobar.c \
gui-gtk-input.c \
+109
View File
@@ -0,0 +1,109 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
/* gui-gtk-bar.c: bar functions for Gtk GUI */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include "../../core/weechat.h"
#include "../../core/wee-log.h"
#include "../gui-bar.h"
#include "../gui-chat.h"
#include "../gui-color.h"
#include "../gui-window.h"
#include "gui-gtk.h"
/*
* gui_bar_windows_get_size: get total bar size (window bars) for a position
* bar is optional, if not NULL, size is computed
* from bar 1 to bar # - 1
*/
int
gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
int position)
{
(void) bar;
(void) window;
(void) position;
/* TODO: write this function for Gtk */
return 0;
}
/*
* gui_bar_window_new: create a new "window bar" for a bar, in screen or a window
* if window is not NULL, bar window will be in this window
*/
int
gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window)
{
(void) bar;
(void) window;
/* TODO: write this function for Gtk */
return 0;
}
/*
* gui_bar_draw: draw a bar
*/
void
gui_bar_draw (struct t_gui_bar *bar)
{
(void) bar;
/* TODO: write this function for Gtk */
}
/*
* gui_bar_window_free: delete an bar window
*/
void
gui_bar_window_free (struct t_gui_bar_window *bar_window)
{
/* TODO: complete this function for Gtk */
/* free bar window */
free (bar_window);
}
/*
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
*/
void
gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
{
log_printf ("");
log_printf (" [window bar (addr:0x%x)]", bar_window);
log_printf (" bar . . . . . . . : 0x%x", bar_window->bar);
log_printf (" x . . . . . . . . : %d", bar_window->x);
log_printf (" y . . . . . . . . : %d", bar_window->y);
log_printf (" width . . . . . . : %d", bar_window->width);
log_printf (" height. . . . . . : %d", bar_window->height);
}
+15
View File
@@ -76,6 +76,7 @@ gui_window_objects_init (struct t_gui_window *window)
GUI_GTK(window)->texttag_chat = NULL;
GUI_GTK(window)->textview_nicklist = NULL;
GUI_GTK(window)->textbuffer_nicklist = NULL;
GUI_GTK(window)->bar_windows = NULL;
return 1;
}
else
@@ -919,9 +920,23 @@ gui_window_title_reset ()
void
gui_window_objects_print_log (struct t_gui_window *window)
{
struct t_gui_bar_window *ptr_bar_win;
log_printf (" textview_chat . . . : 0x%x", GUI_GTK(window)->textview_chat);
log_printf (" textbuffer_chat . . : 0x%x", GUI_GTK(window)->textbuffer_chat);
log_printf (" texttag_chat. . . . : 0x%x", GUI_GTK(window)->texttag_chat);
log_printf (" textview_nicklist . : 0x%x", GUI_GTK(window)->textview_nicklist);
log_printf (" textbuffer_nicklist : 0x%x", GUI_GTK(window)->textbuffer_nicklist);
for (ptr_bar_win = GUI_GTK(window)->bar_windows; ptr_bar_win;
ptr_bar_win = ptr_bar_win->next_bar_window)
{
log_printf ("");
log_printf (" [window bar (addr:0x%x)]", ptr_bar_win);
log_printf (" bar . . . . . . . : 0x%x", ptr_bar_win->bar);
log_printf (" x . . . . . . . . : %d", ptr_bar_win->x);
log_printf (" y . . . . . . . . : %d", ptr_bar_win->y);
log_printf (" width . . . . . . : %d", ptr_bar_win->width);
log_printf (" height. . . . . . : %d", ptr_bar_win->height);
}
}
+11
View File
@@ -54,6 +54,16 @@ struct t_gui_line;
#define GUI_GTK(window) ((t_gui_gtk_objects *)(window->gui_objects))
struct t_gui_bar_window
{
struct t_gui_bar *bar; /* pointer to bar */
int x, y; /* position of window */
int width, height; /* window size */
struct t_gui_bar_window *next_bar_window;
/* link to next bar window */
/* (only used if bar is in windows) */
};
typedef struct t_gui_gtk_objects t_gui_gtk_objects;
struct t_gui_gtk_objects
@@ -63,6 +73,7 @@ struct t_gui_gtk_objects
GtkTextTag *texttag_chat; /* texttag widget for chat */
GtkWidget *textview_nicklist; /* textview widget for nicklist */
GtkTextBuffer *textbuffer_nicklist; /* textbuffer widget for nicklist */
struct t_gui_bar_window *bar_windows; /* bar windows */
};
//extern t_gui_color gui_weechat_colors[];
+592
View File
@@ -0,0 +1,592 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
/* gui-bar-item.c: bar item functions, used by all GUI */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hook.h"
#include "../core/wee-log.h"
#include "../core/wee-string.h"
#include "../plugins/plugin.h"
#include "gui-bar-item.h"
#include "gui-bar.h"
#include "gui-buffer.h"
#include "gui-color.h"
#include "gui-hotlist.h"
#include "gui-window.h"
struct t_gui_bar_item *gui_bar_items = NULL; /* first bar item */
struct t_gui_bar_item *last_gui_bar_item = NULL; /* last bar item */
char *gui_bar_item_names[GUI_BAR_NUM_ITEMS] =
{ "buffer_count", "buffer_plugin", "buffer_name", "nicklist_count", "scroll",
"hotlist"
};
struct t_hook *gui_bar_item_hook1 = NULL;
struct t_hook *gui_bar_item_hook2 = NULL;
struct t_hook *gui_bar_item_hook3 = NULL;
struct t_hook *gui_bar_item_hook4 = NULL;
struct t_hook *gui_bar_item_hook5 = NULL;
struct t_hook *gui_bar_item_hook6 = NULL;
struct t_hook *gui_bar_item_hook7 = NULL;
/*
* gui_bar_item_search: search a bar item
*/
struct t_gui_bar_item *
gui_bar_item_search (char *name)
{
struct t_gui_bar_item *ptr_item;
if (!name || !name[0])
return NULL;
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
{
if (strcmp (ptr_item->name, name) == 0)
return ptr_item;
}
/* bar item not found */
return NULL;
}
/*
* gui_bar_item_search_with_plugin: search a bar item for a plugin
*/
struct t_gui_bar_item *
gui_bar_item_search_with_plugin (struct t_weechat_plugin *plugin, char *name)
{
struct t_gui_bar_item *ptr_item;
if (!name || !name[0])
return NULL;
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
{
if ((ptr_item->plugin == plugin)
&& (strcmp (ptr_item->name, name) == 0))
return ptr_item;
}
/* bar item not found */
return NULL;
}
/*
* gui_bar_item_new: create a new bar item
*/
struct t_gui_bar_item *
gui_bar_item_new (struct t_weechat_plugin *plugin, char *name,
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width),
void *build_callback_data)
{
struct t_gui_bar_item *new_bar_item;
if (!name || !name[0])
return NULL;
/* it's not possible to create 2 bar items with same name for same plugin*/
if (gui_bar_item_search_with_plugin (plugin, name))
return NULL;
/* create bar item */
new_bar_item = (struct t_gui_bar_item *) malloc (sizeof (struct t_gui_bar_item));
if (new_bar_item)
{
new_bar_item->plugin = plugin;
new_bar_item->name = strdup (name);
new_bar_item->build_callback = build_callback;
new_bar_item->build_callback_data = build_callback_data;
/* add bar item to bar items queue */
new_bar_item->prev_item = last_gui_bar_item;
if (gui_bar_items)
last_gui_bar_item->next_item = new_bar_item;
else
gui_bar_items = new_bar_item;
last_gui_bar_item = new_bar_item;
new_bar_item->next_item = NULL;
return new_bar_item;
}
/* failed to create bar item */
return NULL;
}
/*
* gui_bar_contains_item: return 1 if a bar contains item, O otherwise
*/
int
gui_bar_contains_item (struct t_gui_bar *bar, char *name)
{
int i;
if (!bar || !name || !name[0])
return 0;
for (i = 0; i < bar->items_count; i++)
{
if (strcmp (bar->items_array[i], name) == 0)
return 1;
}
/* item is not in bar */
return 0;
}
/*
* gui_bar_item_update: update an item on all bars displayed on screen
*/
void
gui_bar_item_update (char *name)
{
struct t_gui_bar *ptr_bar;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (gui_bar_contains_item (ptr_bar, name))
gui_bar_draw (ptr_bar);
}
}
/*
* gui_bar_item_free: delete a bar item
*/
void
gui_bar_item_free (struct t_gui_bar_item *item)
{
/* remove bar item from bar items list */
if (item->prev_item)
item->prev_item->next_item = item->next_item;
if (item->next_item)
item->next_item->prev_item = item->prev_item;
if (gui_bar_items == item)
gui_bar_items = item->next_item;
if (last_gui_bar_item == item)
last_gui_bar_item = item->prev_item;
/* free data */
if (item->name)
free (item->name);
free (item);
}
/*
* gui_bar_item_free_all: delete all bar items
*/
void
gui_bar_item_free_all ()
{
while (gui_bar_items)
{
gui_bar_item_free (gui_bar_items);
}
}
/*
* gui_bar_item_free_all_plugin: delete all bar items for a plugin
*/
void
gui_bar_item_free_all_plugin (struct t_weechat_plugin *plugin)
{
struct t_gui_bar_item *ptr_item, *next_item;
ptr_item = gui_bar_items;
while (ptr_item)
{
next_item = ptr_item->next_item;
if (ptr_item->plugin == plugin)
gui_bar_item_free (ptr_item);
ptr_item = next_item;
}
}
/*
* gui_bar_item_default_buffer_count: default item for number of buffers
*/
char *
gui_bar_item_default_buffer_count (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[64];
/* make C compiler happy */
(void) data;
(void) item;
(void) window;
(void) max_width;
snprintf (buf, sizeof (buf), "%s[%s%d%s] ",
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
GUI_COLOR(GUI_COLOR_STATUS),
(last_gui_buffer) ? last_gui_buffer->number : 0,
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
return strdup (buf);
}
/*
* gui_bar_item_default_buffer_plugin: default item for name of buffer plugin
*/
char *
gui_bar_item_default_buffer_plugin (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[64];
/* make C compiler happy */
(void) data;
(void) item;
(void) max_width;
if (!window)
return NULL;
snprintf (buf, sizeof (buf), "%s[%s%s%s] ",
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
GUI_COLOR(GUI_COLOR_STATUS),
(window->buffer->plugin) ? window->buffer->plugin->name : "core",
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
return strdup (buf);
}
/*
* gui_bar_item_default_buffer_name: default item for name of buffer
*/
char *
gui_bar_item_default_buffer_name (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[256];
/* make C compiler happy */
(void) data;
(void) item;
(void) max_width;
if (!window)
return NULL;
snprintf (buf, sizeof (buf), "%s%d%s:%s%s%s/%s%s ",
GUI_COLOR(GUI_COLOR_STATUS_NUMBER),
window->buffer->number,
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
GUI_COLOR(GUI_COLOR_STATUS_CATEGORY),
window->buffer->category,
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
GUI_COLOR(GUI_COLOR_STATUS_NAME),
window->buffer->name);
return strdup (buf);
}
/*
* gui_bar_item_default_nicklist_count: default item for number of nicks in
* buffer nicklist
*/
char *
gui_bar_item_default_nicklist_count (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[64];
/* make C compiler happy */
(void) data;
(void) item;
(void) max_width;
if (!window || !window->buffer->nicklist)
return NULL;
snprintf (buf, sizeof (buf), "%s[%s%d%s] ",
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
GUI_COLOR(GUI_COLOR_STATUS),
window->buffer->nicklist_visible_count,
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
return strdup (buf);
}
/*
* gui_bar_item_default_scroll: default item for scrolling indicator
*/
char *
gui_bar_item_default_scroll (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[64];
/* make C compiler happy */
(void) data;
(void) item;
(void) max_width;
if (!window || !window->scroll)
return NULL;
snprintf (buf, sizeof (buf), "%s%s ",
GUI_COLOR(GUI_COLOR_STATUS_MORE),
_("(MORE)"));
return strdup (buf);
}
/*
* gui_bar_item_default_hotlist: default item for hotlist
*/
char *
gui_bar_item_default_hotlist (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
char buf[1024], format[32];
struct t_gui_hotlist *ptr_hotlist;
int names_count, display_name;
/* make C compiler happy */
(void) data;
(void) item;
(void) window;
(void) max_width;
if (!gui_hotlist)
return NULL;
buf[0] = '\0';
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
strcat (buf, "[");
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS));
strcat (buf, _("Act: "));
names_count = 0;
for (ptr_hotlist = gui_hotlist; ptr_hotlist;
ptr_hotlist = ptr_hotlist->next_hotlist)
{
switch (ptr_hotlist->priority)
{
case GUI_HOTLIST_LOW:
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_OTHER));
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 1) != 0);
break;
case GUI_HOTLIST_MESSAGE:
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_MSG));
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 2) != 0);
break;
case GUI_HOTLIST_PRIVATE:
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_PRIVATE));
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 4) != 0);
break;
case GUI_HOTLIST_HIGHLIGHT:
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_HIGHLIGHT));
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 8) != 0);
break;
default:
display_name = 0;
break;
}
sprintf (buf + strlen (buf), "%d", ptr_hotlist->buffer->number);
if (display_name
&& (CONFIG_INTEGER(config_look_hotlist_names_count) != 0)
&& (names_count < CONFIG_INTEGER(config_look_hotlist_names_count)))
{
names_count++;
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
strcat (buf, ":");
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS));
if (CONFIG_INTEGER(config_look_hotlist_names_length) == 0)
snprintf (format, sizeof (format) - 1, "%%s");
else
snprintf (format, sizeof (format) - 1,
"%%.%ds",
CONFIG_INTEGER(config_look_hotlist_names_length));
sprintf (buf + strlen (buf), format, ptr_hotlist->buffer->name);
}
if (ptr_hotlist->next_hotlist)
strcat (buf, ",");
if (strlen (buf) > sizeof (buf) - 32)
break;
}
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
strcat (buf, "] ");
return strdup (buf);
}
/*
* gui_bar_item_signal_cb: callback when a signal is received, for rebuilding
* an item
*/
int
gui_bar_item_signal_cb (void *data, char *signal,
char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) signal;
(void) type_data;
(void) signal_data;
gui_bar_item_update ((char *)data);
return WEECHAT_RC_OK;
}
/*
* gui_bar_item_init: init default items in WeeChat
*/
void
gui_bar_item_init ()
{
/* buffer count */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT],
&gui_bar_item_default_buffer_count, NULL);
gui_bar_item_hook1 = hook_signal (NULL, "buffer_open",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT]);
gui_bar_item_hook2 = hook_signal (NULL, "buffer_closed",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT]);
/* buffer plugin */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_PLUGIN],
&gui_bar_item_default_buffer_plugin, NULL);
/* buffer name */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME],
&gui_bar_item_default_buffer_name, NULL);
gui_bar_item_hook3 = hook_signal (NULL, "buffer_renamed",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME]);
gui_bar_item_hook4 = hook_signal (NULL, "buffer_moved",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME]);
/* nicklist count */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT],
&gui_bar_item_default_nicklist_count, NULL);
gui_bar_item_hook5 = hook_signal (NULL, "nicklist_changed",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT]);
/* scroll indicator */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_SCROLL],
&gui_bar_item_default_scroll, NULL);
gui_bar_item_hook6 = hook_signal (NULL, "window_scrolled",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_SCROLL]);
/* hotlist */
gui_bar_item_new (NULL,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_HOTLIST],
&gui_bar_item_default_hotlist, NULL);
gui_bar_item_hook7 = hook_signal (NULL, "hotlist_changed",
&gui_bar_item_signal_cb,
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_HOTLIST]);
}
/*
* gui_bar_item_end: remove bar items and hooks
*/
void
gui_bar_item_end ()
{
/* remove hooks */
unhook (gui_bar_item_hook1);
unhook (gui_bar_item_hook2);
unhook (gui_bar_item_hook3);
unhook (gui_bar_item_hook4);
unhook (gui_bar_item_hook5);
unhook (gui_bar_item_hook6);
unhook (gui_bar_item_hook7);
/* remove bar items */
gui_bar_item_free_all ();
}
/*
* gui_bar_item_print_log: print bar items infos in log (usually for crash dump)
*/
void
gui_bar_item_print_log ()
{
struct t_gui_bar_item *ptr_item;
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
{
log_printf ("");
log_printf ("[bar item (addr:0x%x)]", ptr_item);
log_printf (" plugin . . . . . . . . : 0x%x", ptr_item->plugin);
log_printf (" name . . . . . . . . . : '%s'", ptr_item->name);
log_printf (" build_callback . . . . : 0x%x", ptr_item->build_callback);
log_printf (" build_callback_data. . : 0x%x", ptr_item->build_callback_data);
log_printf (" prev_item. . . . . . . : 0x%x", ptr_item->prev_item);
log_printf (" next_item. . . . . . . : 0x%x", ptr_item->next_item);
}
}
+74
View File
@@ -0,0 +1,74 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef __WEECHAT_GUI_BAR_ITEM_H
#define __WEECHAT_GUI_BAR_ITEM_H 1
enum t_gui_bar_item_weechat
{
GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT = 0,
GUI_BAR_ITEM_WEECHAT_BUFFER_PLUGIN,
GUI_BAR_ITEM_WEECHAT_BUFFER_NAME,
GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT,
GUI_BAR_ITEM_WEECHAT_SCROLL,
GUI_BAR_ITEM_WEECHAT_HOTLIST,
/* number of bar items */
GUI_BAR_NUM_ITEMS,
};
struct t_gui_window;
struct t_gui_bar_item
{
struct t_weechat_plugin *plugin; /* plugin */
char *name; /* bar item name */
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width);
/* callback called for building item */
void *build_callback_data; /* data for callback */
struct t_gui_bar_item *prev_item; /* link to previous bar item */
struct t_gui_bar_item *next_item; /* link to next bar item */
};
/* variables */
extern struct t_gui_bar_item *gui_bar_items;
extern struct t_gui_bar_item *last_gui_bar_item;
/* functions */
extern struct t_gui_bar_item *gui_bar_item_search (char *name);
extern struct t_gui_bar_item *gui_bar_item_new (struct t_weechat_plugin *plugin,
char *name,
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width),
void *build_callback_data);
extern void gui_bar_item_update (char *name);
extern void gui_bar_item_free (struct t_gui_bar_item *item);
extern void gui_bar_item_free_all ();
extern void gui_bar_item_free_all_plugin (struct t_weechat_plugin *plugin);
extern void gui_bar_item_init ();
extern void gui_bar_item_end ();
extern void gui_bar_item_print_log ();
#endif /* gui-bar-item.h */
+312
View File
@@ -0,0 +1,312 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
/* gui-bar.c: bar functions, used by all GUI */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include "../core/weechat.h"
#include "../core/wee-log.h"
#include "../core/wee-string.h"
#include "gui-bar.h"
#include "gui-window.h"
char *gui_bar_type_str[GUI_BAR_NUM_TYPES] =
{ "root", "window_active", "window_inactive" };
char *gui_bar_position_str[GUI_BAR_NUM_POSITIONS] =
{ "bottom", "top", "left", "right" };
struct t_gui_bar *gui_bars = NULL; /* first bar */
struct t_gui_bar *last_gui_bar = NULL; /* last bar */
/*
* gui_bar_root_get_size: get total bar size ("root" type) for a position
*/
int
gui_bar_root_get_size (struct t_gui_bar *bar, int position)
{
struct t_gui_bar *ptr_bar;
int total_size;
total_size = 0;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (bar && (ptr_bar == bar))
return total_size;
if ((ptr_bar->type == GUI_BAR_TYPE_ROOT)
&& (ptr_bar->position == position))
{
total_size += ptr_bar->size;
if (ptr_bar->separator)
total_size++;
}
}
return total_size;
}
/*
* gui_bar_search: search a bar by name
*/
struct t_gui_bar *
gui_bar_search (char *name)
{
struct t_gui_bar *ptr_bar;
if (!name || !name[0])
return NULL;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (strcmp (ptr_bar->name, name) == 0)
return ptr_bar;
}
/* bar not found */
return NULL;
}
/*
* gui_bar_new: create a new bar
*/
struct t_gui_bar *
gui_bar_new (struct t_weechat_plugin *plugin, char *name, char *type,
char *position, int size, int separator, char *items)
{
struct t_gui_bar *new_bar;
struct t_gui_window *ptr_win;
int i, type_value, position_value;
if (!name || !name[0])
return NULL;
/* it's not possible to create 2 bars with same name */
if (gui_bar_search (name))
return NULL;
/* look for type */
type_value = -1;
for (i = 0; i < GUI_BAR_NUM_TYPES; i++)
{
if (string_strcasecmp (type, gui_bar_type_str[i]) == 0)
{
type_value = i;
break;
}
}
if (type_value < 0)
return NULL;
/* look for position */
position_value = -1;
for (i = 0; i < GUI_BAR_NUM_POSITIONS; i++)
{
if (string_strcasecmp (position, gui_bar_position_str[i]) == 0)
{
position_value = i;
break;
}
}
if (position_value < 0)
return NULL;
/* create bar */
new_bar = (struct t_gui_bar *) malloc (sizeof (struct t_gui_bar));
if (new_bar)
{
new_bar->plugin = plugin;
new_bar->number = (last_gui_bar) ? last_gui_bar->number + 1 : 1;
new_bar->name = strdup (name);
new_bar->type = type_value;
new_bar->position = position_value;
new_bar->size = size;
new_bar->separator = separator;
if (items && items[0])
{
new_bar->items = strdup (items);
new_bar->items_array = string_explode (items, ",", 0, 0,
&new_bar->items_count);
}
else
{
new_bar->items = NULL;
new_bar->items_count = 0;
new_bar->items_array = NULL;
}
if (type_value == GUI_BAR_TYPE_ROOT)
{
/* create only one window for bar */
gui_bar_window_new (new_bar, NULL);
}
else
{
/* create bar window for all opened windows */
for (ptr_win = gui_windows; ptr_win;
ptr_win = ptr_win->next_window)
{
gui_bar_window_new (new_bar, ptr_win);
}
}
/* add bar to bars queue */
new_bar->prev_bar = last_gui_bar;
if (gui_bars)
last_gui_bar->next_bar = new_bar;
else
gui_bars = new_bar;
last_gui_bar = new_bar;
new_bar->next_bar = NULL;
gui_window_refresh_needed = 1;
return new_bar;
}
/* failed to create bar */
return NULL;
}
/*
* gui_bar_update: update a bar on screen
*/
void
gui_bar_update (char *name)
{
struct t_gui_bar *ptr_bar;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (strcmp (ptr_bar->name, name) == 0)
gui_bar_draw (ptr_bar);
}
}
/*
* gui_bar_free: delete a bar
*/
void
gui_bar_free (struct t_gui_bar *bar)
{
/* remove bar from bars list */
if (bar->prev_bar)
bar->prev_bar->next_bar = bar->next_bar;
if (bar->next_bar)
bar->next_bar->prev_bar = bar->prev_bar;
if (gui_bars == bar)
gui_bars = bar->next_bar;
if (last_gui_bar == bar)
last_gui_bar = bar->prev_bar;
/* free data */
if (bar->name)
free (bar->name);
if (bar->bar_window)
gui_bar_window_free (bar->bar_window);
if (bar->items)
free (bar->items);
if (bar->items_array)
string_free_exploded (bar->items_array);
free (bar);
gui_window_refresh_needed = 1;
}
/*
* gui_bar_free_all: delete all bars
*/
void
gui_bar_free_all ()
{
while (gui_bars)
{
gui_bar_free (gui_bars);
}
}
/*
* gui_bar_free_all_plugin: delete all bars for a plugin
*/
void
gui_bar_free_all_plugin (struct t_weechat_plugin *plugin)
{
struct t_gui_bar *ptr_bar, *next_bar;
ptr_bar = gui_bars;
while (ptr_bar)
{
next_bar = ptr_bar->next_bar;
if (ptr_bar->plugin == plugin)
gui_bar_free (ptr_bar);
ptr_bar = next_bar;
}
}
/*
* gui_bar_print_log: print bar infos in log (usually for crash dump)
*/
void
gui_bar_print_log ()
{
struct t_gui_bar *ptr_bar;
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
log_printf ("");
log_printf ("[bar (addr:0x%x)]", ptr_bar);
log_printf (" plugin . . . . . . . . : 0x%x", ptr_bar->plugin);
log_printf (" number . . . . . . . . : %d", ptr_bar->number);
log_printf (" name . . . . . . . . . : '%s'", ptr_bar->name);
log_printf (" type . . . . . . . . . : %d (%s)",
ptr_bar->type,
gui_bar_type_str[ptr_bar->type]);
log_printf (" position . . . . . . . : %d (%s)",
ptr_bar->position,
gui_bar_position_str[ptr_bar->position]);
log_printf (" size . . . . . . . . . : %d", ptr_bar->size);
log_printf (" separator. . . . . . . : %d", ptr_bar->separator);
log_printf (" items. . . . . . . . . : '%s'", ptr_bar->items);
log_printf (" items_count. . . . . . : %d", ptr_bar->items_count);
log_printf (" items_array. . . . . . : 0x%x", ptr_bar->items_array);
log_printf (" bar_window . . . . . . : 0x%x", ptr_bar->bar_window);
log_printf (" prev_bar . . . . . . . : 0x%x", ptr_bar->prev_bar);
log_printf (" next_bar . . . . . . . : 0x%x", ptr_bar->next_bar);
if (ptr_bar->bar_window)
gui_bar_window_print_log (ptr_bar->bar_window);
}
}
+96
View File
@@ -0,0 +1,96 @@
/*
* Copyright (c) 2003-2008 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef __WEECHAT_GUI_BAR_H
#define __WEECHAT_GUI_BAR_H 1
struct t_weechat_plugin;
struct t_gui_window;
enum t_gui_bar_type
{
GUI_BAR_TYPE_ROOT = 0,
GUI_BAR_TYPE_WINDOW_ACTIVE,
GUI_BAR_TYPE_WINDOW_INACTIVE,
/* number of bar types */
GUI_BAR_NUM_TYPES,
};
enum t_gui_bar_position
{
GUI_BAR_POSITION_BOTTOM = 0,
GUI_BAR_POSITION_TOP,
GUI_BAR_POSITION_LEFT,
GUI_BAR_POSITION_RIGHT,
/* number of bar positions */
GUI_BAR_NUM_POSITIONS,
};
struct t_gui_bar
{
/* user choices */
struct t_weechat_plugin *plugin; /* plugin */
int number; /* bar number */
char *name; /* bar name */
int type; /* type (root or window) */
int position; /* position (bottom, top, left, right) */
int size; /* size of bar (in chars) */
int separator; /* 1 if separator (line) displayed */
char *items; /* bar items */
/* internal vars */
int items_count; /* number of bar items */
char **items_array; /* exploded bar items */
struct t_gui_bar_window *bar_window; /* pointer to bar window */
/* (for type root only) */
struct t_gui_bar *prev_bar; /* link to previous bar */
struct t_gui_bar *next_bar; /* link to next bar */
};
/* variables */
extern char *gui_bar_type_str[];
extern char *gui_bar_position_str[];
extern struct t_gui_bar *gui_bars;
extern struct t_gui_bar *last_gui_bar;
/* functions */
extern int gui_bar_root_get_size (struct t_gui_bar *bar, int position);
extern struct t_gui_bar *gui_bar_search (char *name);
extern struct t_gui_bar *gui_bar_new (struct t_weechat_plugin *plugin,
char *name, char *type, char *position,
int size, int separator, char *items);
extern void gui_bar_update (char *name);
extern void gui_bar_free (struct t_gui_bar *bar);
extern void gui_bar_free_all ();
extern void gui_bar_free_all_plugin (struct t_weechat_plugin *plugin);
extern void gui_bar_print_log ();
/* functions (GUI dependent) */
extern int gui_bar_window_get_size (struct t_gui_bar *bar,
struct t_gui_window *window, int position);
extern int gui_bar_window_new (struct t_gui_bar *bar,
struct t_gui_window *window);
extern void gui_bar_window_free (struct t_gui_bar_window *bar_window);
extern void gui_bar_draw (struct t_gui_bar *bar);
extern void gui_bar_window_print_log (struct t_gui_bar_window *bar_window);
#endif /* gui-bar.h */
+12 -3
View File
@@ -253,6 +253,9 @@ gui_buffer_set_category (struct t_gui_buffer *buffer, char *category)
buffer->category = strdup (category);
}
gui_status_refresh_needed = 1;
hook_signal_send ("buffer_renamed",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
/*
@@ -269,6 +272,9 @@ gui_buffer_set_name (struct t_gui_buffer *buffer, char *name)
buffer->name = strdup (name);
}
gui_status_refresh_needed = 1;
hook_signal_send ("buffer_renamed",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
/*
@@ -625,7 +631,7 @@ gui_buffer_close (struct t_gui_buffer *buffer, int switch_to_another)
struct t_gui_buffer *ptr_buffer;
struct t_gui_line *ptr_line;
hook_signal_send ("buffer_close",
hook_signal_send ("buffer_closing",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
if (buffer->close_callback)
@@ -708,6 +714,8 @@ gui_buffer_close (struct t_gui_buffer *buffer, int switch_to_another)
if (gui_windows && gui_current_window && gui_current_window->buffer)
gui_status_refresh_needed = 1;
hook_signal_send ("buffer_closed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
}
/*
@@ -903,8 +911,9 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number)
snprintf (buf1_str, sizeof (buf1_str) - 1, "%d", buffer->number);
argv[0] = buf1_str;
argv[1] = buf2_str;
/* TODO: send buffer_move event */
/*plugin_event_handler_exec ("buffer_move", 2, argv);*/
hook_signal_send ("buffer_moved",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
/*
+6
View File
@@ -28,8 +28,10 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hook.h"
#include "../core/wee-log.h"
#include "../core/wee-util.h"
#include "../plugins/plugin.h"
#include "gui-hotlist.h"
#include "gui-buffer.h"
#include "gui-status.h"
@@ -178,6 +180,8 @@ gui_hotlist_add_hotlist (struct t_gui_hotlist **hotlist,
*hotlist = new_hotlist;
*last_hotlist = new_hotlist;
}
hook_signal_send ("hotlist_changed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
}
/*
@@ -312,6 +316,8 @@ gui_hotlist_free (struct t_gui_hotlist **hotlist,
free (ptr_hotlist);
*hotlist = new_hotlist;
hook_signal_send ("hotlist_changed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
}
/*
+70 -35
View File
@@ -44,6 +44,35 @@ WEECHAT_PLUGIN_LICENSE("GPL");
struct t_weechat_plugin *weechat_demo_plugin = NULL;
#define weechat_plugin weechat_demo_plugin
int demo_debug = 0;
/*
* demo_debug_signal_debug_cb: callback for "debug" signal
*/
int
demo_debug_signal_debug_cb (void *data, char *signal, char *type_data,
void *signal_data)
{
/* make C compiler happy */
(void) data;
(void) signal;
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
{
if (weechat_strcasecmp ((char *)signal_data, "demo") == 0)
{
demo_debug ^= 1;
if (demo_debug)
weechat_printf (NULL, _("%s: debug enabled"), "demo");
else
weechat_printf (NULL, _("%s: debug disabled"), "demo");
}
}
return WEECHAT_RC_OK;
}
/*
* demo_printf_command_cb: demo command for printf
@@ -134,12 +163,15 @@ demo_buffer_close_cb (void *data, struct t_gui_buffer *buffer)
{
/* make C compiler happy */
(void) data;
weechat_printf (NULL,
"buffer_close_cb: buffer = %x (%s / %s)",
buffer,
weechat_buffer_get (buffer, "category"),
weechat_buffer_get (buffer, "name"));
if (demo_debug)
{
weechat_printf (NULL,
"buffer_close_cb: buffer = %x (%s / %s)",
buffer,
weechat_buffer_get (buffer, "category"),
weechat_buffer_get (buffer, "name"));
}
return WEECHAT_RC_OK;
}
@@ -243,7 +275,6 @@ demo_infolist_print (struct t_plugin_infolist *infolist, char *item_name)
break;
}
}
}
if (argv)
weechat_string_free_exploded (argv);
@@ -337,34 +368,37 @@ demo_signal_cb (void *data, char *signal, char *type_data, void *signal_data)
{
/* make C compiler happy */
(void) data;
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
if (demo_debug)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: '%s'"),
signal, type_data, (char *)signal_data);
}
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_INT) == 0)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: %d"),
signal, type_data, *((int *)signal_data));
}
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_POINTER) == 0)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: 0x%x"),
signal, type_data, signal_data);
}
else
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: 0x%x (unknown type)"),
signal, type_data, signal_data);
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: '%s'"),
signal, type_data, (char *)signal_data);
}
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_INT) == 0)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: %d"),
signal, type_data, *((int *)signal_data));
}
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_POINTER) == 0)
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: 0x%x"),
signal, type_data, signal_data);
}
else
{
weechat_printf (NULL,
_("demo_signal: signal: %s, type_data: %s, "
"signal_data: 0x%x (unknown type)"),
signal, type_data, signal_data);
}
}
return WEECHAT_RC_OK;
@@ -426,7 +460,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin)
"weechat_sharedir|charset_terminal|charset_internal|"
"inactivity|input|input_mask|input_pos",
&demo_info_command_cb, NULL);
weechat_hook_signal ("debug", &demo_debug_signal_debug_cb, NULL);
weechat_hook_signal ("*", &demo_signal_cb, NULL);
return WEECHAT_RC_OK;
+6 -5
View File
@@ -116,14 +116,15 @@ irc_debug_signal_debug_cb (void *data, char *signal, char *type_data,
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
{
if (weechat_strcasecmp ((char *)signal_data, "irc") == 0)
{
irc_debug ^= 1;
if (irc_debug)
weechat_printf (NULL, _("%s: debug enabled"), "irc");
else
weechat_printf (NULL, _("%s: debug disabled"), "irc");
}
}
if (irc_debug)
weechat_printf (NULL, _("%s: debug enabled"), "irc");
else
weechat_printf (NULL, _("%s: debug disabled"), "irc");
return WEECHAT_RC_OK;
}
+4 -4
View File
@@ -440,12 +440,12 @@ logger_buffer_open_signal_cb (void *data, char *signal, char *type_data,
}
/*
* logger_buffer_close_signal_cb: callback for "buffer_close" signal
* logger_buffer_closing_signal_cb: callback for "buffer_closing" signal
*/
int
logger_buffer_close_signal_cb (void *data, char *signal, char *type_data,
void *signal_data)
logger_buffer_closing_signal_cb (void *data, char *signal, char *type_data,
void *signal_data)
{
/* make C compiler happy */
(void) data;
@@ -652,7 +652,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin)
logger_start_buffer_all ();
weechat_hook_signal ("buffer_open", &logger_buffer_open_signal_cb, NULL);
weechat_hook_signal ("buffer_close", &logger_buffer_close_signal_cb, NULL);
weechat_hook_signal ("buffer_closing", &logger_buffer_closing_signal_cb, NULL);
weechat_hook_signal ("logger_backlog", &logger_backlog_signal_cb, NULL);
weechat_hook_signal ("logger_start", &logger_start_signal_cb, NULL);
weechat_hook_signal ("logger_stop", &logger_stop_signal_cb, NULL);
+14
View File
@@ -41,6 +41,8 @@
#include "../core/wee-string.h"
#include "../core/wee-utf8.h"
#include "../core/wee-util.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
#include "../gui/gui-buffer.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-nicklist.h"
@@ -337,6 +339,15 @@ plugin_load (char *filename)
new_plugin->nicklist_remove_nick = &gui_nicklist_remove_nick;
new_plugin->nicklist_remove_all = &gui_nicklist_remove_all;
new_plugin->bar_item_search = &gui_bar_item_search;
new_plugin->bar_item_new = &gui_bar_item_new;
new_plugin->bar_item_update = &gui_bar_item_update;
new_plugin->bar_item_remove = &gui_bar_item_free;
new_plugin->bar_search = &gui_bar_search;
new_plugin->bar_new = &gui_bar_new;
new_plugin->bar_update = &gui_bar_update;
new_plugin->bar_remove = &gui_bar_free;
new_plugin->command = &plugin_api_command;
new_plugin->info_get = &plugin_api_info_get;
@@ -523,6 +534,9 @@ plugin_remove (struct t_weechat_plugin *plugin)
/* remove all hooks */
unhook_all_plugin (plugin);
/* remove all bar items */
gui_bar_item_free_all_plugin (plugin);
/* remove pointer to this plugin on buffers */
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
File diff suppressed because it is too large Load Diff
+605
View File
@@ -178,6 +178,7 @@ static XS (XS_weechat_iconv_to_internal)
result = weechat_iconv_to_internal (SvPV (ST (0), PL_na), /* charset */
SvPV (ST (1), PL_na)); /* string */
PERL_RETURN_STRING_FREE(result);
}
@@ -208,6 +209,7 @@ static XS (XS_weechat_iconv_from_internal)
result = weechat_iconv_from_internal (SvPV (ST (0), PL_na), /* charset */
SvPV (ST (1), PL_na)); /* string */
PERL_RETURN_STRING_FREE(result);
}
@@ -236,6 +238,7 @@ static XS (XS_weechat_gettext)
}
result = weechat_gettext (SvPV (ST (0), PL_na)); /* string */
PERL_RETURN_STRING(result);
}
@@ -266,6 +269,7 @@ static XS (XS_weechat_ngettext)
result = weechat_ngettext (SvPV (ST (0), PL_na), /* single */
SvPV (ST (1), PL_na), /* plural */
SvIV (ST (2))); /* count */
PERL_RETURN_STRING(result);
}
@@ -349,6 +353,7 @@ static XS (XS_weechat_list_new)
}
result = script_ptr2str (weechat_list_new ());
PERL_RETURN_STRING_FREE(result);
}
@@ -379,6 +384,7 @@ static XS (XS_weechat_list_add)
result = script_ptr2str (weechat_list_add (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na), /* data */
SvPV (ST (2), PL_na))); /* where */
PERL_RETURN_STRING_FREE(result);
}
@@ -408,6 +414,7 @@ static XS (XS_weechat_list_search)
result = script_ptr2str (weechat_list_search (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na))); /* data */
PERL_RETURN_STRING_FREE(result);
}
@@ -437,6 +444,7 @@ static XS (XS_weechat_list_casesearch)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na))); /* data */
PERL_RETURN_STRING_FREE(result);
}
@@ -466,6 +474,7 @@ static XS (XS_weechat_list_get)
result = script_ptr2str (weechat_list_get (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvIV (ST (1)))); /* position */
PERL_RETURN_STRING_FREE(result);
}
@@ -523,6 +532,7 @@ static XS (XS_weechat_list_next)
}
result = script_ptr2str (weechat_list_next (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
PERL_RETURN_STRING_FREE(result);
}
@@ -551,6 +561,7 @@ static XS (XS_weechat_list_prev)
}
result = script_ptr2str (weechat_list_prev (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
PERL_RETURN_STRING_FREE(result);
}
@@ -579,6 +590,7 @@ static XS (XS_weechat_list_string)
}
result = weechat_list_string (script_str2ptr (SvPV (ST (0), PL_na))); /* item */
PERL_RETURN_STRING(result);
}
@@ -607,6 +619,7 @@ static XS (XS_weechat_list_size)
}
size = weechat_list_size (script_str2ptr (SvPV (ST (0), PL_na))); /* weelist */
PERL_RETURN_INT(size);
}
@@ -764,6 +777,7 @@ static XS (XS_weechat_config_new)
SvPV (ST (0), PL_na), /* filename */
&weechat_perl_api_config_reload_cb,
SvPV (ST (1), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -902,6 +916,7 @@ static XS (XS_weechat_config_new_section)
SvPV (ST (3), PL_na), /* perl function (write cb) */
&weechat_perl_api_config_section_write_default_cb,
SvPV (ST (4), PL_na))); /* perl function (write default cb) */
PERL_RETURN_STRING_FREE(result);
}
@@ -931,6 +946,7 @@ static XS (XS_weechat_config_search_section)
result = script_ptr2str (weechat_config_search_section (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
SvPV (ST (1), PL_na))); /* section_name */
PERL_RETURN_STRING_FREE(result);
}
@@ -998,6 +1014,7 @@ static XS (XS_weechat_config_new_option)
SvPV (ST (8), PL_na), /* default_value */
&weechat_perl_api_config_option_change_cb,
SvPV (ST (9), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -1028,6 +1045,7 @@ static XS (XS_weechat_config_search_option)
result = script_ptr2str (weechat_config_search_option (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
script_str2ptr (SvPV (ST (1), PL_na)), /* section */
SvPV (ST (2), PL_na))); /* option_name */
PERL_RETURN_STRING_FREE(result);
}
@@ -1056,6 +1074,7 @@ static XS (XS_weechat_config_string_to_boolean)
}
value = weechat_config_string_to_boolean (SvPV (ST (0), PL_na)); /* text */
PERL_RETURN_INT(value);
}
@@ -1086,6 +1105,7 @@ static XS (XS_weechat_config_option_set)
rc = weechat_config_option_set (script_str2ptr (SvPV (ST (0), PL_na)), /* option */
SvPV (ST (1), PL_na), /* new_value */
SvIV (ST (2))); /* run_callback */
PERL_RETURN_INT(rc);
}
@@ -1114,6 +1134,7 @@ static XS (XS_weechat_config_boolean)
}
value = weechat_config_boolean (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
PERL_RETURN_INT(value);
}
@@ -1142,6 +1163,7 @@ static XS (XS_weechat_config_integer)
}
value = weechat_config_integer (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
PERL_RETURN_INT(value);
}
@@ -1170,6 +1192,7 @@ static XS (XS_weechat_config_string)
}
value = weechat_config_string (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
PERL_RETURN_STRING(value);
}
@@ -1198,6 +1221,7 @@ static XS (XS_weechat_config_color)
}
value = weechat_config_color (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
PERL_RETURN_INT(value);
}
@@ -1257,6 +1281,7 @@ static XS (XS_weechat_config_write)
}
rc = weechat_config_write (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
PERL_RETURN_INT(rc);
}
@@ -1285,6 +1310,7 @@ static XS (XS_weechat_config_read)
}
rc = weechat_config_read (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
PERL_RETURN_INT(rc);
}
@@ -1313,6 +1339,7 @@ static XS (XS_weechat_config_reload)
}
rc = weechat_config_reload (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
PERL_RETURN_INT(rc);
}
@@ -1371,6 +1398,7 @@ static XS (XS_weechat_prefix)
}
result = weechat_prefix (SvPV (ST (0), PL_na));
PERL_RETURN_STRING(result);
}
@@ -1399,6 +1427,7 @@ static XS (XS_weechat_color)
}
result = weechat_color (SvPV (ST (0), PL_na));
PERL_RETURN_STRING(result);
}
@@ -1590,6 +1619,7 @@ static XS (XS_weechat_hook_command)
SvPV (ST (4), PL_na), /* completion */
&weechat_perl_api_hook_command_cb,
SvPV (ST (5), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -1655,6 +1685,7 @@ static XS (XS_weechat_hook_timer)
SvIV (ST (2)), /* max_calls */
&weechat_perl_api_hook_timer_cb,
SvPV (ST (3), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -1721,6 +1752,7 @@ static XS (XS_weechat_hook_fd)
SvIV (ST (3)), /* exception */
&weechat_perl_api_hook_fd_cb,
SvPV (ST (4), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -1796,6 +1828,7 @@ static XS (XS_weechat_hook_print)
SvIV (ST (2)), /* strip_colors */
&weechat_perl_api_hook_print_cb,
SvPV (ST (3), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -1882,6 +1915,7 @@ static XS (XS_weechat_hook_signal)
SvPV (ST (0), PL_na), /* signal */
&weechat_perl_api_hook_signal_cb,
SvPV (ST (1), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -2002,6 +2036,7 @@ static XS (XS_weechat_hook_config)
SvPV (ST (1), PL_na), /* option */
&weechat_perl_api_hook_config_cb,
SvPV (ST (2), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -2074,6 +2109,7 @@ static XS (XS_weechat_hook_completion)
SvPV (ST (0), PL_na), /* completion */
&weechat_perl_api_hook_completion_cb,
SvPV (ST (1), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -2130,6 +2166,7 @@ static XS (XS_weechat_hook_modifier)
SvPV (ST (0), PL_na), /* modifier */
&weechat_perl_api_hook_modifier_cb,
SvPV (ST (1), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
@@ -2160,6 +2197,7 @@ static XS (XS_weechat_hook_modifier_exec)
result = weechat_hook_modifier_exec (SvPV (ST (0), PL_na), /* modifier */
SvPV (ST (1), PL_na), /* modifier_data */
SvPV (ST (2), PL_na)); /* string */
PERL_RETURN_STRING_FREE(result);
}
@@ -2316,6 +2354,7 @@ static XS (XS_weechat_buffer_new)
SvPV (ST (2), PL_na), /* function input */
&weechat_perl_api_close_cb,
SvPV (ST (3), PL_na))); /* function close */
PERL_RETURN_STRING_FREE(result);
}
@@ -2345,6 +2384,7 @@ static XS (XS_weechat_buffer_search)
result = script_ptr2str (weechat_buffer_search (SvPV (ST (0), PL_na), /* category */
SvPV (ST (1), PL_na))); /* name */
PERL_RETURN_STRING_FREE(result);
}
@@ -2405,6 +2445,7 @@ static XS (XS_weechat_buffer_get)
value = weechat_buffer_get (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
SvPV (ST (1), PL_na)); /* property */
PERL_RETURN_STRING(value);
}
@@ -2467,6 +2508,7 @@ static XS (XS_weechat_nicklist_add_group)
SvPV (ST (2), PL_na), /* name */
SvPV (ST (3), PL_na), /* color */
SvIV (ST (4)))); /* visible */
PERL_RETURN_STRING_FREE(result);
}
@@ -2497,6 +2539,7 @@ static XS (XS_weechat_nicklist_search_group)
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
SvPV (ST (2), PL_na))); /* name */
PERL_RETURN_STRING_FREE(result);
}
@@ -2537,6 +2580,7 @@ static XS (XS_weechat_nicklist_add_nick)
char_prefix,
SvPV (ST (5), PL_na), /* prefix_color */
SvIV (ST (6)))); /* visible */
PERL_RETURN_STRING_FREE(result);
}
@@ -2567,6 +2611,7 @@ static XS (XS_weechat_nicklist_search_nick)
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
SvPV (ST (2), PL_na))); /* name */
PERL_RETURN_STRING_FREE(result);
}
@@ -2656,6 +2701,280 @@ static XS (XS_weechat_nicklist_remove_all)
PERL_RETURN_OK;
}
/*
* weechat::bar_item_search: search a bar item
*/
static XS (XS_weechat_bar_item_search)
{
char *result;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
PERL_RETURN_EMPTY;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
PERL_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_item_search (SvPV (ST (0), PL_na))); /* name */
PERL_RETURN_STRING_FREE(result);
}
/*
* weechat_perl_api_bar_item_build_cb: callback for building bar item
*/
char *
weechat_perl_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
struct t_script_callback *script_callback;
char *perl_argv[4], *ret;
static char buf[32];
script_callback = (struct t_script_callback *)data;
snprintf (buf, sizeof (buf) - 1, "%d", max_width);
perl_argv[0] = script_ptr2str (item);
perl_argv[1] = script_ptr2str (window);
perl_argv[2] = buf;
perl_argv[3] = NULL;
ret = (char *)weechat_perl_exec (script_callback->script,
WEECHAT_SCRIPT_EXEC_STRING,
script_callback->function,
perl_argv);
if (perl_argv[0])
free (perl_argv[0]);
if (perl_argv[1])
free (perl_argv[1]);
return ret;
}
/*
* weechat::bar_item_new: add a new bar item
*/
static XS (XS_weechat_bar_item_new)
{
char *result;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
PERL_RETURN_EMPTY;
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
PERL_RETURN_EMPTY;
}
result = script_ptr2str (script_api_bar_item_new (weechat_perl_plugin,
perl_current_script,
SvPV (ST (0), PL_na), /* name */
&weechat_perl_api_bar_item_build_cb,
SvPV (ST (1), PL_na))); /* function build */
PERL_RETURN_STRING_FREE(result);
}
/*
* weechat::bar_item_update: update a bar item on screen
*/
static XS (XS_weechat_bar_item_update)
{
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
PERL_RETURN_ERROR;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
PERL_RETURN_ERROR;
}
weechat_bar_item_update (SvPV (ST (0), PL_na)); /* name */
PERL_RETURN_OK;
}
/*
* weechat::bar_item_remove: remove a bar item
*/
static XS (XS_weechat_bar_item_remove)
{
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
PERL_RETURN_ERROR;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
PERL_RETURN_ERROR;
}
script_api_bar_item_remove (weechat_perl_plugin,
perl_current_script,
script_str2ptr (SvPV (ST (0), PL_na))); /* item */
PERL_RETURN_OK;
}
/*
* weechat::bar_search: search a bar
*/
static XS (XS_weechat_bar_search)
{
char *result;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
PERL_RETURN_EMPTY;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
PERL_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_search (SvPV (ST (0), PL_na))); /* name */
PERL_RETURN_STRING_FREE(result);
}
/*
* weechat::bar_new: add a new bar
*/
static XS (XS_weechat_bar_new)
{
char *result;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
PERL_RETURN_EMPTY;
}
if (items < 6)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
PERL_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_new (SvPV (ST (0), PL_na), /* name */
SvPV (ST (1), PL_na), /* type */
SvPV (ST (2), PL_na), /* position */
SvIV (ST (3)), /* size */
SvIV (ST (4)), /* separator */
SvPV (ST (5), PL_na))); /* items */
PERL_RETURN_STRING_FREE(result);
}
/*
* weechat::bar_update: update a bar on screen
*/
static XS (XS_weechat_bar_update)
{
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_update");
PERL_RETURN_ERROR;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_update");
PERL_RETURN_ERROR;
}
weechat_bar_update (SvPV (ST (0), PL_na)); /* name */
PERL_RETURN_OK;
}
/*
* weechat::bar_remove: remove a bar
*/
static XS (XS_weechat_bar_remove)
{
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
PERL_RETURN_ERROR;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
PERL_RETURN_ERROR;
}
weechat_bar_remove (script_str2ptr (SvPV (ST (0), PL_na))); /* bar */
PERL_RETURN_OK;
}
/*
* weechat::command: execute a command on a buffer
*/
@@ -2712,9 +3031,278 @@ static XS (XS_weechat_info_get)
}
value = weechat_info_get (SvPV (ST (0), PL_na));
PERL_RETURN_STRING(value);
}
/*
* weechat::infolist_get: get list with infos
*/
static XS (XS_weechat_infolist_get)
{
char *value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
PERL_RETURN_EMPTY;
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
PERL_RETURN_EMPTY;
}
value = script_ptr2str (weechat_infolist_get (SvPV (ST (0), PL_na), /* name */
script_str2ptr (SvPV (ST (1), PL_na)))); /* pointer */
PERL_RETURN_STRING_FREE(value);
}
/*
* weechat::infolist_next: move item pointer to next item in infolist
*/
static XS (XS_weechat_infolist_next)
{
int value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
PERL_RETURN_INT(0);
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
PERL_RETURN_INT(0);
}
value = weechat_infolist_next (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
PERL_RETURN_INT(value);
}
/*
* weechat::infolist_prev: move item pointer to previous item in infolist
*/
static XS (XS_weechat_infolist_prev)
{
int value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
PERL_RETURN_INT(0);
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
PERL_RETURN_INT(0);
}
value = weechat_infolist_prev (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
PERL_RETURN_INT(value);
}
/*
* weechat::infolist_fields: get list of fields for current item of infolist
*/
static XS (XS_weechat_infolist_fields)
{
char *value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
PERL_RETURN_EMPTY;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
PERL_RETURN_EMPTY;
}
value = weechat_infolist_fields (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
PERL_RETURN_STRING(value);
}
/*
* weechat::infolist_integer: get integer value of a variable in infolist
*/
static XS (XS_weechat_infolist_integer)
{
int value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
PERL_RETURN_INT(0);
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
PERL_RETURN_INT(0);
}
value = weechat_infolist_integer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
SvPV (ST (1), PL_na)); /* variable */
PERL_RETURN_INT(value);
}
/*
* weechat::infolist_string: get string value of a variable in infolist
*/
static XS (XS_weechat_infolist_string)
{
char *value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
PERL_RETURN_EMPTY;
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
PERL_RETURN_EMPTY;
}
value = weechat_infolist_string (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
SvPV (ST (1), PL_na)); /* variable */
PERL_RETURN_STRING(value);
}
/*
* weechat::infolist_pointer: get pointer value of a variable in infolist
*/
static XS (XS_weechat_infolist_pointer)
{
char *value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
PERL_RETURN_EMPTY;
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
PERL_RETURN_EMPTY;
}
value = script_ptr2str (weechat_infolist_pointer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
SvPV (ST (1), PL_na))); /* variable */
PERL_RETURN_STRING_FREE(value);
}
/*
* weechat::infolist_time: get time value of a variable in infolist
*/
static XS (XS_weechat_infolist_time)
{
time_t time;
char timebuffer[64], *value;
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
PERL_RETURN_EMPTY;
}
if (items < 2)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
PERL_RETURN_EMPTY;
}
time = weechat_infolist_time (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
SvPV (ST (1), PL_na)); /* variable */
strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
value = strdup (timebuffer);
PERL_RETURN_STRING_FREE(value);
}
/*
* weechat::infolist_free: free infolist
*/
static XS (XS_weechat_infolist_free)
{
dXSARGS;
/* make C compiler happy */
(void) cv;
if (!perl_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
PERL_RETURN_ERROR;
}
if (items < 1)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
PERL_RETURN_ERROR;
}
weechat_infolist_free (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
PERL_RETURN_OK;
}
/*
* weechat_perl_api_init: initialize subroutines
*/
@@ -2794,8 +3382,25 @@ weechat_perl_api_init (pTHX)
newXS ("weechat::nicklist_remove_group", XS_weechat_nicklist_remove_group, "weechat");
newXS ("weechat::nicklist_remove_nick", XS_weechat_nicklist_remove_nick, "weechat");
newXS ("weechat::nicklist_remove_all", XS_weechat_nicklist_remove_all, "weechat");
newXS ("weechat::bar_item_search", XS_weechat_bar_item_search, "weechat");
newXS ("weechat::bar_item_new", XS_weechat_bar_item_new, "weechat");
newXS ("weechat::bar_item_update", XS_weechat_bar_item_update, "weechat");
newXS ("weechat::bar_item_remove", XS_weechat_bar_item_remove, "weechat");
newXS ("weechat::bar_search", XS_weechat_bar_search, "weechat");
newXS ("weechat::bar_new", XS_weechat_bar_new, "weechat");
newXS ("weechat::bar_update", XS_weechat_bar_update, "weechat");
newXS ("weechat::bar_remove", XS_weechat_bar_remove, "weechat");
newXS ("weechat::command", XS_weechat_command, "weechat");
newXS ("weechat::info_get", XS_weechat_info_get, "weechat");
newXS ("weechat::infolist_get", XS_weechat_infolist_get, "weechat");
newXS ("weechat::infolist_next", XS_weechat_infolist_next, "weechat");
newXS ("weechat::infolist_prev", XS_weechat_infolist_prev, "weechat");
newXS ("weechat::infolist_fields", XS_weechat_infolist_fields, "weechat");
newXS ("weechat::infolist_integer", XS_weechat_infolist_integer, "weechat");
newXS ("weechat::infolist_string", XS_weechat_infolist_string, "weechat");
newXS ("weechat::infolist_pointer", XS_weechat_infolist_pointer, "weechat");
newXS ("weechat::infolist_time", XS_weechat_infolist_time, "weechat");
newXS ("weechat::infolist_free", XS_weechat_infolist_free, "weechat");
/* interface constants */
stash = gv_stashpv ("weechat", TRUE);
@@ -175,6 +175,7 @@ weechat_python_api_iconv_to_internal (PyObject *self, PyObject *args)
}
result = weechat_iconv_to_internal (charset, string);
PYTHON_RETURN_STRING_FREE(result);
}
@@ -208,6 +209,7 @@ weechat_python_api_iconv_from_internal (PyObject *self, PyObject *args)
}
result = weechat_iconv_from_internal (charset, string);
PYTHON_RETURN_STRING_FREE(result);
}
@@ -238,6 +240,7 @@ weechat_python_api_gettext (PyObject *self, PyObject *args)
}
result = weechat_gettext (string);
PYTHON_RETURN_STRING(result);
}
@@ -271,6 +274,7 @@ weechat_python_api_ngettext (PyObject *self, PyObject *args)
}
result = weechat_ngettext (single, plural, count);
PYTHON_RETURN_STRING(result);
}
@@ -363,6 +367,7 @@ weechat_python_api_list_new (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_new ());
PYTHON_RETURN_STRING_FREE(result);
}
@@ -398,6 +403,7 @@ weechat_python_api_list_add (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -431,6 +437,7 @@ weechat_python_api_list_search (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_search (script_str2ptr (weelist),
data));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -464,6 +471,7 @@ weechat_python_api_list_casesearch (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (weelist),
data));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -562,6 +570,7 @@ weechat_python_api_list_next (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_next (script_str2ptr (item)));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -593,6 +602,7 @@ weechat_python_api_list_prev (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_prev (script_str2ptr (item)));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -623,6 +633,7 @@ weechat_python_api_list_string (PyObject *self, PyObject *args)
}
result = weechat_list_string (script_str2ptr (item));
PYTHON_RETURN_STRING(result);
}
@@ -654,6 +665,7 @@ weechat_python_api_list_size (PyObject *self, PyObject *args)
}
size = weechat_list_size (script_str2ptr (weelist));
PYTHON_RETURN_INT(size);
}
@@ -825,6 +837,7 @@ weechat_python_api_config_new (PyObject *self, PyObject *args)
filename,
&weechat_python_api_config_reload_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -972,6 +985,7 @@ weechat_python_api_config_new_section (PyObject *self, PyObject *args)
function_write,
&weechat_python_api_config_section_write_default_cb,
function_write_default));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1005,6 +1019,7 @@ weechat_python_api_config_search_section (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_config_search_section (script_str2ptr (config_file),
section_name));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1086,6 +1101,7 @@ weechat_python_api_config_new_option (PyObject *self, PyObject *args)
default_value,
&weechat_python_api_config_option_change_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1121,6 +1137,7 @@ weechat_python_api_config_search_option (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_config_search_option (script_str2ptr (config_file),
script_str2ptr (section),
option_name));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1152,6 +1169,7 @@ weechat_python_api_config_string_to_boolean (PyObject *self, PyObject *args)
}
value = weechat_config_string_to_boolean (text);
PYTHON_RETURN_INT(value);
}
@@ -1187,6 +1205,7 @@ weechat_python_api_config_option_set (PyObject *self, PyObject *args)
rc = weechat_config_option_set (script_str2ptr (option),
new_value,
run_callback);
PYTHON_RETURN_INT(rc);
}
@@ -1218,6 +1237,7 @@ weechat_python_api_config_boolean (PyObject *self, PyObject *args)
}
value = weechat_config_boolean (script_str2ptr (option));
PYTHON_RETURN_INT(value);
}
@@ -1249,6 +1269,7 @@ weechat_python_api_config_integer (PyObject *self, PyObject *args)
}
value = weechat_config_integer (script_str2ptr (option));
PYTHON_RETURN_INT(value);
}
@@ -1279,6 +1300,7 @@ weechat_python_api_config_string (PyObject *self, PyObject *args)
}
value = weechat_config_string (script_str2ptr (option));
PYTHON_RETURN_STRING(value);
}
@@ -1310,6 +1332,7 @@ weechat_python_api_config_color (PyObject *self, PyObject *args)
}
value = weechat_config_color (script_str2ptr (option));
PYTHON_RETURN_INT(value);
}
@@ -1377,6 +1400,7 @@ weechat_python_api_config_write (PyObject *self, PyObject *args)
}
rc = weechat_config_write (script_str2ptr (config_file));
PYTHON_RETURN_INT(rc);
}
@@ -1408,6 +1432,7 @@ weechat_python_api_config_read (PyObject *self, PyObject *args)
}
rc = weechat_config_read (script_str2ptr (config_file));
PYTHON_RETURN_INT(rc);
}
@@ -1439,6 +1464,7 @@ weechat_python_api_config_reload (PyObject *self, PyObject *args)
}
rc = weechat_config_reload (script_str2ptr (config_file));
PYTHON_RETURN_INT(rc);
}
@@ -1502,6 +1528,7 @@ weechat_python_api_prefix (PyObject *self, PyObject *args)
}
result = weechat_prefix (prefix);
PYTHON_RETURN_STRING(result);
}
@@ -1532,6 +1559,7 @@ weechat_python_api_color (PyObject *self, PyObject *args)
}
result = weechat_color (color);
PYTHON_RETURN_STRING(result);
}
@@ -1751,6 +1779,7 @@ weechat_python_api_hook_command (PyObject *self, PyObject *args)
completion,
&weechat_python_api_hook_command_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1824,6 +1853,7 @@ weechat_python_api_hook_timer (PyObject *self, PyObject *args)
max_calls,
&weechat_python_api_hook_timer_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1899,6 +1929,7 @@ weechat_python_api_hook_fd (PyObject *self, PyObject *args)
exception,
&weechat_python_api_hook_fd_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1982,6 +2013,7 @@ weechat_python_api_hook_print (PyObject *self, PyObject *args)
strip_colors,
&weechat_python_api_hook_print_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2072,6 +2104,7 @@ weechat_python_api_hook_signal (PyObject *self, PyObject *args)
signal,
&weechat_python_api_hook_signal_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2199,6 +2232,7 @@ weechat_python_api_hook_config (PyObject *self, PyObject *args)
option,
&weechat_python_api_hook_config_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2275,6 +2309,7 @@ weechat_python_api_hook_completion (PyObject *self, PyObject *args)
completion,
&weechat_python_api_hook_completion_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2335,6 +2370,7 @@ weechat_python_api_hook_modifier (PyObject *self, PyObject *args)
modifier,
&weechat_python_api_hook_modifier_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2368,6 +2404,7 @@ weechat_python_api_hook_modifier_exec (PyObject *self, PyObject *args)
}
result = weechat_hook_modifier_exec (modifier, modifier_data, string);
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2533,6 +2570,7 @@ weechat_python_api_buffer_new (PyObject *self, PyObject *args)
function_input,
&weechat_python_api_close_cb,
function_close));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2566,6 +2604,7 @@ weechat_python_api_buffer_search (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_buffer_search (category, name));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2633,6 +2672,7 @@ weechat_python_api_buffer_get (PyObject *self, PyObject *args)
}
value = weechat_buffer_get (script_str2ptr (buffer), property);
PYTHON_RETURN_STRING(value);
}
@@ -2709,6 +2749,7 @@ weechat_python_api_nicklist_add_group (PyObject *self, PyObject *args)
name,
color,
visible));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2744,6 +2785,7 @@ weechat_python_api_nicklist_search_group (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (buffer),
script_str2ptr (from_group),
name));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2795,6 +2837,7 @@ weechat_python_api_nicklist_add_nick (PyObject *self, PyObject *args)
char_prefix,
prefix_color,
visible));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2830,6 +2873,7 @@ weechat_python_api_nicklist_search_nick (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (buffer),
script_str2ptr (from_group),
name));
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2930,6 +2974,312 @@ weechat_python_api_nicklist_remove_all (PyObject *self, PyObject *args)
PYTHON_RETURN_OK;
}
/*
* weechat_python_api_bar_item_search: search a bar item
*/
static PyObject *
weechat_python_api_bar_item_search (PyObject *self, PyObject *args)
{
char *name, *result;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
PYTHON_RETURN_EMPTY;
}
name = NULL;
if (!PyArg_ParseTuple (args, "s", &name))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
PYTHON_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_item_search (name));
PYTHON_RETURN_STRING_FREE(result);
}
/*
* weechat_python_api_bar_item_build_cb: callback for building bar item
*/
char *
weechat_python_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width)
{
struct t_script_callback *script_callback;
char *python_argv[4], *ret;
static char buf[32];
script_callback = (struct t_script_callback *)data;
snprintf (buf, sizeof (buf) - 1, "%d", max_width);
python_argv[0] = script_ptr2str (item);
python_argv[1] = script_ptr2str (window);
python_argv[2] = buf;
python_argv[3] = NULL;
ret = (char *)weechat_python_exec (script_callback->script,
WEECHAT_SCRIPT_EXEC_STRING,
script_callback->function,
python_argv);
if (python_argv[0])
free (python_argv[0]);
if (python_argv[1])
free (python_argv[1]);
return ret;
}
/*
* weechat_python_api_bar_item_new: add a new bar item
*/
static PyObject *
weechat_python_api_bar_item_new (PyObject *self, PyObject *args)
{
char *name, *function, *result;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
PYTHON_RETURN_EMPTY;
}
name = NULL;
function = NULL;
if (!PyArg_ParseTuple (args, "ss", &name, &function))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
PYTHON_RETURN_EMPTY;
}
result = script_ptr2str (script_api_bar_item_new (weechat_python_plugin,
python_current_script,
name,
&weechat_python_api_bar_item_build_cb,
function));
PYTHON_RETURN_STRING_FREE(result);
}
/*
* weechat_python_api_bar_item_update: update a bar item on screen
*/
static PyObject *
weechat_python_api_bar_item_update (PyObject *self, PyObject *args)
{
char *name;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
PYTHON_RETURN_ERROR;
}
name = NULL;
if (!PyArg_ParseTuple (args, "s", &name))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
PYTHON_RETURN_ERROR;
}
weechat_bar_item_update (name);
PYTHON_RETURN_OK;
}
/*
* weechat_python_api_bar_item_remove: remove a bar item
*/
static PyObject *
weechat_python_api_bar_item_remove (PyObject *self, PyObject *args)
{
char *item;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
PYTHON_RETURN_ERROR;
}
item = NULL;
if (!PyArg_ParseTuple (args, "s", &item))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
PYTHON_RETURN_ERROR;
}
script_api_bar_item_remove (weechat_python_plugin,
python_current_script,
script_str2ptr (item));
PYTHON_RETURN_OK;
}
/*
* weechat_python_api_bar_search: search a bar
*/
static PyObject *
weechat_python_api_bar_search (PyObject *self, PyObject *args)
{
char *name, *result;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
PYTHON_RETURN_EMPTY;
}
name = NULL;
if (!PyArg_ParseTuple (args, "s", &name))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
PYTHON_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_search (name));
PYTHON_RETURN_STRING_FREE(result);
}
/*
* weechat_python_api_bar_new: add a new bar
*/
static PyObject *
weechat_python_api_bar_new (PyObject *self, PyObject *args)
{
char *name, *type, *position, *items, *result;
int size, separator;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
PYTHON_RETURN_EMPTY;
}
name = NULL;
type = NULL;
position = NULL;
size = 0;
separator = 0;
items = NULL;
if (!PyArg_ParseTuple (args, "sssiis", &name, &type, &position, &size,
&separator, &items))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
PYTHON_RETURN_EMPTY;
}
result = script_ptr2str (weechat_bar_new (name,
type,
position,
size,
separator,
items));
PYTHON_RETURN_STRING_FREE(result);
}
/*
* weechat_python_api_bar_update: update a bar on screen
*/
static PyObject *
weechat_python_api_bar_update (PyObject *self, PyObject *args)
{
char *name;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item");
PYTHON_RETURN_ERROR;
}
name = NULL;
if (!PyArg_ParseTuple (args, "s", &name))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item");
PYTHON_RETURN_ERROR;
}
weechat_bar_update (name);
PYTHON_RETURN_OK;
}
/*
* weechat_python_api_bar_remove: remove a bar
*/
static PyObject *
weechat_python_api_bar_remove (PyObject *self, PyObject *args)
{
char *bar;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
PYTHON_RETURN_ERROR;
}
bar = NULL;
if (!PyArg_ParseTuple (args, "s", &bar))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
PYTHON_RETURN_ERROR;
}
weechat_bar_remove (script_str2ptr (bar));
PYTHON_RETURN_OK;
}
/*
* weechat_python_api_command: send command to server
*/
@@ -2992,9 +3342,308 @@ weechat_python_api_info_get (PyObject *self, PyObject *args)
}
value = weechat_info_get (info);
PYTHON_RETURN_STRING(value);
}
/*
* weechat_python_api_infolist_get: get list with infos
*/
static PyObject *
weechat_python_api_infolist_get (PyObject *self, PyObject *args)
{
char *name, *pointer, *value;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
PYTHON_RETURN_EMPTY;
}
name = NULL;
pointer = NULL;
if (!PyArg_ParseTuple (args, "ss", &name, &pointer))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
PYTHON_RETURN_EMPTY;
}
value = script_ptr2str (weechat_infolist_get (name,
script_str2ptr (pointer)));
PYTHON_RETURN_STRING_FREE(value);
}
/*
* weechat_python_api_infolist_next: move item pointer to next item in infolist
*/
static PyObject *
weechat_python_api_infolist_next (PyObject *self, PyObject *args)
{
char *infolist;
int value;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
PYTHON_RETURN_INT(0);
}
infolist = NULL;
if (!PyArg_ParseTuple (args, "s", &infolist))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
PYTHON_RETURN_INT(0);
}
value = weechat_infolist_next (script_str2ptr (infolist));
PYTHON_RETURN_INT(value);
}
/*
* weechat_python_api_infolist_prev: move item pointer to previous item in infolist
*/
static PyObject *
weechat_python_api_infolist_prev (PyObject *self, PyObject *args)
{
char *infolist;
int value;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
PYTHON_RETURN_INT(0);
}
infolist = NULL;
if (!PyArg_ParseTuple (args, "s", &infolist))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
PYTHON_RETURN_INT(0);
}
value = weechat_infolist_prev (script_str2ptr (infolist));
PYTHON_RETURN_INT(value);
}
/*
* weechat_python_api_infolist_fields: get list of fields for current item of infolist
*/
static PyObject *
weechat_python_api_infolist_fields (PyObject *self, PyObject *args)
{
char *infolist, *value;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
PYTHON_RETURN_EMPTY;
}
infolist = NULL;
if (!PyArg_ParseTuple (args, "s", &infolist))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
PYTHON_RETURN_EMPTY;
}
value = weechat_infolist_fields (script_str2ptr (infolist));
PYTHON_RETURN_STRING(value);
}
/*
* weechat_python_api_infolist_integer: get integer value of a variable in infolist
*/
static PyObject *
weechat_python_api_infolist_integer (PyObject *self, PyObject *args)
{
char *infolist, *variable;
int value;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
PYTHON_RETURN_INT(0);
}
infolist = NULL;
variable = NULL;
if (!PyArg_ParseTuple (args, "s&", &infolist, &variable))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
PYTHON_RETURN_INT(0);
}
value = weechat_infolist_integer (script_str2ptr (infolist),
variable);
PYTHON_RETURN_INT(value);
}
/*
* weechat_python_api_infolist_string: get string value of a variable in infolist
*/
static PyObject *
weechat_python_api_infolist_string (PyObject *self, PyObject *args)
{
char *infolist, *variable, *value;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
PYTHON_RETURN_EMPTY;
}
infolist = NULL;
variable = NULL;
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
PYTHON_RETURN_EMPTY;
}
value = weechat_infolist_string (script_str2ptr (infolist),
variable);
PYTHON_RETURN_STRING(value);
}
/*
* weechat_python_api_infolist_pointer: get pointer value of a variable in infolist
*/
static PyObject *
weechat_python_api_infolist_pointer (PyObject *self, PyObject *args)
{
char *infolist, *variable, *value;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
PYTHON_RETURN_EMPTY;
}
infolist = NULL;
variable = NULL;
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
PYTHON_RETURN_EMPTY;
}
value = script_ptr2str (weechat_infolist_string (script_str2ptr (infolist),
variable));
PYTHON_RETURN_STRING_FREE(value);
}
/*
* weechat_python_api_infolist_time: get time value of a variable in infolist
*/
static PyObject *
weechat_python_api_infolist_time (PyObject *self, PyObject *args)
{
char *infolist, *variable, timebuffer[64], *value;
time_t time;
PyObject *object;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
PYTHON_RETURN_EMPTY;
}
infolist = NULL;
variable = NULL;
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
PYTHON_RETURN_EMPTY;
}
time = weechat_infolist_time (script_str2ptr (infolist),
variable);
strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
value = strdup (timebuffer);
PYTHON_RETURN_STRING_FREE(value);
}
/*
* weechat_python_api_infolist_free: free infolist
*/
static PyObject *
weechat_python_api_infolist_free (PyObject *self, PyObject *args)
{
char *infolist;
/* make C compiler happy */
(void) self;
if (!python_current_script)
{
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
PYTHON_RETURN_ERROR;
}
infolist = NULL;
if (!PyArg_ParseTuple (args, "s", &infolist))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
PYTHON_RETURN_ERROR;
}
weechat_infolist_free (script_str2ptr (infolist));
PYTHON_RETURN_OK;
}
/*
* Python subroutines
*/
@@ -3068,7 +3717,24 @@ PyMethodDef weechat_python_funcs[] =
{ "nicklist_remove_group", &weechat_python_api_nicklist_remove_group, METH_VARARGS, "" },
{ "nicklist_remove_nick", &weechat_python_api_nicklist_remove_nick, METH_VARARGS, "" },
{ "nicklist_remove_all", &weechat_python_api_nicklist_remove_all, METH_VARARGS, "" },
{ "bar_item_search", &weechat_python_api_bar_item_search, METH_VARARGS, "" },
{ "bar_item_new", &weechat_python_api_bar_item_new, METH_VARARGS, "" },
{ "bar_item_update", &weechat_python_api_bar_item_update, METH_VARARGS, "" },
{ "bar_item_remove", &weechat_python_api_bar_item_remove, METH_VARARGS, "" },
{ "bar_search", &weechat_python_api_bar_search, METH_VARARGS, "" },
{ "bar_new", &weechat_python_api_bar_new, METH_VARARGS, "" },
{ "bar_update", &weechat_python_api_bar_update, METH_VARARGS, "" },
{ "bar_remove", &weechat_python_api_bar_remove, METH_VARARGS, "" },
{ "command", &weechat_python_api_command, METH_VARARGS, "" },
{ "info_get", &weechat_python_api_info_get, METH_VARARGS, "" },
{ "infolist_get", &weechat_python_api_infolist_get, METH_VARARGS, "" },
{ "infolist_next", &weechat_python_api_infolist_next, METH_VARARGS, "" },
{ "infolist_prev", &weechat_python_api_infolist_prev, METH_VARARGS, "" },
{ "infolist_fields", &weechat_python_api_infolist_fields, METH_VARARGS, "" },
{ "infolist_integer", &weechat_python_api_infolist_integer, METH_VARARGS, "" },
{ "infolist_string", &weechat_python_api_infolist_string, METH_VARARGS, "" },
{ "infolist_pointer", &weechat_python_api_infolist_pointer, METH_VARARGS, "" },
{ "infolist_time", &weechat_python_api_infolist_time, METH_VARARGS, "" },
{ "infolist_free", &weechat_python_api_infolist_free, METH_VARARGS, "" },
{ NULL, NULL, 0, NULL }
};
File diff suppressed because it is too large Load Diff
+65
View File
@@ -814,6 +814,71 @@ script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
}
}
/*
* script_api_bar_item_new: add a new bar item
*/
struct t_gui_bar_item *
script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
char *name,
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int remaining_space),
char *function_build)
{
struct t_script_callback *new_script_callback;
struct t_gui_bar_item *new_item;
new_script_callback = script_callback_alloc ();
if (!new_script_callback)
return NULL;
new_item = weechat_bar_item_new (name,
(function_build && function_build[0]) ?
build_callback : NULL,
(function_build && function_build[0]) ?
new_script_callback : NULL);
if (!new_item)
{
free (new_script_callback);
return NULL;
}
new_script_callback->script = script;
new_script_callback->function = (function_build && function_build[0]) ?
strdup (function_build) : NULL;
new_script_callback->bar_item = new_item;
script_callback_add (script, new_script_callback);
return new_item;
}
/*
* script_api_bar_item_remove: remove a bar item
*/
void
script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_bar_item *item)
{
struct t_script_callback *ptr_script_callback;
if (!weechat_plugin || !script || !item)
return;
weechat_bar_item_remove (item);
for (ptr_script_callback = script->callbacks; ptr_script_callback;
ptr_script_callback = ptr_script_callback->next_callback)
{
if (ptr_script_callback->bar_item == item)
script_callback_remove (script, ptr_script_callback);
}
}
/*
* script_api_command: execute a command (simulate user entry)
*/
+11
View File
@@ -151,6 +151,17 @@ extern void script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_buffer *buffer,
int switch_to_another);
extern struct t_gui_bar_item *script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
char *name,
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int remaining_space),
char *function_build);
extern void script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_bar_item *item);
extern void script_api_command (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_buffer *buffer,
+6 -1
View File
@@ -46,6 +46,7 @@ script_callback_alloc ()
new_script_callback->config_option = NULL;
new_script_callback->hook = NULL;
new_script_callback->buffer = NULL;
new_script_callback->bar_item = NULL;
return new_script_callback;
}
@@ -85,7 +86,7 @@ script_callback_remove (struct t_plugin_script *script,
if (script->callbacks == script_callback)
script->callbacks = script_callback->next_callback;
/* unhook and free data */
/* free data */
if (script_callback->function)
free (script_callback->function);
@@ -117,8 +118,12 @@ script_callback_print_log (struct t_weechat_plugin *weechat_plugin,
weechat_log_printf ("[callback (addr:0x%x)]", script_callback);
weechat_log_printf (" script. . . . . . . : 0x%x", script_callback->script);
weechat_log_printf (" function. . . . . . : '%s'", script_callback->function);
weechat_log_printf (" config_file . . . . : '%s'", script_callback->config_file);
weechat_log_printf (" config_section. . . : '%s'", script_callback->config_section);
weechat_log_printf (" config_option . . . : '%s'", script_callback->config_option);
weechat_log_printf (" hook. . . . . . . . : 0x%x", script_callback->hook);
weechat_log_printf (" buffer. . . . . . . : 0x%x", script_callback->buffer);
weechat_log_printf (" bar_item. . . . . . : 0x%x", script_callback->bar_item);
weechat_log_printf (" prev_callback . . . : 0x%x", script_callback->prev_callback);
weechat_log_printf (" next_callback . . . : 0x%x", script_callback->next_callback);
}
+2 -1
View File
@@ -27,7 +27,8 @@ struct t_script_callback
struct t_config_section *config_section; /* not NULL for config section */
struct t_config_option *config_option; /* not NULL for config option */
struct t_hook *hook; /* not NULL for hook */
struct t_gui_buffer *buffer; /* not NULL for buffer callback*/
struct t_gui_buffer *buffer; /* not NULL for buffer */
struct t_gui_bar_item *bar_item; /* not NULL for bar item */
struct t_script_callback *prev_callback; /* link to next callback */
struct t_script_callback *next_callback; /* link to previous callback */
};
+5
View File
@@ -416,10 +416,12 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
for (ptr_script_callback = script->callbacks; ptr_script_callback;
ptr_script_callback = ptr_script_callback->next_callback)
{
/* unhook */
if (ptr_script_callback->hook)
{
weechat_unhook (ptr_script_callback->hook);
}
/* free config file */
if (ptr_script_callback->config_file
&& !ptr_script_callback->config_section
&& !ptr_script_callback->config_option)
@@ -428,6 +430,9 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
weechat_config_write (ptr_script_callback->config_file);
weechat_config_free (ptr_script_callback->config_file);
}
/* remove bar item */
if (ptr_script_callback->bar_item)
weechat_bar_item_remove (ptr_script_callback->bar_item);
}
/* remove all callbacks created by this script */
+42
View File
@@ -23,7 +23,10 @@
#include <sys/types.h>
struct t_gui_window;
struct t_gui_buffer;
struct t_gui_bar;
struct t_gui_bar_item;
struct t_weelist;
/* macros for defining plugin infos */
@@ -319,6 +322,24 @@ struct t_weechat_plugin
struct t_gui_nick *nick);
void (*nicklist_remove_all) (struct t_gui_buffer *buffer);
/* bars */
struct t_gui_bar_item *(*bar_item_search) (char *name);
struct t_gui_bar_item *(*bar_item_new) (struct t_weechat_plugin *plugin,
char *name,
char *(*build_callback)(void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
int max_width),
void *build_callback_data);
void (*bar_item_update) (char *name);
void (*bar_item_remove) (struct t_gui_bar_item *item);
struct t_gui_bar *(*bar_search) (char *name);
struct t_gui_bar *(*bar_new) (struct t_weechat_plugin *plugin, char *name,
char *type, char *position, int size,
int separator, char *items);
void (*bar_update) (char *name);
void (*bar_remove) (struct t_gui_bar *bar);
/* command */
void (*command) (struct t_weechat_plugin *plugin,
struct t_gui_buffer *buffer, char *command);
@@ -629,6 +650,27 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
#define weechat_nicklist_remove_all(__buffer) \
weechat_plugin->nicklist_remove_all(__buffer)
/* bars */
#define weechat_bar_item_search(__name) \
weechat_plugin->bar_item_search(__name)
#define weechat_bar_item_new(__name, __build_callback, __data) \
weechat_plugin->bar_item_new(weechat_plugin, __name, \
__build_callback, __data)
#define weechat_bar_item_update(__name) \
weechat_plugin->bar_item_update(__name)
#define weechat_bar_item_remove(__item) \
weechat_plugin->bar_item_remove(__item)
#define weechat_bar_search(__name) \
weechat_plugin->bar_search(__name)
#define weechat_bar_new(__name, __type, __position, __size, \
__separator, __items) \
weechat_plugin->bar_new(weechat_plugin, __name, __type, __position, \
__size, __separator, __items)
#define weechat_bar_update(__name) \
weechat_plugin->bar_update(__name)
#define weechat_bar_remove(__bar) \
weechat_plugin->bar_remove(__bar)
/* command */
#define weechat_command(__buffer, __command) \
weechat_plugin->command(weechat_plugin, __buffer, __command)