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.
- data/.gitignore +5 -0
- data/README.rdoc +2 -2
- data/Rakefile +41 -75
- data/VERSION +1 -0
- data/bin/termtter +9 -2
- data/doc/Termtter-1.0-Release-Note-English.txt +37 -0
- data/doc/Termtter-1.0-Release-Note.txt +37 -0
- data/lib/plugins/another_prompt.rb +8 -8
- data/lib/plugins/ar.rb +102 -0
- data/lib/plugins/async.rb +1 -1
- data/lib/plugins/babelfish.rb +34 -0
- data/lib/plugins/confirm.rb +2 -0
- data/lib/plugins/crypt.rb +44 -0
- data/lib/plugins/defaults/auto_reload.rb +1 -1
- data/lib/plugins/defaults/command_line.rb +34 -17
- data/lib/plugins/defaults/confirm.rb +30 -0
- data/lib/plugins/defaults/hashtag.rb +1 -1
- data/lib/plugins/defaults/irb.rb +30 -0
- data/lib/plugins/defaults/keyword.rb +58 -0
- data/lib/plugins/defaults/list.rb +155 -0
- data/lib/plugins/defaults/plugin.rb +59 -0
- data/lib/plugins/defaults/retweet.rb +75 -23
- data/lib/plugins/defaults/standard_commands.rb +60 -87
- data/lib/plugins/defaults/standard_completion.rb +25 -15
- data/lib/plugins/defaults/stdout.rb +49 -10
- data/lib/plugins/defaults/switch.rb +1 -1
- data/lib/plugins/defaults/users.rb +63 -0
- data/lib/plugins/draft.rb +58 -0
- data/lib/plugins/expand-tinyurl.rb +5 -9
- data/lib/plugins/favotter.rb +1 -1
- data/lib/plugins/footer.rb +22 -0
- data/lib/plugins/friends.rb +5 -4
- data/lib/plugins/g.rb +9 -16
- data/lib/plugins/gem_install.rb +24 -0
- data/lib/plugins/gist.rb +20 -0
- data/lib/plugins/grass.rb +1 -1
- data/lib/plugins/gyazo.rb +78 -0
- data/lib/plugins/http_server.rb +1 -1
- data/lib/plugins/hugeurl.rb +6 -13
- data/lib/plugins/irc_gw.rb +15 -11
- data/lib/plugins/me.rb +1 -1
- data/lib/plugins/notify-send.rb +1 -1
- data/lib/plugins/notify-send3.rb +1 -1
- data/lib/plugins/open.rb +1 -1
- data/lib/plugins/open_url.rb +5 -1
- data/lib/plugins/pool.rb +1 -1
- data/lib/plugins/random.rb +1 -1
- data/lib/plugins/reply_retweet.rb +42 -0
- data/lib/plugins/screen-notify.rb +1 -1
- data/lib/plugins/sl.rb +3 -3
- data/lib/plugins/storage.rb +7 -10
- data/lib/plugins/storage/sqlite3.rb +155 -0
- data/lib/plugins/storage/status.rb +2 -0
- data/lib/plugins/stream.rb +1 -1
- data/lib/plugins/tinyurl.rb +3 -9
- data/lib/plugins/trends.rb +2 -2
- data/lib/plugins/truncate.rb +1 -1
- data/lib/plugins/w3mimg.rb +1 -1
- data/lib/termtter.rb +19 -20
- data/lib/termtter/active_rubytter.rb +4 -0
- data/lib/termtter/api.rb +22 -5
- data/lib/termtter/client.rb +55 -40
- data/lib/termtter/command.rb +3 -2
- data/lib/termtter/config_setup.rb +1 -1
- data/lib/termtter/config_template.erb +5 -0
- data/lib/termtter/default_config.rb +18 -0
- data/lib/termtter/hookable.rb +1 -0
- data/lib/termtter/httppool.rb +44 -0
- data/lib/termtter/memory_cache.rb +32 -0
- data/lib/termtter/optparse.rb +8 -15
- data/lib/termtter/rubytter_proxy.rb +65 -4
- data/lib/termtter/system_extensions.rb +40 -9
- data/lib/termtter/task.rb +2 -1
- data/spec/plugins/defaults/hashtag_spec.rb +8 -7
- data/spec/plugins/defaults/list_spec.rb +33 -0
- data/spec/plugins/defaults/plugin_spec.rb +17 -0
- data/spec/plugins/defaults/retweet_spec.rb +205 -0
- data/spec/plugins/draft_spec.rb +59 -0
- data/spec/plugins/expand-tinyurl_spec.rb +21 -0
- data/spec/plugins/footer_spec.rb +50 -0
- data/spec/plugins/storage/sqlite3_spec.rb +41 -0
- data/spec/termtter/api_spec.rb +1 -1
- data/spec/termtter/client_spec.rb +21 -21
- data/spec/termtter/command_spec.rb +8 -8
- data/spec/termtter/config_spec.rb +2 -2
- data/spec/termtter/memory_cache_spec.rb +20 -0
- data/spec/termtter/optparse_spec.rb +1 -1
- data/spec/termtter/rubytter_proxy_spec.rb +38 -0
- data/spec/termtter/system_extensions_spec.rb +25 -23
- data/spec/termtter/task_manager_spec.rb +1 -1
- data/spec/termtter_spec.rb +4 -2
- metadata +88 -19
- data/lib/plugins/defaults/lists.rb +0 -14
- data/lib/plugins/irb.rb +0 -6
- data/lib/plugins/storage/DB.rb +0 -37
- data/lib/termtter/version.rb +0 -4
- data/spec/plugins/defaults/lists_spec.rb +0 -34
- data/spec/plugins/storage/DB_spec_.rb +0 -12
data/lib/plugins/me.rb
CHANGED
data/lib/plugins/notify-send.rb
CHANGED
|
@@ -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
|
)
|
data/lib/plugins/notify-send3.rb
CHANGED
data/lib/plugins/open.rb
CHANGED
data/lib/plugins/open_url.rb
CHANGED
|
@@ -9,7 +9,11 @@ module Termtter::Client
|
|
|
9
9
|
else
|
|
10
10
|
case RUBY_PLATFORM
|
|
11
11
|
when /linux/
|
|
12
|
-
|
|
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
data/lib/plugins/random.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
27
|
+
execute("search #{public_storage[:current]}")
|
|
28
28
|
elsif /\A#/ =~ arg
|
|
29
|
-
|
|
29
|
+
execute("search #{arg}")
|
|
30
30
|
else
|
|
31
|
-
|
|
31
|
+
execute("list #{arg.empty? ? public_storage[:current] : arg}")
|
|
32
32
|
end
|
|
33
33
|
},
|
|
34
34
|
:help => ['ls', 'Show list in current directory']
|
data/lib/plugins/storage.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
statuses =
|
|
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
|
-
|
|
48
|
-
statuses =
|
|
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,
|
data/lib/plugins/stream.rb
CHANGED
|
@@ -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
|
-
|
|
132
|
+
execute("keyword_stream #{arg}")
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
help = ['stream USERNAME', 'Tracking users using Stream API']
|
data/lib/plugins/tinyurl.rb
CHANGED
|
@@ -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 =
|
|
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.*)"/
|
data/lib/plugins/trends.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
data/lib/plugins/truncate.rb
CHANGED
|
@@ -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("
|
|
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.'
|
data/lib/plugins/w3mimg.rb
CHANGED
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
|
-
|
|
38
|
-
CONF_DIR
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|