termtter 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. data/.gitignore +5 -0
  2. data/README.rdoc +2 -2
  3. data/Rakefile +41 -75
  4. data/VERSION +1 -0
  5. data/bin/termtter +9 -2
  6. data/doc/Termtter-1.0-Release-Note-English.txt +37 -0
  7. data/doc/Termtter-1.0-Release-Note.txt +37 -0
  8. data/lib/plugins/another_prompt.rb +8 -8
  9. data/lib/plugins/ar.rb +102 -0
  10. data/lib/plugins/async.rb +1 -1
  11. data/lib/plugins/babelfish.rb +34 -0
  12. data/lib/plugins/confirm.rb +2 -0
  13. data/lib/plugins/crypt.rb +44 -0
  14. data/lib/plugins/defaults/auto_reload.rb +1 -1
  15. data/lib/plugins/defaults/command_line.rb +34 -17
  16. data/lib/plugins/defaults/confirm.rb +30 -0
  17. data/lib/plugins/defaults/hashtag.rb +1 -1
  18. data/lib/plugins/defaults/irb.rb +30 -0
  19. data/lib/plugins/defaults/keyword.rb +58 -0
  20. data/lib/plugins/defaults/list.rb +155 -0
  21. data/lib/plugins/defaults/plugin.rb +59 -0
  22. data/lib/plugins/defaults/retweet.rb +75 -23
  23. data/lib/plugins/defaults/standard_commands.rb +60 -87
  24. data/lib/plugins/defaults/standard_completion.rb +25 -15
  25. data/lib/plugins/defaults/stdout.rb +49 -10
  26. data/lib/plugins/defaults/switch.rb +1 -1
  27. data/lib/plugins/defaults/users.rb +63 -0
  28. data/lib/plugins/draft.rb +58 -0
  29. data/lib/plugins/expand-tinyurl.rb +5 -9
  30. data/lib/plugins/favotter.rb +1 -1
  31. data/lib/plugins/footer.rb +22 -0
  32. data/lib/plugins/friends.rb +5 -4
  33. data/lib/plugins/g.rb +9 -16
  34. data/lib/plugins/gem_install.rb +24 -0
  35. data/lib/plugins/gist.rb +20 -0
  36. data/lib/plugins/grass.rb +1 -1
  37. data/lib/plugins/gyazo.rb +78 -0
  38. data/lib/plugins/http_server.rb +1 -1
  39. data/lib/plugins/hugeurl.rb +6 -13
  40. data/lib/plugins/irc_gw.rb +15 -11
  41. data/lib/plugins/me.rb +1 -1
  42. data/lib/plugins/notify-send.rb +1 -1
  43. data/lib/plugins/notify-send3.rb +1 -1
  44. data/lib/plugins/open.rb +1 -1
  45. data/lib/plugins/open_url.rb +5 -1
  46. data/lib/plugins/pool.rb +1 -1
  47. data/lib/plugins/random.rb +1 -1
  48. data/lib/plugins/reply_retweet.rb +42 -0
  49. data/lib/plugins/screen-notify.rb +1 -1
  50. data/lib/plugins/sl.rb +3 -3
  51. data/lib/plugins/storage.rb +7 -10
  52. data/lib/plugins/storage/sqlite3.rb +155 -0
  53. data/lib/plugins/storage/status.rb +2 -0
  54. data/lib/plugins/stream.rb +1 -1
  55. data/lib/plugins/tinyurl.rb +3 -9
  56. data/lib/plugins/trends.rb +2 -2
  57. data/lib/plugins/truncate.rb +1 -1
  58. data/lib/plugins/w3mimg.rb +1 -1
  59. data/lib/termtter.rb +19 -20
  60. data/lib/termtter/active_rubytter.rb +4 -0
  61. data/lib/termtter/api.rb +22 -5
  62. data/lib/termtter/client.rb +55 -40
  63. data/lib/termtter/command.rb +3 -2
  64. data/lib/termtter/config_setup.rb +1 -1
  65. data/lib/termtter/config_template.erb +5 -0
  66. data/lib/termtter/default_config.rb +18 -0
  67. data/lib/termtter/hookable.rb +1 -0
  68. data/lib/termtter/httppool.rb +44 -0
  69. data/lib/termtter/memory_cache.rb +32 -0
  70. data/lib/termtter/optparse.rb +8 -15
  71. data/lib/termtter/rubytter_proxy.rb +65 -4
  72. data/lib/termtter/system_extensions.rb +40 -9
  73. data/lib/termtter/task.rb +2 -1
  74. data/spec/plugins/defaults/hashtag_spec.rb +8 -7
  75. data/spec/plugins/defaults/list_spec.rb +33 -0
  76. data/spec/plugins/defaults/plugin_spec.rb +17 -0
  77. data/spec/plugins/defaults/retweet_spec.rb +205 -0
  78. data/spec/plugins/draft_spec.rb +59 -0
  79. data/spec/plugins/expand-tinyurl_spec.rb +21 -0
  80. data/spec/plugins/footer_spec.rb +50 -0
  81. data/spec/plugins/storage/sqlite3_spec.rb +41 -0
  82. data/spec/termtter/api_spec.rb +1 -1
  83. data/spec/termtter/client_spec.rb +21 -21
  84. data/spec/termtter/command_spec.rb +8 -8
  85. data/spec/termtter/config_spec.rb +2 -2
  86. data/spec/termtter/memory_cache_spec.rb +20 -0
  87. data/spec/termtter/optparse_spec.rb +1 -1
  88. data/spec/termtter/rubytter_proxy_spec.rb +38 -0
  89. data/spec/termtter/system_extensions_spec.rb +25 -23
  90. data/spec/termtter/task_manager_spec.rb +1 -1
  91. data/spec/termtter_spec.rb +4 -2
  92. metadata +88 -19
  93. data/lib/plugins/defaults/lists.rb +0 -14
  94. data/lib/plugins/irb.rb +0 -6
  95. data/lib/plugins/storage/DB.rb +0 -37
  96. data/lib/termtter/version.rb +0 -4
  97. data/spec/plugins/defaults/lists_spec.rb +0 -34
  98. data/spec/plugins/storage/DB_spec_.rb +0 -12
