From f0c8da2f05a4b463cbc7d03341ee8a7a6db45f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Thu, 30 Mar 2017 20:39:37 +0200 Subject: [PATCH] buflist: add mouse support New options: - buflist.look.mouse_jump_visited_buffer - buflist.look.mouse_move_buffer - buflist.look.mouse_wheel New keys added by buflist plugin: - @item(buflist):button1* => hsignal:buflist_mouse - @item(buflist):button2* => hsignal:buflist_mouse - @bar(buflist):ctrl-wheelup => hsignal:buflist_mouse - @bar(buflist):ctrl-wheeldown => hsignal:buflist_mouse --- doc/de/autogen/user/buflist_options.adoc | 18 ++ doc/en/autogen/user/buflist_options.adoc | 18 ++ doc/en/weechat_dev.en.adoc | 1 + doc/fr/autogen/user/buflist_options.adoc | 18 ++ doc/fr/weechat_dev.fr.adoc | 1 + doc/it/autogen/user/buflist_options.adoc | 18 ++ doc/ja/autogen/user/buflist_options.adoc | 18 ++ doc/ja/weechat_dev.ja.adoc | 2 + doc/pl/autogen/user/buflist_options.adoc | 18 ++ po/POTFILES.in | 2 + po/cs.po | 14 +- po/de.po | 14 +- po/es.po | 14 +- po/fr.po | 29 ++- po/hu.po | 14 +- po/it.po | 14 +- po/ja.po | 14 +- po/pl.po | 14 +- po/pt.po | 14 +- po/pt_BR.po | 14 +- po/ru.po | 14 +- po/srcfiles.cmake | 2 + po/tr.po | 14 +- po/weechat.pot | 14 +- src/plugins/buflist/CMakeLists.txt | 3 +- src/plugins/buflist/Makefile.am | 4 +- src/plugins/buflist/buflist-bar-item.c | 14 ++ src/plugins/buflist/buflist-bar-item.h | 2 + src/plugins/buflist/buflist-config.c | 29 +++ src/plugins/buflist/buflist-config.h | 3 + src/plugins/buflist/buflist-mouse.c | 302 +++++++++++++++++++++++ src/plugins/buflist/buflist-mouse.h | 28 +++ src/plugins/buflist/buflist.c | 5 + 33 files changed, 687 insertions(+), 16 deletions(-) create mode 100644 src/plugins/buflist/buflist-mouse.c create mode 100644 src/plugins/buflist/buflist-mouse.h diff --git a/doc/de/autogen/user/buflist_options.adoc b/doc/de/autogen/user/buflist_options.adoc index d67db0a13..d383abac6 100644 --- a/doc/de/autogen/user/buflist_options.adoc +++ b/doc/de/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** Werte: beliebige Zeichenkette ** Standardwert: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** Beschreibung: pass:none[if enabled, clicks with left/right buttons on the line with current buffer jump to previous/next visited buffer] +** Typ: boolesch +** Werte: on, off +** Standardwert: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** Beschreibung: pass:none[if enabled, mouse gestures (drag & drop) move buffers in list] +** Typ: boolesch +** Werte: on, off +** Standardwert: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** Beschreibung: pass:none[if enabled, mouse wheel up/down actions jump to previous/next buffer in list] +** Typ: boolesch +** Werte: on, off +** Standardwert: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** Beschreibung: pass:none[comma-separated list of signals that are hooked and trigger the refresh of buffers list] ** Typ: Zeichenkette diff --git a/doc/en/autogen/user/buflist_options.adoc b/doc/en/autogen/user/buflist_options.adoc index d7e811b78..578c7ac5e 100644 --- a/doc/en/autogen/user/buflist_options.adoc +++ b/doc/en/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** values: any string ** default value: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** description: pass:none[if enabled, clicks with left/right buttons on the line with current buffer jump to previous/next visited buffer] +** type: boolean +** values: on, off +** default value: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** description: pass:none[if enabled, mouse gestures (drag & drop) move buffers in list] +** type: boolean +** values: on, off +** default value: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** description: pass:none[if enabled, mouse wheel up/down actions jump to previous/next buffer in list] +** type: boolean +** values: on, off +** default value: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** description: pass:none[comma-separated list of signals that are hooked and trigger the refresh of buffers list] ** type: string diff --git a/doc/en/weechat_dev.en.adoc b/doc/en/weechat_dev.en.adoc index f2ddf6a3b..95a68f564 100644 --- a/doc/en/weechat_dev.en.adoc +++ b/doc/en/weechat_dev.en.adoc @@ -199,6 +199,7 @@ WeeChat "core" is located in following directories: |       buflist-bar-item.c | Buflist bar items. |       buflist-command.c | Buflist commands. |       buflist-config.c | Buflist config options (file buflist.conf). +|       buflist-mouse.c | Buflist mouse actions. |    charset/ | Charset plugin. |       charset.c | Charset functions. |    exec/ | Exec plugin. diff --git a/doc/fr/autogen/user/buflist_options.adoc b/doc/fr/autogen/user/buflist_options.adoc index 5cbf92ffc..e0c06a122 100644 --- a/doc/fr/autogen/user/buflist_options.adoc +++ b/doc/fr/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** valeurs: toute chaîne ** valeur par défaut: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** description: pass:none[si activé, les clics avec les boutons gauche/droit sur la ligne avec le tampon courant sautent au tampon visité avant/après] +** type: booléen +** valeurs: on, off +** valeur par défaut: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** description: pass:none[si activé, les gestes de souris (glisser/déposer) déplacent les tampons dans la liste] +** type: booléen +** valeurs: on, off +** valeur par défaut: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** description: pass:none[si activé, les actions de roulette de souris haut/bas sautent au tampon précédent/suivant dans la liste] +** type: booléen +** valeurs: on, off +** valeur par défaut: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** description: pass:none[liste de signaux séparés par des virgules qui sont accrochés et déclenchent l'affichage de la liste des tampons] ** type: chaîne diff --git a/doc/fr/weechat_dev.fr.adoc b/doc/fr/weechat_dev.fr.adoc index 2cf6f9777..22e6ee886 100644 --- a/doc/fr/weechat_dev.fr.adoc +++ b/doc/fr/weechat_dev.fr.adoc @@ -201,6 +201,7 @@ Le cœur de WeeChat est situé dans les répertoires suivants : |       buflist-bar-item.c | Objets de barre Buflist. |       buflist-command.c | Commandes pour Buflist. |       buflist-config.c | Options de configuration pour Buflist (fichier buflist.conf). +|       buflist-mouse.c | Actions souris pour Buflist. |    charset/ | Extension Charset. |       charset.c | Fonctions pour Charset. |    exec/ | Extension Exec. diff --git a/doc/it/autogen/user/buflist_options.adoc b/doc/it/autogen/user/buflist_options.adoc index 92459b2c1..3f899a67a 100644 --- a/doc/it/autogen/user/buflist_options.adoc +++ b/doc/it/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** valori: qualsiasi stringa ** valore predefinito: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** descrizione: pass:none[if enabled, clicks with left/right buttons on the line with current buffer jump to previous/next visited buffer] +** tipo: bool +** valori: on, off +** valore predefinito: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** descrizione: pass:none[if enabled, mouse gestures (drag & drop) move buffers in list] +** tipo: bool +** valori: on, off +** valore predefinito: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** descrizione: pass:none[if enabled, mouse wheel up/down actions jump to previous/next buffer in list] +** tipo: bool +** valori: on, off +** valore predefinito: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** descrizione: pass:none[comma-separated list of signals that are hooked and trigger the refresh of buffers list] ** tipo: stringa diff --git a/doc/ja/autogen/user/buflist_options.adoc b/doc/ja/autogen/user/buflist_options.adoc index 09cb829df..2e4fabcf3 100644 --- a/doc/ja/autogen/user/buflist_options.adoc +++ b/doc/ja/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** 値: 未制約文字列 ** デフォルト値: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** 説明: pass:none[if enabled, clicks with left/right buttons on the line with current buffer jump to previous/next visited buffer] +** タイプ: ブール +** 値: on, off +** デフォルト値: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** 説明: pass:none[if enabled, mouse gestures (drag & drop) move buffers in list] +** タイプ: ブール +** 値: on, off +** デフォルト値: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** 説明: pass:none[if enabled, mouse wheel up/down actions jump to previous/next buffer in list] +** タイプ: ブール +** 値: on, off +** デフォルト値: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** 説明: pass:none[フックされたシグナルおよびバッファリストの再読込シグナルのコンマ区切りリスト] ** タイプ: 文字列 diff --git a/doc/ja/weechat_dev.ja.adoc b/doc/ja/weechat_dev.ja.adoc index 8513b51dc..ae9f51ccc 100644 --- a/doc/ja/weechat_dev.ja.adoc +++ b/doc/ja/weechat_dev.ja.adoc @@ -205,6 +205,8 @@ WeeChat "core" は以下のディレクトリに配置されています: |       buflist-bar-item.c | buflist バー要素 |       buflist-command.c | buflist コマンド |       buflist-config.c | buflist 設定オプション (buflist.conf ファイル) +// TRANSLATION MISSING +|       buflist-mouse.c | Buflist mouse actions. |    charset/ | charset プラグイン |       charset.c | charset 関数 |    exec/ | exec プラグイン diff --git a/doc/pl/autogen/user/buflist_options.adoc b/doc/pl/autogen/user/buflist_options.adoc index 548296c26..34870bca8 100644 --- a/doc/pl/autogen/user/buflist_options.adoc +++ b/doc/pl/autogen/user/buflist_options.adoc @@ -74,6 +74,24 @@ ** wartości: dowolny ciąg ** domyślna wartość: `+"${buffer.hidden}==0"+` +* [[option_buflist.look.mouse_jump_visited_buffer]] *buflist.look.mouse_jump_visited_buffer* +** opis: pass:none[if enabled, clicks with left/right buttons on the line with current buffer jump to previous/next visited buffer] +** typ: bool +** wartości: on, off +** domyślna wartość: `+off+` + +* [[option_buflist.look.mouse_move_buffer]] *buflist.look.mouse_move_buffer* +** opis: pass:none[if enabled, mouse gestures (drag & drop) move buffers in list] +** typ: bool +** wartości: on, off +** domyślna wartość: `+on+` + +* [[option_buflist.look.mouse_wheel]] *buflist.look.mouse_wheel* +** opis: pass:none[if enabled, mouse wheel up/down actions jump to previous/next buffer in list] +** typ: bool +** wartości: on, off +** domyślna wartość: `+on+` + * [[option_buflist.look.signals_refresh]] *buflist.look.signals_refresh* ** opis: pass:none[comma-separated list of signals that are hooked and trigger the refresh of buffers list] ** typ: ciąg diff --git a/po/POTFILES.in b/po/POTFILES.in index e0bccfd13..e8eefe27b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -128,6 +128,8 @@ ./src/plugins/buflist/buflist-command.h ./src/plugins/buflist/buflist-config.c ./src/plugins/buflist/buflist-config.h +./src/plugins/buflist/buflist-mouse.c +./src/plugins/buflist/buflist-mouse.h ./src/plugins/buflist/buflist.h ./src/plugins/charset/charset.c ./src/plugins/exec/exec.c diff --git a/po/cs.po b/po/cs.po index b07683c84..d564e3460 100644 --- a/po/cs.po +++ b/po/cs.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 21:59+0100\n" "Last-Translator: Ondřej Súkup \n" "Language-Team: weechat-dev \n" @@ -4928,6 +4928,18 @@ msgid "" "buflist)" msgstr "příkaz spuštěný při startu WeeChat, před načtením pluginů" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/de.po b/po/de.po index da2a03e94..062b9796b 100644 --- a/po/de.po +++ b/po/de.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-03-12 21:27+0100\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -5797,6 +5797,18 @@ msgstr "" "Realname der auf dem Server genutzt werden soll (Hinweis: Inhalt wird " "evaluiert, siehe /help eval)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/es.po b/po/es.po index d0eac88bb..2e0627d03 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 22:01+0100\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -5140,6 +5140,18 @@ msgid "" "buflist)" msgstr "comando ejecutado cuando WeeChat inicia, antes de cargar los plugins" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/fr.po b/po/fr.po index a6c400faf..734526d33 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" -"PO-Revision-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" +"PO-Revision-Date: 2017-03-30 20:32+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -5716,6 +5716,24 @@ msgstr "" "conditions pour afficher un tampon (note : le contenu est évalué, voir /help " "buflist)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" +"si activé, les clics avec les boutons gauche/droit sur la ligne avec le " +"tampon courant sautent au tampon visité avant/après" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" +"si activé, les gestes de souris (glisser/déposer) déplacent les tampons dans " +"la liste" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" +"si activé, les actions de roulette de souris haut/bas sautent au tampon " +"précédent/suivant dans la liste" + msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " "buffers list" @@ -13029,6 +13047,13 @@ msgstr "%s%s : délai d'attente dépassé pour \"%s\" avec %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s : impossible de se connecter : erreur inattendue (%d)" +#~ msgid "" +#~ "jump to previous/next visited buffer if you click with left/right mouse " +#~ "button on line with current buffer" +#~ msgstr "" +#~ "sauter au tampon visité avant/après si vous cliquez avec le bouton gauche/" +#~ "droit de la souris sur la ligne avec le tampon courant" + #~ msgid "\"days\" (optional: just return the number of days)" #~ msgstr "\"days\" (optionnel : retourner juste le nombre de jours)" diff --git a/po/hu.po b/po/hu.po index be8efc141..f437b2aca 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 22:03+0100\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -4465,6 +4465,18 @@ msgid "" "buflist)" msgstr "felhasználónév az IRC szerveren" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " "buffers list" diff --git a/po/it.po b/po/it.po index 8d52e8021..b8fcf8d57 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 22:04+0100\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -5281,6 +5281,18 @@ msgstr "" "nome utente per il server proxy (nota: il contenuto viene valutato, " "consultare /help eval)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/ja.po b/po/ja.po index ec33d4fe1..d2c63f47a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-03-26 09:00+0900\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese \n" "Language-Team: weechat-dev \n" @@ -5534,6 +5534,18 @@ msgstr "" "prawdziwa nazwa do użycia na serwerze (uwaga: zawartość jest przetwarzana, " "zobacz /help eval)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/pt.po b/po/pt.po index 04ee74661..6aedcbd5c 100644 --- a/po/pt.po +++ b/po/pt.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-14 21:39+0100\n" "Last-Translator: Vasco Almeida \n" "Language-Team: Portuguese <>\n" @@ -5535,6 +5535,18 @@ msgid "" msgstr "" "nome real a usar no servidor (nota: o conteúdo é avaliado, ver /help eval)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/pt_BR.po b/po/pt_BR.po index 0458b1dca..446595b9b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2016-09-03 08:24+0200\n" "Last-Translator: Eduardo Elias \n" "Language-Team: weechat-dev \n" @@ -5083,6 +5083,18 @@ msgstr "" "comando executado quando o WeeChat inicia, antes do carregamento dos plugins " "(nota: conteúdo é avaliado, veja /help eval)" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + #, fuzzy msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " diff --git a/po/ru.po b/po/ru.po index 9a10ffb49..633ac7c3b 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 22:06+0100\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -4503,6 +4503,18 @@ msgid "" "buflist)" msgstr "ник, используемый на IRC сервере" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " "buffers list" diff --git a/po/srcfiles.cmake b/po/srcfiles.cmake index b03a1b4dd..53eace9c3 100644 --- a/po/srcfiles.cmake +++ b/po/srcfiles.cmake @@ -129,6 +129,8 @@ SET(WEECHAT_SOURCES ./src/plugins/buflist/buflist-command.h ./src/plugins/buflist/buflist-config.c ./src/plugins/buflist/buflist-config.h +./src/plugins/buflist/buflist-mouse.c +./src/plugins/buflist/buflist-mouse.h ./src/plugins/buflist/buflist.h ./src/plugins/charset/charset.c ./src/plugins/exec/exec.c diff --git a/po/tr.po b/po/tr.po index c2b515b8c..800ef5e24 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2017-01-06 22:07+0100\n" "Last-Translator: Hasan Kiran \n" "Language-Team: weechat-dev \n" @@ -4068,6 +4068,18 @@ msgid "" "buflist)" msgstr "" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " "buffers list" diff --git a/po/weechat.pot b/po/weechat.pot index 97df81908..68770dda0 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2017-03-29 19:58+0200\n" +"POT-Creation-Date: 2017-03-30 20:31+0200\n" "PO-Revision-Date: 2014-08-16 10:27+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" @@ -4053,6 +4053,18 @@ msgid "" "buflist)" msgstr "" +msgid "" +"if enabled, clicks with left/right buttons on the line with current buffer " +"jump to previous/next visited buffer" +msgstr "" + +msgid "if enabled, mouse gestures (drag & drop) move buffers in list" +msgstr "" + +msgid "" +"if enabled, mouse wheel up/down actions jump to previous/next buffer in list" +msgstr "" + msgid "" "comma-separated list of signals that are hooked and trigger the refresh of " "buffers list" diff --git a/src/plugins/buflist/CMakeLists.txt b/src/plugins/buflist/CMakeLists.txt index f19e425b7..21d6f0e00 100644 --- a/src/plugins/buflist/CMakeLists.txt +++ b/src/plugins/buflist/CMakeLists.txt @@ -21,7 +21,8 @@ add_library(buflist MODULE buflist.c buflist.h buflist-bar-item.c buflist-bar-item.h buflist-command.c buflist-command.h -buflist-config.c buflist-config.h) +buflist-config.c buflist-config.h +buflist-mouse.c buflist-mouse.h) set_target_properties(buflist PROPERTIES PREFIX "") target_link_libraries(buflist) diff --git a/src/plugins/buflist/Makefile.am b/src/plugins/buflist/Makefile.am index dabf9c70d..2cc5a3944 100644 --- a/src/plugins/buflist/Makefile.am +++ b/src/plugins/buflist/Makefile.am @@ -30,7 +30,9 @@ buflist_la_SOURCES = buflist.c \ buflist-command.c \ buflist-command.h \ buflist-config.c \ - buflist-config.h + buflist-config.h \ + buflist-mouse.c \ + buflist-mouse.h buflist_la_LDFLAGS = -module -no-undefined buflist_la_LIBADD = $(BUFLIST_LFLAGS) diff --git a/src/plugins/buflist/buflist-bar-item.c b/src/plugins/buflist/buflist-bar-item.c index 4a492b649..069aed700 100644 --- a/src/plugins/buflist/buflist-bar-item.c +++ b/src/plugins/buflist/buflist-bar-item.c @@ -34,6 +34,7 @@ struct t_hashtable *buflist_hashtable_pointers = NULL; struct t_hashtable *buflist_hashtable_extra_vars = NULL; struct t_hashtable *buflist_hashtable_options = NULL; struct t_hashtable *buflist_hashtable_options_conditions = NULL; +struct t_arraylist *buflist_list_buffers = NULL; /* @@ -92,6 +93,11 @@ buflist_bar_item_buflist_cb (const void *pointer, void *data, snprintf (str_format_number_empty, sizeof (str_format_number_empty), "%%-%ds", length_max_number); + if (buflist_list_buffers) + weechat_arraylist_free (buflist_list_buffers); + buflist_list_buffers = weechat_arraylist_new (16, 0, 1, + NULL, NULL, NULL, NULL); + buffers = buflist_sort_buffers (); for (i = 0; i < weechat_arraylist_size (buffers); i++) @@ -114,6 +120,8 @@ buflist_bar_item_buflist_cb (const void *pointer, void *data, if (!rc) continue; + weechat_arraylist_add (buflist_list_buffers, ptr_buffer); + current_buffer = (ptr_buffer == ptr_current_buffer); ptr_hotlist = weechat_hdata_pointer (buflist_hdata_buffer, @@ -373,4 +381,10 @@ buflist_bar_item_end () weechat_hashtable_free (buflist_hashtable_options_conditions); buflist_hashtable_options_conditions = NULL; + + if (buflist_list_buffers) + { + weechat_arraylist_free (buflist_list_buffers); + buflist_list_buffers = NULL; + } } diff --git a/src/plugins/buflist/buflist-bar-item.h b/src/plugins/buflist/buflist-bar-item.h index caf861f62..c015e87ad 100644 --- a/src/plugins/buflist/buflist-bar-item.h +++ b/src/plugins/buflist/buflist-bar-item.h @@ -22,6 +22,8 @@ #define BUFLIST_BAR_ITEM_NAME "buflist" +extern struct t_arraylist *buflist_list_buffers; + extern int buflist_bar_item_init (); extern void buflist_bar_item_end (); diff --git a/src/plugins/buflist/buflist-config.c b/src/plugins/buflist/buflist-config.c index 76f7bdf7e..8c814fc9c 100644 --- a/src/plugins/buflist/buflist-config.c +++ b/src/plugins/buflist/buflist-config.c @@ -32,6 +32,9 @@ struct t_config_file *buflist_config_file = NULL; /* buflist config, look section */ struct t_config_option *buflist_config_look_display_conditions; +struct t_config_option *buflist_config_look_mouse_jump_visited_buffer; +struct t_config_option *buflist_config_look_mouse_move_buffer; +struct t_config_option *buflist_config_look_mouse_wheel; struct t_config_option *buflist_config_look_signals_refresh; struct t_config_option *buflist_config_look_sort; @@ -218,6 +221,32 @@ buflist_config_init () NULL, NULL, NULL, &buflist_config_change_signals_refresh, NULL, NULL, NULL, NULL, NULL); + buflist_config_look_mouse_jump_visited_buffer = weechat_config_new_option ( + buflist_config_file, ptr_section, + "mouse_jump_visited_buffer", "boolean", + N_("if enabled, clicks with left/right buttons on the line with " + "current buffer jump to previous/next visited buffer"), + NULL, 0, 0, "off", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + buflist_config_look_mouse_move_buffer = weechat_config_new_option ( + buflist_config_file, ptr_section, + "mouse_move_buffer", "boolean", + N_("if enabled, mouse gestures (drag & drop) move buffers in list"), + NULL, 0, 0, "on", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + buflist_config_look_mouse_wheel = weechat_config_new_option ( + buflist_config_file, ptr_section, + "mouse_wheel", "boolean", + N_("if enabled, mouse wheel up/down actions jump to previous/next " + "buffer in list"), + NULL, 0, 0, "on", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); buflist_config_look_signals_refresh = weechat_config_new_option ( buflist_config_file, ptr_section, "signals_refresh", "string", diff --git a/src/plugins/buflist/buflist-config.h b/src/plugins/buflist/buflist-config.h index e0c89ff8f..027bcd98a 100644 --- a/src/plugins/buflist/buflist-config.h +++ b/src/plugins/buflist/buflist-config.h @@ -25,6 +25,9 @@ extern struct t_config_file *buflist_config_file; extern struct t_config_option *buflist_config_look_display_conditions; +extern struct t_config_option *buflist_config_look_mouse_jump_visited_buffer; +extern struct t_config_option *buflist_config_look_mouse_move_buffer; +extern struct t_config_option *buflist_config_look_mouse_wheel; extern struct t_config_option *buflist_config_look_signals_refresh; extern struct t_config_option *buflist_config_look_sort; diff --git a/src/plugins/buflist/buflist-mouse.c b/src/plugins/buflist/buflist-mouse.c new file mode 100644 index 000000000..28318d1aa --- /dev/null +++ b/src/plugins/buflist/buflist-mouse.c @@ -0,0 +1,302 @@ +/* + * buflist-mouse.c - mouse actions for buflist + * + * Copyright (C) 2003-2017 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat 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. + * + * WeeChat 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 WeeChat. If not, see . + */ + +#include +#include +#include + +#include "../weechat-plugin.h" +#include "buflist.h" +#include "buflist-mouse.h" +#include "buflist-bar-item.h" +#include "buflist-config.h" + + +/* + * Callback called when a mouse action occurs in buflist bar item. + */ + +struct t_hashtable * +buflist_focus_cb (const void *pointer, void *data, struct t_hashtable *info) +{ + const char *ptr_bar_item_name, *ptr_bar_item_line; + long item_line; + char *error, str_pointer[128], str_number[32]; + struct t_gui_buffer *ptr_buffer; + struct t_hdata *ptr_hdata; + + /* make C compiler happy */ + (void) pointer; + (void) data; + + if (!buflist_list_buffers) + goto error; + + /* check bar item name */ + ptr_bar_item_name = weechat_hashtable_get (info, "_bar_item_name"); + if (strcmp (ptr_bar_item_name, BUFLIST_BAR_ITEM_NAME) != 0) + goto error; + + /* check bar item line */ + ptr_bar_item_line = weechat_hashtable_get (info, "_bar_item_line"); + if (!ptr_bar_item_line) + goto error; + item_line = strtol (ptr_bar_item_line, &error, 10); + if (!error || error[0]) + goto error; + if ((item_line < 0) + || (item_line >= weechat_arraylist_size (buflist_list_buffers))) + { + goto error; + } + + /* check if buffer pointer is still valid */ + ptr_buffer = weechat_arraylist_get (buflist_list_buffers, item_line); + if (!ptr_buffer) + goto error; + ptr_hdata = weechat_hdata_get ("buffer"); + if (!weechat_hdata_check_pointer ( + ptr_hdata, + weechat_hdata_get_list (ptr_hdata, "gui_buffers"), + ptr_buffer)) + { + goto error; + } + + snprintf (str_pointer, sizeof (str_pointer), + "0x%lx", (long unsigned int)ptr_buffer); + snprintf (str_number, sizeof (str_number), "%d", + weechat_buffer_get_integer (ptr_buffer, "number")); + + weechat_hashtable_set (info, "pointer", str_pointer); + weechat_hashtable_set (info, "number", str_number); + weechat_hashtable_set (info, "full_name", + weechat_buffer_get_string (ptr_buffer, "full_name")); + + return info; + +error: + weechat_hashtable_set (info, "pointer", ""); + weechat_hashtable_set (info, "number", "-1"); + weechat_hashtable_set (info, "full_name", ""); + + return info; +} + +/* + * Moves a buffer after a mouse gesture in buflist bar. + */ + +void +buflist_mouse_move_buffer (const char *key, struct t_gui_buffer *buffer, + int number2) +{ + struct t_hdata *ptr_hdata; + struct t_gui_buffer *ptr_last_gui_buffer; + char str_command[128]; + + if (!weechat_config_boolean (buflist_config_look_mouse_move_buffer)) + return; + + if (number2 < 0) + { + /* + * if number is now known (end of gesture outside buflist), + * then set it according to mouse gesture + */ + number2 = 1; + if (weechat_string_match (key, "*gesture-right", 1) + || weechat_string_match (key, "*gesture-down", 1)) + { + number2 = 999999; + ptr_hdata = weechat_hdata_get ("buffer"); + ptr_last_gui_buffer = weechat_hdata_get_list (ptr_hdata, + "last_gui_buffer"); + if (ptr_last_gui_buffer) + { + number2 = weechat_hdata_integer (ptr_hdata, + ptr_last_gui_buffer, + "number") + 1; + } + } + } + + snprintf (str_command, sizeof (str_command), + "/buffer move %d", number2); + weechat_command (buffer, str_command); +} + +/* + * Callback called when a mouse action occurs in buflist bar or bar item. + */ + +int +buflist_hsignal_cb (const void *pointer, void *data, const char *signal, + struct t_hashtable *hashtable) +{ + const char *ptr_key, *ptr_pointer, *ptr_number, *ptr_number2; + const char *ptr_full_name; + struct t_gui_buffer *ptr_buffer; + char *error, str_command[1024]; + long number, number2; + long unsigned int value; + int rc, current_buffer_number; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) signal; + + ptr_key = weechat_hashtable_get (hashtable, "_key"); + ptr_pointer = weechat_hashtable_get (hashtable, "pointer"); + ptr_number = weechat_hashtable_get (hashtable, "number"); + ptr_number2 = weechat_hashtable_get (hashtable, "number2"); + ptr_full_name = weechat_hashtable_get (hashtable, "full_name"); + + if (!ptr_key || !ptr_pointer || !ptr_number || !ptr_number2 + || !ptr_full_name) + { + return WEECHAT_RC_OK; + } + + rc = sscanf (ptr_pointer, "%lx", &value); + if ((rc == EOF) || (rc == 0)) + return WEECHAT_RC_OK; + ptr_buffer = (struct t_gui_buffer *)value; + + number = strtol (ptr_number, &error, 10); + if (!error || error[0]) + return WEECHAT_RC_OK; + number2 = strtol (ptr_number2, &error, 10); + if (!error || error[0]) + return WEECHAT_RC_OK; + + current_buffer_number = weechat_buffer_get_integer ( + weechat_current_buffer (), "number"); + + if (strcmp (ptr_key, "button1") == 0) + { + /* left mouse button */ + if (number == number2) + { + if (weechat_config_boolean ( + buflist_config_look_mouse_jump_visited_buffer) + && (current_buffer_number == number)) + { + weechat_command (NULL, "/input jump_previously_visited_buffer"); + } + else + { + snprintf (str_command, sizeof (str_command), + "/buffer %s", ptr_full_name); + weechat_command (NULL, str_command); + } + } + else + { + /* move buffer */ + buflist_mouse_move_buffer (ptr_key, ptr_buffer, number2); + } + } + else if (strcmp (ptr_key, "button2") == 0) + { + if (weechat_config_boolean ( + buflist_config_look_mouse_jump_visited_buffer) + && (current_buffer_number == number)) + { + weechat_command (NULL, "/input jump_next_visited_buffer"); + } + } + else if (weechat_string_match (ptr_key, "*wheelup", 1)) + { + if (weechat_config_boolean (buflist_config_look_mouse_wheel)) + { + weechat_command (NULL, "/buffer -1"); + } + } + else if (weechat_string_match (ptr_key, "*wheeldown", 1)) + { + if (weechat_config_boolean (buflist_config_look_mouse_wheel)) + { + weechat_command (NULL, "/buffer +1"); + } + } + else + { + /* move buffer */ + buflist_mouse_move_buffer (ptr_key, ptr_buffer, number2); + } + + return WEECHAT_RC_OK; +} + +/* + * Initializes mouse. + * + * Returns: + * 1: OK + * 0: error + */ + +int +buflist_mouse_init () +{ + struct t_hashtable *keys; + + keys = weechat_hashtable_new (4, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + if (!keys) + return 0; + + weechat_hook_focus (BUFLIST_BAR_ITEM_NAME, &buflist_focus_cb, NULL, NULL); + + weechat_hook_hsignal(BUFLIST_MOUSE_HSIGNAL, + &buflist_hsignal_cb, NULL, NULL); + + weechat_hashtable_set (keys, + "@item(" BUFLIST_BAR_ITEM_NAME "):button1*", + "hsignal:" BUFLIST_MOUSE_HSIGNAL); + weechat_hashtable_set (keys, + "@item(" BUFLIST_BAR_ITEM_NAME "):button2*", + "hsignal:" BUFLIST_MOUSE_HSIGNAL); + weechat_hashtable_set (keys, + "@bar(" BUFLIST_BAR_NAME "):ctrl-wheelup", + "hsignal:" BUFLIST_MOUSE_HSIGNAL); + weechat_hashtable_set (keys, + "@bar(" BUFLIST_BAR_NAME "):ctrl-wheeldown", + "hsignal:" BUFLIST_MOUSE_HSIGNAL); + weechat_key_bind ("mouse", keys); + + weechat_hashtable_free (keys); + + return 1; +} + +/* + * Ends mouse. + */ + +void +buflist_mouse_end () +{ +} diff --git a/src/plugins/buflist/buflist-mouse.h b/src/plugins/buflist/buflist-mouse.h new file mode 100644 index 000000000..df4c4e393 --- /dev/null +++ b/src/plugins/buflist/buflist-mouse.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2003-2017 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat 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. + * + * WeeChat 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 WeeChat. If not, see . + */ + +#ifndef WEECHAT_BUFLIST_MOUSE_H +#define WEECHAT_BUFLIST_MOUSE_H 1 + +#define BUFLIST_MOUSE_HSIGNAL "buflist_mouse" + +extern int buflist_mouse_init (); +extern void buflist_mouse_end (); + +#endif /* WEECHAT_BUFLIST_MOUSE_H */ diff --git a/src/plugins/buflist/buflist.c b/src/plugins/buflist/buflist.c index 4918d2917..08d2889ff 100644 --- a/src/plugins/buflist/buflist.c +++ b/src/plugins/buflist/buflist.c @@ -27,6 +27,7 @@ #include "buflist-bar-item.h" #include "buflist-command.h" #include "buflist-config.h" +#include "buflist-mouse.h" WEECHAT_PLUGIN_NAME(BUFLIST_PLUGIN_NAME); @@ -253,6 +254,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) weechat_bar_item_update (BUFLIST_BAR_ITEM_NAME); + buflist_mouse_init (); + return WEECHAT_RC_OK; } @@ -266,6 +269,8 @@ weechat_plugin_end (struct t_weechat_plugin *plugin) /* make C compiler happy */ (void) plugin; + buflist_mouse_end (); + buflist_bar_item_end (); buflist_config_write ();