sup 1.3 → 1.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/checks.yml +10 -9
  3. data/.rubocop.yml +1 -1
  4. data/History.txt +17 -0
  5. data/Manifest.txt +9 -1
  6. data/README.md +5 -3
  7. data/Rakefile +1 -1
  8. data/bin/sup +5 -3
  9. data/contrib/nix/Gemfile.lock +39 -32
  10. data/contrib/nix/gemset.nix +80 -58
  11. data/contrib/nix/ruby2.4-Gemfile.lock +1 -1
  12. data/contrib/nix/ruby2.4-gemset.nix +2 -2
  13. data/contrib/nix/ruby2.5-Gemfile.lock +1 -1
  14. data/contrib/nix/ruby2.5-gemset.nix +2 -2
  15. data/contrib/nix/ruby2.6-Gemfile.lock +1 -1
  16. data/contrib/nix/ruby2.6-gemset.nix +2 -2
  17. data/contrib/nix/ruby2.7-Gemfile.lock +1 -1
  18. data/contrib/nix/ruby2.7-gemset.nix +2 -2
  19. data/contrib/nix/ruby3.0-Gemfile.lock +1 -1
  20. data/contrib/nix/ruby3.0-gemset.nix +2 -2
  21. data/contrib/nix/ruby3.1-Gemfile.lock +101 -0
  22. data/contrib/nix/ruby3.1-gemset.nix +391 -0
  23. data/contrib/nix/ruby3.1-shell.nix +2 -13
  24. data/contrib/nix/ruby3.2-Gemfile.lock +101 -0
  25. data/contrib/nix/ruby3.2-gemset.nix +391 -0
  26. data/contrib/nix/ruby3.2-shell.nix +2 -13
  27. data/contrib/nix/ruby3.3-shell.nix +1 -12
  28. data/contrib/nix/ruby3.4-shell.nix +1 -10
  29. data/contrib/nix/ruby4.0-shell.nix +40 -0
  30. data/lib/sup/account.rb +2 -0
  31. data/lib/sup/buffer.rb +1 -0
  32. data/lib/sup/contact.rb +3 -4
  33. data/lib/sup/draft.rb +15 -11
  34. data/lib/sup/index.rb +8 -4
  35. data/lib/sup/message_chunks.rb +0 -24
  36. data/lib/sup/mode.rb +1 -0
  37. data/lib/sup/modes/contact_list_mode.rb +0 -1
  38. data/lib/sup/modes/edit_message_mode.rb +1 -1
  39. data/lib/sup/modes/label_search_results_mode.rb +1 -2
  40. data/lib/sup/modes/line_cursor_mode.rb +22 -20
  41. data/lib/sup/modes/search_results_mode.rb +0 -1
  42. data/lib/sup/modes/thread_view_mode.rb +1 -2
  43. data/lib/sup/rfc2047.rb +5 -2
  44. data/lib/sup/source.rb +2 -0
  45. data/lib/sup/version.rb +1 -1
  46. data/lib/sup.rb +1 -1
  47. data/man/sup-add.1 +6 -6
  48. data/man/sup-config.1 +6 -6
  49. data/man/sup-dump.1 +5 -5
  50. data/man/sup-import-dump.1 +7 -7
  51. data/man/sup-recover-sources.1 +5 -5
  52. data/man/sup-sync-back-maildir.1 +9 -9
  53. data/man/sup-sync.1 +11 -11
  54. data/man/sup-tweak-labels.1 +10 -10
  55. data/man/sup.1 +11 -11
  56. data/sup.gemspec +1 -1
  57. data/test/dummy_buffer.rb +34 -0
  58. data/test/fixtures/contacts.txt +2 -1
  59. data/test/fixtures/rfc2047-header-encoding.eml +1 -1
  60. data/test/integration/test_draft.rb +128 -0
  61. data/test/integration/test_maildir.rb +2 -0
  62. data/test/integration/test_mbox.rb +2 -0
  63. data/test/integration/test_sup-add.rb +4 -0
  64. data/test/test_crypto.rb +7 -2
  65. data/test/test_message.rb +1 -0
  66. data/test/unit/test_contact.rb +15 -3
  67. data/test/unit/test_edit_message_mode.rb +6 -1
  68. data/test/unit/test_index.rb +65 -0
  69. data/test/unit/test_line_cursor_mode.rb +208 -0
  70. metadata +17 -7
  71. data/shell.nix +0 -1