data/lib/plugins/me.rb CHANGED
@@ -3,7 +3,7 @@ module Termtter::Client
3
3
  register_command(
4
4
  :name => :me, :aliases => [],
5
5
  :exec_proc => lambda {|arg|
6
- call_commands('list ' + config.user_name)
6
+ execute('list ' + config.user_name)
7
7
  },
8
8
  :help => ['me', 'show my timeline']
9
9
  )
@@ -15,7 +15,7 @@ Termtter::Client.register_hook(
15
15
 
16
16
  text << %Q|\n<a href="http://twitter.com/">more...</a>| if statuses.size > max
17
17
 
18
- system 'notify-send', '-t', '60000', '--', 'Termtter', text
18
+ system 'notify-send', '-t', '60000', '--', 'Termtter', text unless text.empty?
19
19
  end
20
20
  }
21
21
  )
@@ -26,7 +26,7 @@ def get_icon_path(s)
26
26
  rimage = Magick::Image.from_blob(image).first
27
27
  rimage = rimage.resize_to_fill(48, 48)
28
28
  f << rimage.to_blob
29
- rescue Net::ProtocolError
29
+ rescue Net::ProtocolError, Magick::ImageMagickError
30
30
  return nil
31
31
  end
32
32
  end
data/lib/plugins/open.rb CHANGED
@@ -8,7 +8,7 @@ module Termtter
8
8
  :exec_proc => proc {|arg|
9
9
  sid, n = arg.split(/ +/)
10
10
  if sid.nil?
11
- call_commands "uri-open"
11
+ execute "uri-open"
12
12
  else
13
13
  target = (n || 1).to_i
14
14
  target_uri = nil
@@ -9,7 +9,11 @@ module Termtter::Client
9
9
  else
10
10
  case RUBY_PLATFORM
11
11
  when /linux/
12
- system 'firefox', uri
12
+ if %x{echo $BROWSER}.strip.empty?
13
+ system 'firefox', uri
14
+ else
15
+ system '$BROWSER', uri
16
+ end
13
17
  when /mswin(?!ce)|mingw|bccwin/
14
18
  system 'explorer', uri
15
19
  else
data/lib/plugins/pool.rb CHANGED
@@ -12,7 +12,7 @@ Thread.new do
12
12
  loop do
13
13
  statement = pool.take([:statement, nil])
14
14
  print 'pool: '
15
- Termtter::Client.call_commands("update #{statement[1]}")
15
+ Termtter::Client.execute("update #{statement[1]}")
16
16
  STDOUT.flush
17
17
  end
18
18
  end
@@ -15,7 +15,7 @@ module Termtter::Client
15
15
  return
16
16
  end
17
17
 
18
- call_commands("update #{status.text}")
18
+ execute("update #{status.text}")
19
19
 
20
20
  },
