termtter 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.rdoc +1 -8
  2. data/Rakefile +13 -3
  3. data/lib/plugins/command_plus.rb +14 -14
  4. data/lib/plugins/confirm.rb +10 -4
  5. data/lib/plugins/countter.rb +18 -18
  6. data/lib/plugins/db.rb +1 -1
  7. data/lib/plugins/defaults/alias.rb +69 -0
  8. data/lib/plugins/defaults/auto_reload.rb +2 -2
  9. data/lib/plugins/defaults/command_line.rb +9 -0
  10. data/lib/plugins/defaults/fib.rb +5 -23
  11. data/lib/plugins/defaults/retweet.rb +17 -13
  12. data/lib/plugins/defaults/standard_commands.rb +40 -63
  13. data/lib/plugins/defaults/standard_completion.rb +14 -9
  14. data/lib/plugins/defaults/stdout.rb +32 -19
  15. data/lib/plugins/defaults.rb +1 -0
  16. data/lib/plugins/erb.rb +4 -8
  17. data/lib/plugins/expand-tinyurl.rb +4 -0
  18. data/lib/plugins/fibyou.rb +12 -0
  19. data/lib/plugins/group.rb +19 -20
  20. data/lib/plugins/hi.rb +15 -0
  21. data/lib/plugins/hugeurl.rb +1 -1
  22. data/lib/plugins/irc_gw.rb +53 -5
  23. data/lib/plugins/itunes.rb +33 -0
  24. data/lib/plugins/jakigan.rb +30 -0
  25. data/lib/plugins/list_with_opts.rb +1 -1
  26. data/lib/plugins/multi_output.rb +34 -0
  27. data/lib/plugins/multi_post.rb +30 -15
  28. data/lib/plugins/open.rb +44 -0
  29. data/lib/plugins/paranoid.rb +11 -0
  30. data/lib/plugins/quick_exit.rb +9 -0
  31. data/lib/plugins/replace.rb +54 -0
  32. data/lib/plugins/saykanji.rb +1 -1
  33. data/lib/plugins/searchline.rb +44 -0
  34. data/lib/plugins/tinyurl.rb +7 -1
  35. data/lib/plugins/train.rb +24 -0
  36. data/lib/termtter/active_rubytter.rb +39 -0
  37. data/lib/termtter/api.rb +24 -21
  38. data/lib/termtter/client.rb +17 -29
  39. data/lib/termtter/config_setup.rb +27 -2
  40. data/lib/termtter/config_template.erb +2 -2
  41. data/lib/termtter/version.rb +1 -1
  42. data/lib/termtter.rb +9 -4
  43. data/spec/plugins/db_spec.rb +1 -1
  44. data/spec/plugins/fib_spec.rb +1 -1
  45. data/spec/plugins/standard_commands_spec.rb +4 -0
  46. data/spec/plugins/whois_spec.rb +7 -7
  47. data/spec/termtter/active_rubytter_spec.rb +70 -0
  48. metadata +29 -5
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ config.plugins.searchline.set_default(:interval, 300)
4
+
5
+ module Termtter::Client
6
+ class << self
7
+ def delete_task(key)
8
+ @task_manager.delete_task(key) # returns nil if task for key is not exist
9
+ end
10
+ end
11
+
12
+ register_command(
13
+ :name => :searchline,
14
+ :exec => lambda {|arg|
15
+ delete_task(:searchline)
16
+ if arg == '-d'
17
+ puts 'Stopped searchline.'
18
+ else
19
+ public_storage[:searchline_since_id] = 0
20
+ add_task(:name => :searchline,
21
+ :interval => config.plugins.searchline.interval ) do
22
+ begin
23
+ statuses = Termtter::API.twitter.search(
24
+ arg, 'since_id' => public_storage[:searchline_since_id] )
25
+ unless statuses.empty?
26
+ print "\e[0G" + "\e[K" unless win?
27
+ public_storage[:searchline_since_id] = statuses[0].id
28
+ output(statuses, SearchEvent.new(arg))
29
+ Readline.refresh_line
30
+ end
31
+ rescue Exception => e
32
+ handle_error(e)
33
+ end
34
+ end
35
+ end
36
+ },
37
+ :help => ["searchline [TEXT|-d]", "Search for Twitter with auto reload"]
38
+ )
39
+ end
40
+
41
+ # searchline.rb:
42
+ # Search for Twitter with auto reload like friends_timeline.
43
+ # Caution:
44
+ # Be aware of API limit.
@@ -1,8 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  SHORTURL_MAKERS = [
4
- { :host => "tinyurl.com", :format => '/api-create.php?url=%s' },
4
+ { :host => "api.bit.ly",
5
+ :format => '/shorten?version=2.0.1&longUrl=%s&login=termtter&apiKey=R_e7f22d523a803dbff7f67de18c109856' },
6
+ { :host => "to.ly", :format => '/api.php?longurl=%s' },
5
7
  { :host => "is.gd", :format => '/api.php?longurl=%s' },
8
+ { :host => "tinyurl.com", :format => '/api-create.php?url=%s' },
6
9
  ]
