termtter 1.6.0 → 1.7.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 (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