sup 0.12.1 → 0.13.0

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 (56) hide show
  1. data.tar.gz.sig +1 -0
  2. data/CONTRIBUTORS +25 -12
  3. data/History.txt +6 -1
  4. data/README.md +70 -0
  5. data/ReleaseNotes +5 -0
  6. data/bin/sup +22 -15
  7. data/bin/sup-add +3 -3
  8. data/bin/sup-config +3 -4
  9. data/bin/sup-import-dump +1 -1
  10. data/bin/sup-sync +1 -1
  11. data/bin/sup-sync-back +2 -2
  12. data/bin/sup-tweak-labels +1 -1
  13. data/lib/sup.rb +39 -23
  14. data/lib/sup/account.rb +4 -0
  15. data/lib/sup/buffer.rb +4 -7
  16. data/lib/sup/colormap.rb +10 -2
  17. data/lib/sup/contact.rb +11 -5
  18. data/lib/sup/crypto.rb +278 -101
  19. data/lib/sup/draft.rb +3 -2
  20. data/lib/sup/horizontal-selector.rb +5 -2
  21. data/lib/sup/index.rb +47 -42
  22. data/lib/sup/label.rb +1 -1
  23. data/lib/sup/message-chunks.rb +4 -2
  24. data/lib/sup/message.rb +14 -3
  25. data/lib/sup/modes/buffer-list-mode.rb +1 -1
  26. data/lib/sup/modes/compose-mode.rb +1 -1
  27. data/lib/sup/modes/contact-list-mode.rb +2 -2
  28. data/lib/sup/modes/edit-message-async-mode.rb +109 -0
  29. data/lib/sup/modes/edit-message-mode.rb +148 -16
  30. data/lib/sup/modes/file-browser-mode.rb +2 -2
  31. data/lib/sup/modes/forward-mode.rb +4 -4
  32. data/lib/sup/modes/line-cursor-mode.rb +2 -2
  33. data/lib/sup/modes/reply-mode.rb +34 -30
  34. data/lib/sup/modes/resume-mode.rb +4 -1
  35. data/lib/sup/modes/scroll-mode.rb +8 -6
  36. data/lib/sup/modes/text-mode.rb +1 -1
  37. data/lib/sup/modes/thread-index-mode.rb +44 -25
  38. data/lib/sup/modes/thread-view-mode.rb +26 -24
  39. data/lib/sup/person.rb +18 -7
  40. data/lib/sup/poll.rb +1 -1
  41. data/lib/sup/rfc2047.rb +1 -1
  42. data/lib/sup/sent.rb +2 -2
  43. data/lib/sup/source.rb +1 -1
  44. data/lib/sup/textfield.rb +38 -1
  45. data/lib/sup/thread.rb +1 -1
  46. data/lib/sup/time.rb +83 -0
  47. data/lib/sup/util.rb +38 -74
  48. data/lib/sup/version.rb +3 -0
  49. metadata +333 -168
  50. metadata.gz.sig +0 -0
  51. data/README.txt +0 -128
  52. data/bin/sup-cmd +0 -138
  53. data/bin/sup-server +0 -44
  54. data/lib/sup/client.rb +0 -92
  55. data/lib/sup/protocol.rb +0 -161
  56. data/lib/sup/server.rb +0 -116
data/lib/sup/poll.rb CHANGED
@@ -54,7 +54,7 @@ EOS
54
54
  if @running_totals[:num] > 0
55
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(', ')}"
56
56
  else
57
- BufferManager.flash "No new messages."
57
+ BufferManager.flash "No new messages."
58
58
  end
59
59
 
60
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] }
data/lib/sup/rfc2047.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # An implementation of RFC 2047 decoding.
7
7
  #
8
- # This module depends on the iconv library by Nobuyoshi Nakada, which I've
8
+ # This module depends on the iconv library by Nobuyoshi Nakada, which I've
9
9
  # heard may be distributed as a standard part of Ruby 1.8. Many thanks to him
10
10
  # for helping with building and using iconv.
11
11
  #
data/lib/sup/sent.rb CHANGED
@@ -14,7 +14,7 @@ class SentManager
14
14
 
15
15
  def source= s
16
16
  raise FatalSourceError.new("Configured sent_source [#{s.uri}] can't store mail. Correct your configuration.") unless s.respond_to? :store_message
17
- @souce_uri = s.uri
17
+ @source_uri = s.uri
18
18
  @source = s
19
19
  end
20
20
 
@@ -36,7 +36,7 @@ class SentLoader < MBox
36
36
  def initialize
37
37
  @filename = Redwood::SENT_FN
38
38
  File.open(@filename, "w") { } unless File.exists? @filename
39
- super "mbox://" + @filename, true, true
39
+ super "mbox://" + @filename, true, $config[:archive_sent]
40
40
  end
41
41
 
42
42
  def file_path; @filename end
data/lib/sup/source.rb CHANGED
@@ -160,7 +160,7 @@ module SerializeLabelsNicely
160
160
  end
161
161
 
162
162
  def after_unmarshal!
163
- @labels = Set.new(@labels.map { |s| s.to_sym })
163
+ @labels = Set.new(@labels.to_a.map { |s| s.to_sym })
164
164
  end
165
165
  end
166
166
 
data/lib/sup/textfield.rb CHANGED
@@ -2,7 +2,7 @@ module Redwood
2
2
 
3
3
  ## a fully-functional text field supporting completions, expansions,
4
4
  ## history--everything!
5
- ##
5
+ ##
6
6
  ## writing this fucking sucked. if you thought ncurses was some 1970s
7
7
  ## before-people-knew-how-to-program bullshit, wait till you see
8
8
  ## ncurses forms.
@@ -120,6 +120,9 @@ class TextField
120
120
  nop
121
121
  Ncurses::Form::REQ_BEG_FIELD
122
122
  when ?\C-w.ord
123
+ while action = remove_extra_space
124
+ Ncurses::Form.form_driver @form, action
125
+ end
123
126
  Ncurses::Form.form_driver @form, Ncurses::Form::REQ_PREV_CHAR
124
127
  Ncurses::Form.form_driver @form, Ncurses::Form::REQ_DEL_WORD
125
128
  when Ncurses::KEY_UP, Ncurses::KEY_DOWN
@@ -167,6 +170,40 @@ private
167
170
  end
168
171
  end
169
172
 
173
+ def remove_extra_space
174
+ return nil unless @field
175
+
176
+ Ncurses::Form.form_driver @form, Ncurses::Form::REQ_VALIDATION
177
+ x = Ncurses.curx
178
+ v = @field.field_buffer(0).gsub(/^\s+|\s+$/, "")
179
+ v_index = x - @question.length
180
+
181
+ # at start of line
182
+ if v_index < 1
183
+ nil
184
+ ## cursor <= end of text
185
+ elsif v_index < v.length
186
+ # is the character before the cursor a space?
187
+ if v[v_index-1] == ?\s
188
+ # if there is a non-space char under cursor then go back
189
+ if v[v_index] != ?\s
190
+ Ncurses::Form::REQ_PREV_CHAR
191
+ # otherwise delete the space
192
+ else
193
+ Ncurses::Form::REQ_DEL_PREV
194
+ end
195
+ else
196
+ nil
197
+ end
198
+ elsif v_index == v.length
199
+ # at end of string, with non-space before us
200
+ nil
201
+ else
202
+ # trailing spaces
203
+ Ncurses::Form::REQ_PREV_CHAR
204
+ end
205
+ end
206
+
170
207
  def set_cursed_value v
171
208
  @field.set_field_buffer 0, v
172
209
  end
data/lib/sup/thread.rb CHANGED
@@ -79,7 +79,7 @@ class Thread
79
79
  ## special case here: if we're an empty root that's already
80
80
  ## been joined by a fake root, don't emit
81
81
  yield c.message, d + adj, (par ? par.message : nil) unless
82
- fake_root && c.message.nil? && root.nil? && c == fud
82
+ fake_root && c.message.nil? && root.nil? && c == fud
83
83
  end
84
84
  end
85
85
  end
data/lib/sup/time.rb ADDED
@@ -0,0 +1,83 @@
1
+ class Time
2
+
3
+ Redwood::HookManager.register "time-to-nice-string", <<EOS
4
+ Formats time nicely as string.
5
+ Variables:
6
+ time: The Time instance to be formatted.
7
+ from: The Time instance providing the reference point (considered "now").
8
+ EOS
9
+
10
+ def to_indexable_s
11
+ sprintf "%012d", self
12
+ end
13
+
14
+ def nearest_hour
15
+ if min < 30
16
+ self
17
+ else
18
+ self + (60 - min) * 60
19
+ end
20
+ end
21
+
22
+ def midnight # within a second
23
+ self - (hour * 60 * 60) - (min * 60) - sec
24
+ end
25
+
26
+ def is_the_same_day? other
27
+ (midnight - other.midnight).abs < 1
28
+ end
29
+
30
+ def is_the_day_before? other
31
+ other.midnight - midnight <= 24 * 60 * 60 + 1
32
+ end
33
+
34
+ def to_nice_distance_s from=Time.now
35
+ later_than = (self < from)
36
+ diff = (self.to_i - from.to_i).abs.to_f
37
+ text =
38
+ [ ["second", 60],
39
+ ["minute", 60],
40
+ ["hour", 24],
41
+ ["day", 7],
42
+ ["week", 4.345], # heh heh
43
+ ["month", 12],
44
+ ["year", nil],
45
+ ].argfind do |unit, size|
46
+ if diff.round <= 1
47
+ "one #{unit}"
48
+ elsif size.nil? || diff.round < size
49
+ "#{diff.round} #{unit}s"
50
+ else
51
+ diff /= size.to_f
52
+ false
53
+ end
54
+ end
55
+ if later_than
56
+ text + " ago"
57
+ else
58
+ "in " + text
59
+ end
60
+ end
61
+
62
+ TO_NICE_S_MAX_LEN = 9 # e.g. "Yest.10am"
63
+ def to_nice_s from=Time.now
64
+ Redwood::HookManager.run("time-to-nice-string", :time => self, :from => from) || default_to_nice_s(from)
65
+ end
66
+
67
+ def default_to_nice_s from=Time.now
68
+ if year != from.year
69
+ strftime "%b %Y"
70
+ elsif month != from.month
71
+ strftime "%b %e"
72
+ else
73
+ if is_the_same_day? from
74
+ strftime("%l:%M%p").downcase # emulate %P (missing on ruby 1.8 darwin)
75
+ elsif is_the_day_before? from
76
+ "Yest." + nearest_hour.strftime("%l%p").downcase # emulate %P
77
+ else
78
+ strftime "%b %e"
79
+ end
80
+ end
81
+ end
82
+ end
83
+
data/lib/sup/util.rb CHANGED
@@ -5,6 +5,7 @@ require 'pathname'
5
5
  require 'set'
6
6
  require 'enumerator'
7
7
  require 'benchmark'
8
+ require 'iconv'
8
9
 
9
10
  ## time for some monkeypatching!
10
11
  class Symbol
@@ -111,6 +112,31 @@ module RMail
111
112
  # end
112
113
  end
113
114
  end
115
+
116
+ class Header
117
+ ## Be more cautious about invalid content-type headers
118
+ ## the original RMail code calls
119
+ ## value.strip.split(/\s*;\s*/)[0].downcase
120
+ ## without checking if split returned an element
121
+
122
+ # This returns the full content type of this message converted to
123
+ # lower case.
124
+ #
125
+ # If there is no content type header, returns the passed block is
126
+ # executed and its return value is returned. If no block is passed,
127
+ # the value of the +default+ argument is returned.
128
+ def content_type(default = nil)
129
+ if value = self['content-type'] and ct = value.strip.split(/\s*;\s*/)[0]
130
+ return ct.downcase
131
+ else
132
+ if block_given?
133
+ yield
134
+ else
135
+ default
136
+ end
137
+ end
138
+ end
139
+ end
114
140
  end
115
141
 
116
142
  class Range
@@ -212,7 +238,8 @@ class String
212
238
  ## the utf8 regex and count those. otherwise, use the byte length.
213
239
  def display_length
214
240
  if RUBY_VERSION < '1.9.1' && ($encoding == "UTF-8" || $encoding == "utf8")
215
- scan(/./u).size
241
+ # scan hack is somewhat slow, worth trying to cache
242
+ @display_length ||= scan(/./u).size
216
243
  else
217
244
  size
218
245
  end
@@ -446,7 +473,7 @@ module Enumerable
446
473
  end
447
474
 
448
475
  def sum; inject(0) { |x, y| x + y }; end
449
-
476
+
450
477
  def map_to_hash
451
478
  ret = {}
452
479
  each { |x| ret[x] = yield(x) }
@@ -514,77 +541,6 @@ class Array
514
541
  def nonempty?; !empty? end
515
542
  end
516
543
 
517
- class Time
518
- def to_indexable_s
519
- sprintf "%012d", self
520
- end
521
-
522
- def nearest_hour
523
- if min < 30
524
- self
525
- else
526
- self + (60 - min) * 60
527
- end
528
- end
529
-
530
- def midnight # within a second
531
- self - (hour * 60 * 60) - (min * 60) - sec
532
- end
533
-
534
- def is_the_same_day? other
535
- (midnight - other.midnight).abs < 1
536
- end
537
-
538
- def is_the_day_before? other
539
- other.midnight - midnight <= 24 * 60 * 60 + 1
540
- end
541
-
542
- def to_nice_distance_s from=Time.now
543
- later_than = (self < from)
544
- diff = (self.to_i - from.to_i).abs.to_f
545
- text =
546
- [ ["second", 60],
547
- ["minute", 60],
548
- ["hour", 24],
549
- ["day", 7],
550
- ["week", 4.345], # heh heh
551
- ["month", 12],
552
- ["year", nil],
553
- ].argfind do |unit, size|
554
- if diff.round <= 1
555
- "one #{unit}"
556
- elsif size.nil? || diff.round < size
557
- "#{diff.round} #{unit}s"
558
- else
559
- diff /= size.to_f
560
- false
561
- end
562
- end
563
- if later_than
564
- text + " ago"
565
- else
566
- "in " + text
567
- end
568
- end
569
-
570
- TO_NICE_S_MAX_LEN = 9 # e.g. "Yest.10am"
571
- def to_nice_s from=Time.now
572
- if year != from.year
573
- strftime "%b %Y"
574
- elsif month != from.month
575
- strftime "%b %e"
576
- else
577
- if is_the_same_day? from
578
- strftime("%l:%M%p").downcase # emulate %P (missing on ruby 1.8 darwin)
579
- elsif is_the_day_before? from
580
- "Yest." + nearest_hour.strftime("%l%p").downcase # emulate %P
581
- else
582
- strftime "%b %e"
583
- end
584
- end
585
- end
586
- end
587
-
588
544
  ## simple singleton module. far less complete and insane than the ruby standard
589
545
  ## library one, but it automatically forwards methods calls and allows for
590
546
  ## constructors that take arguments.
@@ -606,6 +562,14 @@ module Singleton
606
562
  ## special-case every call to a Singleton object
607
563
  return nil if @instance.nil?
608
564
 
565
+ # Speed up further calls by defining a shortcut around method_missing
566
+ if meth.to_s[-1,1] == '='
567
+ # Argh! Inconsistency! Setters do not work like all the other methods.
568
+ class_eval "def self.#{meth}(a); @instance.send :#{meth}, a; end"
569
+ else
570
+ class_eval "def self.#{meth}(*a, &b); @instance.send :#{meth}, *a, &b; end"
571
+ end
572
+
609
573
  @instance.send meth, *a, &b
610
574
  end
611
575
  def init *args
@@ -629,7 +593,7 @@ end
629
593
  ## attr_accessor :val
630
594
  ## def initialize; @val = 0 end
631
595
  ## end
632
- ##
596
+ ##
633
597
  ## h = Hash.new { C.new }
634
598
  ## h[:a].val # => 0
635
599
  ## h[:a].val = 1
@@ -0,0 +1,3 @@
1
+ module Redwood
2
+ VERSION = "0.13.0"
3
+ end
metadata CHANGED
@@ -1,256 +1,421 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sup
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.13.0
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 13
6
9
  - 0
7
- - 12
8
- - 1
9
- version: 0.12.1
10
+ hash: -4492560732051236832
10
11
  platform: ruby
11
- authors:
12
+ authors:
12
13
  - William Morgan
14
+ - Gaute Hope
15
+ - Hamish Downer
16
+ - Matthieu Rakotojaona
13
17
  autorequire:
14
18
  bindir: bin
15
- cert_chain: []
16
-
17
- date: 2011-01-23 21:12:40 -08:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: xapian-full
19
+ cert_chain:
20
+ - !binary |-
21
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWRENDQWp5Z0F3SUJB
22
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJRTVFzd0NRWURWUVFEREFKbFp6
23
+ RVYKTUJNR0NnbVNKb21UOGl4a0FSa1dCV2RoZFhSbE1SVXdFd1lLQ1pJbWla
24
+ UHlMR1FCR1JZRmRtVjBjMm94RXpBUgpCZ29Ka2lhSmsvSXNaQUVaRmdOamIy
25
+ MHdIaGNOTVRNd05UQTRNVEF6T0RRM1doY05NVFF3TlRBNE1UQXpPRFEzCldq
26
+ QlFNUXN3Q1FZRFZRUUREQUpsWnpFVk1CTUdDZ21TSm9tVDhpeGtBUmtXQldk
27
+ aGRYUmxNUlV3RXdZS0NaSW0KaVpQeUxHUUJHUllGZG1WMGMyb3hFekFSQmdv
28
+ SmtpYUprL0lzWkFFWkZnTmpiMjB3Z2dFaU1BMEdDU3FHU0liMwpEUUVCQVFV
29
+ QUE0SUJEd0F3Z2dFS0FvSUJBUUM3c05jNXpZNE1yWUI3ZXl3RS9hSzJJb0Rx
30
+ cE05bHE0WkZsSHp0ClBtcTFMRzZhaDJsdS9IZmpxeGlQb3F3WTdRa2RTT0dE
31
+ TFNrN0c4WUJxREEvdE9EaGtQUFNUcXhCRHpZeUNPNDYKaGFXVHRvTjV0Smt4
32
+ SURKS3AxblZYSGkwTWxiNEdKVktkOVAwcTk1QmVCWUJmczh2eVBOK3k0YjRH
33
+ ZWJneDlVMwpLcU1EYmU1aDlNQVBaR210aVJGTWIzdWdtaXVqRG03djhmQUNh
34
+ NUV0U3ZLL2x4TWtSRGdsZWNUL2tuRTk5TllJCmwzNVNPL0J1bmUxYnhZbWt3
35
+ VzY0bVE0d1JsR1ZlQW5YKzE5bXNBTGZTOXJkSkwyNmRmVzJMZ3FXaTVRb1ZU
36
+ QkgKS05LVGwvaTNmeEswbXpndG5vUkNXZE1KUUZOTm9uRlRuUFVVYXdpMWM5
37
+ S2g0QWRQQWdNQkFBR2pPVEEzTUFrRwpBMVVkRXdRQ01BQXdIUVlEVlIwT0JC
38
+ WUVGSk5DT3hMMFNXY2JXMk0rRElFVXpBTXoxYlpzTUFzR0ExVWREd1FFCkF3
39
+ SUVzREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBcjNRVWF5ZDBnZUJERXhP
40
+ K1d3emFFUEF1VVozeldRWUcKRzl2cnBsQ2ttSnRqUy9YL3dWQWVmN0puL1Y1
41
+ TU5rWEtYc2lPZ1hKWGtpK243SHVsTlpVZjFyenI3VW45NmdWSgoxaHEvWlR1
42
+ YXBuUHBzdEJxcWR2NjBSQjhITkd5ZEhRZUV6NnVzNXozbmorS2NoUHFKNjU3
43
+ RHo4b1gvTm02LzI0CjdRU1FwQ2g4eEJZZFNXRXBvSUUwelVTWTc3THRWVFJW
44
+ d0lyOXVEcFdUVHI5a0NWQklOQnNPUU5qV0tydUVXalYKK0pNdURzK2lXZWZw
45
+ RjRSM0J5U29PYzFRNFdvRVMzK29jMHFvMzdNc0FaeWZuUUlQVFpreUxaQ014
46
+ ZUw2TWhhNApoRmMyeUFOQmo4dm9hWTVDNzRDZzJWcUV4dGNuU2F4VXRXOXdD
47
+ NHc1aE9sZzBBVmZiMUpXemc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
48
+ Cg==
49
+ date: 2013-05-15 00:00:00.000000000 Z
50
+ dependencies:
51
+ - !ruby/object:Gem::Dependency
52
+ name: xapian-full-alaveteli
53
+ requirement: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ version: '1.2'
59
+ segments:
60
+ - 1
61
+ - 2
62
+ hash: -3470814721440028832
63
+ type: :runtime
22
64
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
65
+ version_requirements: !ruby/object:Gem::Requirement
24
66
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: '1.2'
71
+ segments:
29
72
  - 1
73
+ - 2
74
+ hash: -3470814721440028832
75
+ - !ruby/object:Gem::Dependency
76
+ name: ncursesw-sup
77
+ requirement: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
83
+ segments:
30
84
  - 1
31
85
  - 3
86
+ hash: -3847811635784656183
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.3.1
90
+ segments:
32
91
  - 1
33
- version: 1.1.3.1
92
+ - 3
93
+ - 1
94
+ hash: -3904231600277470242
34
95
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: ncursesw
38
96
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: '1.3'
103
+ segments:
104
+ - 1
105
+ - 3
106
+ hash: -3847811635784656183
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.1
110
+ segments:
111
+ - 1
112
+ - 3
113
+ - 1
114
+ hash: -3904231600277470242
115
+ - !ruby/object:Gem::Dependency
116
+ name: rmail
117
+ requirement: !ruby/object:Gem::Requirement
40
118
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- segments:
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0.17'
123
+ segments:
45
124
  - 0
