Skip to content

Instantly share code, notes, and snippets.

@mikoto2000
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikoto2000/42d6dc3732a35bb216bf to your computer and use it in GitHub Desktop.
Save mikoto2000/42d6dc3732a35bb216bf to your computer and use it in GitHub Desktop.
mikutter の settings で listener を使う。
ArgumentError ArgumentError
{MIKUTTER_DIR}/core/plugin/settings/select.rb:38:in `build'
{MIKUTTER_DIR}/core/plugin/settings/builder.rb:256:in `select'
/home/mikoto/.mikutter_dev/plugin/setting_listenre/setting_listenre.rb:17:in `block (3 levels) in <top (required)>'
{MIKUTTER_DIR}/core/plugin/settings/builder.rb:190:in `instance_eval'
{MIKUTTER_DIR}/core/plugin/settings/builder.rb:190:in `settings'
/home/mikoto/.mikutter_dev/plugin/setting_listenre/setting_listenre.rb:5:in `block (2 levels) in <top (required)>'
{MIKUTTER_DIR}/core/plugin/settings/settings.rb:35:in `instance_eval'
{MIKUTTER_DIR}/core/plugin/settings/settings.rb:35:in `block in setting_window'
{MIKUTTER_DIR}/core/plugin/settings/settings.rb:30:in `each'
{MIKUTTER_DIR}/core/plugin/settings/settings.rb:30:in `setting_window'
{MIKUTTER_DIR}/core/plugin/settings/settings.rb:18:in `block (2 levels) in <top (required)>'
{MIKUTTER_DIR}/core/event_listener.rb:25:in `call'
{MIKUTTER_DIR}/core/event_listener.rb:25:in `update'
/usr/lib/ruby/1.9.1/observer.rb:195:in `block in notify_observers'
/usr/lib/ruby/1.9.1/observer.rb:194:in `each'
/usr/lib/ruby/1.9.1/observer.rb:194:in `notify_observers'
{MIKUTTER_DIR}/core/event.rb:46:in `block (2 levels) in call'
{MIKUTTER_DIR}/core/event.rb:46:in `catch'
{MIKUTTER_DIR}/core/event.rb:46:in `block in call'
{MIKUTTER_DIR}/vendor/bundle/ruby/1.9.1/gems/delayer-0.0.2/lib/delayer/procedure.rb:24:in `call'
{MIKUTTER_DIR}/vendor/bundle/ruby/1.9.1/gems/delayer-0.0.2/lib/delayer/procedure.rb:24:in `run'
{MIKUTTER_DIR}/vendor/bundle/ruby/1.9.1/gems/delayer-0.0.2/lib/delayer/extend.rb:58:in `run_once'
{MIKUTTER_DIR}/vendor/bundle/ruby/1.9.1/gems/delayer-0.0.2/lib/delayer/extend.rb:30:in `run'
{MIKUTTER_DIR}/vendor/bundle/ruby/1.9.1/gems/delayer-0.0.2/lib/delayer.rb:43:in `method_missing'
{MIKUTTER_DIR}/core/plugin/gtk/delayer.rb:10:in `block in boot'
{MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `call'
{MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `main'
{MIKUTTER_DIR}/core/plugin/gtk/mainloop.rb:10:in `mainloop'
./mikutter.rb:63:in `boot!'
./mikutter.rb:92:in `<main>'
# Plugin::Settings::Select#build 内の type_strict を削除する。
# 他の項目で type_strict を使っているものはないので、
# 多分こちらのほうが良いのだと思う。
diff --git a/core/plugin/settings/select.rb b/core/plugin/settings/select.r
index 289f5b6..04fbab2 100644
--- a/core/plugin/settings/select.rb
+++ b/core/plugin/settings/select.rb
@@ -35,7 +35,6 @@ class Plugin::Settings::Select
# ==== Return
# ウィジェット
def build(label, config)
- type_strict label => String, config => Symbol
if has_widget?
group = Gtk::Frame.new.set_border_width(8)
group.set_label(label)
# Plugin::Settings::Select#build 内の type_strict で、
# Symbol と Plugin::Settings::Listener を許可するように修正
# 他ではやっていないのに select だけやる必要があるのか?
diff --git a/core/plugin/settings/select.rb b/core/plugin/settings/select.rb
index 289f5b6..5221c25 100644
--- a/core/plugin/settings/select.rb
+++ b/core/plugin/settings/select.rb
@@ -35,7 +35,7 @@ class Plugin::Settings::Select
# ==== Return
# ウィジェット
def build(label, config)
- type_strict label => String, config => Symbol
+ type_strict label => String, config => tcor(Symbol, Plugin::Settings::Listener)
if has_widget?
group = Gtk::Frame.new.set_border_width(8)
group.set_label(label)
# -*- coding: utf-8 -*-
Plugin.create(:setting_listenre) do
settings("setting_listener") {
settings("基本設定") {
multitext("複数行テキスト", listener(:setting_listener_multitext))
adjustment("特定範囲の数値入力", listener(:setting_listener_adjustment), 1, 600)
boolean("真偽値入力", listener(:setting_listener_boolean))
fileselect("ファイルを選択する", listener(:setting_listener_fileselect))
input("一行テキストボックス", listener(:setting_listener_input))
inputpass("一行テキストボックス(非表示)", listener(:setting_listener_inputpass))
multi("複数テキストボックス", listener(:setting_listener_multi))
font("フォント", listener(:setting_listener_font))
color("カラー", listener(:setting_listener_color))
fontcolor("フォントカラー", listener(:setting_listener_fontcolor_font), listener(:setting_listener_fontcolor_color))
# 落ちる
#select("アイコンの色", listener(:setting_listener_select), {
# "1" => "1",
# "2" => "2",
# "3" => "3",
# "4" => "4",
# "5" => "5"})
multiselect("要素を複数個選択させる", listener(:setting_listener_multiselect), {
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5"})
}
}
# リスナ作成
def listener(key)
Plugin::Settings::Listener.new(
:set => lambda { |new|
UserConfig[key] = new
},
:get => lambda {
UserConfig[key]
}
)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment