termtter 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: