1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# -*- coding: utf-8 -*-
require 'pluggaloid'
miquire :core, 'configloader'
Event = Pluggaloid::Event
EventListener = Pluggaloid::Listener
EventFilter = Pluggaloid::Filter
class Plugin < Pluggaloid::Plugin
include ConfigLoader
class << self
# ユーザに向けて通知を発生させる。
# 通知は、activityプラグインなど、通知の表示に対応するプラグインが
# 入っていればユーザがそれを確認することができるが、そのようなプラグインがない場合は
# 通知は単に無視される。
# プラグインから通知を発生させたい場合は、 Plugin.Activity のかわりに
# Plugin#activity を使えば、通知を発生させたプラグインを特定できるようになる
#
# 引数は、 Plugin#activityを参照
def activity(kind, title, args = {})
Plugin.call(:modify_activity,
{ plugin: nil,
kind: kind,
title: title,
date: Time.new,
description: title }.merge(args)) end
end
# ユーザに向けて通知を発生させる。
# 通知は、activityプラグインなど、通知の表示に対応するプラグインが
# 入っていればユーザがそれを確認することができるが、そのようなプラグインがない場合は
# 通知は単に無視される。
# ==== Args
# [kind] Symbol 通知の種類
# [title] String 通知のタイトル
# [args] Hash その他オプション。主に以下の値
# icon :: String|Gdk::Pixbuf アイコン
# date :: Time イベントの発生した時刻
# service :: Service 関係するServiceオブジェクト
# related :: 自分に関係するかどうかのフラグ
def activity(kind, title, args={})
Plugin.call(:modify_activity,
{ plugin: self,
kind: kind,
title: title,
date: Time.new,
description: title }.merge(args))
end
# プラグインストレージの _key_ の値を取り出す
# ==== Args
# [key] 取得するキー
# [ifnone] キーに対応する値が存在しない場合
# ==== Return
# プラグインストレージ内のキーに対応する値
def at(key, ifnone=nil)
super("#{@name}_#{key}".to_sym, ifnone) end
# プラグインストレージに _key_ とその値 _vel_ の対応を保存する
# ==== Args
# [key] 取得するキー
# [val] 値
def store(key, val)
super("#{@name}_#{key}".to_sym, val) end
# mikutterコマンドを定義
# ==== Args
# [slug] コマンドスラッグ
# [options] コマンドオプション
# [&exec] コマンドの実行内容
def command(slug, options, &exec)
command = options.merge(slug: slug, exec: exec, plugin: @name).freeze
add_event_filter(:command){ |menu|
menu[slug] = command
[menu] } end
# 設定画面を作る
# ==== Args
# - String name タイトル
# - Proc &place 設定画面を作る無名関数
def settings(name, &place)
add_event_filter(:defined_settings) do |tabs|
[tabs.melt << [name, place, @name]] end end
# 画像ファイルのパスを得る
# ==== Args
# - String filename ファイル名
def get_skin(filename)
plugin_skin_dir = File.join(spec[:path], "skin")
if File.exist?(plugin_skin_dir)
Skin.get(filename, [plugin_skin_dir])
else
Skin.get(filename)
end
end
end
Plugin.vm.Plugin = Plugin
|