46
- version: "0"
125
+ - 17
126
+ hash: -718457563752098801
47
127
  type: :runtime
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: rmail
51
128
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
129
+ version_requirements: !ruby/object:Gem::Requirement
53
130
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- segments:
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0.17'
135
+ segments:
58
136
  - 0
59
137
  - 17
60
- version: "0.17"
61
- type: :runtime
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
138
+ hash: -718457563752098801
139
+ - !ruby/object:Gem::Dependency
64
140
  name: highline
65
- prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
141
+ requirement: !ruby/object:Gem::Requirement
67
142
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- segments:
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ segments:
72
148
  - 0
73
- version: "0"
149
+ hash: 3761451823671182045
74
150
  type: :runtime
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: trollop
78
151
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
152
+ version_requirements: !ruby/object:Gem::Requirement
80
153
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ segments:
159
+ - 0
160
+ hash: 3761451823671182045
161
+ - !ruby/object:Gem::Dependency
162
+ name: trollop
163
+ requirement: !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '1.12'
169
+ segments:
85
170
  - 1
86
171
  - 12
87
- version: "1.12"
172
+ hash: -4287820016106514407
88
173
  type: :runtime
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: lockfile
92
174
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
175
+ version_requirements: !ruby/object:Gem::Requirement
94
176
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- segments:
177
+ requirements:
178
+ - - ! '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '1.12'
181
+ segments:
182
+ - 1
183
+ - 12
184
+ hash: -4287820016106514407
185
+ - !ruby/object:Gem::Dependency
186
+ name: lockfile
187
+ requirement: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ! '>='
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ segments:
99
194
  - 0
100
- version: "0"
195
+ hash: 3761451823671182045
101
196
  type: :runtime
102
- version_requirements: *id006
103
- - !ruby/object:Gem::Dependency
104
- name: mime-types
105
197
  prerelease: false
106
- requirement: &id007 !ruby/object:Gem::Requirement
198
+ version_requirements: !ruby/object:Gem::Requirement
107
199
  none: false
108
- requirements:
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ segments:
205
+ - 0
206
+ hash: 3761451823671182045
207
+ - !ruby/object:Gem::Dependency
208
+ name: mime-types
209
+ requirement: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
109
212
  - - ~>
110
- - !ruby/object:Gem::Version
111
- segments:
213
+ - !ruby/object:Gem::Version
214
+ version: '1'
215
+ segments:
112
216
  - 1
113
- version: "1"
217
+ hash: -1625349299735885178
114
218
  type: :runtime
115
- version_requirements: *id007
116
- - !ruby/object:Gem::Dependency
117
- name: gettext
118
219
  prerelease: false
119
- requirement: &id008 !ruby/object:Gem::Requirement
220
+ version_requirements: !ruby/object:Gem::Requirement
221
+ none: false
222
+ requirements:
223
+ - - ~>
224
+ - !ruby/object:Gem::Version
225
+ version: '1'
226
+ segments:
227
+ - 1
228
+ hash: -1625349299735885178
229
+ - !ruby/object:Gem::Dependency
230
+ name: gettext
231
+ requirement: !ruby/object:Gem::Requirement
120
232
  none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- segments:
233
+ requirements:
234
+ - - ! '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ segments:
125
238
  - 0
126
- version: "0"
239
+ hash: 3761451823671182045
127
240
  type: :runtime
128
- version_requirements: *id008
129
- description: "Sup is a console-based email client for people with a lot of email. It supports tagging, very fast full-text search, automatic contact-list management, and more. If you're the type of person who treats email as an extension of your long-term memory, Sup is for you. Sup makes it easy to: - Handle massive amounts of email. - Mix email from different sources: mbox files (even across different machines), Maildir directories, POP accounts, and GMail accounts. - Instantaneously search over your entire email collection. Search over body text, or use a query language to combine search predicates in any way. - Handle multiple accounts. Replying to email sent to a particular account will use the correct SMTP server, signature, and from address. - Add custom code to handle certain types of messages or to handle certain types of text within messages. - Organize email with user-defined labels, automatically track recent contacts, and much more! The goal of Sup is to become the email client of choice for nerds everywhere."
130
- email: wmorgan-sup@masanjin.net
131
- executables:
241
+ prerelease: false
242
+ version_requirements: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ! '>='
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ segments:
249
+ - 0
250
+ hash: 3761451823671182045
251
+ - !ruby/object:Gem::Dependency
252
+ name: bundler
253
+ requirement: !ruby/object:Gem::Requirement
254
+ none: false
255
+ requirements:
256
+ - - ~>
257
+ - !ruby/object:Gem::Version
258
+ version: '1.3'
259
+ segments:
260
+ - 1
261
+ - 3
262
+ hash: -3847811635784656183
263
+ type: :development
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ none: false
267
+ requirements:
268
+ - - ~>
269
+ - !ruby/object:Gem::Version
270
+ version: '1.3'
271
+ segments:
272
+ - 1
273
+ - 3
274
+ hash: -3847811635784656183
275
+ - !ruby/object:Gem::Dependency
276
+ name: rake
277
+ requirement: !ruby/object:Gem::Requirement
278
+ none: false
279
+ requirements:
280
+ - - ! '>='
281
+ - !ruby/object:Gem::Version
282
+ version: '0'
283
+ segments:
284
+ - 0
285
+ hash: 3761451823671182045
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - ! '>='
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ segments:
295
+ - 0
296
+ hash: 3761451823671182045
297
+ description: ! " Sup is a console-based email client for people with a lot of
298
+ email.\n\n * GMail-like thread-centered archiving, tagging and muting\n *
299
+ Handling mail from multiple mbox and Maildir sources\n * Blazing fast full-text
300
+ search with a rich query language\n * Multiple accounts - pick the right one
301
+ when sending mail\n * Ruby-programmable hooks\n * Automatically tracking
302
+ recent contacts\n"
303
+ email: sup-talk@rubyforge.org
304
+ executables:
132
305
  - sup
133
306
  - sup-add
134
- - sup-cmd
135
307
  - sup-config
136
308
  - sup-dump
137
309
  - sup-import-dump
138
310
  - sup-recover-sources
139
- - sup-server
140
311
  - sup-sync
141
312
  - sup-sync-back
142
313
  - sup-tweak-labels
143
314
  extensions: []
144
-
145
315
  extra_rdoc_files: []
146
-
147
- files:
316
+ files:
148
317
  - CONTRIBUTORS
149
- - README.txt
318
+ - README.md
150
319
  - LICENSE
151
320
  - History.txt
152
321
  - ReleaseNotes
153
322
  - bin/sup
154
323
  - bin/sup-add
155
- - bin/sup-cmd
156
324
  - bin/sup-config
157
325
  - bin/sup-dump
158
326
  - bin/sup-import-dump
159
327
  - bin/sup-recover-sources
160
- - bin/sup-server
161
328
  - bin/sup-sync
162
329
  - bin/sup-sync-back
163
330
  - bin/sup-tweak-labels
164
- - lib/sup.rb
165
- - lib/sup/colormap.rb
166
- - lib/sup/draft.rb
167
- - lib/sup/source.rb
168
- - lib/sup/message-chunks.rb
169
- - lib/sup/person.rb
170
- - lib/sup/logger.rb
171
- - lib/sup/index.rb
172
- - lib/sup/message.rb
173
- - lib/sup/search.rb
174
- - lib/sup/idle.rb
175
- - lib/sup/mode.rb
176
- - lib/sup/client.rb
177
- - lib/sup/contact.rb
178
- - lib/sup/poll.rb
179
- - lib/sup/update.rb
180
- - lib/sup/keymap.rb
181
- - lib/sup/server.rb
182
- - lib/sup/undo.rb
183
- - lib/sup/protocol.rb
184
331
  - lib/sup/hook.rb
185
- - lib/sup/label.rb
186
- - lib/sup/sent.rb
187
- - lib/sup/tagger.rb
188
- - lib/sup/maildir.rb
189
- - lib/sup/horizontal-selector.rb
190
- - lib/sup/util.rb
191
- - lib/sup/crypto.rb
192
- - lib/sup/mbox.rb
193
- - lib/sup/textfield.rb
194
- - lib/sup/account.rb
195
- - lib/sup/rfc2047.rb
196
- - lib/sup/thread.rb
197
- - lib/sup/buffer.rb
198
- - lib/sup/interactive-lock.rb
199
- - lib/sup/modes/compose-mode.rb
200
- - lib/sup/modes/reply-mode.rb
201
332
  - lib/sup/modes/forward-mode.rb
333
+ - lib/sup/modes/person-search-results-mode.rb
334
+ - lib/sup/modes/edit-message-mode.rb
202
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
203
340
  - lib/sup/modes/label-list-mode.rb
341
+ - lib/sup/modes/label-search-results-mode.rb
204
342
  - lib/sup/modes/file-browser-mode.rb
205
- - lib/sup/modes/contact-list-mode.rb
343
+ - lib/sup/modes/help-mode.rb
344
+ - lib/sup/modes/resume-mode.rb
206
345
  - lib/sup/modes/thread-view-mode.rb
207
- - lib/sup/modes/person-search-results-mode.rb
208
- - lib/sup/modes/inbox-mode.rb
209
- - lib/sup/modes/search-list-mode.rb
210
- - lib/sup/modes/poll-mode.rb
346
+ - lib/sup/modes/compose-mode.rb
347
+ - lib/sup/modes/text-mode.rb
211
348
  - lib/sup/modes/thread-index-mode.rb
212
- - lib/sup/modes/scroll-mode.rb
213
- - lib/sup/modes/completion-mode.rb
349
+ - lib/sup/modes/console-mode.rb
214
350
  - lib/sup/modes/search-results-mode.rb
215
- - lib/sup/modes/help-mode.rb
216
- - lib/sup/modes/log-mode.rb
217
- - lib/sup/modes/edit-message-mode.rb
218
- - lib/sup/modes/text-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
219
356
  - lib/sup/modes/buffer-list-mode.rb
220
- - lib/sup/modes/resume-mode.rb
221
- - lib/sup/modes/label-search-results-mode.rb
222
- - lib/sup/modes/console-mode.rb
223
- has_rdoc: true
224
- homepage: http://sup.rubyforge.org/
225
- licenses: []
226
-
357
+ - lib/sup/mbox.rb
358
+ - lib/sup/undo.rb
359
+ - lib/sup/message-chunks.rb
360
+ - lib/sup/tagger.rb
361
+ - lib/sup/message.rb
362
+ - lib/sup/account.rb
363
+ - lib/sup/time.rb
364
+ - lib/sup/util.rb
365
+ - lib/sup/thread.rb
366
+ - lib/sup/source.rb
367
+ - lib/sup/keymap.rb
368
+ - lib/sup/person.rb
369
+ - lib/sup/colormap.rb
370
+ - lib/sup/maildir.rb
371
+ - lib/sup/crypto.rb
372
+ - lib/sup/search.rb
373
+ - lib/sup/idle.rb
374
+ - lib/sup/version.rb
375
+ - lib/sup/buffer.rb
376
+ - lib/sup/sent.rb
377
+ - lib/sup/logger.rb
378
+ - lib/sup/interactive-lock.rb
379
+ - lib/sup/horizontal-selector.rb
380
+ - lib/sup/draft.rb
381
+ - lib/sup/contact.rb
382
+ - lib/sup/update.rb
383
+ - lib/sup/mode.rb
384
+ - lib/sup/label.rb
385
+ - lib/sup/index.rb
386
+ - lib/sup/poll.rb
387
+ - lib/sup/rfc2047.rb
388
+ - lib/sup/textfield.rb
389
+ - lib/sup.rb
390
+ homepage: https://github.com/sup-heliotrope/sup/wiki
391
+ licenses:
392
+ - GPL-2
227
393
  post_install_message:
228
394
  rdoc_options: []
229
-
230
- require_paths:
395
+ require_paths:
231
396
  - lib
232
- required_ruby_version: !ruby/object:Gem::Requirement
397
+ required_ruby_version: !ruby/object:Gem::Requirement
233
398
  none: false
234
- requirements:
235
- - - ">="
236
- - !ruby/object:Gem::Version
237
- segments:
399
+ requirements:
400
+ - - ! '>='
401
+ - !ruby/object:Gem::Version
402
+ version: '0'
403
+ segments:
238
404
  - 0
239
- version: "0"
240
- required_rubygems_version: !ruby/object:Gem::Requirement
405
+ hash: 3761451823671182045
406
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
407
  none: false
242
- requirements:
243
- - - ">="
244
- - !ruby/object:Gem::Version
245
- segments:
408
+ requirements:
409
+ - - ! '>='
410
+ - !ruby/object:Gem::Version
411
+ version: '0'
412
+ segments:
246
413
  - 0
247
- version: "0"
414
+ hash: 3761451823671182045
248
415
  requirements: []
249
-
250
416
  rubyforge_project:
251
- rubygems_version: 1.3.7
417
+ rubygems_version: 1.8.25
252
418
  signing_key:
253
419
  specification_version: 3
254
- summary: A console-based email client with the best features of GMail, mutt, and emacs. Features full text search, labels, tagged operations, multiple buffers, recent contacts, and more.
420
+ summary: A console-based email client with the best features of GMail, mutt and Emacs
255
421
  test_files: []
256
-