sup 0.22.1 → 1.1

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 (99) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/checks.yml +70 -0
  3. data/.gitignore +1 -3
  4. data/.rubocop.yml +5 -0
  5. data/CONTRIBUTORS +14 -5
  6. data/Gemfile +6 -1
  7. data/History.txt +76 -0
  8. data/Manifest.txt +149 -0
  9. data/README.md +32 -5
  10. data/Rakefile +40 -1
  11. data/bin/sup +7 -5
  12. data/bin/sup-add +16 -20
  13. data/bin/sup-config +30 -44
  14. data/bin/sup-dump +2 -2
  15. data/bin/sup-import-dump +4 -4
  16. data/bin/sup-sync +3 -3
  17. data/bin/sup-sync-back-maildir +2 -2
  18. data/bin/sup-tweak-labels +5 -5
  19. data/ext/mkrf_conf_xapian.rb +10 -4
  20. data/lib/sup/colormap.rb +1 -1
  21. data/lib/sup/crypto.rb +17 -8
  22. data/lib/sup/hook.rb +9 -9
  23. data/lib/sup/index.rb +20 -7
  24. data/lib/sup/keymap.rb +1 -1
  25. data/lib/sup/logger.rb +1 -1
  26. data/lib/sup/maildir.rb +4 -4
  27. data/lib/sup/mbox.rb +4 -4
  28. data/lib/sup/message.rb +26 -15
  29. data/lib/sup/message_chunks.rb +29 -20
  30. data/lib/sup/mode.rb +1 -0
  31. data/lib/sup/modes/completion_mode.rb +0 -1
  32. data/lib/sup/modes/contact_list_mode.rb +1 -0
  33. data/lib/sup/modes/file_browser_mode.rb +2 -2
  34. data/lib/sup/modes/label_list_mode.rb +1 -1
  35. data/lib/sup/modes/reply_mode.rb +3 -1
  36. data/lib/sup/modes/search_list_mode.rb +2 -2
  37. data/lib/sup/modes/thread_index_mode.rb +1 -1
  38. data/lib/sup/modes/thread_view_mode.rb +15 -13
  39. data/lib/sup/rfc2047.rb +21 -6
  40. data/lib/sup/source.rb +9 -3
  41. data/lib/sup/textfield.rb +0 -1
  42. data/lib/sup/thread.rb +0 -1
  43. data/lib/sup/util/axe.rb +17 -0
  44. data/lib/sup/util/ncurses.rb +3 -3
  45. data/lib/sup/util.rb +42 -67
  46. data/lib/sup/version.rb +10 -1
  47. data/lib/sup.rb +13 -8
  48. data/man/sup-add.1 +34 -55
  49. data/man/sup-config.1 +23 -36
  50. data/man/sup-dump.1 +25 -35
  51. data/man/sup-import-dump.1 +33 -54
  52. data/man/sup-psych-ify-config-files.1 +25 -34
  53. data/man/sup-recover-sources.1 +34 -49
  54. data/man/sup-sync-back-maildir.1 +39 -60
  55. data/man/sup-sync.1 +49 -79
  56. data/man/sup-tweak-labels.1 +35 -58
  57. data/man/sup.1 +50 -62
  58. data/sup.gemspec +12 -9
  59. data/test/dummy_source.rb +21 -15
  60. data/test/fixtures/embedded-message.eml +34 -0
  61. data/test/fixtures/mailing-list-header.eml +80 -0
  62. data/test/fixtures/non-ascii-header-in-nested-message.eml +36 -0
  63. data/test/fixtures/non-ascii-header.eml +8 -0
  64. data/test/fixtures/rfc2047-header-encoding.eml +15 -0
  65. data/test/fixtures/text-attachments-with-charset.eml +60 -0
  66. data/test/fixtures/utf8-header.eml +17 -0
  67. data/test/fixtures/zimbra-quote-with-bottom-post.eml +27 -0
  68. data/test/gnupg_test_home/gpg.conf +2 -1
  69. data/test/gnupg_test_home/private-keys-v1.d/306D2EE90FF0014B5B9FD07E265C751791674140.key +0 -0
  70. data/test/gnupg_test_home/pubring.gpg +0 -0
  71. data/test/gnupg_test_home/receiver_pubring.gpg +0 -0
  72. data/test/gnupg_test_home/receiver_secring.gpg +0 -0
  73. data/test/gnupg_test_home/regen_keys.sh +69 -18
  74. data/test/gnupg_test_home/secring.gpg +0 -0
  75. data/test/gnupg_test_home/sup-test-2@foo.bar.asc +20 -22
  76. data/test/integration/test_mbox.rb +1 -1
  77. data/test/integration/test_sup-add.rb +83 -0
  78. data/test/test_crypto.rb +46 -0
  79. data/test/test_header_parsing.rb +9 -1
  80. data/test/test_helper.rb +7 -4
  81. data/test/test_message.rb +188 -22
  82. data/test/test_messages_dir.rb +13 -15
  83. data/test/unit/test_horizontal_selector.rb +4 -4
  84. data/test/unit/test_locale_fiddler.rb +1 -1
  85. data/test/unit/util/test_query.rb +10 -4
  86. data/test/unit/util/test_string.rb +9 -3
  87. data/test/unit/util/test_uri.rb +2 -2
  88. metadata +93 -51
  89. data/.travis.yml +0 -13
  90. data/bin/sup-psych-ify-config-files +0 -21
  91. data/test/gnupg_test_home/key1.gen +0 -15
  92. data/test/gnupg_test_home/key2.gen +0 -15
  93. data/test/gnupg_test_home/key_ecc.gen +0 -13
  94. data/test/gnupg_test_home/private-keys-v1.d/719C7455A7169C6EE8819C6E91002E4F9DD00A65.key +0 -1
  95. data/test/gnupg_test_home/private-keys-v1.d/8A130806A754AA29D59487D76BD355040D9F26C0.key +0 -0
  96. data/test/gnupg_test_home/private-keys-v1.d/B7AA46B22BD8A6AD1B4F266C19A3B124A32DDD71.key +0 -0
  97. data/test/gnupg_test_home/private-keys-v1.d/FA64ACD7CC871371BDF57285A6CDF0E618827783.key +0 -0
  98. data/test/integration/test_label_service.rb +0 -18
  99. data/test/test_yaml_migration.rb +0 -85
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 703c8b0175724e4a3a4965081e8a0b12fb01147a
4
- data.tar.gz: 86557dfd9de2f477dbf4f8322cd732c221d51c9d
2
+ SHA256:
3
+ metadata.gz: 93d027a0f383edb73d1a2900ca991d8d8d8daca922f0088c18f5281ca04daeb4
4
+ data.tar.gz: 31b25e512227252a498baa651ea9b026ba452274dd5c67c99412dc2ef54f3e7a
5
5
  SHA512:
6
- metadata.gz: ba46b62b4cd8059cd1835624270e715da259934f4f497f56471e81bd02876b83518c8b647ed4c1d0f43520f0a42fcdbec500b6a8b1abb4002bfdea7fe5e44ddd
7
- data.tar.gz: 0e5f694ae6cd39770120ef26163a68bddb8179baa6cbcaec87acdbee17be1627cc9520c802427dd5f4958c7d367017034cf62360acddedef27f8a95d27b288cf
6
+ metadata.gz: 06211d3a91b76d20396afe9323bdf62d14acf61d13688333ae8f6409b55ff2120037df11e0a5e62e869e476868307a42216ee34e28f3621a05da0f9953a6cda3
7
+ data.tar.gz: f17bac030201cdabd4c6e3313a4178fb03f65f70992dcd4364cde425d1fd658408973b1758c7d45b13140dddde0e92f34006d6085140bbbb76164081083e9006
@@ -0,0 +1,70 @@
1
+ name: checks
2
+ on:
3
+ push:
4
+ branches:
5
+ - develop
6
+ pull_request:
7
+ branches:
8
+ - develop
9
+ permissions:
10
+ contents: read
11
+ jobs:
12
+ rake-ci:
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os:
17
+ - ubuntu-latest
18
+ - macos-latest
19
+ ruby-version:
20
+ - '2.0'
21
+ - '2.1'
22
+ # Ruby 2.2 fails installing sup gem with a nonsensical error:
23
+ # Could not find 'xapian-ruby' (~> 1.2) among 21 total gem(s)
24
+ #- '2.2'
25
+ - '2.3'
26
+ - '2.4'
27
+ - '2.5'
28
+ - '2.6'
29
+ - '2.7'
30
+ - '3.0'
31
+ - '3.1'
32
+ exclude:
33
+ # xapian-bindings 1.2.2 fails to build on MacOS:
34
+ # clang: warning: include path for libstdc++ headers not found; pass
35
+ # '-stdlib=libc++' on the command line to use the libc++ standard
36
+ # library instead [-Wstdlibcxx-not-found]
37
+ # xapian_wrap.cc:1836:10: fatal error: 'string' file not found
38
+ # Probably just wrong compiler command or some mess that I can't be
39
+ # bothered to figure out.
40
+ - os: macos-latest
41
+ ruby-version: '2.0'
42
+ # xapian-bindings 1.4.18 fails to build with Ruby 3.0+ on MacOS:
43
+ # error: '__declspec' attributes are not enabled; use '-fdeclspec' or
44
+ # '-fms-extensions' to enable support for __declspec attributes
45
+ # Needs this fix:
46
+ # https://github.com/xapian/xapian/commit/63a06768a250b0bb4821b835f011e8214d560f8e
47
+ - os: macos-latest
48
+ ruby-version: '3.0'
49
+ - os: macos-latest
50
+ ruby-version: '3.1'
51
+ runs-on: ${{ matrix.os }}
52
+ steps:
53
+ - name: Install pandoc
54
+ run: sudo apt-get install -y pandoc
55
+ if: runner.os == 'Linux'
56
+ - name: Install pandoc
57
+ run: brew install pandoc
58
+ if: runner.os == 'macOS'
59
+ - uses: actions/checkout@v3
60
+ with:
61
+ submodules: recursive
62
+ - name: Set up Ruby
63
+ uses: ruby/setup-ruby@v1
64
+ with:
65
+ ruby-version: ${{ matrix.ruby-version }}
66
+ bundler-cache: true
67
+ - name: Run Rake ci task
68
+ run: bundle exec rake ci
69
+ - name: Test gem installation
70
+ run: gem install pkg/sup-*.gem
data/.gitignore CHANGED
@@ -17,6 +17,4 @@ Gemfile.lock
17
17
  test/gnupg_test_home/random_seed
18
18
  test/gnupg_test_home/trustdb.gpg
19
19
  test/gnupg_test_home/.gpg-v21-migrated
20
- test/gnupg_test_home/private-keys-v1.d
21
-
22
-
20
+ test/gnupg_test_home/openpgp-revocs.d
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ require:
2
+ - rubocop-packaging
3
+
4
+ AllCops:
5
+ DisabledByDefault: true
data/CONTRIBUTORS CHANGED
@@ -2,14 +2,16 @@ William Morgan <william at the twitter dot coms>
2
2
  Rich Lane <rlane at the club.cc.cmu dot edus>
3
3
  Gaute Hope <eg at the gaute.vetsj dot coms>
4
4
  Whyme Lyu <callme5long at the gmail dot coms>
5
+ Dan Callaghan <djc at the djc.id dot aus>
5
6
  Hamish Downer <dmishd at the gmail dot coms>
6
7
  Zeger-Jan van de Weg <mail at the zjvandeweg dot nls>
7
8
  Damien Leone <damien.leone at the fensalir dot frs>
8
9
  Sascha Silbe <sascha-pgp at the silbe dot orgs>
10
+ Iain Parris <ipv2.vcs at the parris dot orgs>
9
11
  Eric Weikl <eric.weikl at the gmx dot nets>
10
12
  Paweł Wilk <siefca at the gnu dot orgs>
11
- Ismo Puustinen <ismo at the iki dot fis>
12
13
  Matthieu Rakotojaona <matthieu.rakotojaona at the gmail dot coms>
14
+ Ismo Puustinen <ismo at the iki dot fis>
13
15
  Nicolas Pouillard <nicolas.pouillard at the gmail dot coms>
14
16
  Michael Stapelberg <michael at the stapelberg dot des>
15
17
  Eric Sherman <hyperbolist at the gmail dot coms>
@@ -23,12 +25,12 @@ Clint Byrum <clint at the ubuntu dot coms>
23
25
  Wael M. Nasreddine <wael.nasreddine at the gmail dot coms>
24
26
  Marcus Williams <marcus-sup at the bar-coded dot nets>
25
27
  Lionel Ott <white.magic at the gmx dot des>
26
- Gaudenz Steinlin <gaudenz at the soziologie dot chs>
27
28
  Per Andersson <avtobiff at the gmail dot coms>
29
+ Gaudenz Steinlin <gaudenz at the soziologie dot chs>
28
30
  Mark Alexander <marka at the pobox dot coms>
29
31
  Ingmar Vanhassel <ingmar at the exherbo dot orgs>
30
32
  Edward Z. Yang <ezyang at the mit dot edus>
31
- julien@macbook <julien.stechele at the gmail dot coms>
33
+ julien at the macbook <julien.stechele at the gmail dot coms>
32
34
  Christopher Warrington <chrisw at the rice dot edus>
33
35
  W. Trevor King <wking at the drexel dot edus>
34
36
  Richard Brown <rbrown at the exherbo dot orgs>
@@ -61,16 +63,21 @@ Jeff Balogh <its.jeff.balogh at the gmail dot coms>
61
63
  Matías Aguirre <matiasaguirre at the gmail dot coms>
62
64
  PaulSmecker <paul.smecker at the gmail dot coms>
63
65
  Ruthard Baudach <rthrd at the web dot des>
66
+ Vickenty Fesunov <kent at the setattr dot nets>
64
67
  Kornilios Kourtis <kkourt at the cslab.ece.ntua dot grs>
68
+ Antoni Kaniowski <a at the generativestuff dot coms>
65
69
  Lars Fischer <fischer at the wiwi.uni-siegen dot des>
70
+ Sharif Olorin <sio at the tesser dot orgs>
71
+ Steven Lawrance <stl at the koffein dot nets>
66
72
  madhat2r <MaDhAt2r at the dukefoo dot coms>
67
73
  Kevin Riggle <kevinr at the free-dissociation dot coms>
68
74
  Giorgio Lando <patroclo7 at the gmail dot coms>
69
75
  Benoît PIERRE <benoit.pierre at the gmail dot coms>
70
- Steven Lawrance <stl at the koffein dot nets>
76
+ Seva Zhidkov <zhidkovseva at the gmail dot coms>
71
77
  Alvaro Herrera <alvherre at the alvh.no-ip dot orgs>
72
78
  Jonah <Jonah at the GoodCoffee dot cas>
73
79
  ian <itaylor at the uark dot edus>
80
+ Simon Tatham <anakin at the pobox dot coms>
74
81
  Elias Norberg <xyzzy at the kudzu dot ses>
75
82
  0xACE <0xACE at the users.noreply.github dot coms>
76
83
  MichaelRevell <mikearevell at the gmail dot coms>
@@ -78,9 +85,11 @@ Gregor Hoffleit <gregor at the sam.mediasupervision dot des>
78
85
  Adam Lloyd <adam at the alloy-d dot nets>
79
86
  Todd Eisenberger <teisenbe at the andrew.cmu dot edus>
80
87
  Johannes Larsen <mail at the johslarsen dot nets>
81
- Sharif Olorin <sio at the tesser dot orgs>
82
88
  Steven Schmeiser <steven at the schmeiser dot orgs>
83
89
  Steven Walter <swalter at the monarch.(none)>
90
+ Utkarsh Gupta <utkarsh at the debian dot orgs>
91
+ Michael Dwyer <mdwyer at the michaelmdwyer dot coms>
92
+ Kyle Hunt <Kyle_Hunt at the ymail dot coms>
84
93
  William A. Kennington III <william at the wkennington dot coms>
85
94
  akojo <atte.kojo at the gmail dot coms>
86
95
  Horacio Sanson <horacio at the skillupjapan.co dot jps>
data/Gemfile CHANGED
@@ -1,7 +1,12 @@
1
1
  source 'https://rubygems.org/'
2
2
 
3
3
  if !RbConfig::CONFIG['arch'].include?('openbsd')
4
- gem 'xapian-ruby', '~> 1.2.15'
4
+ # update version in ext/mkrf_conf_xapian.rb as well.
5
+ if /^2\.0\./ =~ RUBY_VERSION
6
+ gem 'xapian-ruby', ['~> 1.2', '< 1.3.6']
7
+ else
8
+ gem 'xapian-ruby', '~> 1.2'
9
+ end
5
10
  end
6
11
 
7
12
  gemspec
data/History.txt CHANGED
@@ -1,3 +1,79 @@
1
+ == 1.1 / 2022-05-23
2
+
3
+ * #588, #577: Sup is now compatible with and tested on Ruby 3.0 and Ruby 3.1.
4
+ * When the Sup gem installs xapian-ruby, it will install to the user gem
5
+ directory if the system gem directory is not writable. (Iain Parris)
6
+ * #571: To and From addresses of enclosed messages are now displayed normally,
7
+ instead of as Redwood::Person objects. (Iain Parris)
8
+ * #570: Fixed wording when displaying enclosed messages without Date header.
9
+ (Iain Parris)
10
+ * #205, #602: UTF-8 header values are now accepted and handled correctly, as
11
+ per RFC6532.
12
+ * #585: Text/plain attachments with invalid charset are now displayed as
13
+ US-ASCII (with high bytes replaced) instead of crashing.
14
+ * #424: Spaces are now accepted in RFC2047-encoded header words, even though
15
+ the RFC forbids them. (Dan Callaghan)
16
+ * Invalid RFC2047-encoded header words are now displayed in their raw form,
17
+ rather than trying to forcibly transcode them to UTF-8, as per the RFC's
18
+ recommendation. (Dan Callaghan)
19
+ * Sup now decodes UTF-7 correctly instead of crashing.
20
+
21
+ == 1.0 / 2020-07-12
22
+
23
+ No changes. The version number is incremented to 1.0 to reflect the fact that
24
+ Sup is mature and no further backwards-incompatible changes are planned.
25
+
26
+ == 0.23 / 2020-07-10
27
+
28
+ * #505: Shell metacharacters in attachment filenames are no longer escaped when
29
+ saving the attachment to disk using 's'. Fixes attachments being saved with
30
+ unnecessary \ escapes in their filename. (Felix Van der Jeugt)
31
+ * When saving attachments, Sup now creates all parent directories of the
32
+ destination path. (Matthieu Rakotojaona)
33
+ * The '@' key now reloads all messages in thread view. (Seva Zhidkov)
34
+ * #517: The 'g' key now correctly opens each selected URL if multiple URLs are
35
+ under the cursor, instead of opening the last URL multiple times.
36
+ (Matthieu Rakotojaona)
37
+ * The 'g' key now works when the cursor is over a URL inside a signature block.
38
+ (Michael Dwyer)
39
+ * The 'reply-to' hook is now passed a 'message' variable, the message being
40
+ replied to, so that the hook can choose the reply mode based on properties of
41
+ the message like the list address. (Simon Tatham)
42
+ * The contacts list now shows also email addresses supplied by the
43
+ 'extra-contract-addresses' hook. (Matthieu Rakotojaona)
44
+ * #510: The micalg= parameter is now set correctly when sending
45
+ multipart/signed messages. Fixes issues with other mail clients which fail to
46
+ handle a missing micalg= parameter on signed messages. (Dan Callaghan)
47
+ * Attachments with text/plain MIME type are now correctly decoded according to
48
+ their charset= parameter. (Dan Callaghan)
49
+ * Strings returned by the 'mime-decode' hook are now kept in their original
50
+ encoding and displayed as is, instead of being wrongly transcoded.
51
+ (Dan Callaghan)
52
+ * Rendering speed of thread list views is improved. (Vickenty Fesunov)
53
+ * Fixed display width calculation for emoji. Previously, sender names and
54
+ thread subjects using emoji would be incorrectly truncated, if the terminal
55
+ emulator displays emoji as double-width. (Dan Callaghan)
56
+ * List address is parsed from the non-standard Mailing-List header used by
57
+ Groups.io. (Dan Callaghan)
58
+ * Fixed misinterpretation of quoted text where the quote uses both an
59
+ "---- Original Message ----" marker and > delimiters, for example from
60
+ Zimbra users. (Steven Lawrance)
61
+ * Added a new option 'indent_spaces' in config.yaml, to control the number of
62
+ spaces for indenting each child message when displaying the thread view.
63
+ The default remains 2. (Antoni Kaniowski)
64
+ * Attachment sizes are now displayed using standard unit abbreviations like
65
+ "MiB". (Sharif Olorin)
66
+ * Sup now gives a hint if a search query results in an empty search after
67
+ tokenization (for example, if the user tries to search for only punctuation).
68
+ (Per Andersson)
69
+ * The --list-hooks option now takes an additional option --hooks-matching, to
70
+ filter the listed hooks. (Matthieu Rakotojaona)
71
+ * Fixed ArgumentError in logging methods on Ruby 2.7. (Dan Callaghan)
72
+ * Fixed FrozenError in verified_ok? method on Ruby 2.7. (Iain Parris)
73
+ * Fixed Fixnum deprecation warnings on Ruby 2.4+. (Dan Callaghan)
74
+ * Several dependency version updates. The optimist gem replaces trollop. The
75
+ unicode-display_width gem is a new dependency.
76
+
1
77
  == 0.22.1 / 2015-06-18
