sup 0.22.1 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
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