21
21
  :help => ['random', 'random post']
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ config.plugins.reply_retweet.set_default(:format, '<%= comment %>RT @<%=s.user.screen_name%>: <%=text%>')
4
+ config.plugins.reply_retweet.set_default(:confirm_protected, true)
5
+
6
+ module Termtter::Client
7
+ def self.post_reply_retweet(s, comment = nil)
8
+ if s.user.protected && config.plugins.reply_retweet.confirm_protected &&
9
+ !confirm("#{s.user.screen_name} is protected! Are you sure?", false)
10
+ return
11
+ end
12
+
13
+ text = s.text.gsub(/RT.+\z/, '')
14
+ comment += ' ' unless comment.nil?
15
+ text = ERB.new(config.plugins.reply_retweet.format).result(binding)
16
+ Termtter::API.twitter.update(text)
17
+ puts "=> #{text}"
18
+
19
+ return text
20
+ end
21
+
22
+ help = ['reply_retweet,rrt (ID|@USER)', 'Post a reply retweet message'],
23
+ register_command(:reply_retweet, :help => help, :alias => :rrt) do |arg|
24
+
25
+ arg, comment = arg.split(/\s/, 2)
26
+
27
+ if public_storage[:typable_id] && s = typable_id_status(arg)
28
+ post_reply_retweet(s, comment)
29
+ else
30
+ case arg
31
+ when /(\d+)/
32
+ post_reply_retweet(Termtter::API.twitter.show(arg), comment)
33
+ when /@([A-Za-z0-9_]+)/
34
+ user = $1
35
+ statuses = Termtter::API.twitter.user_timeline(user)
36
+ return if statuses.empty?
37
+ post_reply_retweet(statuses[0], comment)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -7,7 +7,7 @@ module Termtter::Client
7
7
  :name => :screen_notify,
8
8
  :points => [:output],
