jugyo-termtter 0.8.14 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +8 -8
- data/Rakefile +3 -5
- data/lib/{plugin → plugins}/april_fool.rb +0 -0
- data/lib/plugins/bomb.rb +42 -0
- data/lib/{plugin → plugins}/clear.rb +0 -0
- data/lib/{plugin → plugins}/confirm.rb +0 -0
- data/lib/{plugin → plugins}/cool.rb +0 -0
- data/lib/{plugin → plugins}/devel.rb +0 -0
- data/lib/{filter → plugins}/en2ja.rb +1 -1
- data/lib/plugins/english.rb +25 -0
- data/lib/{plugin → plugins}/erb.rb +0 -0
- data/lib/{filter → plugins}/expand-tinyurl.rb +6 -6
- data/lib/plugins/favorite.rb +63 -0
- data/lib/plugins/fib.rb +28 -0
- data/lib/{filter/fib.rb → plugins/fib_filter.rb} +1 -2
- data/lib/{plugin → plugins}/filter.rb +0 -0
- data/lib/{plugin → plugins}/graduatter.rb +1 -2
- data/lib/{plugin → plugins}/grass.rb +2 -2
- data/lib/{plugin → plugins}/group.rb +9 -9
- data/lib/{plugin → plugins}/growl.rb +11 -12
- data/lib/{plugin → plugins}/hatebu.rb +5 -5
- data/lib/{plugin → plugins}/history.rb +13 -13
- data/lib/plugins/ignore.rb +19 -0
- data/lib/plugins/keyword.rb +18 -0
- data/lib/{plugin → plugins}/log.rb +18 -12
- data/lib/{plugin → plugins}/me.rb +1 -2
- data/lib/{plugin → plugins}/modify_arg_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/msagent.rb +1 -1
- data/lib/plugins/multi_reply.rb +27 -0
- data/lib/{plugin → plugins}/notify-send.rb +1 -1
- data/lib/{plugin → plugins}/otsune.rb +0 -0
- data/lib/plugins/outputz.rb +33 -0
- data/lib/{plugin → plugins}/pause.rb +0 -0
- data/lib/{plugin → plugins}/plugin.rb +0 -0
- data/lib/{plugin → plugins}/post_exec_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/pre_exec_hook_sample.rb +0 -0
- data/lib/{plugin → plugins}/primes.rb +9 -2
- data/lib/plugins/quicklook.rb +41 -0
- data/lib/{plugin → plugins}/random.rb +0 -0
- data/lib/{plugin → plugins}/reblog.rb +3 -3
- data/lib/{plugin → plugins}/reload.rb +0 -0
- data/lib/{filter → plugins}/reply.rb +0 -0
- data/lib/{filter → plugins}/reverse.rb +1 -1
- data/lib/{plugin → plugins}/say.rb +1 -1
- data/lib/{plugin → plugins}/scrape.rb +4 -4
- data/lib/plugins/screen-notify.rb +13 -0
- data/lib/plugins/screen.rb +24 -0
- data/lib/{plugin → plugins}/shell.rb +0 -0
- data/lib/{plugin → plugins}/sl.rb +4 -4
- data/lib/plugins/spam.rb +13 -0
- data/lib/{plugin → plugins}/standard_plugins.rb +72 -18
- data/lib/plugins/stdout.rb +80 -0
- data/lib/plugins/storage/DB.rb +37 -0
- data/lib/plugins/storage/status.rb +48 -0
- data/lib/plugins/storage/status_mook.rb +30 -0
- data/lib/plugins/storage.rb +47 -0
- data/lib/plugins/system_status.rb +33 -0
- data/lib/{plugin → plugins}/translation.rb +15 -5
- data/lib/{plugin → plugins}/update_editor.rb +6 -6
- data/lib/plugins/uri-open.rb +64 -0
- data/lib/{filter → plugins}/url_addspace.rb +0 -0
- data/lib/{plugin → plugins}/wassr_post.rb +1 -1
- data/lib/{plugin → plugins}/yhara.rb +1 -1
- data/lib/plugins/yhara_filter.rb +8 -0
- data/lib/plugins/yonda.rb +21 -0
- data/lib/termtter/api.rb +28 -2
- data/lib/termtter/client.rb +90 -102
- data/lib/termtter/command.rb +32 -31
- data/lib/termtter/config.rb +64 -0
- data/lib/termtter/connection.rb +9 -7
- data/lib/termtter/hook.rb +11 -2
- data/lib/termtter/optparse.rb +14 -0
- data/lib/termtter/version.rb +1 -1
- data/lib/termtter.rb +19 -22
- data/spec/plugin/english_spec.rb +19 -0
- data/spec/plugin/favorite_spec.rb +10 -0
- data/spec/plugin/fib_spec.rb +1 -2
- data/spec/plugin/pause_spec.rb +8 -0
- data/spec/plugin/plugin_spec.rb +1 -1
- data/spec/plugin/primes_spec.rb +15 -0
- data/spec/plugin/sl_spec.rb +8 -0
- data/spec/plugin/spam_spec.rb +0 -13
- data/spec/plugin/standard_plugins_spec.rb +0 -7
- data/spec/plugin/storage/DB_spec.rb +12 -0
- data/spec/plugin/storage/status_spec.rb +24 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/termtter/client_spec.rb +63 -1
- data/spec/termtter/command_spec.rb +6 -68
- data/spec/termtter/config_spec.rb +111 -0
- data/spec/termtter/hook_spec.rb +69 -0
- data/spec/termtter_spec.rb +22 -34
- metadata +81 -72
- data/lib/filter/english.rb +0 -8
- data/lib/filter/ignore.rb +0 -19
- data/lib/filter/yhara.rb +0 -20
- data/lib/plugin/bomb.rb +0 -29
- data/lib/plugin/english.rb +0 -59
- data/lib/plugin/favorite.rb +0 -75
- data/lib/plugin/fib.rb +0 -8
- data/lib/plugin/follow.rb +0 -60
- data/lib/plugin/keyword.rb +0 -18
- data/lib/plugin/multi_reply.rb +0 -36
- data/lib/plugin/outputz.rb +0 -35
- data/lib/plugin/quicklook.rb +0 -38
- data/lib/plugin/screen.rb +0 -24
- data/lib/plugin/spam.rb +0 -9
- data/lib/plugin/stdout.rb +0 -63
- data/lib/plugin/system_status.rb +0 -33
- data/lib/plugin/uri-open.rb +0 -69
- data/lib/plugin/yonda.rb +0 -20
- data/lib/termtter/status.rb +0 -26
- data/lib/termtter/twitter.rb +0 -188
- data/lib/termtter/user.rb +0 -13
- data/spec/termtter/user_spec.rb +0 -27
- data/test/test_termtter.rb +0 -86
data/lib/plugin/english.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'erb'
|
4
|
-
|
5
|
-
module Termtter
|
6
|
-
Client.clear_hooks # FIXME: not to clear all but to clear just stdout.rb
|
7
|
-
|
8
|
-
configatron.set_default(
|
9
|
-
:timeline_format,
|
10
|
-
'<%= color(time, 90) %> <%= color(status, status_color) %> <%= color(id, 90) %>')
|
11
|
-
|
12
|
-
def color(str, num)
|
13
|
-
"\e[#{num}m#{str}\e[0m"
|
14
|
-
end
|
15
|
-
|
16
|
-
# FIXME: The code below is a copy from stdout.rb so it's not DRY. DRY it.
|
17
|
-
|
18
|
-
Client.add_hook do |statuses, event|
|
19
|
-
colors = %w(0 31 32 33 34 35 36 91 92 93 94 95 96)
|
20
|
-
|
21
|
-
case event
|
22
|
-
when :update_friends_timeline, :list_friends_timeline, :list_user_timeline, :show, :replies
|
23
|
-
unless statuses.empty?
|
24
|
-
statuses.reverse! if event == :update_friends_timeline
|
25
|
-
statuses.each do |s|
|
26
|
-
text = s.text.gsub("\n", '')
|
27
|
-
next unless Status.english?(text) # if you substitute "if" for "unless", this script will be "japanese.rb"
|
28
|
-
status_color = colors[s.user_screen_name.hash % colors.size]
|
29
|
-
status = "#{s.user_screen_name}: #{text}"
|
30
|
-
if s.in_reply_to_status_id
|
31
|
-
status += " (reply to #{s.in_reply_to_status_id})"
|
32
|
-
end
|
33
|
-
|
34
|
-
time_format = case event
|
35
|
-
when :update_friends_timeline, :list_friends_timeline
|
36
|
-
'%H:%M:%S'
|
37
|
-
else
|
38
|
-
'%m-%d %H:%M'
|
39
|
-
end
|
40
|
-
time = "(#{s.created_at.strftime(time_format)})"
|
41
|
-
|
42
|
-
id = s.id
|
43
|
-
|
44
|
-
puts ERB.new(configatron.timeline_format).result(binding)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
when :search
|
48
|
-
statuses.each do |s|
|
49
|
-
text = s.text.gsub("\n", '')
|
50
|
-
status_color = colors[s.user_screen_name.hash % colors.size]
|
51
|
-
|
52
|
-
status = "#{s.user_screen_name}: #{text}"
|
53
|
-
time = "(#{s.created_at.strftime('%m-%d %H:%M')})"
|
54
|
-
id = s.id
|
55
|
-
puts ERB.new(configatron.timeline_format).result(binding)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/lib/plugin/favorite.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
add_help 'favorite,fav ID', 'Favorite a status'
|
5
|
-
|
6
|
-
add_command %r'^(?:favorite|fav)\s+(\d+)\s*$' do |m, t|
|
7
|
-
id = m[1]
|
8
|
-
res = t.favorite(id)
|
9
|
-
if res.code == '200'
|
10
|
-
puts "Favorited status ##{id}"
|
11
|
-
else
|
12
|
-
puts "Failed: #{res}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
add_help 'favorite,fav USER', 'Favorite last status on the user'
|
17
|
-
|
18
|
-
add_command %r'^(?:favorite|fav)\s+@(.+)\s*$' do |m, t|
|
19
|
-
user = m[1].strip
|
20
|
-
statuses = t.get_user_timeline(user)
|
21
|
-
unless statuses.empty?
|
22
|
-
id = statuses[0].id
|
23
|
-
text = statuses[0].text
|
24
|
-
res = t.favorite(id)
|
25
|
-
if res.code == '200'
|
26
|
-
puts %Q(Favorited last status ##{id} on user @#{user}: "#{text}")
|
27
|
-
else
|
28
|
-
puts "Failed: #{res}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
if public_storage[:log]
|
34
|
-
add_help 'favorite,fav /WORD', 'Favorite a status by searching'
|
35
|
-
|
36
|
-
add_command %r'^(?:favorite|fav)\s+/(.+)$' do |m, t|
|
37
|
-
pat = Regexp.new(m[1])
|
38
|
-
statuses = public_storage[:log].select {|s| pat =~ s.text }
|
39
|
-
if statuses.size == 1
|
40
|
-
status = statuses.first
|
41
|
-
res = t.favorite(status.id)
|
42
|
-
if res.code == '200'
|
43
|
-
puts %Q(Favorited "#{status.user_screen_name}: #{status.text}")
|
44
|
-
else
|
45
|
-
puts "Failed: #{res}"
|
46
|
-
end
|
47
|
-
else
|
48
|
-
puts "#{pat} does not match single status"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
add_completion do |input|
|
54
|
-
case input
|
55
|
-
when /^(favorite|fav)\s+@(.*)/
|
56
|
-
find_user_candidates $2, "#{$1} @%s"
|
57
|
-
when /^(favorite|fav)\s+(\d*)/
|
58
|
-
find_status_id_candidates $2, "#{$1} %s"
|
59
|
-
else
|
60
|
-
%w(favorite).grep(/^#{Regexp.quote input}/)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
module Termtter
|
66
|
-
class Twitter
|
67
|
-
def favorite(id)
|
68
|
-
uri = "#{@connection.protocol}://twitter.com/favourings/create/#{id}.json"
|
69
|
-
|
70
|
-
@connection.start('twitter.com', @connection.port) do |http|
|
71
|
-
http.request(post_request(uri))
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/lib/plugin/fib.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
def fib(n)i=0;j=1;n.times{j=i+i=j};i end
|
4
|
-
module Termtter::Client
|
5
|
-
add_command /^fib\s+(\d+)/ do|m,t|t.update_status x="fib(#{n=m[1].to_i}) = #{fib n}"
|
6
|
-
puts"=> #{x}"end
|
7
|
-
add_command /^fibyou\s(\w+)\s(\d+)/ do|m,t|puts"=> #{t.update_status("@#{m[1]} fib(#{n=m[2].to_i}) = #{fib n}")}"end end
|
8
|
-
# TODO: use add_macro
|
data/lib/plugin/follow.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
register_command(
|
5
|
-
:name => :follow, :aliases => [],
|
6
|
-
:exec_proc => lambda {|args|
|
7
|
-
args.split(' ').each do |arg|
|
8
|
-
if arg =~ /^(\w+)/
|
9
|
-
res = Termtter::API::twitter.social($1.strip, :follow)
|
10
|
-
if res.code == '200'
|
11
|
-
puts "Followed user @#{$1}"
|
12
|
-
else
|
13
|
-
puts "Failed: #{res}"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
},
|
18
|
-
:completion_proc => lambda {|cmd, args|
|
19
|
-
find_user_candidates args, "#{cmd} %s"
|
20
|
-
},
|
21
|
-
:help => ['follow USER', 'Follow user']
|
22
|
-
)
|
23
|
-
|
24
|
-
register_command(
|
25
|
-
:name => :leave, :aliases => [],
|
26
|
-
:exec_proc => lambda {|args|
|
27
|
-
args.split(' ').each do |arg|
|
28
|
-
if arg =~ /^(\w+)/
|
29
|
-
res = Termtter::API::twitter.social($1.strip, :leave)
|
30
|
-
if res.code == '200'
|
31
|
-
puts "Leaved user @#{$1}"
|
32
|
-
else
|
33
|
-
puts "Failed: #{res}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
},
|
38
|
-
:completion_proc => lambda {|cmd, args|
|
39
|
-
find_user_candidates args, "#{cmd} %s"
|
40
|
-
},
|
41
|
-
:help => ['leave USER', 'Leave user']
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
module Termtter
|
46
|
-
class Twitter
|
47
|
-
def social(user, type)
|
48
|
-
type =
|
49
|
-
case type.to_sym
|
50
|
-
when :follow then 'create'
|
51
|
-
when :leave then 'destroy'
|
52
|
-
end
|
53
|
-
uri = "#{@connection.protocol}://twitter.com/friendships/#{type}/#{user}.json"
|
54
|
-
|
55
|
-
@connection.start('twitter.com', @connection.port) do |http|
|
56
|
-
http.request(post_request(uri))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/lib/plugin/keyword.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
configatron.set_default('plugins.keyword.keywords', [])
|
4
|
-
|
5
|
-
module Termtter
|
6
|
-
class Status
|
7
|
-
def has_keyword?
|
8
|
-
configatron.plugins.keyword.keywords.find { |k| k === self.text }
|
9
|
-
end
|
10
|
-
alias :has_keyword :has_keyword?
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
# keyword.rb
|
15
|
-
# provides a keyword watching method
|
16
|
-
# example config
|
17
|
-
# configatron.plugins.stdout.timeline_format = '<%= color(time, 90) %> <%= color(status, s.has_keyword ? 4 : status_color) %> <%= color(id, 90) %>'
|
18
|
-
# configatron.plugins.keyword.keywords = [ /motemen/ ]
|
data/lib/plugin/multi_reply.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
add_help 'multi_reply, mp TEXT', 'reply to multi user'
|
5
|
-
add_command /^(multi_reply|mr)\s+(.*)/ do |m, t|
|
6
|
-
text = ERB.new(m[2]).result(binding).gsub(/\n/, ' ')
|
7
|
-
unless text.empty?
|
8
|
-
#targets, _, msg = text.match /(@(.+))*\s+(.+)/
|
9
|
-
#targets.split(/\s+/).
|
10
|
-
# map {|u| "#{u} #{msg}" }.
|
11
|
-
# each do |post|
|
12
|
-
# t.update_status(post)
|
13
|
-
# puts "=> #{post}"
|
14
|
-
# end
|
15
|
-
/(@(.+))*\s+(.+)/ =~ text
|
16
|
-
if $1
|
17
|
-
msg = $3
|
18
|
-
text = $1.split(/\s+/).map {|u| "#{u} #{msg}" }
|
19
|
-
end
|
20
|
-
Array(text).each do |post|
|
21
|
-
t.update_status(post)
|
22
|
-
puts "=> #{post}"
|
23
|
-
end
|
24
|
-
#
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
add_completion do |input|
|
29
|
-
case input
|
30
|
-
when /^(multi_reply|mr)\s+(.*)@([^\s]*)$/
|
31
|
-
find_user_candidates $3, "#{$1} #{$2}@%s"
|
32
|
-
else
|
33
|
-
%w[ mreply mp ].grep(/^#{Regexp.quote input}/)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/lib/plugin/outputz.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
module Termtter::Client
|
5
|
-
configatron.plugins.outputz.set_default(:uri, 'termtter://twitter.com/status/update')
|
6
|
-
|
7
|
-
key = configatron.plugins.outputz.secret_key
|
8
|
-
if key.instance_of? Configatron::Store
|
9
|
-
puts 'Need your secret key'
|
10
|
-
puts 'please set configatron.plugins.outputz.secret_key'
|
11
|
-
else
|
12
|
-
add_command /^(update|u)\s+(.*)/ do |m, t|
|
13
|
-
text = ERB.new(m[2]).result(binding).gsub(/\n/, ' ')
|
14
|
-
unless text.empty?
|
15
|
-
t.update_status(text)
|
16
|
-
puts "=> #{text}"
|
17
|
-
end
|
18
|
-
t.instance_variable_get('@connection').
|
19
|
-
start('outputz.com', 80) do |http|
|
20
|
-
key = CGI.escape key
|
21
|
-
uri = CGI.escape configatron.plugins.outputz.uri
|
22
|
-
size = text.split(//).size
|
23
|
-
http.post('/api/post', "key=#{key}&uri=#{uri}&size=#{size}")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# outputz.rb
|
30
|
-
# a plugin that report to outputz your post
|
31
|
-
#
|
32
|
-
# settings (note: must this order)
|
33
|
-
# configatron.plugins.outputz.secret_key = 'your secret key'
|
34
|
-
# plugin 'outputz'
|
35
|
-
|
data/lib/plugin/quicklook.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'uri'
|
4
|
-
require 'open-uri'
|
5
|
-
require 'pathname'
|
6
|
-
require 'tmpdir'
|
7
|
-
|
8
|
-
configatron.plugins.quicklook.set_default(:quicklook_tmpdir, "#{Dir.tmpdir}/termtter-quicklook-tmpdir")
|
9
|
-
tmpdir = Pathname.new(configatron.plugins.quicklook.quicklook_tmpdir)
|
10
|
-
tmpdir.mkdir unless tmpdir.exist?
|
11
|
-
|
12
|
-
def quicklook(url)
|
13
|
-
tmpdir = Pathname.new(configatron.plugins.quicklook.quicklook_tmpdir)
|
14
|
-
path = tmpdir + Pathname.new(url).basename
|
15
|
-
|
16
|
-
Thread.new do
|
17
|
-
open(path, 'w') do |f|
|
18
|
-
f.write(open(url).read)
|
19
|
-
end
|
20
|
-
system("qlmanage -p #{path} > /dev/null 2>&1")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
module Termtter::Client
|
25
|
-
add_command %r'^(?:quicklook|ql)\s+(\w+)$' do |m,t|
|
26
|
-
id = m[1]
|
27
|
-
status = t.show(id).first
|
28
|
-
|
29
|
-
if (status)
|
30
|
-
uris = URI.regexp.match(status.text).to_a
|
31
|
-
quicklook(uris.first) unless uris.empty?
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# quicklook.rb
|
37
|
-
# TODO:
|
38
|
-
# Close quicklook window automatically.
|
data/lib/plugin/screen.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter
|
4
|
-
module Plugin
|
5
|
-
module Screen
|
6
|
-
def self.set_title(title)
|
7
|
-
print "\033k#{title}\033\\"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# Add below to your ~/.termtter
|
14
|
-
#
|
15
|
-
# require 'plugin/yonda'
|
16
|
-
# require 'plugin/screen'
|
17
|
-
# module Termtter::Client
|
18
|
-
# add_hook do |statuses, event|
|
19
|
-
# case event
|
20
|
-
# when :update_friends_timeline, :plugin_yonda_yonda
|
21
|
-
# Termtter::Plugin::Screen::set_title("termtter(#{public_storage[:unread_count]})")
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
# end
|
data/lib/plugin/spam.rb
DELETED
data/lib/plugin/stdout.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'termcolor'
|
4
|
-
require 'erb'
|
5
|
-
|
6
|
-
configatron.plugins.stdout.set_default(
|
7
|
-
:colors,
|
8
|
-
[:none, :red, :green, :yellow, :blue, :magenta, :cyan])
|
9
|
-
configatron.plugins.stdout.set_default(
|
10
|
-
:timeline_format,
|
11
|
-
'<90><%=time%></90> <<%=status_color%>><%=status%></<%=status_color%>> <90><%=id%></90>')
|
12
|
-
|
13
|
-
$highline = HighLine.new
|
14
|
-
|
15
|
-
def color(str, value)
|
16
|
-
return str if value == :none
|
17
|
-
case value
|
18
|
-
when String, Symbol
|
19
|
-
$highline.color(str, value)
|
20
|
-
else
|
21
|
-
"\e[#{value}m#{str}\e[0m"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
module Termtter::Client
|
26
|
-
|
27
|
-
def self.print_statuses(statuses, sort = true, time_format = '%H:%M:%S')
|
28
|
-
(sort ? statuses.sort_by{ |s| s.id} : statuses).each do |s|
|
29
|
-
text = s.text
|
30
|
-
status_color = configatron.plugins.stdout.colors[s.user_screen_name.hash % configatron.plugins.stdout.colors.size]
|
31
|
-
status = "#{s.user_screen_name}: #{text}"
|
32
|
-
if s.in_reply_to_status_id
|
33
|
-
status += " (reply to #{s.in_reply_to_status_id})"
|
34
|
-
end
|
35
|
-
|
36
|
-
time = "(#{s.created_at.strftime(time_format)})"
|
37
|
-
id = s.id
|
38
|
-
erbed_text = ERB.new(configatron.plugins.stdout.timeline_format).result(binding)
|
39
|
-
puts TermColor.parse(erbed_text)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.print_statuses_with_date(statuses, sort = true)
|
44
|
-
print_statuses(statuses, sort, '%m-%d %H:%M')
|
45
|
-
end
|
46
|
-
|
47
|
-
add_hook do |statuses, event|
|
48
|
-
next if statuses.empty?
|
49
|
-
|
50
|
-
case event
|
51
|
-
when :update_friends_timeline, :list_friends_timeline
|
52
|
-
print_statuses(statuses)
|
53
|
-
when :search, :list_user_timeline, :show, :replies
|
54
|
-
print_statuses_with_date(statuses)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
# stdout.rb
|
60
|
-
# output statuses to stdout
|
61
|
-
# example config
|
62
|
-
# configatron.plugins.stdout.colors = [:none, :red, :green, :yellow, :blue, :magenta, :cyan]
|
63
|
-
# configatron.plugins.stdout.timeline_format = '<90><%=time%></90> <<%=status_color%>><%=status%></<%=status_color%>> <90><%=id%></90>'
|
data/lib/plugin/system_status.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'erb'
|
4
|
-
|
5
|
-
configatron.plugins.system_status.set_default(:default_status_proc, lambda { Time.now.strftime("%x %X") })
|
6
|
-
configatron.plugins.system_status.set_default(:interval, 1)
|
7
|
-
configatron.plugins.system_status.set_default(:default_color, :on_blue)
|
8
|
-
configatron.plugins.system_status.set_default(:format, '<%= status %>')
|
9
|
-
|
10
|
-
def out_put_status(status, color)
|
11
|
-
formatted_status = ERB.new(configatron.plugins.system_status.format).result(binding)
|
12
|
-
colored_status = color(formatted_status, color)
|
13
|
-
print "\e[s\e[1000G\e[#{status.size - 1}D#{colored_status}\e[u"
|
14
|
-
$stdout.flush
|
15
|
-
end
|
16
|
-
|
17
|
-
module Termtter::Client
|
18
|
-
add_task(:name => :system_status, :interval => configatron.plugins.system_status.interval) do
|
19
|
-
status = (@@task_manager.get_task(:update_timeline).exec_at - Time.now).to_i.to_s
|
20
|
-
color = public_storage[:system_status_color] ||
|
21
|
-
configatron.plugins.system_status.default_color
|
22
|
-
out_put_status(status, color)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# system_status.rb
|
27
|
-
# show system status on left side.
|
28
|
-
# output public_storage[:system_status] or Time.now.strftime("%x %X") if nil
|
29
|
-
# example config
|
30
|
-
# configatron.plugins.system_status.default_status_proc = lambda { Time.now.strftime("%x %X") }
|
31
|
-
# configatron.plugins.system_status.interval = 1
|
32
|
-
# configatron.plugins.system_status.default_color = :on_blue
|
33
|
-
# configatron.plugins.system_status.format = '<%= status %>'
|
data/lib/plugin/uri-open.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
public_storage[:uris] = []
|
5
|
-
|
6
|
-
add_hook do |statuses, event, t|
|
7
|
-
if !statuses.empty? && event == :update_friends_timeline
|
8
|
-
statuses.each do |s|
|
9
|
-
public_storage[:uris] += s.text.scan(%r|https?://[^\s]+|)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.open_uri(uri)
|
15
|
-
unless configatron.plugins.uri_open.browser.nil?
|
16
|
-
system configatron.plugins.uri_open.browser, uri
|
17
|
-
else
|
18
|
-
case RUBY_PLATFORM
|
19
|
-
when /linux/
|
20
|
-
system 'firefox', uri
|
21
|
-
when /mswin(?!ce)|mingw|bccwin/
|
22
|
-
system 'explorer', uri
|
23
|
-
else
|
24
|
-
system 'open', uri
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
add_command /^uri-open\s*$/ do |m, t|
|
30
|
-
public_storage[:uris].each do |uri|
|
31
|
-
open_uri(uri)
|
32
|
-
end
|
33
|
-
public_storage[:uris].clear
|
34
|
-
end
|
35
|
-
|
36
|
-
add_command /^uri-open\s+(\d+)$/ do |m, t|
|
37
|
-
if m[1]
|
38
|
-
index = m[1].to_i
|
39
|
-
open_uri(public_storage[:uris][index])
|
40
|
-
public_storage[:uris].delete_at(index)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
add_command /^uri-open\s+list\s*$/ do |m, t|
|
45
|
-
public_storage[:uris].each_with_index do |uri, index|
|
46
|
-
puts "#{index}: #{uri}"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
add_command /^uri-open\s+delete\s+(\d+)$/ do |m, t|
|
51
|
-
public_storage[:uris].delete_at(m[1].to_i) if m[1]
|
52
|
-
end
|
53
|
-
|
54
|
-
add_command /^uri-open\s+clear\s*$/ do |m, t|
|
55
|
-
public_storage[:uris].clear
|
56
|
-
puts "clear uris"
|
57
|
-
end
|
58
|
-
|
59
|
-
add_completion do |input|
|
60
|
-
['uri-open ', 'uri-open list', 'uri-open delete', 'uri-open clear'].grep(/^#{Regexp.quote input}/)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
# ~/.termtter
|
64
|
-
# plugin 'uri-open'
|
65
|
-
#
|
66
|
-
# see also: http://ujihisa.nowa.jp/entry/c3dd00c4e0
|
67
|
-
#
|
68
|
-
# KNOWN BUG
|
69
|
-
# * In Debian, exit or C-c in the termtter kills your firefox.
|
data/lib/plugin/yonda.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter::Client
|
4
|
-
register_command(
|
5
|
-
:name => :yonda, :aliases => [:y],
|
6
|
-
:exec_proc => proc{|arg|
|
7
|
-
public_storage[:unread_count] = 0
|
8
|
-
print "\033[2J\033[H" # FIXME
|
9
|
-
call_hooks [], :plugin_yonda_yonda
|
10
|
-
},
|
11
|
-
:help => ['yonda,y', 'Mark as read']
|
12
|
-
)
|
13
|
-
|
14
|
-
add_hook do |statuses, event|
|
15
|
-
case event
|
16
|
-
when :update_friends_timeline
|
17
|
-
public_storage[:unread_count] += statuses.size
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/termtter/status.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
module Termtter
|
4
|
-
class Status
|
5
|
-
%w(
|
6
|
-
id text created_at truncated
|
7
|
-
in_reply_to_status_id in_reply_to_user_id in_reply_to_screen_name
|
8
|
-
user_id user_name user_screen_name user_url user_profile_image_url
|
9
|
-
).each do |attr|
|
10
|
-
attr_accessor attr.to_sym
|
11
|
-
end
|
12
|
-
|
13
|
-
def eql?(other); self.id == other.id end
|
14
|
-
def hash; self.id end
|
15
|
-
|
16
|
-
def english?
|
17
|
-
self.class.english?(self.text)
|
18
|
-
end
|
19
|
-
|
20
|
-
# english? :: String -> Boolean
|
21
|
-
def self.english?(message)
|
22
|
-
/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/ !~ message
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|