jugyo-termtter 0.5.3 → 0.5.4
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/Manifest.txt +8 -8
- data/bin/termtter +2 -2
- data/example_dot_termtter +6 -6
- data/lib/termtter.rb +89 -89
- data/run_termtter.rb +3 -3
- metadata +2 -1
- data/lib/termtter/completion.rb +0 -58
- data/lib/termtter/english.rb +0 -51
- data/lib/termtter/growl.rb +0 -7
- data/lib/termtter/notify-send.rb +0 -16
- data/lib/termtter/say.rb +0 -22
- data/lib/termtter/standard_commands.rb +0 -69
- data/lib/termtter/stdout.rb +0 -41
- data/lib/termtter/uri-open.rb +0 -39
data/Manifest.txt
CHANGED
|
@@ -7,14 +7,14 @@ run_termtter.rb
|
|
|
7
7
|
example_dot_termtter
|
|
8
8
|
bin/termtter
|
|
9
9
|
lib/termtter.rb
|
|
10
|
-
lib/
|
|
11
|
-
lib/
|
|
12
|
-
lib/
|
|
13
|
-
lib/
|
|
14
|
-
lib/
|
|
15
|
-
lib/
|
|
16
|
-
lib/
|
|
17
|
-
lib/
|
|
10
|
+
lib/plugin/stdout.rb
|
|
11
|
+
lib/plugin/notify-send.rb
|
|
12
|
+
lib/plugin/standard_commands.rb
|
|
13
|
+
lib/plugin/uri-open.rb
|
|
14
|
+
lib/plugin/growl.rb
|
|
15
|
+
lib/plugin/say.rb
|
|
16
|
+
lib/plugin/english.rb
|
|
17
|
+
lib/plugin/completion.rb
|
|
18
18
|
test/test_termtter.rb
|
|
19
19
|
test/friends_timeline.json
|
|
20
20
|
test/search.json
|
data/bin/termtter
CHANGED
|
@@ -4,9 +4,9 @@ $KCODE = 'u'
|
|
|
4
4
|
|
|
5
5
|
require 'rubygems'
|
|
6
6
|
require 'termtter'
|
|
7
|
-
require 'termtter/standard_commands'
|
|
8
|
-
require 'termtter/stdout'
|
|
9
7
|
require 'configatron'
|
|
8
|
+
plugin 'standard_commands'
|
|
9
|
+
plugin 'stdout'
|
|
10
10
|
|
|
11
11
|
conf_file = File.expand_path('~/.termtter')
|
|
12
12
|
if File.exist? conf_file
|
data/example_dot_termtter
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#require '
|
|
2
|
-
#require '
|
|
3
|
-
#require '
|
|
4
|
-
#require '
|
|
5
|
-
#require '
|
|
6
|
-
#require '
|
|
1
|
+
#require 'plugin/english'
|
|
2
|
+
#require 'plugin/say'
|
|
3
|
+
#require 'plugin/notify-send'
|
|
4
|
+
#require 'plugin/uri-open'
|
|
5
|
+
#require 'plugin/growl'
|
|
6
|
+
#require 'plugin/completion'
|
|
7
7
|
|
|
8
8
|
configatron.user_name = 'USERNAME'
|
|
9
9
|
configatron.password = 'PASSWORD'
|
data/lib/termtter.rb
CHANGED
|
@@ -12,8 +12,12 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
|
12
12
|
|
|
13
13
|
configatron.set_default(:update_interval, 300)
|
|
14
14
|
|
|
15
|
+
def plugin(s)
|
|
16
|
+
require "plugin/#{s}"
|
|
17
|
+
end
|
|
18
|
+
|
|
15
19
|
module Termtter
|
|
16
|
-
VERSION = '0.5.
|
|
20
|
+
VERSION = '0.5.4'
|
|
17
21
|
|
|
18
22
|
class Twitter
|
|
19
23
|
|
|
@@ -65,20 +69,15 @@ module Termtter
|
|
|
65
69
|
|
|
66
70
|
def get_timeline(uri)
|
|
67
71
|
data = JSON.parse(open(uri, :http_basic_authentication => [@user_name, @password]).read)
|
|
68
|
-
data =
|
|
69
|
-
data
|
|
70
|
-
else
|
|
71
|
-
[data]
|
|
72
|
-
end
|
|
72
|
+
data = [data] unless data.instance_of? Array
|
|
73
73
|
return data.map do |s|
|
|
74
|
-
u = s["user"]
|
|
75
74
|
status = Status.new
|
|
76
75
|
status.created_at = Time.utc(*ParseDate::parsedate(s["created_at"])).localtime
|
|
77
76
|
%w(id text truncated in_reply_to_status_id in_reply_to_user_id).each do |key|
|
|
78
77
|
status.__send__("#{key}=".to_sym, s[key])
|
|
79
78
|
end
|
|
80
79
|
%w(id name screen_name url profile_image_url).each do |key|
|
|
81
|
-
status.__send__("user_#{key}=".to_sym,
|
|
80
|
+
status.__send__("user_#{key}=".to_sym, s["user"][key])
|
|
82
81
|
end
|
|
83
82
|
status
|
|
84
83
|
end
|
|
@@ -90,47 +89,32 @@ module Termtter
|
|
|
90
89
|
@@hooks = []
|
|
91
90
|
@@commands = {}
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def self.clear_hooks
|
|
98
|
-
@@hooks.clear
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def self.add_command(regex, &block)
|
|
102
|
-
@@commands[regex] = block
|
|
103
|
-
end
|
|
92
|
+
class << self
|
|
93
|
+
def add_hook(&hook)
|
|
94
|
+
@@hooks << hook
|
|
95
|
+
end
|
|
104
96
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
97
|
+
def clear_hooks
|
|
98
|
+
@@hooks.clear
|
|
99
|
+
end
|
|
108
100
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
end
|
|
101
|
+
def add_command(regex, &block)
|
|
102
|
+
@@commands[regex] = block
|
|
103
|
+
end
|
|
113
104
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
begin
|
|
117
|
-
h.call(statuses.dup, event, tw)
|
|
118
|
-
rescue => e
|
|
119
|
-
puts "Error: #{e}"
|
|
120
|
-
puts e.backtrace.join("\n")
|
|
121
|
-
end
|
|
105
|
+
def clear_commands
|
|
106
|
+
@@commands.clear
|
|
122
107
|
end
|
|
123
|
-
end
|
|
124
108
|
|
|
125
|
-
|
|
126
|
-
|
|
109
|
+
def public_storage
|
|
110
|
+
@@public_storage ||= {}
|
|
111
|
+
return @@public_storage
|
|
112
|
+
end
|
|
127
113
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if key =~ text
|
|
131
|
-
command_found = true
|
|
114
|
+
def call_hooks(statuses, event, tw)
|
|
115
|
+
@@hooks.each do |h|
|
|
132
116
|
begin
|
|
133
|
-
|
|
117
|
+
h.call(statuses.dup, event, tw)
|
|
134
118
|
rescue => e
|
|
135
119
|
puts "Error: #{e}"
|
|
136
120
|
puts e.backtrace.join("\n")
|
|
@@ -138,68 +122,84 @@ module Termtter
|
|
|
138
122
|
end
|
|
139
123
|
end
|
|
140
124
|
|
|
141
|
-
|
|
142
|
-
|
|
125
|
+
def call_commands(text, tw)
|
|
126
|
+
return if text.empty?
|
|
127
|
+
|
|
128
|
+
command_found = false
|
|
129
|
+
@@commands.each do |key, command|
|
|
130
|
+
if key =~ text
|
|
131
|
+
command_found = true
|
|
132
|
+
begin
|
|
133
|
+
command.call($~, tw)
|
|
134
|
+
rescue => e
|
|
135
|
+
puts "Error: #{e}"
|
|
136
|
+
puts e.backtrace.join("\n")
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
143
140
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
end
|
|
141
|
+
raise CommandNotFound unless command_found
|
|
142
|
+
end
|
|
147
143
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
end
|
|
144
|
+
def pause
|
|
145
|
+
@@pause = true
|
|
146
|
+
end
|
|
152
147
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
def resume
|
|
149
|
+
@@pause = false
|
|
150
|
+
@@update_thread.run
|
|
151
|
+
end
|
|
157
152
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
def exit
|
|
154
|
+
@@update_thread.kill
|
|
155
|
+
@@input_thread.kill
|
|
156
|
+
end
|
|
161
157
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
begin
|
|
166
|
-
Thread.stop if @@pause
|
|
158
|
+
def run
|
|
159
|
+
@@pause = false
|
|
160
|
+
tw = Termtter::Twitter.new(configatron.user_name, configatron.password)
|
|
167
161
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
162
|
+
@@update_thread = Thread.new do
|
|
163
|
+
since_id = nil
|
|
164
|
+
loop do
|
|
165
|
+
begin
|
|
166
|
+
Thread.stop if @@pause
|
|
173
167
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
168
|
+
statuses = tw.get_friends_timeline(since_id)
|
|
169
|
+
unless statuses.empty?
|
|
170
|
+
since_id = statuses[0].id
|
|
171
|
+
end
|
|
172
|
+
call_hooks(statuses, :update_friends_timeline, tw)
|
|
173
|
+
|
|
174
|
+
rescue => e
|
|
175
|
+
puts "Error: #{e}"
|
|
176
|
+
puts e.backtrace.join("\n")
|
|
177
|
+
ensure
|
|
178
|
+
sleep configatron.update_interval
|
|
179
|
+
end
|
|
179
180
|
end
|
|
180
181
|
end
|
|
181
|
-
end
|
|
182
182
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
183
|
+
@@input_thread = Thread.new do
|
|
184
|
+
while buf = Readline.readline("", true)
|
|
185
|
+
begin
|
|
186
|
+
call_commands(buf, tw)
|
|
187
|
+
rescue CommandNotFound => e
|
|
188
|
+
puts "Unknown command \"#{buf}\""
|
|
189
|
+
puts 'Enter "help" for instructions'
|
|
190
|
+
rescue => e
|
|
191
|
+
puts "Error: #{e}"
|
|
192
|
+
puts e.backtrace.join("\n")
|
|
193
|
+
end
|
|
193
194
|
end
|
|
194
195
|
end
|
|
195
|
-
end
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
stty_save = `stty -g`.chomp
|
|
198
|
+
trap("INT") { system "stty", stty_save; exit }
|
|
199
199
|
|
|
200
|
-
|
|
200
|
+
@@input_thread.join
|
|
201
|
+
end
|
|
201
202
|
end
|
|
202
|
-
|
|
203
203
|
end
|
|
204
204
|
|
|
205
205
|
class CommandNotFound < StandardError; end
|
data/run_termtter.rb
CHANGED
|
@@ -11,8 +11,8 @@ self_file =
|
|
|
11
11
|
$:.unshift(File.dirname(self_file) + "/lib")
|
|
12
12
|
|
|
13
13
|
require 'termtter'
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
plugin 'standard_commands'
|
|
15
|
+
plugin 'stdout'
|
|
16
16
|
|
|
17
17
|
configatron.update_interval
|
|
18
18
|
|
|
@@ -26,4 +26,4 @@ end
|
|
|
26
26
|
|
|
27
27
|
Termtter::Client.run
|
|
28
28
|
|
|
29
|
-
# Startup scripts for development
|
|
29
|
+
# Startup scripts for development
|
metadata
CHANGED
data/lib/termtter/completion.rb
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
|
|
3
|
-
module Termtter::Client
|
|
4
|
-
|
|
5
|
-
public_storage[:users] ||= Set.new
|
|
6
|
-
|
|
7
|
-
add_hook do |statuses, event, t|
|
|
8
|
-
if !statuses.empty?
|
|
9
|
-
case event
|
|
10
|
-
when :update_friends_timeline, :replies, :list_user_timeline
|
|
11
|
-
statuses.each do |s|
|
|
12
|
-
public_storage[:users].add(s.user_screen_name)
|
|
13
|
-
s.text.scan(/@[a-zA-Z_0-9]*/).each do |u| # reply
|
|
14
|
-
public_storage[:users].add(u.gsub("@","")) unless u == "@"
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
module Termtter
|
|
24
|
-
module InputCompletor
|
|
25
|
-
|
|
26
|
-
Commands = %w[exit help list pause update resume replies search show uri-open]
|
|
27
|
-
|
|
28
|
-
def self.find_candidates(a, b)
|
|
29
|
-
if a.empty?
|
|
30
|
-
Termtter::Client.public_storage[:users].to_a
|
|
31
|
-
else
|
|
32
|
-
Termtter::Client.public_storage[:users].
|
|
33
|
-
grep(/^#{Regexp.quote a}/i).map {|u| b % u }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
CompletionProc = proc {|input|
|
|
38
|
-
case input
|
|
39
|
-
when /^l(ist)? +(.*)/
|
|
40
|
-
find_candidates $2, "list %s"
|
|
41
|
-
when /^(update|u)\s+(.*)@([^\s]*)$/
|
|
42
|
-
find_candidates $3, "#{$1} #{$2}@%s"
|
|
43
|
-
when /^uri-open +(.*)/
|
|
44
|
-
find_candidates $1, "uri-open %s"
|
|
45
|
-
else
|
|
46
|
-
Commands.grep(/^#{Regexp.quote input}/)
|
|
47
|
-
end
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
Readline.basic_word_break_characters= "\t\n\"\\'`><=;|&{("
|
|
54
|
-
Readline.completion_proc = Termtter::InputCompletor::CompletionProc
|
|
55
|
-
|
|
56
|
-
# author: bubbles
|
|
57
|
-
#
|
|
58
|
-
# see also: http://d.hatena.ne.jp/bubbles/20090105/1231145823
|
data/lib/termtter/english.rb
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
Termtter::Client.clear_hooks # FIXME: not to clear all but to clear just stdout.rb
|
|
2
|
-
|
|
3
|
-
# english? :: String -> Boolean
|
|
4
|
-
def english?(message)
|
|
5
|
-
/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/ !~ message
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
# FIXME: The code below is a copy from stdout.rb so it's not DRY. DRY it.
|
|
9
|
-
Termtter::Client.add_hook do |statuses, event|
|
|
10
|
-
colors = %w(0 31 32 33 34 35 36 91 92 93 94 95 96)
|
|
11
|
-
|
|
12
|
-
case event
|
|
13
|
-
when :update_friends_timeline, :list_friends_timeline, :list_user_timeline, :show, :replies
|
|
14
|
-
unless statuses.empty?
|
|
15
|
-
if event == :update_friends_timeline then statuses = statuses.reverse end
|
|
16
|
-
statuses.each do |s|
|
|
17
|
-
text = s.text.gsub("\n", '')
|
|
18
|
-
next unless english?(text) # if you substitute "if" for "unless", this script will be "japanese.rb"
|
|
19
|
-
color_num = colors[s.user_screen_name.hash % colors.size]
|
|
20
|
-
status = "#{s.user_screen_name}: #{text}"
|
|
21
|
-
if s.in_reply_to_status_id
|
|
22
|
-
status += " (reply to #{s.in_reply_to_status_id})"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
case event
|
|
26
|
-
when :update_friends_timeline, :list_friends_timeline
|
|
27
|
-
time_format = '%H:%M:%S'
|
|
28
|
-
else
|
|
29
|
-
time_format = '%m-%d %H:%d'
|
|
30
|
-
end
|
|
31
|
-
time_str = "(#{s.created_at.strftime(time_format)})"
|
|
32
|
-
|
|
33
|
-
puts "#{color(time_str, 90)} #{color(status, color_num)}"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
when :search
|
|
37
|
-
statuses.each do |s|
|
|
38
|
-
text = s.text.gsub("\n", '')
|
|
39
|
-
color_num = colors[s.user_screen_name.hash % colors.size]
|
|
40
|
-
status = "#{s.user_screen_name}: #{text}"
|
|
41
|
-
time_str = "(#{s.created_at.strftime('%m-%d %H:%d')})"
|
|
42
|
-
|
|
43
|
-
puts "#{color(time_str, 90)} #{color(status, color_num)}"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# USAGE:
|
|
49
|
-
# Write the line on the *first line* of your ~/.termtter
|
|
50
|
-
# require 'termtter/english'
|
|
51
|
-
# (english.rb will destroy plugins which were required before)
|
data/lib/termtter/growl.rb
DELETED
data/lib/termtter/notify-send.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Termtter::Client.add_hook do |statuses, event|
|
|
2
|
-
if !statuses.empty? && event == :update_friends_timeline
|
|
3
|
-
max = 10
|
|
4
|
-
|
|
5
|
-
text = statuses[0..(max - 1)].map{|s|
|
|
6
|
-
status_text = CGI.escapeHTML(s.text)
|
|
7
|
-
status_text.gsub!(%r{https?://[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+},'<a href="\0">\0</a>')
|
|
8
|
-
status_text.gsub!("\n", '')
|
|
9
|
-
"<b>#{s.user_screen_name}:</b> <span font=\"9.0\">#{status_text}</span>"
|
|
10
|
-
}.join("\n")
|
|
11
|
-
|
|
12
|
-
text += "\n<a href=\"http://twitter.com/\">more…</a>" if statuses.size > max
|
|
13
|
-
|
|
14
|
-
system 'notify-send', 'Termtter', text, '-t', '60000'
|
|
15
|
-
end
|
|
16
|
-
end
|
data/lib/termtter/say.rb
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
raise 'say.rb runs only in OSX Leopard' if /darwin9/ !~ RUBY_PLATFORM
|
|
2
|
-
|
|
3
|
-
# say :: String -> String -> IO ()
|
|
4
|
-
def say(who, what)
|
|
5
|
-
voices = %w(Alex Bruce Fred Junior Ralph Agnes Kathy Princess Vicki Victoria Albert Bad\ News Bahh Bells Boing Bubbles Cellos Deranged Good\ News Hysterical Pipe\ Organ Trinoids Whisper Zarvox)
|
|
6
|
-
voice = voices[who.hash % voices.size]
|
|
7
|
-
system 'say', '-v', voice, what
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
module Termtter::Client
|
|
11
|
-
add_hook do |statuses, event, t|
|
|
12
|
-
if !statuses.empty? && event == :update_friends_timeline
|
|
13
|
-
statuses.reverse.each do |s|
|
|
14
|
-
text_without_uri = s.text.gsub(%r|https?://[^\s]+|, 'U.R.I.')
|
|
15
|
-
say s.user_screen_name, text_without_uri
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# KNOWN BUG:
|
|
22
|
-
# * exit or <C-c> doen't work quickly.
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
module Termtter::Client
|
|
2
|
-
|
|
3
|
-
add_command /^(update|u)\s+(.*)/ do |m, t|
|
|
4
|
-
text = m[2]
|
|
5
|
-
unless text.empty?
|
|
6
|
-
t.update_status(text)
|
|
7
|
-
puts "=> #{text}"
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
add_command /^(list|l)\s*$/ do |m, t|
|
|
12
|
-
statuses = t.get_friends_timeline()
|
|
13
|
-
call_hooks(statuses, :list_friends_timeline, t)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
add_command /^(list|l)\s+([^\s]+)/ do |m, t|
|
|
17
|
-
statuses = t.get_user_timeline(m[2])
|
|
18
|
-
call_hooks(statuses, :list_user_timeline, t)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
add_command /^(search|s)\s+(.+)/ do |m, t|
|
|
22
|
-
call_hooks(t.search(m[2]), :search, t)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
add_command /^(replies|r)\s*$/ do |m, t|
|
|
26
|
-
call_hooks(t.replies(), :replies, t)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
add_command /^show\s+([^\s]+)/ do |m, t|
|
|
30
|
-
call_hooks(t.show(m[1]), :show, t)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
add_command /^pause\s*$/ do |m, t|
|
|
34
|
-
pause
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
add_command /^resume\s*$/ do |m, t|
|
|
38
|
-
resume
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
add_command /^exit\s*$/ do |m, t|
|
|
42
|
-
exit
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
add_command /^help\s*$/ do |m, t|
|
|
46
|
-
puts <<-EOS
|
|
47
|
-
exit Exit
|
|
48
|
-
help Print this help message
|
|
49
|
-
list,l List the posts in your friends timeline
|
|
50
|
-
list,l USERNAME List the posts in the the given user's timeline
|
|
51
|
-
pause Pause updating
|
|
52
|
-
update,u TEXT Post a new message
|
|
53
|
-
resume Resume updating
|
|
54
|
-
replies,r List the most recent @replies for the authenticating user
|
|
55
|
-
search,s TEXT Search for Twitter
|
|
56
|
-
show ID Show a single status
|
|
57
|
-
EOS
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
add_command /^eval\s+(.*)$/ do |m, t|
|
|
61
|
-
begin
|
|
62
|
-
result = eval(m[1]) unless m[1].empty?
|
|
63
|
-
puts "=> #{result.inspect}"
|
|
64
|
-
rescue SyntaxError => e
|
|
65
|
-
puts e
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
end
|
data/lib/termtter/stdout.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
def color(str, num)
|
|
2
|
-
"\e[#{num}m#{str}\e[0m"
|
|
3
|
-
end
|
|
4
|
-
|
|
5
|
-
Termtter::Client.add_hook do |statuses, event|
|
|
6
|
-
colors = %w(0 31 32 33 34 35 36 91 92 93 94 95 96)
|
|
7
|
-
|
|
8
|
-
case event
|
|
9
|
-
when :update_friends_timeline, :list_friends_timeline, :list_user_timeline, :show, :replies
|
|
10
|
-
unless statuses.empty?
|
|
11
|
-
if event == :update_friends_timeline then statuses = statuses.reverse end
|
|
12
|
-
statuses.each do |s|
|
|
13
|
-
text = s.text.gsub("\n", '')
|
|
14
|
-
color_num = colors[s.user_screen_name.hash % colors.size]
|
|
15
|
-
status = "#{s.user_screen_name}: #{text}"
|
|
16
|
-
if s.in_reply_to_status_id
|
|
17
|
-
status += " (reply to #{s.in_reply_to_status_id})"
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
case event
|
|
21
|
-
when :update_friends_timeline, :list_friends_timeline
|
|
22
|
-
time_format = '%H:%M:%S'
|
|
23
|
-
else
|
|
24
|
-
time_format = '%m-%d %H:%d'
|
|
25
|
-
end
|
|
26
|
-
time_str = "(#{s.created_at.strftime(time_format)})"
|
|
27
|
-
|
|
28
|
-
puts "#{color(time_str, 90)} #{color(status, color_num)}"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
when :search
|
|
32
|
-
statuses.each do |s|
|
|
33
|
-
text = s.text.gsub("\n", '')
|
|
34
|
-
color_num = colors[s.user_screen_name.hash % colors.size]
|
|
35
|
-
status = "#{s.user_screen_name}: #{text}"
|
|
36
|
-
time_str = "(#{s.created_at.strftime('%m-%d %H:%d')})"
|
|
37
|
-
|
|
38
|
-
puts "#{color(time_str, 90)} #{color(status, color_num)}"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
data/lib/termtter/uri-open.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
module Termtter::Client
|
|
2
|
-
public_storage[:uris] = []
|
|
3
|
-
|
|
4
|
-
add_hook do |statuses, event, t|
|
|
5
|
-
if !statuses.empty? && event == :update_friends_timeline
|
|
6
|
-
statuses.each do |s|
|
|
7
|
-
public_storage[:uris] += s.text.scan(%r|https?://[^\s]+|)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
add_command /^uri-open\s*$/ do |m, t|
|
|
13
|
-
public_storage[:uris].each do |uri|
|
|
14
|
-
# FIXME: works only in OSX and other *NIXs
|
|
15
|
-
if /linux/ =~ RUBY_PLATFORM
|
|
16
|
-
system 'firefox', uri
|
|
17
|
-
else
|
|
18
|
-
system 'open', uri
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
public_storage[:uris].clear
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
add_command /^uri-open\s+list\s*$/ do |m, t|
|
|
25
|
-
puts public_storage[:uris]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
add_command /^uri-open\s+clear\s*$/ do |m, t|
|
|
29
|
-
public_storage[:uris].clear
|
|
30
|
-
puts "clear uris"
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
# ~/.termtter
|
|
34
|
-
# require 'termtter/uri-open'
|
|
35
|
-
#
|
|
36
|
-
# see also: http://ujihisa.nowa.jp/entry/c3dd00c4e0
|
|
37
|
-
#
|
|
38
|
-
# KNOWN BUG
|
|
39
|
-
# * In Debian, exit or C-c in the termtter kills your firefox.
|