9
9
  :exec_proc => lambda{|statuses, event|
10
- return unless event = :update_friends_timeline
10
+ return unless event == :update_friends_timeline
11
11
  Thread.new(statuses) do |ss|
12
12
  ss.each do |s|
13
13
  msg = config.screen_notify.format % s.user.screen_name
data/lib/plugins/sl.rb CHANGED
@@ -24,11 +24,11 @@ module Termtter
24
24
  :name => :ls, :aliases => [],
25
25
  :exec_proc => lambda {|arg|
26
26
  if arg.empty? && /\A#/ =~ public_storage[:current]
27
- call_commands("search #{public_storage[:current]}")
27
+ execute("search #{public_storage[:current]}")
28
28
  elsif /\A#/ =~ arg
29
- call_commands("search #{arg}")
29
+ execute("search #{arg}")
30
30
  else
31
- call_commands("list #{arg.empty? ? public_storage[:current] : arg}")
31
+ execute("list #{arg.empty? ? public_storage[:current] : arg}")
32
32
  end
33
33
  },
34
34
  :help => ['ls', 'Show list in current directory']
@@ -1,19 +1,16 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- require 'pp'
4
3
  require 'time'
5
-
6
- require File.dirname(__FILE__) + '/storage/status'
4
+ require File.dirname(__FILE__) + '/storage/db'
7
5
 
8
6
  module Termtter::Client
9
- public_storage[:log] = []
10
-
7
+ @db = Termtter::Storage::DB.new
11
8
  register_hook(
12
9
  :name => :storage,
13
10
  :points => [:pre_filter],
14
11
  :exec_proc => lambda {|statuses, event|
15
12
  statuses.each do |s|
16
- Termtter::Storage::Status.insert(
13
+ @db.update(
17
14
  :post_id => s.id,
18
15
  :created_at => Time.parse(s.created_at).to_i,
19
16
  :in_reply_to_status_id => s.in_reply_to_status_id,
@@ -31,8 +28,8 @@ module Termtter::Client
31
28
  :aliases => [:ss],
32
29
  :exec_proc => lambda {|arg|
33
30
  unless arg.strip.empty?
34
- key = arg.strip
35
- statuses = Termtter::Storage::Status.search({:text => key})
31
+ text = arg.strip
32
+ statuses = @db.find_text(text)
36
33
  output(statuses, :search)
37
34
  end
38
35
  },
@@ -44,8 +41,8 @@ module Termtter::Client
44
41
  :aliases => [:ssu],
45
42
  :exec_proc => lambda {|arg|
46
43
  unless arg.strip.empty?
47
- key = arg.strip.gsub(/^@/, '')
48
- statuses = Termtter::Storage::Status.search_user({:user => key})
44
+ user = arg.strip.gsub(/^@/, '')
45
+ statuses = @db.find_user(user)
49
46
  output(statuses, :search)
50
47
  end
51
48
  },
@@ -0,0 +1,155 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'sqlite3'
4
+ require 'lib/termtter/active_rubytter'
5
+
6
+ module Termtter::Storage
7
+ class SQLite3
8
+
9
+ def initialize(file = Termtter::CONF_DIR + '/storage.db')
10
+ @db = ::SQLite3::Database.new(file)
11
+ @db.type_translation = true
12
+ create_table
13
+ end
14
+
15
+ def name
16
+ "sqlite3"
17
+ end
18
+
19
+ CREATE_TABLE = <<-SQL
20
+ CREATE TABLE IF NOT EXISTS user (
21
+ id int NOT NULL,
22
+ screen_name text,
23
+ PRIMARY KEY (id)
24
+ );
25
+ CREATE TABLE IF NOT EXISTS post (
26
+ post_id int NOT NULL, -- twitter側のpostのid
27
+ created_at int, -- 日付(RubyでUNIX時間に変換)
28
+ in_reply_to_status_id int, -- あったほうがよいらしい
29
+ in_reply_to_user_id int, -- あったほうがよいらしい
30
+ post_text text,
31
+ user_id int NOT NULL,
32
+ PRIMARY KEY (post_id)
33
+ );
34
+ SQL
35
+ def create_table
36
+ @db.execute_batch(CREATE_TABLE)
37
+ end
38
+
39
+ def update(status)
40
+ @db.transaction
41
+ begin
42
+ return nil if find_id(status[:post_id])
43
+ insert(status)
44
+ ensure
45
+ @db.commit
46
+ end
47
+ end
48
+
49
+ def update_user(user_id, screen_name)
50
+ return nil if find_user_id(user_id)
51
+ @db.execute(
52
+ "insert into user values(?,?)",
53
+ status[:user_id],
54
+ status[:screen_name])
55
+ end
56
+
57
+ FIND_USER_ID = <<-EOS
58
+ select id, screen_name
59
+ from user where id = ?
60
+ EOS
61
+ def find_user_id(user_id)
62
+ result = nil
63
+ @db.execute(FIND_USER_ID, user_id) do |id, screen_name|
64
+ result = { :id => id, :screen_name => screen_name}
65
+ end
66
+ result
67
+ end
68
+
69
+ def insert(status)
70
+ return nil unless status[:text]
71
+ @db.execute(
72
+ "insert into post values(?,?,?,?,?,?)",
73
+ status[:post_id],
74
+ status[:created_at],
75
+ status[:in_reply_to_status_id],
76
+ status[:in_reply_to_user_id],
77
+ status[:text],
78
+ status[:user_id])
79
+ update_user(status[:user_id], status[:screen_name])
80
+ end
81
+
82
+ FIND_ID = <<-EOS
83
+ select created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id
84
+ from post inner join user on post.user_id = user.id where post_id = ?
85
+ EOS
86
+ def find_id(id)
87
+ result = nil
88
+ @db.execute(FIND_ID, id) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
89
+ result = Termtter::ActiveRubytter.new({
90
+ :id => post_id,
91
+ :created_at => created_at,
92
+ :text => post_text,
93
+ :in_reply_to_status_id => in_reply_to_status_id,
94
+ :in_reply_to_user_id => nil,
95
+ :user => {
96
+ :id => user_id,
97
+ :screen_name => screen_name
98
+ }
99
+ })
100
+ end
101
+ result
102
+ end
103
+
104
+ FIND = <<-EOS
105
+ select created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id
106
+ from post inner join user on post.user_id = user.id where post_text like '%' || ? || '%'
107
+ EOS
108
+ def find_text(text = '')
109
+ result = []
110
+ @db.execute(FIND, text) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
111
+ created_at = Time.at(created_at).to_s
112
+ result << Termtter::ActiveRubytter.new({
113
+ :id => post_id,
114
+ :created_at => created_at,
115
+ :text => post_text,
116
+ :in_reply_to_status_id => in_reply_to_status_id,
117
+ :in_reply_to_user_id => nil,
118
+ :user => {
119
+ :id => user_id,
120
+ :screen_name => screen_name
121
+ }
122
+ })
123
+ end
124
+ result
125
+ end
126
+
127
+ FIND_USER = <<-EOS
128
+ select created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id
129
+ from post inner join user on post.user_id = user.id where
130
+ EOS
131
+ def find_user(user = "")
132
+ result = []
133
+ sql = FIND_USER + user.split(' ').map!{|que| que.gsub(/(\w+)/, 'screen_name like \'%\1%\'')}.join(' or ')
134
+ @db.execute(sql) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
135
+ created_at = Time.at(created_at).to_s
136
+ result << Termtter::ActiveRubytter.new({
137
+ :id => post_id,
138
+ :created_at => created_at,
139
+ :text => post_text,
140
+ :in_reply_to_status_id => in_reply_to_status_id,
141
+ :in_reply_to_user_id => nil,
142
+ :user => {
143
+ :id => user_id,
144
+ :screen_name => screen_name
145
+ }
146
+ })
147
+ end
148
+ result
149
+ end
150
+
151
+ def size
152
+ @db.get_first_value("select count(*) from post").to_i
153
+ end
154
+ end
155
+ end
@@ -25,6 +25,7 @@ module Termtter::Storage
25
25
  DB.instance.db.execute(sql,
26
26
  query[:text]) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
27
27
  created_at = Time.at(created_at).to_s
28
+ post_text.force_encoding('UTF-8') if post_text.respond_to?(:force_encoding)
28
29
  result << {
29
30
  :id => post_id,
30
31
  :created_at => created_at,
@@ -48,6 +49,7 @@ module Termtter::Storage
48
49
  sql += query[:user].split(' ').map!{|que| que.gsub(/(\w+)/, 'screen_name like \'%\1%\'')}.join(' or ')
49
50
  DB.instance.db.execute(sql) do |created_at, screen_name, post_text, in_reply_to_status_id, post_id, user_id|
50
51
  created_at = Time.at(created_at).to_s
52
+ post_text.force_encoding('UTF-8') if post_text.respond_to?(:force_encoding)
51
53
  result << {
52
54
  :id => post_id,
53
55
  :created_at => created_at,
@@ -129,7 +129,7 @@ module Termtter::Client
129
129
  help = ['hash_stream HASHTAG', 'Tracking hashtag using Stream API']
130
130
  register_command(:hash_stream, :help => help) do |arg|
131
131
  arg = "##{arg}" unless /^#/ =~ arg
132
- call_commands("keyword_stream #{arg}")
132
+ execute("keyword_stream #{arg}")
133
133
  end
134
134
 
135
135
  help = ['stream USERNAME', 'Tracking users using Stream API']
@@ -3,7 +3,6 @@
3
3
  SHORTURL_MAKERS = [
4
4
  { :host => "api.bit.ly",
5
5
  :format => '/shorten?version=2.0.1&longUrl=%s&login=termtter&apiKey=R_e7f22d523a803dbff7f67de18c109856' },
6
- { :host => "to.ly", :format => '/api.php?longurl=%s' },
7
6
  { :host => "is.gd", :format => '/api.php?longurl=%s' },
8
7
  { :host => "tinyurl.com", :format => '/api-create.php?url=%s' },
9
8
  ]
@@ -16,18 +15,13 @@ Termtter::Client.register_hook(
16
15
  "modify_arg_for_#{cmd.to_s}".to_sym
17
16
  },
18
17
  :exec_proc => lambda {|cmd, arg|
19
- http_class = Net::HTTP
20
- unless config.proxy.host.nil? or config.proxy.host.empty?
21
- http_class = Net::HTTP::Proxy(config.proxy.host,
22
- config.proxy.port,
23
- config.proxy.user_name,
24
- config.proxy.password)
25
- end
26
18
  arg.gsub(URI_REGEXP) do |url|
27
19
  url_enc = URI.escape(url)
28
20
  result = url
29
21
  SHORTURL_MAKERS.each do |site|
30
- res = http_class.new(site[:host]).get(site[:format] % url_enc)
22
+ res = Termtter::HTTPpool.start(site[:host]) do |h|
23
+ h.get(site[:format] % url_enc)
24
+ end
31
25
  if res.code == '200'
32
26
  result = res.body
33
27
  if result =~ /"shortUrl": "(http.*)"/
@@ -57,11 +57,11 @@ module Termtter::Client
57
57
  when 'show'
58
58
  raise 'need number or word' if first.nil?
59
59
  word = public_storage[:trends][first.to_i] || first
60
- call_commands "search #{word}"
60
+ execute "search #{word}"
61
61
  when /^\d$/
62
62
  word = public_storage[:trends][command.to_i]
63
63
  raise 'no such trend' unless word
64
- call_commands "search #{word}"
64
+ execute "search #{word}"
65
65
  when 'open'
66
66
  raise 'nees number or word' if first.nil?
67
67
  word = public_storage[:trends][first.to_i] || first
@@ -19,7 +19,7 @@ Termtter::RubytterProxy.register_hook(
19
19
  return args if args.length < 1
20
20
  status = args[0]
21
21
  return args if multibyte_string(status).length <= 140
22
- if Termtter::Client::confirm("You are status contents more than 140 characters. do end endyou want abbreviation status?", true)
22
+ if Termtter::Client::confirm("Your status is longer than 140 characters. Is it OK to abbreviate it?", true)
23
23
  args[0] = truncate(status)
24
24
  else
25
25
  puts 'canceled.'
@@ -27,7 +27,7 @@ def get_icon_path(s)
27
27
  rimage = Magick::Image.from_blob(image).first
28
28
  rimage = rimage.resize_to_fill(48, 48)
29
29
  f << rimage.to_blob
30
- rescue Net::ProtocolError
30
+ rescue Net::ProtocolError, Magick::ImageMagickError
31
31
  return nil
32
32
  end
33
33
  end
data/lib/termtter.rb CHANGED
@@ -18,26 +18,25 @@ gem 'rubytter', '>= 0.9.2'
18
18
  require 'rubytter'
19
19
  require 'timeout'
20
20
 
21
- require 'termtter/config'
22
- require 'termtter/version'
23
- require 'termtter/optparse'
24
- require 'termtter/command'
25
- require 'termtter/hook'
26
- require 'termtter/task'
27
- require 'termtter/task_manager'
28
- require 'termtter/hookable'
29
- require 'termtter/rubytter_proxy'
30
- require 'termtter/client'
31
- require 'termtter/api'
32
- require 'termtter/system_extensions'
33
-
34
21
  module Termtter
22
+ VERSION = File.read(File.join(File.dirname(__FILE__), '../VERSION'))
35
23
  APP_NAME = 'termtter'
36
-
37
- config.system.set_default :conf_dir, File.expand_path('~/.termtter')
38
- CONF_DIR = config.system.conf_dir
39
-
40
- config.system.set_default :conf_file, CONF_DIR + '/config'
41
- CONF_FILE = config.system.conf_file
42
- $:.unshift(Termtter::CONF_DIR)
24
+ CONF_DIR = File.expand_path('~/.termtter')
25
+ CONF_FILE = File.join(Termtter::CONF_DIR, 'config')
26
+ $:.unshift(CONF_DIR)
27
+
28
+ require 'termtter/config'
29
+ require 'termtter/default_config'
30
+ require 'termtter/optparse'
31
+ require 'termtter/command'
32
+ require 'termtter/hook'
33
+ require 'termtter/task'
34
+ require 'termtter/task_manager'
35
+ require 'termtter/hookable'
36
+ require 'termtter/memory_cache'
37
+ require 'termtter/rubytter_proxy'
38
+ require 'termtter/client'
39
+ require 'termtter/api'
40
+ require 'termtter/system_extensions'
41
+ require 'termtter/httppool'
43
42
  end