2
78
 
3
79
  * Fix bug (#429) in gem build / install.
data/Manifest.txt ADDED
@@ -0,0 +1,149 @@
1
+ .github/workflows/checks.yml
2
+ .gitignore
3
+ .gitmodules
4
+ .rubocop.yml
5
+ CONTRIBUTORS
6
+ Gemfile
7
+ HACKING
8
+ History.txt
9
+ LICENSE
10
+ Manifest.txt
11
+ README.md
12
+ Rakefile
13
+ ReleaseNotes
14
+ bin/sup
15
+ bin/sup-add
16
+ bin/sup-config
17
+ bin/sup-dump
18
+ bin/sup-import-dump
19
+ bin/sup-recover-sources
20
+ bin/sup-sync
21
+ bin/sup-sync-back-maildir
22
+ bin/sup-tweak-labels
23
+ contrib/colorpicker.rb
24
+ contrib/completion/_sup.bash
25
+ contrib/completion/_sup.zsh
26
+ devel/console.sh
27
+ devel/count-loc.sh
28
+ devel/load-index.rb
29
+ devel/profile.rb
30
+ devel/start-console.rb
31
+ doc/FAQ.txt
32
+ doc/Hooks.txt
33
+ doc/Philosophy.txt
34
+ doc/wiki
35
+ ext/mkrf_conf_xapian.rb
36
+ lib/sup.rb
37
+ lib/sup/account.rb
38
+ lib/sup/buffer.rb
39
+ lib/sup/colormap.rb
40
+ lib/sup/contact.rb
41
+ lib/sup/crypto.rb
42
+ lib/sup/draft.rb
43
+ lib/sup/hook.rb
44
+ lib/sup/horizontal_selector.rb
45
+ lib/sup/idle.rb
46
+ lib/sup/index.rb
47
+ lib/sup/interactive_lock.rb
48
+ lib/sup/keymap.rb
49
+ lib/sup/label.rb
50
+ lib/sup/logger.rb
51
+ lib/sup/logger/singleton.rb
52
+ lib/sup/maildir.rb
53
+ lib/sup/mbox.rb
54
+ lib/sup/message.rb
55
+ lib/sup/message_chunks.rb
56
+ lib/sup/mode.rb
57
+ lib/sup/modes/buffer_list_mode.rb
58
+ lib/sup/modes/completion_mode.rb
59
+ lib/sup/modes/compose_mode.rb
60
+ lib/sup/modes/console_mode.rb
61
+ lib/sup/modes/contact_list_mode.rb
62
+ lib/sup/modes/edit_message_async_mode.rb
63
+ lib/sup/modes/edit_message_mode.rb
64
+ lib/sup/modes/file_browser_mode.rb
65
+ lib/sup/modes/forward_mode.rb
66
+ lib/sup/modes/help_mode.rb
67
+ lib/sup/modes/inbox_mode.rb
68
+ lib/sup/modes/label_list_mode.rb
69
+ lib/sup/modes/label_search_results_mode.rb
70
+ lib/sup/modes/line_cursor_mode.rb
71
+ lib/sup/modes/log_mode.rb
72
+ lib/sup/modes/person_search_results_mode.rb
73
+ lib/sup/modes/poll_mode.rb
74
+ lib/sup/modes/reply_mode.rb
75
+ lib/sup/modes/resume_mode.rb
76
+ lib/sup/modes/scroll_mode.rb
77
+ lib/sup/modes/search_list_mode.rb
78
+ lib/sup/modes/search_results_mode.rb
79
+ lib/sup/modes/text_mode.rb
80
+ lib/sup/modes/thread_index_mode.rb
81
+ lib/sup/modes/thread_view_mode.rb
82
+ lib/sup/person.rb
83
+ lib/sup/poll.rb
84
+ lib/sup/rfc2047.rb
85
+ lib/sup/search.rb
86
+ lib/sup/sent.rb
87
+ lib/sup/service/label_service.rb
88
+ lib/sup/source.rb
89
+ lib/sup/tagger.rb
90
+ lib/sup/textfield.rb
91
+ lib/sup/thread.rb
92
+ lib/sup/time.rb
93
+ lib/sup/undo.rb
94
+ lib/sup/update.rb
95
+ lib/sup/util.rb
96
+ lib/sup/util/axe.rb
97
+ lib/sup/util/locale_fiddler.rb
98
+ lib/sup/util/ncurses.rb
99
+ lib/sup/util/path.rb
100
+ lib/sup/util/query.rb
101
+ lib/sup/util/uri.rb
102
+ lib/sup/version.rb
103
+ sup.gemspec
104
+ test/dummy_source.rb
105
+ test/fixtures/bad-content-transfer-encoding-1.eml
106
+ test/fixtures/binary-content-transfer-encoding-2.eml
107
+ test/fixtures/blank-header-fields.eml
108
+ test/fixtures/contacts.txt
109
+ test/fixtures/embedded-message.eml
110
+ test/fixtures/mailing-list-header.eml
111
+ test/fixtures/malicious-attachment-names.eml
112
+ test/fixtures/missing-from-to.eml
113
+ test/fixtures/missing-line.eml
114
+ test/fixtures/multi-part-2.eml
115
+ test/fixtures/multi-part.eml
116
+ test/fixtures/no-body.eml
117
+ test/fixtures/non-ascii-header-in-nested-message.eml
118
+ test/fixtures/non-ascii-header.eml
119
+ test/fixtures/rfc2047-header-encoding.eml
120
+ test/fixtures/simple-message.eml
121
+ test/fixtures/text-attachments-with-charset.eml
122
+ test/fixtures/utf8-header.eml
123
+ test/fixtures/zimbra-quote-with-bottom-post.eml
124
+ test/gnupg_test_home/.gpg-v21-migrated
125
+ test/gnupg_test_home/gpg.conf
126
+ test/gnupg_test_home/private-keys-v1.d/306D2EE90FF0014B5B9FD07E265C751791674140.key
127
+ test/gnupg_test_home/pubring.gpg
128
+ test/gnupg_test_home/receiver_pubring.gpg
129
+ test/gnupg_test_home/receiver_secring.gpg
130
+ test/gnupg_test_home/regen_keys.sh
131
+ test/gnupg_test_home/secring.gpg
132
+ test/gnupg_test_home/sup-test-2@foo.bar.asc
133
+ test/integration/test_maildir.rb
134
+ test/integration/test_mbox.rb
135
+ test/integration/test_sup-add.rb
136
+ test/test_crypto.rb
137
+ test/test_header_parsing.rb
138
+ test/test_helper.rb
139
+ test/test_message.rb
140
+ test/test_messages_dir.rb
141
+ test/test_yaml_regressions.rb
142
+ test/unit/service/test_label_service.rb
143
+ test/unit/test_contact.rb
144
+ test/unit/test_horizontal_selector.rb
145
+ test/unit/test_locale_fiddler.rb
146
+ test/unit/test_person.rb
147
+ test/unit/util/test_query.rb
148
+ test/unit/util/test_string.rb
149
+ test/unit/util/test_uri.rb
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Sup
2
2
 
3
- A console-based email client with the best features of GMail, mutt and
4
- Emacs.
3
+ Sup is a console-based email client for people with a lot of email.
4
+
5
+ <img src="https://sup-heliotrope.github.io/images/old_screenshot_1.png" />
5
6
 
6
7
  ## Installation
7
8
 
@@ -30,20 +31,46 @@ Current limitations:
30
31
 
31
32
  ## Problems
32
33
 
33
- Please report bugs to the [Github issue tracker](https://github.com/sup-heliotrope/sup/issues).
34
+ Please report bugs to the [GitHub issue tracker](https://github.com/sup-heliotrope/sup/issues).
34
35
 
35
36
  ## Links
36
37
 
37
- * [Homepage](http://supmua.org/)
38
+ * [Homepage](https://sup-heliotrope.github.io/)
38
39
  * [Code repository](https://github.com/sup-heliotrope/sup)
39
40
  * [Wiki](https://github.com/sup-heliotrope/sup/wiki)
40
41
  * IRC: [#sup @ freenode.net](http://webchat.freenode.net/?channels=#sup)
41
42
  * Mailing list: supmua@googlegroups.com (subscribe: supmua+subscribe@googlegroups.com, archive: https://groups.google.com/d/forum/supmua )
42
43
 
44
+ ## Maintenance status
45
+
46
+ Sup is a mature, production-quality mail client. The maintainers are also
47
+ long-term users, and mainly focus on preserving the current feature set. Pull
48
+ requests are very welcome, especially to fix bugs or improve compatibility,
49
+ however pull requests for major new features are unlikely to be merged.
50
+
51
+ ## Alternatives
52
+
53
+ If Sup is missing a feature you are interested in, it might be possible to
54
+ accomplish using Sup's [powerful hooks mechanism][hooks]. Otherwise, here are
55
+ some alternatives to consider:
56
+
57
+ * [Notmuch](https://notmuchmail.org/) was inspired by Sup. There are a wide
58
+ variety of [Notmuch clients](https://notmuchmail.org/frontends/) available.
59
+ The most similar to Sup's look-and-feel is
60
+ [Alot](https://github.com/pazz/alot) &mdash; also a curses-based front end.
61
+ Alot even ships with a
62
+ [built-in](https://github.com/pazz/alot/blob/master/extra/themes/sup)
63
+ [Sup theme](https://github.com/pazz/alot/wiki/Gallery#user-content-theme-sup)!
64
+
65
+ * [mu](https://www.djcbsoftware.nl/code/mu/) /
66
+ [mu4e](https://www.djcbsoftware.nl/code/mu/mu4e.html). Like Sup, a search-based
67
+ email back end, and also implemented using Xapian. The emacs-based front end
68
+ [is quite different](https://www.djcbsoftware.nl/code/mu/mu4e/Other-mail-clients.html).
69
+
43
70
  ## License
44
71
 
45
72
  ```
46
- Copyright (c) 2013 Sup developers.
73
+ Copyright (c) 2013-- Sup developers.
47
74
  Copyright (c) 2006--2009 William Morgan.
48
75
 
49
76
  This program is free software; you can redistribute it and/or
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
1
  require 'rake/testtask'
2
2
  require "bundler/gem_tasks"
3
3
 
4
+ # Manifest.txt file in same folder as this Rakefile
5
+ manifest_filename = "#{File.dirname(__FILE__)}/Manifest.txt"
6
+ git_ls_files_command = "git ls-files | LC_ALL=C sort"
7
+
4
8
  Rake::TestTask.new(:test) do |test|
5
9
  test.libs << 'test'
6
10
  test.test_files = FileList.new('test/**/test_*.rb')
@@ -9,7 +13,7 @@ end
9
13
  task :default => :test
10
14
 
11
15
  task :build => [:man]
12
- task :travis => [:test, :build]
16
+ task :ci => [:test, :rubocop_packaging, :check_manifest, :build]
13
17
 
14
18
  def test_pandoc
15
19
  return system("pandoc -v > /dev/null 2>&1")
@@ -50,3 +54,38 @@ task :clean do
50
54
  FileUtils.rm_r d if Dir.exist? d
51
55
  end
52
56
  end
57
+
58
+ task :manifest do
59
+ manifest = `#{git_ls_files_command}`
60
+ if $?.success? then
61
+ puts "Writing `git ls-files` output to #{manifest_filename}"
62
+ File.write(manifest_filename, manifest, mode: 'w')
63
+ else
64
+ abort "Failed to generate Manifest.txt (with `git ls-files`)"
65
+ end
66
+ end
67
+
68
+ task :check_manifest do
69
+ manifest = `#{git_ls_files_command}`
70
+ manifest_file_contents = File.read(manifest_filename)
71
+ if manifest == manifest_file_contents
72
+ puts "Manifest.txt OK"
73
+ else
74
+ puts "Manifest from `git ls-files`:\n#{manifest}"
75
+ STDERR.puts "Manifest.txt outdated. Please commit an updated Manifest.txt"
76
+ STDERR.puts "To generate Manifest.txt, run: rake manifest"
77
+ abort "Manifest.txt does not match `git ls-files`"
78
+ end
79
+ end
80
+
81
+ task :rubocop_packaging do
82
+ if /^2\.[012]\./ =~ RUBY_VERSION
83
+ puts "skipping rubocop-packaging checks on unsupported Ruby #{RUBY_VERSION}"
84
+ next
85
+ end
86
+ if system("rubocop --only Packaging")
87
+ puts "rubocop-packaging checks OK"
88
+ else
89
+ abort "rubocop-packaging checks failed"
90
+ end
91
+ end
data/bin/sup CHANGED
@@ -7,6 +7,7 @@ require 'ncursesw'
7
7
 
8
8
  require 'sup/util/ncurses'
9
9
  require 'sup/util/locale_fiddler'
10
+ require 'sup/util/axe'
10
11
 
11
12
  no_gpgme = false
12
13
  begin
@@ -16,7 +17,7 @@ rescue LoadError
16
17
  end
17
18
 
18
19
  require 'fileutils'
19
- require 'trollop'
20
+ require 'optimist'
20
21
  require "sup"
21
22
 
22
23
  if ENV['SUP_PROFILE']
@@ -28,7 +29,7 @@ if no_gpgme
28
29
  info "No 'gpgme' gem detected. Install it for email encryption, decryption and signatures."
29
30
  end
30
31
 
31
- $opts = Trollop::options do
32
+ $opts = Optimist::options do
32
33
  version "sup v#{Redwood::VERSION}"
33
34
  banner <<EOS
34
35
  Sup is a curses-based email client.
@@ -38,7 +39,8 @@ Usage:
38
39
 
39
40
  Options are:
40
41
  EOS
41
- opt :list_hooks, "List all hooks and descriptions, and quit."
42
+ opt :list_hooks, "List all hooks and descriptions, and quit. Use --hooks-matching to filter."
43
+ opt :hooks_matching, "If given, list all hooks and descriptions matching the given pattern. Needs the --list-hooks option", short: "m", default: ""
42
44
  opt :no_threads, "Turn off threading. Helps with debugging. (Necessarily disables background polling for new messages.)"
43
45
  opt :no_initial_poll, "Don't poll for new messages when starting."
44
46
  opt :search, "Search for this query upon startup", :type => String
@@ -46,7 +48,7 @@ EOS
46
48
  opt :subject, "When composing, use this subject", :type => String, :short => "j"
47
49
  end
48
50
 
49
- Trollop::die :subject, "requires --compose" if $opts[:subject] && !$opts[:compose]
51
+ Optimist::die :subject, "requires --compose" if $opts[:subject] && !$opts[:compose]
50
52
 
51
53
  Redwood::HookManager.register "startup", <<EOS
52
54
  Executes at startup
@@ -64,7 +66,7 @@ EOS
64
66
 
65
67
  if $opts[:list_hooks]
66
68
  Redwood.start
67
- Redwood::HookManager.print_hooks
69
+ Redwood::HookManager.print_hooks $opts[:hooks_matching]
68
70
  exit
69
71
  end
70
72
 
data/bin/sup-add CHANGED
@@ -3,11 +3,11 @@
3
3
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
4
 
5
5
  require 'uri'
6
- require 'highline/import'
7
- require 'trollop'
6
+ require 'optimist'
8
7
  require "sup"
8
+ require 'sup/util/axe'
9
9
 
10
- $opts = Trollop::options do
10
+ $opts = Optimist::options do
11
11
  version "sup-add (sup #{Redwood::VERSION})"
12
12
  banner <<EOS
13
13
  Adds a source to the Sup source list.
@@ -35,7 +35,7 @@ EOS
35
35
  opt :force_account, "Reuse previously defined account user@hostname.", :type => String
36
36
  end
37
37
 
38
- Trollop::die "require one or more sources" if ARGV.empty?
38
+ Optimist::die "require one or more sources" if ARGV.empty?
39
39
 
40
40
  ## for sources that require login information, prompt the user for
41
41
  ## that. also provide a list of previously-defined login info to
@@ -53,11 +53,11 @@ def get_login_info uri, sources
53
53
  if $opts[:force_account]
54
54
  host, username, password = accounts.find { |h, u, p| $opts[:force_account] == "#{u}@#{h}" }
55
55
  unless username && password
56
- say "No previous account #{$opts[:force_account].inspect} found."
56
+ @cli.say "No previous account #{$opts[:force_account].inspect} found."
57
57
  end
58
58
  else
59
- say "Would you like to use the same account as for a previous source for #{uri}?"
60
- choose do |menu|
59
+ @cli.say "Would you like to use the same account as for a previous source for #{uri}?"
60
+ @cli.choose do |menu|
61
61
  accounts.each do |host, olduser, oldpw|
62
62
  menu.choice("Use the account info for #{olduser}@#{host}") { username, password = olduser, oldpw }
63
63
  end
@@ -68,15 +68,15 @@ def get_login_info uri, sources
68
68
  end
69
69
 
70
70
  unless username && password
71
- username = ask("Username for #{uri.host}: ");
72
- password = ask("Password for #{uri.host}: ") { |q| q.echo = false }
71
+ username = @cli.ask("Username for #{uri.host}: ");
72
+ password = @cli.ask("Password for #{uri.host}: ") { |q| q.echo = false }
73
73
  puts # why?
74
74
  end
75
75
 
76
76
  [username, password]
77
77
  end
78
78
 
79
- $terminal.wrap_at = :auto
79
+ @cli.wrap_at = :auto
80
80
  Redwood::start
81
81
  index = Redwood::Index.init
82
82
  index.load
@@ -90,24 +90,20 @@ begin
90
90
  labels = $opts[:labels] ? $opts[:labels].split(/\s*,\s*/).uniq : []
91
91
 
92
92
  if !$opts[:force_new] && Redwood::SourceManager.source_for(uri)
93
- say "Already know about #{uri}; skipping."
93
+ @cli.say "Already know about #{uri}; skipping."
94
94
  next
95
95
  end
96
96
 
97
- parsed_uri = URI(URI.escape(uri))
98
-
99
97
  source =
100
- case parsed_uri.scheme
101
- when "maildir"
98
+ case uri
99
+ when /^maildir:/
102
100
  Redwood::Maildir.new uri, !$opts[:unusual], $opts[:archive], $opts[:sync_back], nil, labels
103
- when "mbox"
101
+ when /^mbox:/
104
102
  Redwood::MBox.new uri, !$opts[:unusual], $opts[:archive], nil, labels
105
103
  when nil
106
- Trollop::die "Sources must be specified with an URI"
107
- else
108
- Trollop::die "Unknown source type #{parsed_uri.scheme.inspect}"
104
+ Optimist::die "Sources must be specified with a maildir:// or mbox:// URI"
109
105
  end
110
- say "Adding #{source}..."
106
+ @cli.say "Adding #{source}..."
111
107
  Redwood::SourceManager.add_source source
112
108
  end
113
109
  ensure