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.
- checksums.yaml +5 -5
- data/.github/workflows/checks.yml +70 -0
- data/.gitignore +1 -3
- data/.rubocop.yml +5 -0
- data/CONTRIBUTORS +14 -5
- data/Gemfile +6 -1
- data/History.txt +76 -0
- data/Manifest.txt +149 -0
- data/README.md +32 -5
- data/Rakefile +40 -1
- data/bin/sup +7 -5
- data/bin/sup-add +16 -20
- data/bin/sup-config +30 -44
- data/bin/sup-dump +2 -2
- data/bin/sup-import-dump +4 -4
- data/bin/sup-sync +3 -3
- data/bin/sup-sync-back-maildir +2 -2
- data/bin/sup-tweak-labels +5 -5
- data/ext/mkrf_conf_xapian.rb +10 -4
- data/lib/sup/colormap.rb +1 -1
- data/lib/sup/crypto.rb +17 -8
- data/lib/sup/hook.rb +9 -9
- data/lib/sup/index.rb +20 -7
- data/lib/sup/keymap.rb +1 -1
- data/lib/sup/logger.rb +1 -1
- data/lib/sup/maildir.rb +4 -4
- data/lib/sup/mbox.rb +4 -4
- data/lib/sup/message.rb +26 -15
- data/lib/sup/message_chunks.rb +29 -20
- data/lib/sup/mode.rb +1 -0
- data/lib/sup/modes/completion_mode.rb +0 -1
- data/lib/sup/modes/contact_list_mode.rb +1 -0
- data/lib/sup/modes/file_browser_mode.rb +2 -2
- data/lib/sup/modes/label_list_mode.rb +1 -1
- data/lib/sup/modes/reply_mode.rb +3 -1
- data/lib/sup/modes/search_list_mode.rb +2 -2
- data/lib/sup/modes/thread_index_mode.rb +1 -1
- data/lib/sup/modes/thread_view_mode.rb +15 -13
- data/lib/sup/rfc2047.rb +21 -6
- data/lib/sup/source.rb +9 -3
- data/lib/sup/textfield.rb +0 -1
- data/lib/sup/thread.rb +0 -1
- data/lib/sup/util/axe.rb +17 -0
- data/lib/sup/util/ncurses.rb +3 -3
- data/lib/sup/util.rb +42 -67
- data/lib/sup/version.rb +10 -1
- data/lib/sup.rb +13 -8
- data/man/sup-add.1 +34 -55
- data/man/sup-config.1 +23 -36
- data/man/sup-dump.1 +25 -35
- data/man/sup-import-dump.1 +33 -54
- data/man/sup-psych-ify-config-files.1 +25 -34
- data/man/sup-recover-sources.1 +34 -49
- data/man/sup-sync-back-maildir.1 +39 -60
- data/man/sup-sync.1 +49 -79
- data/man/sup-tweak-labels.1 +35 -58
- data/man/sup.1 +50 -62
- data/sup.gemspec +12 -9
- data/test/dummy_source.rb +21 -15
- data/test/fixtures/embedded-message.eml +34 -0
- data/test/fixtures/mailing-list-header.eml +80 -0
- data/test/fixtures/non-ascii-header-in-nested-message.eml +36 -0
- data/test/fixtures/non-ascii-header.eml +8 -0
- data/test/fixtures/rfc2047-header-encoding.eml +15 -0
- data/test/fixtures/text-attachments-with-charset.eml +60 -0
- data/test/fixtures/utf8-header.eml +17 -0
- data/test/fixtures/zimbra-quote-with-bottom-post.eml +27 -0
- data/test/gnupg_test_home/gpg.conf +2 -1
- data/test/gnupg_test_home/private-keys-v1.d/306D2EE90FF0014B5B9FD07E265C751791674140.key +0 -0
- data/test/gnupg_test_home/pubring.gpg +0 -0
- data/test/gnupg_test_home/receiver_pubring.gpg +0 -0
- data/test/gnupg_test_home/receiver_secring.gpg +0 -0
- data/test/gnupg_test_home/regen_keys.sh +69 -18
- data/test/gnupg_test_home/secring.gpg +0 -0
- data/test/gnupg_test_home/sup-test-2@foo.bar.asc +20 -22
- data/test/integration/test_mbox.rb +1 -1
- data/test/integration/test_sup-add.rb +83 -0
- data/test/test_crypto.rb +46 -0
- data/test/test_header_parsing.rb +9 -1
- data/test/test_helper.rb +7 -4
- data/test/test_message.rb +188 -22
- data/test/test_messages_dir.rb +13 -15
- data/test/unit/test_horizontal_selector.rb +4 -4
- data/test/unit/test_locale_fiddler.rb +1 -1
- data/test/unit/util/test_query.rb +10 -4
- data/test/unit/util/test_string.rb +9 -3
- data/test/unit/util/test_uri.rb +2 -2
- metadata +93 -51
- data/.travis.yml +0 -13
- data/bin/sup-psych-ify-config-files +0 -21
- data/test/gnupg_test_home/key1.gen +0 -15
- data/test/gnupg_test_home/key2.gen +0 -15
- data/test/gnupg_test_home/key_ecc.gen +0 -13
- data/test/gnupg_test_home/private-keys-v1.d/719C7455A7169C6EE8819C6E91002E4F9DD00A65.key +0 -1
- data/test/gnupg_test_home/private-keys-v1.d/8A130806A754AA29D59487D76BD355040D9F26C0.key +0 -0
- data/test/gnupg_test_home/private-keys-v1.d/B7AA46B22BD8A6AD1B4F266C19A3B124A32DDD71.key +0 -0
- data/test/gnupg_test_home/private-keys-v1.d/FA64ACD7CC871371BDF57285A6CDF0E618827783.key +0 -0
- data/test/integration/test_label_service.rb +0 -18
- data/test/test_yaml_migration.rb +0 -85
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 93d027a0f383edb73d1a2900ca991d8d8d8daca922f0088c18f5281ca04daeb4
|
|
4
|
+
data.tar.gz: 31b25e512227252a498baa651ea9b026ba452274dd5c67c99412dc2ef54f3e7a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
data/.rubocop.yml
ADDED
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
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 [
|
|
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](
|
|
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) — 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
|
|
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 :
|
|
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 '
|
|
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 =
|
|
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
|
-
|
|
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 '
|
|
7
|
-
require 'trollop'
|
|
6
|
+
require 'optimist'
|
|
8
7
|
require "sup"
|
|
8
|
+
require 'sup/util/axe'
|
|
9
9
|
|
|
10
|
-
$opts =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
101
|
-
when
|
|
98
|
+
case uri
|
|
99
|
+
when /^maildir:/
|
|
102
100
|
Redwood::Maildir.new uri, !$opts[:unusual], $opts[:archive], $opts[:sync_back], nil, labels
|
|
103
|
-
when
|
|
101
|
+
when /^mbox:/
|
|
104
102
|
Redwood::MBox.new uri, !$opts[:unusual], $opts[:archive], nil, labels
|
|
105
103
|
when nil
|
|
106
|
-
|
|
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
|