7
10
  TINYURL_HOOK_COMMANDS = [:update, :reply]
8
11
  URI_REGEXP = URI.regexp(%w(http https ftp))
@@ -27,6 +30,9 @@ Termtter::Client.register_hook(
27
30
  res = http_class.new(site[:host]).get(site[:format] % url_enc)
28
31
  if res.code == '200'
29
32
  result = res.body
33
+ if result =~ /"shortUrl": "(http.*)"/
34
+ result = $1
35
+ end
30
36
  break
31
37
  end
32
38
  end
@@ -0,0 +1,24 @@
1
+ # あ
2
+ # -*- coding: utf-8 -*-
3
+ module Termtter::Client
4
+ def self.train(length)
5
+ text = "ε="
6
+ length.times{ text << "⋤⋥" }
7
+ text
8
+ end
9
+
10
+ register_command(:train, :help => ['train [LENGTH]', 'Post a train']) do |arg|
11
+ length = arg.empty? ? 1 : arg.to_i
12
+ result = Termtter::API.twitter.update(train(length))
13
+ puts "=> " << result.text
14
+ end
15
+
16
+ register_command(:trainyou, :help => ['trainyou [USER] [LENGTH] [(Optional) MESSAGE]', 'Post a train for a user']) do |arg|
17
+ /(\w+)\s(\d+)(.*)/ =~ arg
18
+ name = normalize_as_user_name($1)
19
+ length = $2.to_i
20
+ msg = $3
21
+ result = Termtter::API.twitter.update("@#{name} #{train(length)}#{msg}")
22
+ puts "=> " << result.text
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ gem 'rubytter', '>= 0.6.5'
3
+ require 'rubytter'
4
+
5
+ module Termtter
6
+ class ActiveRubytter
7
+ def initialize(data)
8
+ self.attributes = data
9
+ end
10
+
11
+ def method_missing(name, *args)
12
+ if @data.key?(name)
13
+ return @data[name]
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def attributes=(raw_hash)
20
+ @data = {}
21
+ raw_hash.each do |key, value|
22
+ key_symbol = key.to_s.to_sym
23
+ if value.kind_of? Hash
24
+ @data[key_symbol] = ActiveRubytter.new(raw_hash[key])
25
+ else
26
+ @data[key_symbol] = raw_hash[key]
27
+ end
28
+ end
29
+ end
30
+
31
+ def to_hash
32
+ @data.inject({}) do |memo, (key, value)|
33
+ memo[key] =
34
+ (value.kind_of? self.class) ? value.to_hash : value
35
+ memo
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/termtter/api.rb CHANGED
@@ -16,7 +16,14 @@ module Termtter
16
16
  attr_reader :connection, :twitter
17
17
  def setup
18
18
  @connection = Connection.new
19
- @twitter = create_twitter(config.user_name, config.password)
19
+ if config.access_token.empty? && config.access_token_secret.empty?
20
+ @twitter = Rubytter.new(config.user_name, config.password, twitter_option)
21
+ else
22
+ consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com')
23
+ access_token = OAuth::AccessToken.new(consumer, config.access_token, config.access_token_secret)
24
+ @twitter = OAuthRubytter.new(access_token, twitter_option)
25
+ config.user_name = @twitter.verify_credentials[:name]
26
+ end
20
27
  end
21
28
 
22
29
  def restore_user
@@ -30,26 +37,22 @@ module Termtter
30
37
  @twitter = create_twitter(username, password)
31
38
  end
32
39
 
33
- def create_twitter(user_name, password)
34
- Rubytter.new(
35
- user_name,
36
- password,
37
- {
38
- :app_name => config.app_name.empty? ? Termtter::APP_NAME : config.app_name,
39
- :host => config.host,
40
- :header => {
41
- 'User-Agent' => 'Termtter http://github.com/jugyo/termtter',
42
- 'X-Twitter-Client' => 'Termtter',
43
- 'X-Twitter-Client-URL' => 'http://github.com/jugyo/termtter',
44
- 'X-Twitter-Client-Version' => Termtter::VERSION
45
- },
46
- :enable_ssl => config.enable_ssl,
47
- :proxy_host => config.proxy.host,
48
- :proxy_port => config.proxy.port,
49
- :proxy_user_name => config.proxy.user_name,
50
- :proxy_password => config.proxy.password
51
- }
52
- )
40
+ def twitter_option
41
+ {
42
+ :app_name => config.app_name.empty? ? Termtter::APP_NAME : config.app_name,
43
+ :host => config.host,
44
+ :header => {
45
+ 'User-Agent' => 'Termtter http://github.com/jugyo/termtter',
46
+ 'X-Twitter-Client' => 'Termtter',
47
+ 'X-Twitter-Client-URL' => 'http://github.com/jugyo/termtter',
48
+ 'X-Twitter-Client-Version' => Termtter::VERSION
49
+ },
50
+ :enable_ssl => config.enable_ssl,
51
+ :proxy_host => config.proxy.host,
52
+ :proxy_port => config.proxy.port,
53
+ :proxy_user_name => config.proxy.user_name,
54
+ :proxy_password => config.proxy.password
55
+ }
53
56
  end
54
57
  end
55
58
  end
@@ -4,7 +4,6 @@ require 'logger'
4
4
  require 'termcolor'
5
5
 
6
6
  module Termtter
7
-
8
7
  class CommandNotFound < StandardError; end
9
8
  class CommandCanceled < StandardError; end
10
9
 
@@ -13,7 +12,6 @@ module Termtter
13
12
  @hooks = {}
14
13
  @commands = {}
15
14
  @filters = []
16
- @aliases = {}
17
15
  @since_id = nil
18
16
  @task_manager = Termtter::TaskManager.new
19
17
 
@@ -42,10 +40,6 @@ module Termtter
42
40
  Termtter::Client.handle_error(e)
43
41
  end
44
42
 
45
- def alias(name, value)
46
- @aliases[name] = value
47
- end
48
-
49
43
  def public_storage
50
44
  @public_storage ||= {}
51
45
  end
@@ -130,17 +124,6 @@ module Termtter
130
124
  register_command(command)
131
125
  end
132
126
 
133
- def add_alias(from, to, confirm = true)
134
- if confirm
135
- raise 'Already exist' if @aliases[from]
136
- end
137
- @aliases[from] = to
138
- end
139
-
140
- def remove_alias(target)
141
- @aliases.delete target
142
- end
143
-
144
127
  # statuses => [status, status, ...]
145
128
  # status => {
146
129
  # :id => status id,
@@ -159,7 +142,7 @@ module Termtter
159
142
  statuses = statuses.sort_by(&:id)
160
143
  call_hooks(:pre_filter, statuses, event)
161
144
 
162
- filtered = apply_filters_for_hook(:filter_for_output, statuses.map(&:dup), event)
145
+ filtered = apply_filters_for_hook(:filter_for_output, statuses.map(&:clone), event)
163
146
 
164
147
  @filters.each do |f| # TODO: code for compatibility. delete someday.
165
148
  filtered = f.call(filtered, event)
@@ -312,16 +295,22 @@ module Termtter
312
295
  @init_block = block
313
296
  end
314
297
 
298
+ def load_plugins
299
+ plug 'defaults'
300
+ plug 'devel' if config.devel
301
+ plug config.system.load_plugins
302
+ end
303
+
304
+ def eval_init_block
305
+ @init_block.call(self) if @init_block
306
+ end
307
+
315
308
  def run
316
309
  load_config()
317
310
  Termtter::API.setup()
318
311
  setup_logger()
319
-
320
- @init_block.call(self) if @init_block
321
-
322
- plug 'defaults'
323
- plug 'devel' if config.devel
324
- plug config.system.load_plugins
312
+ load_plugins()
313
+ eval_init_block()
325
314
 
326
315
  config.system.eval_scripts.each do |script|
327
316
  begin
@@ -356,14 +345,13 @@ module Termtter
356
345
  def confirm(message, default_yes = true, &block)
357
346
  pause # TODO: TaskManager から呼ばれるならこれいらないなぁ
358
347
 
359
- result = # Boolean in duck typing
348
+ prompt =
360
349
  if default_yes
361
- prompt = "\"#{message}".strip + "\" [Y/n] "
362
- /^y?$/i =~ Readline.readline(prompt, false)
350
+ "\"#{message}".strip + "\" [Y/n] "
363
351
  else
364
- prompt = "\"#{message}".strip + "\" [N/y] "
365
- /^n?$/i =~ Readline.readline(prompt, false)
352
+ "\"#{message}".strip + "\" [N/y] "
366
353
  end
354
+ result = !!(/^y?$/i =~ Readline.readline(prompt, false))
367
355
 
368
356
  if result && block
369
357
  block.call
@@ -5,10 +5,32 @@ require 'erb'
5
5
  module Termtter
6
6
  module ConfigSetup
7
7
  module_function
8
+ # TODO: move this method to suitable place
9
+ def open_brawser(url)
10
+ case RUBY_PLATFORM
11
+ when /linux/
12
+ system 'firefox', url
13
+ when /mswin(?!ce)|mingw|bccwin/
14
+ system 'explorer', url
15
+ else
16
+ system 'open', url
17
+ end
18
+ end
19
+
8
20
  def run
21
+ puts 'connecting to twitter...'
22
+
23
+ consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com')
24
+ request_token = consumer.get_request_token
25
+
26
+ open_brawser(request_token.authorize_url)
27
+ sleep 2
28
+
9
29
  ui = create_highline
10
- user_name = ui.ask('your twitter user name: ')
11
- password = ui.ask('your twitter password: ') { |q| q.echo = false }
30
+ pin = ui.ask('Enter PIN: ')
31
+ access_token = request_token.get_access_token(:oauth_verifier => pin)
32
+ token = access_token.token
33
+ secret = access_token.secret
12
34
 
13
35
  plugins = Dir.glob(File.expand_path(File.dirname(__FILE__) + "/../plugins/*.rb")).map {|f|
14
36
  f.match(%r|lib/plugins/(.*?).rb$|)[1]
@@ -25,6 +47,9 @@ module Termtter
25
47
 
26
48
  puts "generated: ~/.termtter/config"
27
49
  puts "enjoy!"
50
+ rescue OAuth::Unauthorized
51
+ puts 'failed to authentication!'
52
+ exit 1
28
53
  end
29
54
  end
30
55
  end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- config.user_name = '<%= user_name %>'
4
- config.password = '<%= password %>'
3
+ config.access_token = '<%= token %>'
4
+ config.access_token_secret = '<%= secret %>'
5
5
  #config.update_interval = 120
6
6
  #config.proxy.host = 'proxy host'
7
7
  #config.proxy.port = '8080'
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module Termtter
3
- VERSION = '1.3.1'
3
+ VERSION = '1.4.0'
4
4
  end
data/lib/termtter.rb CHANGED
@@ -1,18 +1,20 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- $KCODE="u" unless Object.const_defined? :Encoding
3
+ $KCODE = "u" unless Object.const_defined? :Encoding
4
4
 
5
5
  $:.unshift(File.dirname(__FILE__)) unless
6
6
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
7
7
 
8
8
  require 'rubygems'
9
+
10
+ require 'cgi'
11
+ require 'enumerator'
9
12
  require 'json'
10
13
  require 'net/https'
11
14
  require 'open-uri'
12
- require 'cgi'
13
- require 'readline'
14
- require 'enumerator'
15
15
  require 'optparse'
16
+ require 'readline'
17
+ require 'oauth'
16
18
 
17
19
  require 'termtter/config'
18
20
  require 'termtter/version'
@@ -35,4 +37,7 @@ module Termtter
35
37
  config.system.set_default :conf_file, CONF_DIR + '/config'
36
38
  CONF_FILE = config.system.conf_file
37
39
  $:.unshift(Termtter::CONF_DIR)
40
+
41
+ CONSUMER_KEY = 'O80mRgLxHgpzB5yVOnxmiA'
42
+ CONSUMER_SECRET = 'jylXMjnIbfaNKpEQjgcVeZWJFTaKXFnj1RA4qTeEM'
38
43
  end
@@ -37,7 +37,7 @@ describe 'db' do
37
37
  end
38
38
 
39
39
  it 'calls hook' do
40
- user_struct = Struct.new(:id, :screen_name)
40
+ user_struct = Struct.new(:id, :screen_name, :protected)
41
41
  user_1 = user_struct.new(1, 'jugyo')
42
42
  user_2 = user_struct.new(2, 'oyguj')
43
43
 
@@ -4,7 +4,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
4
4
 
5
5
  describe Termtter::Client, 'when the plugin fib is loaded' do
6
6
  it 'should add command fib' do
7
- Termtter::Client.should_receive(:register_command).twice
7
+ Termtter::Client.should_receive(:register_command).once
8
8
  Termtter::Client.plug 'defaults/fib'
9
9
  end
10
10
 
@@ -20,4 +20,8 @@ module Termtter
20
20
  end
21
21
  end
22
22
  end
23
+
24
+ describe 'standard_commands' do
25
+ it 'needs more specs!'
26
+ end
23
27
  end
@@ -3,18 +3,18 @@
3
3
  require File.dirname(__FILE__) + '/../spec_helper'
4
4
 
5
5
  describe Termtter::Client, 'when the plugin whois is loaded' do
6
- it 'should add command whois' do
6
+ it 'adds the command whois' do
7
7
  Termtter::Client.should_receive(:register_command).once
8
8
  Termtter::Client.plug 'whois'
9
9
  end
10
10
 
11
- it 'should be whois define' do
11
+ it 'should be whois define' do # What does "be whois define" mean?
12
12
  Termtter::Client.plug 'whois'
13
- name = "jp-in-f104.google.com"
14
- ip = "66.249.89.104"
15
-
13
+ name = 'jp-in-f104.google.com'
14
+ ip = '66.249.89.104'
15
+
16
16
  whois?(name).should == ip
17
- whois?(ip).should == name
17
+ whois?(ip).should == name
18
+ # FIXME: This spec doesn't pass in Canada
18
19
  end
19
-
20
20
  end
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+ require 'termtter/active_rubytter'
5
+
6
+ module Termtter
7
+ describe ActiveRubytter do
8
+
9
+ it 'Hashをクラス化できる' do
10
+ d = ActiveRubytter.new(:name => 'termtter', :age => 16)
11
+ d.name.should == 'termtter'
12
+ d.age.should == 16
13
+ end
14
+
15
+ it '元のHashを得られること' do
16
+ data = { :test => 'test' }
17
+ d = ActiveRubytter.new(data)
18
+ d.to_hash.should == data
19
+ end
20
+
21
+ describe '入れ子のHashの処理' do
22
+
23
+ before(:all) do
24
+ @data = {
25
+ :hoge => "hogehoge",
26
+ :fuga => "fugafuga",
27
+ :hage => {
28
+ :foo => "foofoo",
29
+ :bar => {
30
+ :nest => "nestnest"
31
+ }
32
+ }
33
+ }
34
+ end
35
+
36
+ before(:each) do
37
+ @d = ActiveRubytter.new(@data)
38
+ end
39
+
40
+ it "入れ子のHashをクラス化できる" do
41
+ @d.should be_instance_of(ActiveRubytter)
42
+
43
+ #array.map{ |elem| ActiveRubytter.new(elem)})}
44
+ end
45
+
46
+ it "Hashからクラス化して`.'でアクセスできる" do
47
+ @d.hoge.should == "hogehoge"
48
+
49
+ #array.map{ |elem| ActiveRubytter.new(elem)})}
50
+ end
51
+
52
+ it "Hashからクラス化して`.'で入れ子でもアクセスできる" do
53
+ @d.hage.foo.should == "foofoo"
54
+
55
+ #array.map{ |elem| ActiveRubytter.new(elem)})}
56
+ end
57
+
58
+ it "Hashからクラス化して`.'で入れ子の入れ子でもアクセスできる" do
59
+ @d.hage.bar.nest.should == "nestnest"
60
+
61
+ #array.map{ |elem| ActiveRubytter.new(elem)})}
62
+ end
63
+
64
+ it "入れ子でも元のHashを得られること" do
65
+ @d.to_hash.should == @data
66
+ end
67
+ end
68
+ end
69
+ end
70
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: termtter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jugyo
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-08-10 00:00:00 +09:00
13
+ date: 2009-10-18 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,7 @@ dependencies:
41
41
  requirements:
42
42
  - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: 0.3.1
44
+ version: 1.0.0
45
45
  version:
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rubytter
@@ -51,7 +51,17 @@ dependencies:
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.6.4
54
+ version: 0.9.2
55
+ version:
56
+ - !ruby/object:Gem::Dependency
57
+ name: oauth
58
+ type: :runtime
59
+ version_requirement:
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.3.6
55
65
  version:
56
66
  description: Termtter is a terminal based Twitter client.
57
67
  email: jugyo.org@gmail.com
@@ -77,6 +87,7 @@ files:
77
87
  - lib/plugins/countter.rb
78
88
  - lib/plugins/curry.rb
79
89
  - lib/plugins/db.rb
90
+ - lib/plugins/defaults/alias.rb
80
91
  - lib/plugins/defaults/auto_reload.rb
81
92
  - lib/plugins/defaults/command_line.rb
82
93
  - lib/plugins/defaults/exec.rb
@@ -93,6 +104,7 @@ files:
93
104
  - lib/plugins/exec_and_update.rb
94
105
  - lib/plugins/expand-tinyurl.rb
95
106
  - lib/plugins/fib_filter.rb
107
+ - lib/plugins/fibyou.rb
96
108
  - lib/plugins/filter.rb
97
109
  - lib/plugins/github-issues.rb
98
110
  - lib/plugins/graduatter.rb
@@ -102,6 +114,7 @@ files:
102
114
  - lib/plugins/growl2.rb
103
115
  - lib/plugins/hatebu.rb
104
116
  - lib/plugins/hatebu_and_update.rb
117
+ - lib/plugins/hi.rb
105
118
  - lib/plugins/history.rb
106
119
  - lib/plugins/http_server/favicon.ico
107
120
  - lib/plugins/http_server/index.html
@@ -110,6 +123,8 @@ files:
110
123
  - lib/plugins/ignore.rb
111
124
  - lib/plugins/irb.rb
112
125
  - lib/plugins/irc_gw.rb
126
+ - lib/plugins/itunes.rb
127
+ - lib/plugins/jakigan.rb
113
128
  - lib/plugins/keyword.rb
114
129
  - lib/plugins/l2.rb
115
130
  - lib/plugins/list_with_opts.rb
@@ -118,24 +133,29 @@ files:
118
133
  - lib/plugins/me.rb
119
134
  - lib/plugins/modify_arg_hook_sample.rb
120
135
  - lib/plugins/msagent.rb
136
+ - lib/plugins/multi_output.rb
121
137
  - lib/plugins/multi_post.rb
122
138
  - lib/plugins/multi_reply.rb
123
139
  - lib/plugins/notify-send.rb
124
140
  - lib/plugins/notify-send2.rb
125
141
  - lib/plugins/notify-send3.rb
142
+ - lib/plugins/open.rb
126
143
  - lib/plugins/open_url.rb
127
144
  - lib/plugins/otsune.rb
128
145
  - lib/plugins/outputz.rb
146
+ - lib/plugins/paranoid.rb
129
147
  - lib/plugins/pause.rb
130
148
  - lib/plugins/pool.rb
131
149
  - lib/plugins/post_exec_hook_sample.rb
132
150
  - lib/plugins/pre_exec_hook_sample.rb
133
151
  - lib/plugins/primes.rb
134
152
  - lib/plugins/protected_filter.rb
153
+ - lib/plugins/quick_exit.rb
135
154
  - lib/plugins/quicklook.rb
136
155
  - lib/plugins/random.rb
137
156
  - lib/plugins/reblog.rb
138
157
  - lib/plugins/reload.rb
158
+ - lib/plugins/replace.rb
139
159
  - lib/plugins/reply.rb
140
160
  - lib/plugins/reverse.rb
141
161
  - lib/plugins/say.rb
@@ -144,6 +164,7 @@ files:
144
164
  - lib/plugins/screen-notify.rb
145
165
  - lib/plugins/screen.rb
146
166
  - lib/plugins/search_url.rb
167
+ - lib/plugins/searchline.rb
147
168
  - lib/plugins/shell.rb
148
169
  - lib/plugins/sl.rb
149
170
  - lib/plugins/spam.rb
@@ -155,6 +176,7 @@ files:
155
176
  - lib/plugins/system_status.rb
156
177
  - lib/plugins/timer.rb
157
178
  - lib/plugins/tinyurl.rb
179
+ - lib/plugins/train.rb
158
180
  - lib/plugins/translation.rb
159
181
  - lib/plugins/trends.rb
160
182
  - lib/plugins/twitpic.rb
@@ -167,6 +189,7 @@ files:
167
189
  - lib/plugins/yhara.rb
168
190
  - lib/plugins/yhara_filter.rb
169
191
  - lib/plugins/yonda.rb
192
+ - lib/termtter/active_rubytter.rb
170
193
  - lib/termtter/api.rb
171
194
  - lib/termtter/client.rb
172
195
  - lib/termtter/command.rb
@@ -197,6 +220,7 @@ files:
197
220
  - spec/plugins/storage/status_spec.rb
198
221
  - spec/plugins/whois_spec.rb
199
222
  - spec/spec_helper.rb
223
+ - spec/termtter/active_rubytter_spec.rb
200
224
  - spec/termtter/client_spec.rb
201
225
  - spec/termtter/command_spec.rb
202
226
  - spec/termtter/config_spec.rb
@@ -208,7 +232,7 @@ files:
208
232
  - test/friends_timeline.json
209
233
  - test/search.json
210
234
  has_rdoc: true
211
- homepage: http://wiki.github.com/jugyo/termtter
235
+ homepage: http://termtter.org/
212
236
  licenses: []
213
237
 
214
238
  post_install_message: