sup 0.13.0 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sup might be problematic. Click here for more details.

Files changed (54) hide show
  1. data.tar.gz.sig +2 -1
  2. data/History.txt +4 -0
  3. data/ReleaseNotes +4 -0
  4. data/bin/sup +3 -1
  5. data/bin/sup-add +3 -1
  6. data/bin/sup-config +11 -6
  7. data/bin/sup-dump +2 -0
  8. data/bin/sup-import-dump +3 -1
  9. data/bin/sup-recover-sources +2 -0
  10. data/bin/sup-sync +3 -1
  11. data/bin/sup-sync-back +3 -1
  12. data/bin/sup-tweak-labels +3 -1
  13. data/lib/sup.rb +31 -64
  14. data/lib/sup/buffer.rb +2 -2
  15. data/lib/sup/colormap.rb +1 -0
  16. data/lib/sup/hook.rb +10 -0
  17. data/lib/sup/{horizontal-selector.rb → horizontal_selector.rb} +10 -1
  18. data/lib/sup/index.rb +27 -26
  19. data/lib/sup/{interactive-lock.rb → interactive_lock.rb} +0 -0
  20. data/lib/sup/logger.rb +1 -1
  21. data/lib/sup/logger/singleton.rb +10 -0
  22. data/lib/sup/{message-chunks.rb → message_chunks.rb} +2 -2
  23. data/lib/sup/modes/{buffer-list-mode.rb → buffer_list_mode.rb} +0 -0
  24. data/lib/sup/modes/{completion-mode.rb → completion_mode.rb} +3 -3
  25. data/lib/sup/modes/{compose-mode.rb → compose_mode.rb} +0 -0
  26. data/lib/sup/modes/{console-mode.rb → console_mode.rb} +14 -3
  27. data/lib/sup/modes/{contact-list-mode.rb → contact_list_mode.rb} +0 -0
  28. data/lib/sup/modes/{edit-message-async-mode.rb → edit_message_async_mode.rb} +0 -0
  29. data/lib/sup/modes/{edit-message-mode.rb → edit_message_mode.rb} +8 -3
  30. data/lib/sup/modes/{file-browser-mode.rb → file_browser_mode.rb} +0 -0
  31. data/lib/sup/modes/{forward-mode.rb → forward_mode.rb} +0 -0
  32. data/lib/sup/modes/{help-mode.rb → help_mode.rb} +0 -0
  33. data/lib/sup/modes/{inbox-mode.rb → inbox_mode.rb} +0 -0
  34. data/lib/sup/modes/{label-list-mode.rb → label_list_mode.rb} +0 -0
  35. data/lib/sup/modes/{label-search-results-mode.rb → label_search_results_mode.rb} +0 -0
  36. data/lib/sup/modes/{line-cursor-mode.rb → line_cursor_mode.rb} +2 -2
  37. data/lib/sup/modes/{log-mode.rb → log_mode.rb} +0 -0
  38. data/lib/sup/modes/{person-search-results-mode.rb → person_search_results_mode.rb} +0 -0
  39. data/lib/sup/modes/{poll-mode.rb → poll_mode.rb} +0 -0
  40. data/lib/sup/modes/{reply-mode.rb → reply_mode.rb} +0 -0
  41. data/lib/sup/modes/{resume-mode.rb → resume_mode.rb} +0 -0
  42. data/lib/sup/modes/{scroll-mode.rb → scroll_mode.rb} +4 -4
  43. data/lib/sup/modes/{search-list-mode.rb → search_list_mode.rb} +0 -0
  44. data/lib/sup/modes/{search-results-mode.rb → search_results_mode.rb} +0 -0
  45. data/lib/sup/modes/{text-mode.rb → text_mode.rb} +0 -0
  46. data/lib/sup/modes/{thread-index-mode.rb → thread_index_mode.rb} +6 -6
  47. data/lib/sup/modes/{thread-view-mode.rb → thread_view_mode.rb} +0 -0
  48. data/lib/sup/poll.rb +22 -7
  49. data/lib/sup/service/label_service.rb +45 -0
  50. data/lib/sup/util/path.rb +9 -0
  51. data/lib/sup/util/uri.rb +15 -0
  52. data/lib/sup/version.rb +1 -1
  53. metadata +158 -78
  54. metadata.gz.sig +0 -0
@@ -1,4 +1,4 @@
1
- require "sup"
1
+ require "sup/util"
2
2
  require 'stringio'
3
3
  require 'thread'
4
4
 
@@ -0,0 +1,10 @@
1
+ # TODO: this is ugly. It's better to have a application singleton passed
2
+ # down to lower level components instead of including logging methods in
3
+ # class `Object'
4
+ #
5
+ # For now this is what we have to do.
6
+ require "sup/logger"
7
+ Redwood::Logger.init.add_sink $stderr
8
+ class Object
9
+ include Redwood::LogsStuff
10
+ end
@@ -130,7 +130,7 @@ EOS
130
130
  end
131
131
  end
132
132
 
133
- def color; :none end
133
+ def color; :text_color end
134
134
  def patina_color; :attachment_color end
135
135
  def patina_text
136
136
  if expandable?
@@ -191,7 +191,7 @@ EOS
191
191
  def quotable?; true end
192
192
  def expandable?; false end
193
193
  def viewable?; false end
194
- def color; :none end
194
+ def color; :text_color end
195
195
  end
196
196
 
197
197
  class Quote
@@ -38,11 +38,11 @@ private
38
38
  suffix = s[(@prefix_len + 1) .. -1]
39
39
  char = s[@prefix_len].chr
40
40
 
41
- @lines.last += [[:none, sprintf("%#{max_length - suffix.length - 1}s", prefix)],
41
+ @lines.last += [[:text_color, sprintf("%#{max_length - suffix.length - 1}s", prefix)],
42
42
  [:completion_character_color, char],
43
- [:none, suffix + INTERSTITIAL]]
43
+ [:text_color, suffix + INTERSTITIAL]]
44
44
  else
45
- @lines.last += [[:none, sprintf("%#{max_length}s#{INTERSTITIAL}", s)]]
45
+ @lines.last += [[:text_color, sprintf("%#{max_length}s#{INTERSTITIAL}", s)]]
46
46
  end
47
47
  else
48
48
  @lines << "" if i % num_per == 0
@@ -1,10 +1,13 @@
1
1
  require 'pp'
2
2
 
3
+ require "sup/service/label_service"
4
+
3
5
  module Redwood
4
6
 
5
7
  class Console
6
8
  def initialize mode
7
9
  @mode = mode
10
+ @label_service = LabelService.new
8
11
  end
9
12
 
10
13
  def query(query)
@@ -12,19 +15,27 @@ class Console
12
15
  end
13
16
 
14
17
  def add_labels(query, *labels)
15
- query(query).each { |m| m.labels += labels; m.save Index }
18
+ count = @label_service.add_labels(query, *labels)
19
+ print_buffer_dirty_msg count
16
20
  end
17
21
 
18
22
  def remove_labels(query, *labels)
19
- query(query).each { |m| m.labels -= labels; m.save Index }
23
+ count = @label_service.remove_labels(query, *labels)
24
+ print_buffer_dirty_msg count
25
+ end
26
+
27
+ def print_buffer_dirty_msg msg_count
28
+ puts "Scanned #{msg_count} messages."
29
+ puts "You might want to refresh open buffers with `@` key."
20
30
  end
31
+ private :print_buffer_dirty_msg
21
32
 
22
33
  def xapian; Index.instance.instance_variable_get :@xapian; end
23
34
 
24
35
  def loglevel; Redwood::Logger.level; end
25
36
  def set_loglevel(level); Redwood::Logger.level = level; end
26
37
 
27
- def special_methods; methods - Object.methods end
38
+ def special_methods; public_methods - Object.methods end
28
39
 
29
40
  def puts x; @mode << "#{x.to_s.rstrip}\n" end
30
41
  def p x; puts x.inspect end
@@ -131,13 +131,18 @@ EOS
131
131
  HorizontalSelector.new "Account:", AccountManager.user_emails + [nil], user_emails_copy + ["Customized"]
132
132
 
133
133
  if @header["From"] =~ /<?(\S+@(\S+?))>?$/
134
- @account_selector.set_to $1
135
- @account_user = ""
134
+ # TODO: this is ugly. might implement an AccountSelector and handle
135
+ # special cases more transparently.
136
+ account_from = @account_selector.can_set_to?($1) ? $1 : nil
137
+ @account_selector.set_to account_from
136
138
  else
137
139
  @account_selector.set_to nil
138
- @account_user = @header["From"]
139
140
  end
140
141
 
142
+ # A single source of truth might better than duplicating this in both
143
+ # @account_user and @account_selector.
144
+ @account_user = @header["From"]
145
+
141
146
  add_selector @account_selector
142
147
  end
143
148
 
@@ -47,9 +47,9 @@ protected
47
47
 
48
48
  def draw_line ln, opts={}
49
49
  if ln == @curpos
50
- super ln, :highlight => true, :debug => opts[:debug]
50
+ super ln, :highlight => true, :debug => opts[:debug], :color => :text_color
51
51
  else
52
- super
52
+ super ln, :color => :text_color
53
53
  end
54
54
  end
55
55
 
@@ -43,12 +43,12 @@ class ScrollMode < Mode
43
43
 
44
44
  def draw
45
45
  ensure_mode_validity
46
- (@topline ... @botline).each { |ln| draw_line ln }
46
+ (@topline ... @botline).each { |ln| draw_line ln, :color => :text_color }
47
47
  ((@botline - @topline) ... buffer.content_height).each do |ln|
48
48
  if @twiddles
49
49
  buffer.write ln, 0, "~", :color => :twiddle_color
50
50
  else
51
- buffer.write ln, 0, ""
51
+ buffer.write ln, 0, "", :color => :text_color
52
52
  end
53
53
  end
54
54
  @status = "lines #{@topline + 1}:#{@botline}/#{lines}"
@@ -208,7 +208,7 @@ protected
208
208
  # return
209
209
  end
210
210
 
211
- def matching_text_array s, regex, oldcolor=:none
211
+ def matching_text_array s, regex, oldcolor=:text_color
212
212
  s.split(regex).map do |text|
213
213
  next if text.empty?
214
214
  if text =~ regex
@@ -244,7 +244,7 @@ protected
244
244
  end
245
245
 
246
246
  def draw_line_from_string ln, s, opts
247
- buffer.write ln - @topline, 0, s[@leftcol .. -1], :highlight => opts[:highlight]
247
+ buffer.write ln - @topline, 0, s[@leftcol .. -1], :highlight => opts[:highlight], :color => opts[:color]
248
248
  end
249
249
  end
250
250
 
@@ -110,7 +110,7 @@ EOS
110
110
  num = t.size
111
111
  message = "Loading #{num.pluralize 'message body'}..."
112
112
  BufferManager.say(message) do |sid|
113
- t.each_with_index do |(m, *o), i|
113
+ t.each_with_index do |(m, *_), i|
114
114
  next unless m
115
115
  BufferManager.say "#{message} (#{i}/#{num})", sid if t.size > 1
116
116
  m.load_from_source!
@@ -247,7 +247,7 @@ EOS
247
247
 
248
248
  def edit_message
249
249
  return unless(t = cursor_thread)
250
- message, *crap = t.find { |m, *o| m.has_label? :draft }
250
+ message, *_ = t.find { |m, *o| m.has_label? :draft }
251
251
  if message
252
252
  mode = ResumeMode.new message
253
253
  BufferManager.spawn "Edit message", mode
@@ -258,7 +258,6 @@ EOS
258
258
 
259
259
  ## returns an undo lambda
260
260
  def actually_toggle_starred t
261
- pos = curpos
262
261
  if t.has_label? :starred # if ANY message has a star
263
262
  t.remove_label :starred # remove from all
264
263
  UpdateManager.relay self, :unstarred, t.first
@@ -877,8 +876,9 @@ protected
877
876
  from << [(newness ? :index_new_color : (starred ? :index_starred_color : :index_old_color)), abbrev]
878
877
  end
879
878
 
880
- dp = t.direct_participants.any? { |p| AccountManager.is_account? p }
881
- p = dp || t.participants.any? { |p| AccountManager.is_account? p }
879
+ is_me = AccountManager.method(:is_account?)
880
+ directly_participated = t.direct_participants.any?(&is_me)
881
+ participated = directly_participated || t.participants.any?(&is_me)
882
882
 
883
883
  subj_color =
884
884
  if t.has_label?(:draft)
@@ -908,7 +908,7 @@ protected
908
908
  [
909
909
  [:size_widget_color, size_widget_text],
910
910
  [:to_me_color, t.labels.member?(:attachment) ? "@" : " "],
911
- [:to_me_color, dp ? ">" : (p ? '+' : " ")],
911
+ [:to_me_color, directly_participated ? ">" : (participated ? '+' : " ")],
912
912
  ] +
913
913
  (t.labels - @hidden_labels).sort_by {|x| x.to_s}.map {
914
914
  |label| [Colormap.sym_is_defined("label_#{label}_color".to_sym) || :label_color, "#{label} "]
@@ -22,6 +22,8 @@ Variables:
22
22
  num: the total number of new messages added in this poll
23
23
  num_inbox: the number of new messages added in this poll which
24
24
  appear in the inbox (i.e. were not auto-archived).
25
+ num_total: the total number of messages
26
+ num_inbox_total: the total number of new messages in the inbox.
25
27
  num_inbox_total_unread: the total number of unread messages in the inbox
26
28
  from_and_subj: an array of (from email address, subject) pairs
27
29
  from_and_subj_inbox: an array of (from email address, subject) pairs for
@@ -43,22 +45,35 @@ EOS
43
45
 
44
46
  def poll_with_sources
45
47
  @mode ||= PollMode.new
46
- HookManager.run "before-poll"
47
48
 
48
- BufferManager.flash "Polling for new messages..."
49
+ if HookManager.enabled? "before-poll"
50
+ HookManager.run("before-poll")
51
+ else
52
+ BufferManager.flash "Polling for new messages..."
53
+ end
54
+
49
55
  num, numi, from_and_subj, from_and_subj_inbox, loaded_labels = @mode.poll
50
56
  clear_running_totals if @should_clear_running_totals
51
57
  @running_totals[:num] += num
52
58
  @running_totals[:numi] += numi
53
59
  @running_totals[:loaded_labels] += loaded_labels || []
54
- if @running_totals[:num] > 0
55
- BufferManager.flash "Loaded #{@running_totals[:num].pluralize 'new message'}, #{@running_totals[:numi]} to inbox. Labels: #{@running_totals[:loaded_labels].map{|l| l.to_s}.join(', ')}"
60
+
61
+
62
+ if HookManager.enabled? "after-poll"
63
+ hook_args = { :num => num, :num_inbox => numi,
64
+ :num_total => @running_totals[:num], :num_inbox_total => @running_totals[:numi],
65
+ :from_and_subj => from_and_subj, :from_and_subj_inbox => from_and_subj_inbox,
66
+ :num_inbox_total_unread => lambda { Index.num_results_for :labels => [:inbox, :unread] } }
67
+
68
+ HookManager.run("after-poll", hook_args)
56
69
  else
57
- BufferManager.flash "No new messages."
70
+ if @running_totals[:num] > 0
71
+ BufferManager.flash "Loaded #{@running_totals[:num].pluralize 'new message'}, #{@running_totals[:numi]} to inbox. Labels: #{@running_totals[:loaded_labels].map{|l| l.to_s}.join(', ')}"
72
+ else
73
+ BufferManager.flash "No new messages."
74
+ end
58
75
  end
59
76
 
60
- HookManager.run "after-poll", :num => num, :num_inbox => numi, :from_and_subj => from_and_subj, :from_and_subj_inbox => from_and_subj_inbox, :num_inbox_total_unread => lambda { Index.num_results_for :labels => [:inbox, :unread] }
61
-
62
77
  end
63
78
 
64
79
  def poll
@@ -0,0 +1,45 @@
1
+ require "sup/index"
2
+
3
+ module Redwood
4
+ # Provides label tweaking service to the user.
5
+ # Working as the backend of ConsoleMode.
6
+ #
7
+ # Should become the backend of bin/sup-tweak-labels in the future.
8
+ class LabelService
9
+ # @param index [Redwood::Index]
10
+ def initialize index=Index.instance
11
+ @index = index
12
+ end
13
+
14
+ def add_labels query, *labels
15
+ run_on_each_message(query) do |m|
16
+ labels.each {|l| m.add_label l }
17
+ end
18
+ end
19
+
20
+ def remove_labels query, *labels
21
+ run_on_each_message(query) do |m|
22
+ labels.each {|l| m.remove_label l }
23
+ end
24
+ end
25
+
26
+
27
+ private
28
+ def run_on_each_message query, &operation
29
+ count = 0
30
+
31
+ find_messages(query).each do |m|
32
+ operation.call(m)
33
+ @index.update_message_state m
34
+ count += 1
35
+ end
36
+
37
+ @index.save_index
38
+ count
39
+ end
40
+
41
+ def find_messages query
42
+ @index.find_messages(query)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ module Redwood
2
+ module Util
3
+ module Path
4
+ def self.expand(path)
5
+ ::File.expand_path(path)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require "uri"
2
+
3
+ require "sup/util/path"
4
+
5
+ module Redwood
6
+ module Util
7
+ module Uri
8
+ def self.build(components)
9
+ components = components.dup
10
+ components[:path] = Path.expand(components[:path])
11
+ ::URI::Generic.build(components)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Redwood
2
- VERSION = "0.13.0"
2
+ VERSION = "0.13.1"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.13.1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 13
9
- - 0
10
- hash: -4492560732051236832
9
+ - 1
10
+ hash: -2513794677926756067
11
11
  platform: ruby
12
12
  authors:
13
13
  - William Morgan
@@ -46,7 +46,7 @@ cert_chain:
46
46
  ZUw2TWhhNApoRmMyeUFOQmo4dm9hWTVDNzRDZzJWcUV4dGNuU2F4VXRXOXdD
47
47
  NHc1aE9sZzBBVmZiMUpXemc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
48
48
  Cg==
49
- date: 2013-05-15 00:00:00.000000000 Z
49
+ date: 2013-06-21 00:00:00.000000000 Z
50
50
  dependencies:
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: xapian-full-alaveteli
@@ -56,10 +56,11 @@ dependencies:
56
56
  - - ~>
57
57
  - !ruby/object:Gem::Version
58
58
  version: '1.2'
59
+ prerelease:
59
60
  segments:
60
61
  - 1
61
62
  - 2
62
- hash: -3470814721440028832
63
+ hash: -853541801780087623
63
64
  type: :runtime
64
65
  prerelease: false
65
66
  version_requirements: !ruby/object:Gem::Requirement
@@ -68,10 +69,11 @@ dependencies:
68
69
  - - ~>
69
70
  - !ruby/object:Gem::Version
70
71
  version: '1.2'
72
+ prerelease:
71
73
  segments:
72
74
  - 1
73
75
  - 2
74
- hash: -3470814721440028832
76
+ hash: -853541801780087623
75
77
  - !ruby/object:Gem::Dependency
76
78
  name: ncursesw-sup
77
79
  requirement: !ruby/object:Gem::Requirement
@@ -80,18 +82,20 @@ dependencies:
80
82
  - - ~>
81
83
  - !ruby/object:Gem::Version
82
84
  version: '1.3'
85
+ prerelease:
83
86
  segments:
84
87
  - 1
85
88
  - 3
86
- hash: -3847811635784656183
89
+ hash: 633068654591055268
87
90
  - - ! '>='
88
91
  - !ruby/object:Gem::Version
89
92
  version: 1.3.1
93
+ prerelease:
90
94
  segments:
91
95
  - 1
92
96
  - 3
93
97
  - 1
94
- hash: -3904231600277470242
98
+ hash: 2194476579308073519
95
99
  type: :runtime
96
100
  prerelease: false
97
101
  version_requirements: !ruby/object:Gem::Requirement
@@ -100,18 +104,20 @@ dependencies:
100
104
  - - ~>
101
105
  - !ruby/object:Gem::Version
102
106
  version: '1.3'
107
+ prerelease:
103
108
  segments:
104
109
  - 1
105
110
  - 3
106
- hash: -3847811635784656183
111
+ hash: 633068654591055268
107
112
  - - ! '>='
108
113
  - !ruby/object:Gem::Version
109
114
  version: 1.3.1
115
+ prerelease:
110
116
  segments:
111
117
  - 1
112
118
  - 3
113
119
  - 1
114
- hash: -3904231600277470242
120
+ hash: 2194476579308073519
115
121
  - !ruby/object:Gem::Dependency
116
122
  name: rmail
117
123
  requirement: !ruby/object:Gem::Requirement
@@ -120,10 +126,11 @@ dependencies:
120
126
  - - ! '>='
121
127
  - !ruby/object:Gem::Version
122
128
  version: '0.17'
129
+ prerelease:
123
130
  segments:
124
131
  - 0
125
132
  - 17
126
- hash: -718457563752098801
133
+ hash: 447830368960240951
127
134
  type: :runtime
128
135
  prerelease: false
129
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -132,32 +139,35 @@ dependencies:
132
139
  - - ! '>='
133
140
  - !ruby/object:Gem::Version
134
141
  version: '0.17'
142
+ prerelease:
135
143
  segments:
136
144
  - 0
137
145
  - 17
138
- hash: -718457563752098801
146
+ hash: 447830368960240951
139
147
  - !ruby/object:Gem::Dependency
140
148
  name: highline
141
149
  requirement: !ruby/object:Gem::Requirement
142
- none: false
150
+ none: true
143
151
  requirements:
144
152
  - - ! '>='
145
153
  - !ruby/object:Gem::Version
146
154
  version: '0'
155
+ prerelease:
147
156
  segments:
148
157
  - 0
149
- hash: 3761451823671182045
158
+ hash: -3209420716314174423
150
159
  type: :runtime
151
160
  prerelease: false
152
161
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
162
+ none: true
154
163
  requirements:
155
164
  - - ! '>='
156
165
  - !ruby/object:Gem::Version
157
166
  version: '0'
167
+ prerelease:
158
168
  segments:
159
169
  - 0
160
- hash: 3761451823671182045
170
+ hash: -3209420716314174423
161
171
  - !ruby/object:Gem::Dependency
162
172
  name: trollop
163
173
  requirement: !ruby/object:Gem::Requirement
@@ -166,10 +176,11 @@ dependencies:
166
176
  - - ! '>='
167
177
  - !ruby/object:Gem::Version
168
178
  version: '1.12'
179
+ prerelease:
169
180
  segments:
170
181
  - 1
171
182
  - 12
172
- hash: -4287820016106514407
183
+ hash: -78987819028068823
173
184
  type: :runtime
174
185
  prerelease: false
175
186
  version_requirements: !ruby/object:Gem::Requirement
@@ -178,32 +189,35 @@ dependencies:
178
189
  - - ! '>='
179
190
  - !ruby/object:Gem::Version
180
191
  version: '1.12'
192
+ prerelease:
181
193
  segments:
182
194
  - 1
183
195
  - 12
184
- hash: -4287820016106514407
196
+ hash: -78987819028068823
185
197
  - !ruby/object:Gem::Dependency
186
198
  name: lockfile
187
199
  requirement: !ruby/object:Gem::Requirement
188
- none: false
200
+ none: true
189
201
  requirements:
190
202
  - - ! '>='
191
203
  - !ruby/object:Gem::Version
192
204
  version: '0'
205
+ prerelease:
193
206
  segments:
194
207
  - 0
195
- hash: 3761451823671182045
208
+ hash: -3209420716314174423
196
209
  type: :runtime
197
210
  prerelease: false
198
211
  version_requirements: !ruby/object:Gem::Requirement
199
- none: false
212
+ none: true
200
213
  requirements:
201
214
  - - ! '>='
202
215
  - !ruby/object:Gem::Version
203
216
  version: '0'
217
+ prerelease:
204
218
  segments:
205
219
  - 0
206
- hash: 3761451823671182045
220
+ hash: -3209420716314174423
207
221
  - !ruby/object:Gem::Dependency
208
222
  name: mime-types
209
223
  requirement: !ruby/object:Gem::Requirement
@@ -212,9 +226,10 @@ dependencies:
212
226
  - - ~>
213
227
  - !ruby/object:Gem::Version
214
228
  version: '1'
229
+ prerelease:
215
230
  segments:
216
231
  - 1
217
- hash: -1625349299735885178
232
+ hash: 250434563374147666
218
233
  type: :runtime
219
234
  prerelease: false
220
235
  version_requirements: !ruby/object:Gem::Requirement
@@ -223,31 +238,80 @@ dependencies:
223
238
  - - ~>
224
239
  - !ruby/object:Gem::Version
225
240
  version: '1'
241
+ prerelease:
226
242
  segments:
227
243
  - 1
228
- hash: -1625349299735885178
244
+ hash: 250434563374147666
245
+ - !ruby/object:Gem::Dependency
246
+ name: locale
247
+ requirement: !ruby/object:Gem::Requirement
248
+ none: false
249
+ requirements:
250
+ - - ~>
251
+ - !ruby/object:Gem::Version
252
+ version: '2.0'
253
+ prerelease:
254
+ segments:
255
+ - 2
256
+ - 0
257
+ hash: 2973526120172593465
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ none: false
262
+ requirements:
263
+ - - ~>
264
+ - !ruby/object:Gem::Version
265
+ version: '2.0'
266
+ prerelease:
267
+ segments:
268
+ - 2
269
+ - 0
270
+ hash: 2973526120172593465
229
271
  - !ruby/object:Gem::Dependency
230
- name: gettext
272
+ name: chronic
231
273
  requirement: !ruby/object:Gem::Requirement
232
274
  none: false
233
275
  requirements:
276
+ - - ~>
277
+ - !ruby/object:Gem::Version
278
+ version: '0.9'
279
+ prerelease:
280
+ segments:
281
+ - 0
282
+ - 9
283
+ hash: 825354025702290061
234
284
  - - ! '>='
235
285
  - !ruby/object:Gem::Version
236
- version: '0'
286
+ version: 0.9.1
287
+ prerelease:
237
288
  segments:
238
289
  - 0
239
- hash: 3761451823671182045
290
+ - 9
291
+ - 1
292
+ hash: -4434314476942640720
240
293
  type: :runtime
241
294
  prerelease: false
242
295
  version_requirements: !ruby/object:Gem::Requirement
243
296
  none: false
244
297
  requirements:
298
+ - - ~>
299
+ - !ruby/object:Gem::Version
300
+ version: '0.9'
301
+ prerelease:
302
+ segments:
303
+ - 0
304
+ - 9
305
+ hash: 825354025702290061
245
306
  - - ! '>='
246
307
  - !ruby/object:Gem::Version
247
- version: '0'
308
+ version: 0.9.1
309
+ prerelease:
248
310
  segments:
249
311
  - 0
250
- hash: 3761451823671182045
312
+ - 9
313
+ - 1
314
+ hash: -4434314476942640720
251
315
  - !ruby/object:Gem::Dependency
252
316
  name: bundler
253
317
  requirement: !ruby/object:Gem::Requirement
@@ -256,10 +320,6 @@ dependencies:
256
320
  - - ~>
257
321
  - !ruby/object:Gem::Version
258
322
  version: '1.3'
259
- segments:
260
- - 1
261
- - 3
262
- hash: -3847811635784656183
263
323
  type: :development
264
324
  prerelease: false
265
325
  version_requirements: !ruby/object:Gem::Requirement
@@ -268,10 +328,6 @@ dependencies:
268
328
  - - ~>
269
329
  - !ruby/object:Gem::Version
270
330
  version: '1.3'
271
- segments:
272
- - 1
273
- - 3
274
- hash: -3847811635784656183
275
331
  - !ruby/object:Gem::Dependency
276
332
  name: rake
277
333
  requirement: !ruby/object:Gem::Requirement
@@ -280,9 +336,6 @@ dependencies:
280
336
  - - ! '>='
281
337
  - !ruby/object:Gem::Version
282
338
  version: '0'
283
- segments:
284
- - 0
285
- hash: 3761451823671182045
286
339
  type: :development
287
340
  prerelease: false
288
341
  version_requirements: !ruby/object:Gem::Requirement
@@ -291,9 +344,38 @@ dependencies:
291
344
  - - ! '>='
292
345
  - !ruby/object:Gem::Version
293
346
  version: '0'
294
- segments:
295
- - 0
296
- hash: 3761451823671182045
347
+ - !ruby/object:Gem::Dependency
348
+ name: minitest
349
+ requirement: !ruby/object:Gem::Requirement
350
+ none: false
351
+ requirements:
352
+ - - ~>
353
+ - !ruby/object:Gem::Version
354
+ version: '4'
355
+ type: :development
356
+ prerelease: false
357
+ version_requirements: !ruby/object:Gem::Requirement
358
+ none: false
359
+ requirements:
360
+ - - ~>
361
+ - !ruby/object:Gem::Version
362
+ version: '4'
363
+ - !ruby/object:Gem::Dependency
364
+ name: rr
365
+ requirement: !ruby/object:Gem::Requirement
366
+ none: false
367
+ requirements:
368
+ - - ~>
369
+ - !ruby/object:Gem::Version
370
+ version: '1.0'
371
+ type: :development
372
+ prerelease: false
373
+ version_requirements: !ruby/object:Gem::Requirement
374
+ none: false
375
+ requirements:
376
+ - - ~>
377
+ - !ruby/object:Gem::Version
378
+ version: '1.0'
297
379
  description: ! " Sup is a console-based email client for people with a lot of
298
380
  email.\n\n * GMail-like thread-centered archiving, tagging and muting\n *
299
381
  Handling mail from multiple mbox and Maildir sources\n * Blazing fast full-text
@@ -329,34 +411,37 @@ files:
329
411
  - bin/sup-sync-back
330
412
  - bin/sup-tweak-labels
331
413
  - lib/sup/hook.rb
332
- - lib/sup/modes/forward-mode.rb
333
- - lib/sup/modes/person-search-results-mode.rb
334
- - lib/sup/modes/edit-message-mode.rb
335
- - lib/sup/modes/line-cursor-mode.rb
336
- - lib/sup/modes/log-mode.rb
337
- - lib/sup/modes/contact-list-mode.rb
338
- - lib/sup/modes/search-list-mode.rb
339
- - lib/sup/modes/reply-mode.rb
340
- - lib/sup/modes/label-list-mode.rb
341
- - lib/sup/modes/label-search-results-mode.rb
342
- - lib/sup/modes/file-browser-mode.rb
343
- - lib/sup/modes/help-mode.rb
344
- - lib/sup/modes/resume-mode.rb
345
- - lib/sup/modes/thread-view-mode.rb
346
- - lib/sup/modes/compose-mode.rb
347
- - lib/sup/modes/text-mode.rb
348
- - lib/sup/modes/thread-index-mode.rb
349
- - lib/sup/modes/console-mode.rb
350
- - lib/sup/modes/search-results-mode.rb
351
- - lib/sup/modes/inbox-mode.rb
352
- - lib/sup/modes/edit-message-async-mode.rb
353
- - lib/sup/modes/completion-mode.rb
354
- - lib/sup/modes/scroll-mode.rb
355
- - lib/sup/modes/poll-mode.rb
356
- - lib/sup/modes/buffer-list-mode.rb
414
+ - lib/sup/util/uri.rb
415
+ - lib/sup/util/path.rb
416
+ - lib/sup/horizontal_selector.rb
417
+ - lib/sup/modes/line_cursor_mode.rb
418
+ - lib/sup/modes/label_list_mode.rb
419
+ - lib/sup/modes/completion_mode.rb
420
+ - lib/sup/modes/compose_mode.rb
421
+ - lib/sup/modes/search_results_mode.rb
422
+ - lib/sup/modes/thread_view_mode.rb
423
+ - lib/sup/modes/thread_index_mode.rb
424
+ - lib/sup/modes/console_mode.rb
425
+ - lib/sup/modes/resume_mode.rb
426
+ - lib/sup/modes/person_search_results_mode.rb
427
+ - lib/sup/modes/buffer_list_mode.rb
428
+ - lib/sup/modes/edit_message_mode.rb
429
+ - lib/sup/modes/log_mode.rb
430
+ - lib/sup/modes/poll_mode.rb
431
+ - lib/sup/modes/help_mode.rb
432
+ - lib/sup/modes/label_search_results_mode.rb
433
+ - lib/sup/modes/search_list_mode.rb
434
+ - lib/sup/modes/scroll_mode.rb
435
+ - lib/sup/modes/reply_mode.rb
436
+ - lib/sup/modes/text_mode.rb
437
+ - lib/sup/modes/forward_mode.rb
438
+ - lib/sup/modes/inbox_mode.rb
439
+ - lib/sup/modes/file_browser_mode.rb
440
+ - lib/sup/modes/contact_list_mode.rb
441
+ - lib/sup/modes/edit_message_async_mode.rb
442
+ - lib/sup/logger/singleton.rb
357
443
  - lib/sup/mbox.rb
358
444
  - lib/sup/undo.rb
359
- - lib/sup/message-chunks.rb
360
445
  - lib/sup/tagger.rb
361
446
  - lib/sup/message.rb
362
447
  - lib/sup/account.rb
@@ -368,6 +453,8 @@ files:
368
453
  - lib/sup/person.rb
369
454
  - lib/sup/colormap.rb
370
455
  - lib/sup/maildir.rb
456
+ - lib/sup/interactive_lock.rb
457
+ - lib/sup/service/label_service.rb
371
458
  - lib/sup/crypto.rb
372
459
  - lib/sup/search.rb
373
460
  - lib/sup/idle.rb
@@ -375,8 +462,6 @@ files:
375
462
  - lib/sup/buffer.rb
376
463
  - lib/sup/sent.rb
377
464
  - lib/sup/logger.rb
378
- - lib/sup/interactive-lock.rb
379
- - lib/sup/horizontal-selector.rb
380
465
  - lib/sup/draft.rb
381
466
  - lib/sup/contact.rb
382
467
  - lib/sup/update.rb
@@ -384,10 +469,11 @@ files:
384
469
  - lib/sup/label.rb
385
470
  - lib/sup/index.rb
386
471
  - lib/sup/poll.rb
472
+ - lib/sup/message_chunks.rb
387
473
  - lib/sup/rfc2047.rb
388
474
  - lib/sup/textfield.rb
389
475
  - lib/sup.rb
390
- homepage: https://github.com/sup-heliotrope/sup/wiki
476
+ homepage: http://supmua.org
391
477
  licenses:
392
478
  - GPL-2
393
479
  post_install_message:
@@ -400,18 +486,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
400
486
  - - ! '>='
401
487
  - !ruby/object:Gem::Version
402
488
  version: '0'
403
- segments:
404
- - 0
405
- hash: 3761451823671182045
406
489
  required_rubygems_version: !ruby/object:Gem::Requirement
407
490
  none: false
408
491
  requirements:
409
492
  - - ! '>='
410
493
  - !ruby/object:Gem::Version
411
494
  version: '0'
412
- segments:
413
- - 0
414
- hash: 3761451823671182045
415
495
  requirements: []
416
496
  rubyforge_project:
417
497
  rubygems_version: 1.8.25