@@ -83,7 +83,6 @@ class ContactListMode < LineCursorMode
83
83
  def multi_search people
84
84
  mode = PersonSearchResultsMode.new people
85
85
  BufferManager.spawn "search for #{people.map { |p| p.name }.join(', ')}", mode
86
- mode.load_threads :num => mode.buffer.content_height
87
86
  end
88
87
 
89
88
  def search
@@ -538,7 +538,7 @@ protected
538
538
  BufferManager.kill_buffer buffer
539
539
  BufferManager.flash "Message sent!"
540
540
  true
541
- rescue SystemCallError, SendmailCommandFailed, CryptoManager::Error => e
541
+ rescue SystemCallError, SendmailCommandFailed, CryptoManager::Error, TypeError => e
542
542
  warn "Problem sending mail: #{e.message}"
543
543
  BufferManager.flash "Problem sending mail: #{e.message}"
544
544
  false
@@ -29,8 +29,7 @@ class LabelSearchResultsMode < ThreadIndexMode
29
29
  when :inbox
30
30
  BufferManager.raise_to_front InboxMode.instance.buffer
31
31
  else
32
- b, new = BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label] }
33
- b.mode.load_threads :num => b.content_height if new
32
+ BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label] }
34
33
  end
35
34
  end
36
35
  end
@@ -20,14 +20,19 @@ class LineCursorMode < ScrollMode
20
20
  while true
21
21
  e = @load_more_q.pop
22
22
  @load_more_callbacks.each { |c| c.call e }
23
- sleep 0.5
24
- @load_more_q.pop until @load_more_q.empty?
23
+ hysteresis = $config[:load_more_threads_hysteresis] || 0.5
24
+ if hysteresis > 0 then
25
+ sleep hysteresis
26
+ @load_more_q.pop until @load_more_q.empty?
27
+ end
25
28
  end
26
29
  end
27
30
 
28
31
  super opts
29
32
  end
30
33
 
34
+ def spawned; call_load_more_callbacks buffer.content_height + 1; end
35
+
31
36
  def cleanup
32
37
  @load_more_thread.kill
33
38
  super
@@ -157,26 +162,22 @@ protected
157
162
  end
158
163
  end
159
164
 
160
- ## more complicated than one might think. three behaviors.
165
+ def half_page_up
166
+ super
167
+ set_cursor_pos [botline, @curpos].min
168
+ end
169
+
161
170
  def page_down
162
- ## if we're on the last page, and it's not a full page, just move
163
- ## the cursor down to the bottom and assume we can't load anything
164
- ## else via the callbacks.
165
- if topline > lines - buffer.content_height
166
- set_cursor_pos(lines - 1)
167
-
168
- ## if we're on the last page, and it's a full page, try and load
169
- ## more lines via the callbacks and then shift the page down
170
- elsif topline == lines - buffer.content_height
171
- call_load_more_callbacks buffer.content_height
172
- super
171
+ relpos = @curpos - topline
172
+ super
173
+ set_cursor_pos [topline + relpos, lines - 1].min
174
+ call_load_more_callbacks buffer.content_height if lines < topline + buffer.content_height
175
+ end
173
176
 
174
- ## otherwise, just move down
175
- else
176
- relpos = @curpos - topline
177
- super
178
- set_cursor_pos [topline + relpos, lines - 1].min
179
- end
177
+ def half_page_down
178
+ super
179
+ set_cursor_pos [topline, @curpos].max
180
+ call_load_more_callbacks buffer.content_height if lines < topline + buffer.content_height
180
181
  end
181
182
 
182
183
  def jump_to_start
@@ -187,6 +188,7 @@ protected
187
188
  def jump_to_end
188
189
  super if topline < (lines - buffer.content_height)
189
190
  set_cursor_pos(lines - 1)
191
+ call_load_more_callbacks buffer.content_height
190
192
  end
191
193
 
192
194
  private
@@ -49,7 +49,6 @@ class SearchResultsMode < ThreadIndexMode
49
49
  short_text = text.length < 20 ? text : text[0 ... 20] + "..."
50
50
  mode = SearchResultsMode.new query
51
51
  BufferManager.spawn "search: \"#{short_text}\"", mode
52
- mode.load_threads :num => mode.buffer.content_height
53
52
  rescue Index::ParseError => e
54
53
  BufferManager.flash "Problem: #{e.message}!"
55
54
  end
@@ -205,7 +205,7 @@ EOS
205
205
  @layout[m].state = (@layout[m].state == :detailed ? :open : :detailed)
206
206
  update
207
207
  end
208
-
208
+
209
209
  def reload
210
210
  update
211
211
  end
@@ -298,7 +298,6 @@ EOS
298
298
  p = @person_lines[curpos] or return
299
299
  mode = PersonSearchResultsMode.new [p]
300
300
  BufferManager.spawn "Search for #{p.name}", mode
301
- mode.load_threads :num => mode.buffer.content_height
302
301
  end
303
302
 
304
303
  def compose
data/lib/sup/rfc2047.rb CHANGED
@@ -62,10 +62,13 @@ module Rfc2047
62
62
  end
63
63
 
64
64
  begin
65
- text.force_encoding(charset).encode(target)
65
+ text.force_encoding charset
66
+ text.encode! target
66
67
  rescue ArgumentError, EncodingError
67
- word
68
+ next word
68
69
  end
70
+ next word unless text.valid_encoding?
71
+ text
69
72
  end
70
73
  end
71
74
  end
data/lib/sup/source.rb CHANGED
@@ -90,6 +90,8 @@ class Source
90
90
  ## the location filename
91
91
  def labels? info; [] end
92
92
 
93
+ def fallback_date_for_message info; end
94
+
93
95
  ## Yields values of the form [Symbol, Hash]
94
96
  ## add: info, labels, progress
95
97
  ## delete: info, progress
data/lib/sup/version.rb CHANGED
@@ -8,5 +8,5 @@ def git_suffix
8
8
  end
9
9
 
10
10
  module Redwood
11
- VERSION = "1.3"
11
+ VERSION = "1.4"
12
12
  end
data/lib/sup.rb CHANGED
@@ -142,7 +142,7 @@ module Redwood
142
142
  File::open(fn) { |f| f.read }
143
143
  end
144
144
  ## fix up malformed tag URIs created by earlier versions of sup
145
- raw_contents.gsub!(/!supmua.org,2006-10-01\/(\S*)$/) { |m| "!<tag:supmua.org,2006-10-01/#{$1}>" }
145
+ raw_contents.gsub!(/!supmua.org,2006-10-01\/(\S+)/) { |m| "!<tag:supmua.org,2006-10-01/#{$1}>" }
146
146
  if YAML.respond_to?(:unsafe_load) # Ruby 3.1+
147
147
  YAML::unsafe_load raw_contents
148
148
  else
data/man/sup-add.1 CHANGED
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-ADD" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-ADD" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-add \- add a source to the Sup source list
6
6
  .SH SYNOPSIS
@@ -39,7 +39,7 @@ source
39
39
  Create a new account for this source, even if one already exists
40
40
  .TP
41
41
  \-o \f[I]STRING\f[R], \-\-force\-account \f[I]STRING\f[R]
42
- Reuse previously defined account user\[at]hostname
42
+ Reuse previously defined account user\(athostname
43
43
  .TP
44
44
  \-v, \-\-version
45
45
  Print version and exit
@@ -77,10 +77,10 @@ Sup Wiki:
77
77
  .UE \c
78
78
  .TP
79
79
  Mailing list:
80
- supmua\[at]googlegroups.com
80
+ supmua\(atgooglegroups.com
81
81
  .RS
82
82
  .PP
83
- supmua+subscribe\[at]googlegroups.com
83
+ supmua+subscribe\(atgooglegroups.com
84
84
  .PP
85
85
  Archives: \c
86
86
  .UR https://groups.google.com/d/forum/supmua/
@@ -91,7 +91,7 @@ Copyright © 2006\-2009 William Morgan \c
91
91
  .MT mworgan-sup@masanjin.net
92
92
  .ME \c
93
93
  .PP
94
- Copyright \[at] 2013\-2014 Sup developers
94
+ Copyright \(at 2013\-2014 Sup developers
95
95
  .PP
96
96
  Permission is granted to copy and distribute this manual under the terms
97
97
  of the GNU General Public License; either version 2 or (at your option)
data/man/sup-config.1 CHANGED
@@ -1,13 +1,13 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-CONFIG" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-CONFIG" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-config \- interactive configuration tool for Sup
6
6
  .SH SYNOPSIS
7
7
  sup\-config [\f[I]options\f[R]]
8
8
  .SH DESCRIPTION
9
9
  Interactive configuration tool for Sup.
10
- Won\[cq]t destroy existing configuration.
10
+ Won\(cqt destroy existing configuration.
11
11
  .SH OPTIONS
12
12
  .TP
13
13
  \-v, \-\-version
@@ -49,10 +49,10 @@ Sup Wiki:
49
49
  .UE \c
50
50
  .TP
51
51
  Mailing list:
52
- supmua\[at]googlegroups.com
52
+ supmua\(atgooglegroups.com
53
53
  .RS
54
54
  .PP
55
- supmua+subscribe\[at]googlegroups.com
55
+ supmua+subscribe\(atgooglegroups.com
56
56
  .PP
57
57
  Archives: \c
58
58
  .UR https://groups.google.com/d/forum/supmua/
@@ -63,7 +63,7 @@ Copyright © 2006\-2009 William Morgan \c
63
63
  .MT mworgan-sup@masanjin.net
64
64
  .ME \c
65
65
  .PP
66
- Copyright \[at] 2013\-2014 Sup developers
66
+ Copyright \(at 2013\-2014 Sup developers
67
67
  .PP
68
68
  Permission is granted to copy and distribute this manual under the terms
69
69
  of the GNU General Public License; either version 2 or (at your option)
data/man/sup-dump.1 CHANGED
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-DUMP" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-dump \- dumps message state from Sup index
6
6
  .SH SYNOPSIS
@@ -58,10 +58,10 @@ Sup Wiki:
58
58
  .UE \c
59
59
  .TP
60
60
  Mailing list:
61
- supmua\[at]googlegroups.com
61
+ supmua\(atgooglegroups.com
62
62
  .RS
63
63
  .PP
64
- supmua+subscribe\[at]googlegroups.com
64
+ supmua+subscribe\(atgooglegroups.com
65
65
  .PP
66
66
  Archives: \c
67
67
  .UR https://groups.google.com/d/forum/supmua/
@@ -72,7 +72,7 @@ Copyright © 2006\-2009 William Morgan \c
72
72
  .MT mworgan-sup@masanjin.net
73
73
  .ME \c
74
74
  .PP
75
- Copyright \[at] 2013\-2014 Sup developers
75
+ Copyright \(at 2013\-2014 Sup developers
76
76
  .PP
77
77
  Permission is granted to copy and distribute this manual under the terms
78
78
  of the GNU General Public License; either version 2 or (at your option)
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-IMPORT\-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-IMPORT\-DUMP" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-import\-dump \- import message state dump to Sup index
6
6
  .SH SYNOPSIS
@@ -15,7 +15,7 @@ Messages not mentioned in the dump file will not be modified.
15
15
  .SH OPTIONS
16
16
  .TP
17
17
  \-v, \-\-verbose
18
- Print message ids as they\[cq]re processed
18
+ Print message ids as they\(cqre processed
19
19
  .TP
20
20
  \-i, \-\-ignore\-missing
21
21
  Silently skip over messages that are not in the index
@@ -30,7 +30,7 @@ Abort on encountering messages that are not in the index (default)
30
30
  Use transaction to apply all changes atomically
31
31
  .TP
32
32
  \-n, \-\-dry\-run
33
- Don\[cq]t actually modify the index.
33
+ Don\(cqt actually modify the index.
34
34
  Probably only useful with \-\-verbose
35
35
  .TP
36
36
  \-\-version
@@ -65,10 +65,10 @@ Sup Wiki:
65
65
  .UE \c
66
66
  .TP
67
67
  Mailing list:
68
- supmua\[at]googlegroups.com
68
+ supmua\(atgooglegroups.com
69
69
  .RS
70
70
  .PP
71
- supmua+subscribe\[at]googlegroups.com
71
+ supmua+subscribe\(atgooglegroups.com
72
72
  .PP
73
73
  Archives: \c
74
74
  .UR https://groups.google.com/d/forum/supmua/
@@ -79,7 +79,7 @@ Copyright © 2006\-2009 William Morgan \c
79
79
  .MT mworgan-sup@masanjin.net
80
80
  .ME \c
81
81
  .PP
82
- Copyright \[at] 2013\-2014 Sup developers
82
+ Copyright \(at 2013\-2014 Sup developers
83
83
  .PP
84
84
  Permission is granted to copy and distribute this manual under the terms
85
85
  of the GNU General Public License; either version 2 or (at your option)
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-RECOVER\-SOURCES" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-RECOVER\-SOURCES" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-recover\-sources \- rebuild a lost Sup source configuration file
6
6
  .SH SYNOPSIS
@@ -69,10 +69,10 @@ Sup Wiki:
69
69
  .UE \c
70
70
  .TP
71
71
  Mailing list:
72
- supmua\[at]googlegroups.com
72
+ supmua\(atgooglegroups.com
73
73
  .RS
74
74
  .PP
75
- supmua+subscribe\[at]googlegroups.com
75
+ supmua+subscribe\(atgooglegroups.com
76
76
  .PP
77
77
  Archives: \c
78
78
  .UR https://groups.google.com/d/forum/supmua/
@@ -83,7 +83,7 @@ Copyright © 2006\-2009 William Morgan \c
83
83
  .MT mworgan-sup@masanjin.net
84
84
  .ME \c
85
85
  .PP
86
- Copyright \[at] 2013\-2014 Sup developers
86
+ Copyright \(at 2013\-2014 Sup developers
87
87
  .PP
88
88
  Permission is granted to copy and distribute this manual under the terms
89
89
  of the GNU General Public License; either version 2 or (at your option)
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-SYNC\-BACK\-MAILDIR" "1" "August 25, 2014" "Sup User Manual" ""
3
+ .TH "SUP\-SYNC\-BACK\-MAILDIR" "1" "August 25, 2014" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-sync\-back\-maildir \- Export Xapian entries to Maildir sources on
6
6
  disk
@@ -23,8 +23,8 @@ If you choose not to merge (\-m) you will lose information (`replied'),
23
23
  and in the previous example the file will be renamed to foo_bar:2,FS.
24
24
  .PP
25
25
  Running this script is \f[I]strongly\f[R] recommended when setting the
26
- \[lq]sync_back_to_maildir\[rq] option from false to true in config.yaml
27
- or changing the \[lq]sync_back\[rq] flag to true for a source in
26
+ \(lqsync_back_to_maildir\(rq option from false to true in config.yaml or
27
+ changing the \(lqsync_back\(rq flag to true for a source in
28
28
  sources.yaml.
29
29
  .PP
30
30
  If no source is given, the default behavior is to sync back all Maildir
@@ -33,10 +33,10 @@ configuration parameter sync_back = false in sources.yaml.
33
33
  .SH OPTIONS
34
34
  .TP
35
35
  \-n, \-\-no\-confirm
36
- Don\[cq]t ask for confirmation before synchronizing
36
+ Don\(cqt ask for confirmation before synchronizing
37
37
  .TP
38
38
  \-m, \-\-no\-merge
39
- Don\[cq]t merge new supported Maildir flags (R and P)
39
+ Don\(cqt merge new supported Maildir flags (R and P)
40
40
  .TP
41
41
  \-l, \-\-list\-sources
42
42
  List your Maildir sources and exit
@@ -81,10 +81,10 @@ Sup Wiki:
81
81
  .UE \c
82
82
  .TP
83
83
  Mailing list:
84
- supmua\[at]googlegroups.com
84
+ supmua\(atgooglegroups.com
85
85
  .RS
86
86
  .PP
87
- supmua+subscribe\[at]googlegroups.com
87
+ supmua+subscribe\(atgooglegroups.com
88
88
  .PP
89
89
  Archives: \c
90
90
  .UR https://groups.google.com/d/forum/supmua/
@@ -95,7 +95,7 @@ Copyright © 2006\-2009 William Morgan \c
95
95
  .MT mworgan-sup@masanjin.net
96
96
  .ME \c
97
97
  .PP
98
- Copyright \[at] 2013\-2014 Sup developers
98
+ Copyright \(at 2013\-2014 Sup developers
99
99
  .PP
100
100
  Permission is granted to copy and distribute this manual under the terms
101
101
  of the GNU General Public License; either version 2 or (at your option)
data/man/sup-sync.1 CHANGED
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-SYNC" "1" "April 9, 2012" "Sup User Manual" ""
3
+ .TH "SUP\-SYNC" "1" "April 9, 2012" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup\-sync \- sychronize the Sup index with message sources
6
6
  .SH SYNOPSIS
@@ -10,10 +10,10 @@ Synchronizes the Sup index with one or more message sources by adding
10
10
  messages, deleting messages, or changing message state in the index as
11
11
  appropriate.
12
12
  .PP
13
- \[lq]Message state\[rq] means read/unread, archived/inbox,
13
+ \(lqMessage state\(rq means read/unread, archived/inbox,
14
14
  starred/unstarred, and all user\-defined labels on each message.
15
15
  .PP
16
- \[lq]Default source state\[rq] refers to any state that a source itself
16
+ \(lqDefault source state\(rq refers to any state that a source itself
17
17
  has keeps about a message.
18
18
  Sup\-sync uses this information when adding a new message to the index.
19
19
  The source state is typically limited to read/unread, archived/inbox
@@ -22,8 +22,8 @@ Messages using the default source state are placed in the inbox
22
22
  (i.e.\ not archived) and unstarred.
23
23
  .PP
24
24
  If no sources are given, sync from all usual sources.
25
- Supported source URI schemes can be seen by running \[lq]sup\-add
26
- \-\-help\[rq].
25
+ Supported source URI schemes can be seen by running \(lqsup\-add
26
+ \-\-help\(rq.
27
27
  .SH MESSAGE STATE OPTIONS
28
28
  .TP
29
29
  \-\-asis
@@ -50,7 +50,7 @@ labels (a comma\-separated list) (default)
50
50
  .SH OTHER OPTIONS
51
51
  .TP
52
52
  \-v, \-\-verbose
53
- Print message ids as they\[cq]re processed.
53
+ Print message ids as they\(cqre processed.
54
54
  .TP
55
55
  \-o, \-\-optimize
56
56
  As the final operation, optimize the index.
@@ -59,7 +59,7 @@ As the final operation, optimize the index.
59
59
  Scan over all sources.
60
60
  .TP
61
61
  \-n, \-\-dry\-run
62
- Don\[cq]t actually modify the index.
62
+ Don\(cqt actually modify the index.
63
63
  Probably only useful with \-\-verbose.
64
64
  .TP
65
65
  \-\-version
@@ -99,10 +99,10 @@ Sup Wiki:
99
99
  .UE \c
100
100
  .TP
101
101
  Mailing list:
102
- supmua\[at]googlegroups.com
102
+ supmua\(atgooglegroups.com
103
103
  .RS
104
104
  .PP
105
- supmua+subscribe\[at]googlegroups.com
105
+ supmua+subscribe\(atgooglegroups.com
106
106
  .PP
107
107
  Archives: \c
108
108
  .UR https://groups.google.com/d/forum/supmua/
@@ -113,7 +113,7 @@ Copyright © 2006\-2009 William Morgan \c
113
113
  .MT mworgan-sup@masanjin.net
114
114
  .ME \c
115
115
  .PP
116
- Copyright \[at] 2013\-2014 Sup developers
116
+ Copyright \(at 2013\-2014 Sup developers
117
117
  .PP
118
118
  Permission is granted to copy and distribute this manual under the terms
119
119
  of the GNU General Public License; either version 2 or (at your option)
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP\-TWEAK\-LABELS" "1" "April 9, 2012" "Sup User Manuel" ""
3
+ .TH "SUP\-TWEAK\-LABELS" "1" "April 9, 2012" "Sup User Manuel"
4
4
  .SH NAME
5
5
  sup\-tweak\-labels \- batch modification of message state already in
6
6
  index
@@ -9,8 +9,8 @@ sup\-tweak\-labels [\f[I]options\f[R]] source \&...
9
9
  .SH DESCRIPTION
10
10
  Batch modification of message state for messages already in the index.
11
11
  .PP
12
- Supported source URI schemes can be seen by running \[lq]sup\-add
13
- \-\-help\[rq].
12
+ Supported source URI schemes can be seen by running \(lqsup\-add
13
+ \-\-help\(rq.
14
14
  .SH OPTIONS
15
15
  .TP
16
16
  \-a \f[I]STRING\f[R], \-\-add \f[I]STRING\f[R]
@@ -26,16 +26,16 @@ A Sup search query
26
26
  .SH OTHER OPTIONS
27
27
  .TP
28
28
  \-v, \-\-verbose
29
- Print message ids as they\[cq]re processed
29
+ Print message ids as they\(cqre processed
30
30
  .TP
31
31
  \-e, \-\-very\-verbose
32
- Print message names and subjects as they\[cq]re processed
32
+ Print message names and subjects as they\(cqre processed
33
33
  .TP
34
34
  \-\-all\-sources
35
35
  Scan over all sources
36
36
  .TP
37
37
  \-n, \-\-dry\-run
38
- Don\[cq]t actually modify the index.
38
+ Don\(cqt actually modify the index.
39
39
  Probably only useful with \-\-verbose
40
40
  .TP
41
41
  \-\-version
@@ -70,10 +70,10 @@ Sup Wiki:
70
70
  .UE \c
71
71
  .TP
72
72
  Mailing list:
73
- supmua\[at]googlegroups.com
73
+ supmua\(atgooglegroups.com
74
74
  .RS
75
75
  .PP
76
- supmua+subscribe\[at]googlegroups.com
76
+ supmua+subscribe\(atgooglegroups.com
77
77
  .PP
78
78
  Archives: \c
79
79
  .UR https://groups.google.com/d/forum/supmua/
@@ -84,7 +84,7 @@ Copyright © 2006\-2009 William Morgan \c
84
84
  .MT mworgan-sup@masanjin.net
85
85
  .ME \c
86
86
  .PP
87
- Copyright \[at] 2013\-2014 Sup developers
87
+ Copyright \(at 2013\-2014 Sup developers
88
88
  .PP
89
89
  Permission is granted to copy and distribute this manual under the terms
90
90
  of the GNU General Public License; either version 2 or (at your option)
data/man/sup.1 CHANGED
@@ -1,6 +1,6 @@
1
- .\" Automatically generated by Pandoc 3.1.11.1
1
+ .\" Automatically generated by Pandoc 3.7.0.2
2
2
  .\"
3
- .TH "SUP" "1" "April 8, 2014" "Sup User Manual" ""
3
+ .TH "SUP" "1" "April 8, 2014" "Sup User Manual"
4
4
  .SH NAME
5
5
  sup \- a curses\-based email client
6
6
  .SH SYNOPSIS
@@ -13,17 +13,17 @@ hierarchical collections email messages.
13
13
  Threads can have multiple tags applied to them.
14
14
  It supports a very fast full\-text search, automatic contact\-list
15
15
  management, custom code insertion via a Ruby hook system, and more.
16
- If you\[cq]re the type of person who treats email as an extension of
17
- your long\-term memory, Sup is for you.
16
+ If you\(cqre the type of person who treats email as an extension of your
17
+ long\-term memory, Sup is for you.
18
18
  .SH OPTIONS
19
19
  .TP
20
20
  \-l, \-\-list\-hooks
21
21
  List all hooks and descriptions, and quit.
22
- Use \[en]hooks\-matching to filter
22
+ Use \(enhooks\-matching to filter
23
23
  .TP
24
24
  \-m, \-\-hooks\-matching=<s>
25
25
  If given, list all hooks and descriptions matching the given pattern.
26
- Needs the \[en]list\-hooks option (default: )
26
+ Needs the \(enlist\-hooks option (default: )
27
27
  .TP
28
28
  \-n, \-\-no\-threads
29
29
  Turn off threading.
@@ -31,7 +31,7 @@ Helps with debugging.
31
31
  (Necessarily disables background polling for new messages.)
32
32
  .TP
33
33
  \-o, \-\-no\-initial\-poll
34
- Don\[cq]t poll for new messages when starting.
34
+ Don\(cqt poll for new messages when starting.
35
35
  .TP
36
36
  \-s \f[I]QUERY\f[R], \-\-search \f[I]QUERY\f[R]
37
37
  Search for this query upon startup
@@ -54,7 +54,7 @@ Set log level verbosity.
54
54
  Valid values ordered by decresing verbosity: debug info warn error.
55
55
  Default log level is info.
56
56
  .TP
57
- SUP_BASE\[rs]
57
+ SUP_BASE\(rs
58
58
  Specify home directory for configuration files and xapian index,
59
59
  defaults to: $HOME/.sup.
60
60
  .SH FILES
@@ -96,10 +96,10 @@ Sup Wiki:
96
96
  .UE \c
97
97
  .TP
98
98
  Mailing list:
99
- supmua\[at]googlegroups.com
99
+ supmua\(atgooglegroups.com
100
100
  .RS
101
101
  .PP
102
- supmua+subscribe\[at]googlegroups.com
102
+ supmua+subscribe\(atgooglegroups.com
103
103
  .PP
104
104
  Archives: \c
105
105
  .UR https://groups.google.com/d/forum/supmua/
@@ -110,7 +110,7 @@ Copyright © 2006\-2009 William Morgan \c
110
110
  .MT mworgan-sup@masanjin.net
111
111
  .ME \c
112
112
  .PP
113
- Copyright \[at] 2013\-2014 Sup developers
113
+ Copyright \(at 2013\-2014 Sup developers
114
114
  .PP
115
115
  Permission is granted to copy and distribute this manual under the terms
116
116
  of the GNU General Public License; either version 2 or (at your option)
data/sup.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["William Morgan", "Gaute Hope", "Hamish Downer", "Matthieu Rakotojaona"]
10
10
  s.email = "supmua@googlegroups.com"
11
11
  s.summary = "A console-based email client with the best features of GMail, mutt and Emacs"
12
- s.homepage = "https://sup-heliotrope.github.io/"
12
+ s.homepage = "https://supmua.dev/"
13
13
  s.license = 'GPL-2.0'
14
14
  s.description = <<-DESC
15
15
  Sup is a console-based email client for people with a lot of email.
@@ -0,0 +1,34 @@
1
+ require "sup"
2
+
3
+ module Redwood
4
+
5
+ class DummyBuffer
6
+ attr_reader :width, :height, :dirty_count, :commit_count
7
+
8
+ def initialize width=80, height=25
9
+ @width = width
10
+ @height = height
11
+ @dirty = false
12
+ @dirty_count = 0
13
+ @commit_count = 0
14
+ end
15
+
16
+ def content_height; @height - 1; end
17
+ def content_width; @width; end
18
+
19
+ def mark_dirty
20
+ @dirty = true
21
+ @dirty_count += 1
22
+ end
23
+
24
+ def dirty?; @dirty; end
25
+
26
+ def commit
27
+ @dirty = false
28
+ @commit_count += 1
29
+ end
30
+
31
+ def write(*args); end
32
+ end
33
+
34
+ end
@@ -1 +1,2 @@
1
- RC: Random Contact <random_dude@gmail.com>
1
+ RC: Random Contact <random_dude@gmail.com>
2
+ : Unaliased Contact <unaliased@example.invalid>