doing 2.1.31pre → 2.1.35
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 +4 -4
- data/CHANGELOG.md +58 -1
- data/Dockerfile-2.6 +3 -1
- data/Dockerfile-2.7 +4 -2
- data/Dockerfile-3.0 +3 -1
- data/Gemfile.lock +1 -71
- data/README.md +1 -1
- data/bash_profile +13 -0
- data/bin/commands/config.rb +16 -13
- data/bin/commands/done.rb +1 -1
- data/bin/commands/grep.rb +2 -29
- data/bin/commands/meanwhile.rb +1 -1
- data/bin/commands/now.rb +1 -1
- data/bin/commands/on.rb +6 -16
- data/bin/commands/open.rb +2 -2
- data/bin/commands/recent.rb +2 -14
- data/bin/commands/rotate.rb +17 -0
- data/bin/commands/sections.rb +82 -7
- data/bin/commands/show.rb +1 -21
- data/bin/commands/since.rb +5 -16
- data/bin/commands/tag_dir.rb +27 -3
- data/bin/commands/today.rb +3 -28
- data/bin/commands/yesterday.rb +2 -35
- data/bin/doing +9 -8
- data/docs/doc/Array.html +1 -1
- data/docs/doc/BooleanTermParser/Clause.html +1 -1
- data/docs/doc/BooleanTermParser/Operator.html +1 -1
- data/docs/doc/BooleanTermParser/Query.html +1 -1
- data/docs/doc/BooleanTermParser/QueryParser.html +1 -1
- data/docs/doc/BooleanTermParser/QueryTransformer.html +1 -1
- data/docs/doc/BooleanTermParser.html +1 -1
- data/docs/doc/Doing/Color.html +1 -1
- data/docs/doc/Doing/Completion.html +1 -1
- data/docs/doc/Doing/Configuration.html +3 -3
- data/docs/doc/Doing/Errors/DoingNoTraceError.html +1 -1
- data/docs/doc/Doing/Errors/DoingRuntimeError.html +1 -1
- data/docs/doc/Doing/Errors/DoingStandardError.html +1 -1
- data/docs/doc/Doing/Errors/EmptyInput.html +1 -1
- data/docs/doc/Doing/Errors/NoResults.html +1 -1
- data/docs/doc/Doing/Errors/PluginException.html +1 -1
- data/docs/doc/Doing/Errors/UserCancelled.html +1 -1
- data/docs/doc/Doing/Errors/WrongCommand.html +1 -1
- data/docs/doc/Doing/Errors.html +1 -1
- data/docs/doc/Doing/Hooks.html +1 -1
- data/docs/doc/Doing/Item.html +20 -3
- data/docs/doc/Doing/Items.html +209 -1
- data/docs/doc/Doing/LogAdapter.html +1 -1
- data/docs/doc/Doing/Logger.html +1807 -0
- data/docs/doc/Doing/Note.html +1 -1
- data/docs/doc/Doing/Pager.html +1 -1
- data/docs/doc/Doing/Plugins.html +1 -1
- data/docs/doc/Doing/Prompt.html +1 -1
- data/docs/doc/Doing/Section.html +1 -1
- data/docs/doc/Doing/TemplateString.html +1 -1
- data/docs/doc/Doing/Types.html +3 -3
- data/docs/doc/Doing/Util/Backup.html +1 -1
- data/docs/doc/Doing/Util.html +1 -1
- data/docs/doc/Doing/WWID.html +3 -53
- data/docs/doc/Doing.html +4 -4
- data/docs/doc/FalseClass.html +1 -1
- data/docs/doc/GLI/Commands/Help.html +1 -1
- data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +1 -1
- data/docs/doc/GLI/Commands.html +1 -1
- data/docs/doc/GLI.html +1 -1
- data/docs/doc/Hash.html +1 -1
- data/docs/doc/Object.html +1 -1
- data/docs/doc/PhraseParser/Operator.html +1 -1
- data/docs/doc/PhraseParser/PhraseClause.html +1 -1
- data/docs/doc/PhraseParser/Query.html +1 -1
- data/docs/doc/PhraseParser/QueryParser.html +1 -1
- data/docs/doc/PhraseParser/QueryTransformer.html +1 -1
- data/docs/doc/PhraseParser/TermClause.html +1 -1
- data/docs/doc/PhraseParser.html +1 -1
- data/docs/doc/Status.html +1 -1
- data/docs/doc/String.html +1 -1
- data/docs/doc/Symbol.html +1 -1
- data/docs/doc/Time.html +1 -1
- data/docs/doc/TrueClass.html +1 -1
- data/docs/doc/_index.html +10 -10
- data/docs/doc/class_list.html +1 -1
- data/docs/doc/file.README.html +2 -2
- data/docs/doc/index.html +2 -2
- data/docs/doc/method_list.html +407 -383
- data/docs/doc/top-level-namespace.html +1 -1
- data/docs/index.md +1 -1
- data/doing.gemspec +23 -24
- data/doing.rdoc +235 -18
- data/inputrc +57 -0
- data/lib/completion/_doing.zsh +47 -51
- data/lib/completion/doing.bash +12 -23
- data/lib/completion/doing.fish +39 -12
- data/lib/doing/add_options.rb +36 -1
- data/lib/doing/changelog/changes.rb +1 -1
- data/lib/doing/chronify/string.rb +1 -1
- data/lib/doing/completion/bash_completion.rb +1 -1
- data/lib/doing/completion/fish_completion.rb +2 -2
- data/lib/doing/completion/zsh_completion.rb +10 -4
- data/lib/doing/configuration.rb +7 -1
- data/lib/doing/item.rb +9 -2
- data/lib/doing/items.rb +48 -0
- data/lib/doing/{log_adapter.rb → logger.rb} +8 -2
- data/lib/doing/plugins/import/calendar_import.rb +1 -1
- data/lib/doing/plugins/import/doing_import.rb +1 -1
- data/lib/doing/plugins/import/timing_import.rb +1 -1
- data/lib/doing/string/tags.rb +1 -1
- data/lib/doing/types.rb +2 -2
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +43 -43
- data/lib/doing.rb +4 -4
- data/lib/examples/plugins/capture_thing_import.rb +1 -1
- data/lib/helpers/threaded_tests.rb +2 -0
- metadata +101 -138
- data/.yardoc/checksums +0 -30
- data/.yardoc/complete +0 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/bin/commands/add_section.rb +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c3baa4d1dff66b135022d39086ac551ece87361d14c70639bbe58ac5c9499dab
|
|
4
|
+
data.tar.gz: 6c2ad9f3af8b875282cd2c57468b8b34d34f8e6adc17641aefe2974b32629e7b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c74473d2060b9431c5aad63a2ad10fdb370b32789a5db4f6a0fc28552498361a42b0670a31dc3c4e344f04b4e2af2114a4fa545fb0362b4a7161a5105911a0b
|
|
7
|
+
data.tar.gz: 7f2567fb0fbd60a90064c5c8f1cfa5466dae5876ccbf0ff16580d3593f4fac6643924c2ef0315dc6dda8a76933292d523ccdfbecff6eb7cc8a18dc417ec9c752
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,61 @@
|
|
|
1
|
-
### 2.1.
|
|
1
|
+
### 2.1.35
|
|
2
|
+
|
|
3
|
+
2022-02-21 14:53
|
|
4
|
+
|
|
5
|
+
#### FIXED
|
|
6
|
+
|
|
7
|
+
- Revert switch to sys-uname, hopefully solve crash
|
|
8
|
+
|
|
9
|
+
### 2.1.34
|
|
10
|
+
|
|
11
|
+
2022-02-20 09:32
|
|
12
|
+
|
|
13
|
+
#### IMPROVED
|
|
14
|
+
|
|
15
|
+
- Allow `--from 8am` time range without end time to mean `8am to 11:59pm`
|
|
16
|
+
- `--tag_order` for commands with `--totals` output that were missing it
|
|
17
|
+
- Tag and search filters for on, since, today and yesterday
|
|
18
|
+
- Time filters for today and yesterday
|
|
19
|
+
- `--only_timed` filter for yesterday
|
|
20
|
+
- `--only_timed` for today
|
|
21
|
+
- Remove exact duplicates from content before saving
|
|
22
|
+
- `doing sections` now has subcommands -- `sections list`, `sections add SECTION` (replaces `add_section`) and `sections remove SECTION` allows removal of a section and archiving of its contents
|
|
23
|
+
|
|
24
|
+
#### FIXED
|
|
25
|
+
|
|
26
|
+
- `doing yesterday --from` not filtering time range
|
|
27
|
+
- Don't return a duration or interval for entries configured as never_time or never_finish
|
|
28
|
+
- `--from` time filter for yesterday
|
|
29
|
+
- Regex error in `doing archive`
|
|
30
|
+
- `--times` error in `doing today`
|
|
31
|
+
|
|
32
|
+
### 2.1.33
|
|
33
|
+
|
|
34
|
+
2022-02-18 12:09
|
|
35
|
+
|
|
36
|
+
#### FIXED
|
|
37
|
+
|
|
38
|
+
- Major fixes for completion scripts, especially zsh
|
|
39
|
+
|
|
40
|
+
### 2.1.32
|
|
41
|
+
|
|
42
|
+
2022-02-18 08:34
|
|
43
|
+
|
|
44
|
+
#### NEW
|
|
45
|
+
|
|
46
|
+
- `doing config set --local` flag to force updates to local .doingrc, creating if it doesn't exist, and bypassing menu selection
|
|
47
|
+
|
|
48
|
+
#### IMPROVED
|
|
49
|
+
|
|
50
|
+
- `doing tag_dir` will not allow duplicate tags or tags that are already applied by a config higher up the hierarchy
|
|
51
|
+
- `doing tag_dir` will force updates to .doingrc in the current directory rather than offering a menu
|
|
52
|
+
|
|
53
|
+
#### FIXED
|
|
54
|
+
|
|
55
|
+
- When running without subcommand, e.g. `doing this thing`, the first word was being lost
|
|
56
|
+
- Remove blank lines when running `doing changes --changes --md` (output changes only in Markdown format)
|
|
57
|
+
|
|
58
|
+
### 2.1.31
|
|
2
59
|
|
|
3
60
|
2022-02-17 12:59
|
|
4
61
|
|
data/Dockerfile-2.6
CHANGED
data/Dockerfile-2.7
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
FROM ruby:2.7
|
|
2
|
-
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
2
|
+
# RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
3
3
|
RUN mkdir /doing
|
|
4
4
|
WORKDIR /doing
|
|
5
5
|
# COPY ./ /doing/
|
|
6
6
|
RUN gem install bundler:2.2.17
|
|
7
7
|
RUN apt-get update -y
|
|
8
|
-
RUN apt-get install -y less
|
|
8
|
+
RUN apt-get install -y less vim
|
|
9
|
+
COPY ./inputrc /root/.inputrc
|
|
10
|
+
COPY ./bash_profile /root/.bash_profile
|
|
9
11
|
CMD ["scripts/runtests.sh"]
|
data/Dockerfile-3.0
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
doing (2.1.
|
|
4
|
+
doing (2.1.35)
|
|
5
5
|
chronic (~> 0.10, >= 0.10.2)
|
|
6
6
|
deep_merge (~> 1.2, >= 1.2.1)
|
|
7
7
|
gli (~> 2.20, >= 2.20.1)
|
|
@@ -9,7 +9,6 @@ PATH
|
|
|
9
9
|
parslet (~> 2.0, >= 2.0.0)
|
|
10
10
|
plist (~> 3.6, >= 3.6.0)
|
|
11
11
|
safe_yaml (~> 1.0)
|
|
12
|
-
sys-uname (~> 1.2, >= 1.2.2)
|
|
13
12
|
tty-link (~> 0.1, >= 0.1.1)
|
|
14
13
|
tty-markdown (~> 0.7, >= 0.7.0)
|
|
15
14
|
tty-progressbar (~> 0.18, >= 0.18.2)
|
|
@@ -20,68 +19,15 @@ PATH
|
|
|
20
19
|
GEM
|
|
21
20
|
remote: http://rubygems.org/
|
|
22
21
|
specs:
|
|
23
|
-
activesupport (7.0.1)
|
|
24
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
25
|
-
i18n (>= 1.6, < 2)
|
|
26
|
-
minitest (>= 5.1)
|
|
27
|
-
tzinfo (~> 2.0)
|
|
28
|
-
aruba (1.0.4)
|
|
29
|
-
childprocess (>= 2.0, < 5.0)
|
|
30
|
-
contracts (~> 0.16.0)
|
|
31
|
-
cucumber (>= 2.4, < 6.0)
|
|
32
|
-
rspec-expectations (~> 3.4)
|
|
33
|
-
thor (~> 1.0)
|
|
34
|
-
builder (3.2.4)
|
|
35
|
-
childprocess (4.1.0)
|
|
36
22
|
chronic (0.10.2)
|
|
37
|
-
concurrent-ruby (1.1.9)
|
|
38
|
-
contracts (0.16.1)
|
|
39
|
-
cucumber (5.3.0)
|
|
40
|
-
builder (~> 3.2, >= 3.2.4)
|
|
41
|
-
cucumber-core (~> 8.0, >= 8.0.1)
|
|
42
|
-
cucumber-create-meta (~> 2.0, >= 2.0.2)
|
|
43
|
-
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
|
44
|
-
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
|
45
|
-
cucumber-html-formatter (~> 9.0, >= 9.0.0)
|
|
46
|
-
cucumber-messages (~> 13.1, >= 13.1.0)
|
|
47
|
-
cucumber-wire (~> 4.0, >= 4.0.1)
|
|
48
|
-
diff-lcs (~> 1.4, >= 1.4.4)
|
|
49
|
-
multi_test (~> 0.1, >= 0.1.2)
|
|
50
|
-
sys-uname (~> 1.2, >= 1.2.1)
|
|
51
|
-
cucumber-core (8.0.1)
|
|
52
|
-
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
|
53
|
-
cucumber-messages (~> 13.0, >= 13.0.1)
|
|
54
|
-
cucumber-tag-expressions (~> 2.0, >= 2.0.4)
|
|
55
|
-
cucumber-create-meta (2.0.4)
|
|
56
|
-
cucumber-messages (~> 13.1, >= 13.1.0)
|
|
57
|
-
sys-uname (~> 1.2, >= 1.2.1)
|
|
58
|
-
cucumber-cucumber-expressions (10.3.0)
|
|
59
|
-
cucumber-gherkin (15.0.2)
|
|
60
|
-
cucumber-messages (~> 13.0, >= 13.0.1)
|
|
61
|
-
cucumber-html-formatter (9.0.0)
|
|
62
|
-
cucumber-messages (~> 13.0, >= 13.0.1)
|
|
63
|
-
cucumber-messages (13.2.1)
|
|
64
|
-
protobuf-cucumber (~> 3.10, >= 3.10.8)
|
|
65
|
-
cucumber-tag-expressions (2.0.4)
|
|
66
|
-
cucumber-wire (4.0.1)
|
|
67
|
-
cucumber-core (~> 8.0, >= 8.0.1)
|
|
68
|
-
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
|
69
|
-
cucumber-messages (~> 13.0, >= 13.0.1)
|
|
70
23
|
deep_merge (1.2.2)
|
|
71
|
-
diff-lcs (1.5.0)
|
|
72
|
-
ffi (1.15.5)
|
|
73
24
|
github-markup (4.0.0)
|
|
74
25
|
gli (2.20.1)
|
|
75
26
|
haml (5.0.4)
|
|
76
27
|
temple (>= 0.8.0)
|
|
77
28
|
tilt
|
|
78
|
-
i18n (1.8.11)
|
|
79
|
-
concurrent-ruby (~> 1.0)
|
|
80
29
|
kramdown (2.3.1)
|
|
81
30
|
rexml
|
|
82
|
-
middleware (0.1.0)
|
|
83
|
-
minitest (5.15.0)
|
|
84
|
-
multi_test (0.1.2)
|
|
85
31
|
parallel (1.21.0)
|
|
86
32
|
parallel_tests (3.7.3)
|
|
87
33
|
parallel
|
|
@@ -90,33 +36,20 @@ GEM
|
|
|
90
36
|
tty-color (~> 0.5)
|
|
91
37
|
plist (3.6.0)
|
|
92
38
|
power_assert (2.0.1)
|
|
93
|
-
protobuf-cucumber (3.10.8)
|
|
94
|
-
activesupport (>= 3.2)
|
|
95
|
-
middleware
|
|
96
|
-
thor
|
|
97
|
-
thread_safe
|
|
98
39
|
rake (13.0.6)
|
|
99
40
|
rdoc (6.3.3)
|
|
100
41
|
redcarpet (3.5.1)
|
|
101
42
|
rexml (3.2.5)
|
|
102
43
|
rouge (3.27.0)
|
|
103
|
-
rspec-expectations (3.10.2)
|
|
104
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
105
|
-
rspec-support (~> 3.10.0)
|
|
106
|
-
rspec-support (3.10.3)
|
|
107
44
|
safe_yaml (1.0.5)
|
|
108
45
|
strings (0.2.1)
|
|
109
46
|
strings-ansi (~> 0.2)
|
|
110
47
|
unicode-display_width (>= 1.5, < 3.0)
|
|
111
48
|
unicode_utils (~> 1.4)
|
|
112
49
|
strings-ansi (0.2.0)
|
|
113
|
-
sys-uname (1.2.2)
|
|
114
|
-
ffi (~> 1.1)
|
|
115
50
|
temple (0.8.2)
|
|
116
51
|
test-unit (3.4.9)
|
|
117
52
|
power_assert
|
|
118
|
-
thor (1.2.1)
|
|
119
|
-
thread_safe (0.3.6)
|
|
120
53
|
tilt (2.0.10)
|
|
121
54
|
tty-color (0.6.0)
|
|
122
55
|
tty-cursor (0.7.1)
|
|
@@ -141,8 +74,6 @@ GEM
|
|
|
141
74
|
tty-spinner (0.9.3)
|
|
142
75
|
tty-cursor (~> 0.7)
|
|
143
76
|
tty-which (0.5.0)
|
|
144
|
-
tzinfo (2.0.4)
|
|
145
|
-
concurrent-ruby (~> 1.0)
|
|
146
77
|
unicode-display_width (2.1.0)
|
|
147
78
|
unicode_utils (1.4.0)
|
|
148
79
|
webrick (1.7.0)
|
|
@@ -154,7 +85,6 @@ PLATFORMS
|
|
|
154
85
|
ruby
|
|
155
86
|
|
|
156
87
|
DEPENDENCIES
|
|
157
|
-
aruba (~> 1.0.2)
|
|
158
88
|
doing!
|
|
159
89
|
github-markup (~> 4.0, >= 4.0.0)
|
|
160
90
|
parallel_tests (~> 3.7, >= 3.7.3)
|
data/README.md
CHANGED
|
@@ -8,7 +8,7 @@ _If you're one of the rare people like me who find this useful, feel free to
|
|
|
8
8
|
|
|
9
9
|
<!--README-->
|
|
10
10
|
|
|
11
|
-
The current version of `doing` is <!--VER-->2.1.
|
|
11
|
+
The current version of `doing` is <!--VER-->2.1.34<!--END VER-->.
|
|
12
12
|
|
|
13
13
|
Find all of the documentation in the [doing wiki][wiki].
|
|
14
14
|
|
data/bash_profile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
export GLI_DEBUG=true
|
|
3
|
+
export EDITOR="/usr/bin/vim"
|
|
4
|
+
alias bdoing="GLI_DEBUG=true bundle exec bin/doing"
|
|
5
|
+
|
|
6
|
+
shopt -s nocaseglob
|
|
7
|
+
shopt -s histappend
|
|
8
|
+
shopt -s histreedit
|
|
9
|
+
shopt -s histverify
|
|
10
|
+
shopt -s cmdhist
|
|
11
|
+
|
|
12
|
+
cd /doing
|
|
13
|
+
bundle install
|
data/bin/commands/config.rb
CHANGED
|
@@ -43,9 +43,9 @@ command :config do |c|
|
|
|
43
43
|
|
|
44
44
|
edit.desc 'Editor to use'
|
|
45
45
|
edit.arg_name 'EDITOR'
|
|
46
|
-
edit.flag %i[e editor]
|
|
46
|
+
edit.flag %i[e editor]
|
|
47
47
|
|
|
48
|
-
if
|
|
48
|
+
if `uname` =~ /Darwin/
|
|
49
49
|
edit.desc 'Application to use'
|
|
50
50
|
edit.arg_name 'APP_NAME'
|
|
51
51
|
edit.flag %i[a app]
|
|
@@ -54,8 +54,8 @@ command :config do |c|
|
|
|
54
54
|
edit.arg_name 'BUNDLE_ID'
|
|
55
55
|
edit.flag %i[b bundle_id]
|
|
56
56
|
|
|
57
|
-
edit.desc "Use the
|
|
58
|
-
edit.switch %i[x default]
|
|
57
|
+
edit.desc "Use the config editor defined in ~/.config/doing/config.yml (#{Doing.setting('editors.config', 'editors.config not set')})"
|
|
58
|
+
edit.switch %i[x default], negatable: false
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
edit.action do |global, options, args|
|
|
@@ -76,7 +76,7 @@ command :config do |c|
|
|
|
76
76
|
|
|
77
77
|
config_file = Doing.config.choose_config
|
|
78
78
|
|
|
79
|
-
if
|
|
79
|
+
if `uname` =~ /Darwin/
|
|
80
80
|
if options[:default]
|
|
81
81
|
editor = Doing::Util.find_default_editor('config')
|
|
82
82
|
if editor
|
|
@@ -191,7 +191,10 @@ command :config do |c|
|
|
|
191
191
|
set.example 'doing config set plug.plugpath ~/my_plugins', desc: 'Key path is fuzzy matched: set the value of plugins.plugin_path'
|
|
192
192
|
|
|
193
193
|
set.desc 'Delete specified key'
|
|
194
|
-
set.switch %i[r remove],
|
|
194
|
+
set.switch %i[r remove], negatable: false
|
|
195
|
+
|
|
196
|
+
set.desc 'Force update to .doingrc in the current directory'
|
|
197
|
+
set.switch %[local], negatable: false
|
|
195
198
|
|
|
196
199
|
set.action do |_global, options, args|
|
|
197
200
|
if args.count < 2 && !options[:remove]
|
|
@@ -202,7 +205,7 @@ command :config do |c|
|
|
|
202
205
|
value = options[:remove] ? nil : args.pop
|
|
203
206
|
keypath = args.join('.')
|
|
204
207
|
real_path = Doing.config.resolve_key_path(keypath, create: true)
|
|
205
|
-
old_value =
|
|
208
|
+
old_value = Doing.config.settings.dig(*real_path)
|
|
206
209
|
old_type = old_value&.class.to_s || nil
|
|
207
210
|
|
|
208
211
|
if old_value.is_a?(Hash) && !options[:remove]
|
|
@@ -216,11 +219,11 @@ command :config do |c|
|
|
|
216
219
|
|
|
217
220
|
end
|
|
218
221
|
|
|
219
|
-
config_file = Doing.config.choose_config(create: true)
|
|
222
|
+
config_file = Doing.config.choose_config(create: true, local: options[:local])
|
|
220
223
|
|
|
221
224
|
cfg = Doing::Util.safe_load_file(config_file) || {}
|
|
222
225
|
|
|
223
|
-
$stderr.puts "Updating #{config_file}".yellow
|
|
226
|
+
$stderr.puts "> Config: Updating #{config_file}".yellow
|
|
224
227
|
|
|
225
228
|
if options[:remove]
|
|
226
229
|
cfg.deep_set(real_path, nil)
|
|
@@ -228,10 +231,10 @@ command :config do |c|
|
|
|
228
231
|
else
|
|
229
232
|
current_value = cfg.dig(*real_path)
|
|
230
233
|
cfg.deep_set(real_path, value.set_type(old_type))
|
|
231
|
-
$stderr.puts "#{'
|
|
232
|
-
$stderr.puts "#{'Inherited:'.yellow} #{(old_value ? old_value.to_s : 'empty').boldwhite}"
|
|
233
|
-
$stderr.puts "#{'
|
|
234
|
-
$stderr.puts "#{'
|
|
234
|
+
$stderr.puts "#{' Key path:'.yellow} #{real_path.join('.').boldwhite}"
|
|
235
|
+
$stderr.puts "#{' Inherited:'.yellow} #{(old_value ? old_value.to_s : 'empty').boldwhite}"
|
|
236
|
+
$stderr.puts "#{' Current:'.yellow} #{ (current_value ? current_value.to_s : 'empty').boldwhite }"
|
|
237
|
+
$stderr.puts "#{' New:'.yellow} #{value.set_type(old_type).to_s.boldwhite}"
|
|
235
238
|
end
|
|
236
239
|
|
|
237
240
|
res = Doing::Prompt.yn('Update selected config', default_response: true)
|
data/bin/commands/done.rb
CHANGED
data/bin/commands/grep.rb
CHANGED
|
@@ -28,31 +28,12 @@ command %i[grep search] do |c|
|
|
|
28
28
|
c.arg_name 'TEMPLATE_STRING'
|
|
29
29
|
c.flag [:template]
|
|
30
30
|
|
|
31
|
-
c.desc 'Show time intervals on @done tasks'
|
|
32
|
-
c.switch %i[t times], default_value: true, negatable: true
|
|
33
|
-
|
|
34
|
-
c.desc 'Show elapsed time on entries without @done tag'
|
|
35
|
-
c.switch [:duration]
|
|
36
|
-
|
|
37
|
-
c.desc 'Show intervals with totals at the end of output'
|
|
38
|
-
c.switch [:totals], default_value: false, negatable: false
|
|
39
|
-
|
|
40
|
-
c.desc 'Sort tags by (name|time)'
|
|
41
|
-
default = Doing.setting('tag_sort').normalize_tag_sort || :name
|
|
42
|
-
c.arg_name 'KEY'
|
|
43
|
-
c.flag [:tag_sort], must_match: REGEX_TAG_SORT, default_value: default, type: TagSortSymbol
|
|
44
|
-
|
|
45
|
-
c.desc 'Only show items with recorded time intervals'
|
|
46
|
-
c.switch [:only_timed], default_value: false, negatable: false
|
|
47
|
-
|
|
48
31
|
# c.desc '[DEPRECATED] Use alternative fuzzy matching for search string'
|
|
49
32
|
# c.switch [:fuzzy], default_value: false, negatable: false
|
|
50
33
|
|
|
51
34
|
c.desc 'Force exact string matching (case sensitive)'
|
|
52
35
|
c.switch %i[x exact], default_value: Doing.config.exact_match?, negatable: Doing.config.exact_match?
|
|
53
36
|
|
|
54
|
-
c.desc 'Show items that *don\'t* match search string'
|
|
55
|
-
c.switch [:not], default_value: false, negatable: false
|
|
56
37
|
|
|
57
38
|
c.desc 'Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]'
|
|
58
39
|
c.arg_name 'TYPE'
|
|
@@ -72,17 +53,9 @@ command %i[grep search] do |c|
|
|
|
72
53
|
c.desc 'Display an interactive menu of results to perform further operations'
|
|
73
54
|
c.switch %i[i interactive], default_value: false, negatable: false
|
|
74
55
|
|
|
75
|
-
|
|
76
|
-
c.arg_name 'QUERY'
|
|
77
|
-
c.flag [:val], multiple: true, must_match: REGEX_VALUE_QUERY
|
|
78
|
-
|
|
79
|
-
c.desc 'Combine multiple tags or value queries using AND, OR, or NOT'
|
|
80
|
-
c.arg_name 'BOOLEAN'
|
|
81
|
-
c.flag [:bool], must_match: REGEX_BOOL,
|
|
82
|
-
default_value: :pattern,
|
|
83
|
-
type: BooleanSymbol
|
|
84
|
-
|
|
56
|
+
add_options(:tag_filter, c)
|
|
85
57
|
add_options(:date_filter, c)
|
|
58
|
+
add_options(:time_display, c)
|
|
86
59
|
|
|
87
60
|
c.action do |_global_options, options, args|
|
|
88
61
|
options[:fuzzy] = false
|
data/bin/commands/meanwhile.rb
CHANGED
data/bin/commands/now.rb
CHANGED
|
@@ -37,7 +37,7 @@ command %i[now next] do |c|
|
|
|
37
37
|
# # c.flag [:a, :app]
|
|
38
38
|
|
|
39
39
|
c.action do |_global_options, options, args|
|
|
40
|
-
|
|
40
|
+
Doing.auto_tag = !options[:noauto]
|
|
41
41
|
|
|
42
42
|
raise InvalidArgument, '--back and --from cannot be used together' if options[:back] && options[:from]
|
|
43
43
|
|
data/bin/commands/on.rb
CHANGED
|
@@ -13,20 +13,6 @@ command :on do |c|
|
|
|
13
13
|
c.arg_name 'NAME'
|
|
14
14
|
c.flag %i[s section], default_value: 'All'
|
|
15
15
|
|
|
16
|
-
c.desc 'Show time intervals on @done tasks'
|
|
17
|
-
c.switch %i[t times], default_value: true, negatable: true
|
|
18
|
-
|
|
19
|
-
c.desc 'Show elapsed time on entries without @done tag'
|
|
20
|
-
c.switch [:duration]
|
|
21
|
-
|
|
22
|
-
c.desc 'Show time totals at the end of output'
|
|
23
|
-
c.switch [:totals], default_value: false, negatable: false
|
|
24
|
-
|
|
25
|
-
c.desc 'Sort tags by (name|time)'
|
|
26
|
-
default = Doing.setting('tag_sort').normalize_tag_sort || :name
|
|
27
|
-
c.arg_name 'KEY'
|
|
28
|
-
c.flag [:tag_sort], must_match: REGEX_TAG_SORT, default_value: default, type: TagSortSymbol
|
|
29
|
-
|
|
30
16
|
c.desc "Output to export format (#{Doing::Plugins.plugin_names(type: :export)})"
|
|
31
17
|
c.arg_name 'FORMAT'
|
|
32
18
|
c.flag %i[o output]
|
|
@@ -39,6 +25,11 @@ command :on do |c|
|
|
|
39
25
|
c.arg_name 'TEMPLATE_STRING'
|
|
40
26
|
c.flag [:template]
|
|
41
27
|
|
|
28
|
+
add_options(:time_display, c)
|
|
29
|
+
add_options(:search, c)
|
|
30
|
+
add_options(:tag_filter, c)
|
|
31
|
+
add_options(:time_filter, c)
|
|
32
|
+
|
|
42
33
|
c.action do |_global_options, options, args|
|
|
43
34
|
raise DoingRuntimeError, %(Invalid output type "#{options[:output]}") if options[:output] && options[:output] !~ Doing::Plugins.plugin_regex(type: :export)
|
|
44
35
|
|
|
@@ -59,7 +50,6 @@ command :on do |c|
|
|
|
59
50
|
options[:times] = true if options[:totals]
|
|
60
51
|
options[:sort_tags] = options[:tag_sort]
|
|
61
52
|
|
|
62
|
-
Doing::Pager.page @wwid.list_date([start, finish], options[:section], options[:times], options[:output],
|
|
63
|
-
{ template: options[:template], config_template: options[:config_template], duration: options[:duration], totals: options[:totals], sort_tags: options[:sort_tags] }).chomp
|
|
53
|
+
Doing::Pager.page @wwid.list_date([start, finish], options[:section], options[:times], options[:output], options).chomp
|
|
64
54
|
end
|
|
65
55
|
end
|
data/bin/commands/open.rb
CHANGED
|
@@ -8,7 +8,7 @@ command :open do |c|
|
|
|
8
8
|
c.arg_name 'COMMAND'
|
|
9
9
|
c.flag %i[e editor]
|
|
10
10
|
|
|
11
|
-
if
|
|
11
|
+
if `uname` =~ /Darwin/
|
|
12
12
|
c.desc 'Open with app name'
|
|
13
13
|
c.arg_name 'APP_NAME'
|
|
14
14
|
c.flag %i[a app]
|
|
@@ -29,7 +29,7 @@ command :open do |c|
|
|
|
29
29
|
|
|
30
30
|
editor = TTY::Which.which(options[:editor])
|
|
31
31
|
system %(#{editor} "#{File.expand_path(@wwid.doing_file)}")
|
|
32
|
-
elsif
|
|
32
|
+
elsif `uname` =~ /Darwin/
|
|
33
33
|
if options[:app]
|
|
34
34
|
system %(open -a "#{options[:app]}" "#{File.expand_path(@wwid.doing_file)}")
|
|
35
35
|
elsif options[:bundle_id]
|
data/bin/commands/recent.rb
CHANGED
|
@@ -12,9 +12,6 @@ command :recent do |c|
|
|
|
12
12
|
c.arg_name 'NAME'
|
|
13
13
|
c.flag %i[s section], default_value: 'All'
|
|
14
14
|
|
|
15
|
-
c.desc 'Show time intervals on @done tasks'
|
|
16
|
-
c.switch %i[t times], default_value: true, negatable: true
|
|
17
|
-
|
|
18
15
|
c.desc "Output using a template from configuration"
|
|
19
16
|
c.arg_name 'TEMPLATE_KEY'
|
|
20
17
|
c.flag [:config_template], type: TemplateName, default_value: 'recent'
|
|
@@ -23,20 +20,11 @@ command :recent do |c|
|
|
|
23
20
|
c.arg_name 'TEMPLATE_STRING'
|
|
24
21
|
c.flag [:template]
|
|
25
22
|
|
|
26
|
-
c.desc 'Show elapsed time on entries without @done tag'
|
|
27
|
-
c.switch [:duration]
|
|
28
|
-
|
|
29
|
-
c.desc 'Show intervals with totals at the end of output'
|
|
30
|
-
c.switch [:totals], default_value: false, negatable: false
|
|
31
|
-
|
|
32
|
-
c.desc 'Sort tags by (name|time)'
|
|
33
|
-
default = Doing.setting('tag_sort').normalize_tag_sort || :name
|
|
34
|
-
c.arg_name 'KEY'
|
|
35
|
-
c.flag [:tag_sort], must_match: REGEX_TAG_SORT, default_value: default, type: TagSortSymbol
|
|
36
|
-
|
|
37
23
|
c.desc 'Select from a menu of matching entries to perform additional operations'
|
|
38
24
|
c.switch %i[i interactive], negatable: false, default_value: false
|
|
39
25
|
|
|
26
|
+
add_options(:time_display, c)
|
|
27
|
+
|
|
40
28
|
c.action do |global_options, options, args|
|
|
41
29
|
section = @wwid.guess_section(options[:section]) || options[:section].cap_first
|
|
42
30
|
|
data/bin/commands/rotate.rb
CHANGED
|
@@ -40,3 +40,20 @@ command :rotate do |c|
|
|
|
40
40
|
@wwid.rotate(options)
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
|
+
|
|
44
|
+
# # @@doctor
|
|
45
|
+
|
|
46
|
+
# desc 'Doing file maintenance.'
|
|
47
|
+
# long_desc %(Duplicate entries compressed to a single entry. This will modify the doing file.)
|
|
48
|
+
# command :doctor do |c|
|
|
49
|
+
# c.example 'doing doctor', desc: 'Clean up the Doing file, sorting and removing duplicates'
|
|
50
|
+
|
|
51
|
+
# c.desc 'Only remove duplicates in the same section'
|
|
52
|
+
# c.switch %i[s same_section], negatable: false, default_value: false
|
|
53
|
+
|
|
54
|
+
# c.action do |_global_options, options, _args|
|
|
55
|
+
# @wwid.content.dedup!(match_section: options[:same_section])
|
|
56
|
+
# @wwid.write(@wwid.doing_file)
|
|
57
|
+
# end
|
|
58
|
+
# end
|
|
59
|
+
|
data/bin/commands/sections.rb
CHANGED
|
@@ -1,11 +1,86 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @@add_section
|
|
4
|
+
desc 'List, add, or remove sections in the Doing file'
|
|
3
5
|
command :sections do |c|
|
|
4
|
-
c.
|
|
5
|
-
|
|
6
|
+
c.default_command :list
|
|
7
|
+
|
|
8
|
+
c.example 'doing sections add Ideas', desc: 'Add a section called Ideas to the doing file'
|
|
9
|
+
c.example 'doing sections remove Reminders', desc: 'Remove the section Reminders'
|
|
10
|
+
c.example 'doing sections list', desc: 'List all sections'
|
|
11
|
+
|
|
12
|
+
c.desc 'Add a section'
|
|
13
|
+
c.arg_name 'SECTION_NAME'
|
|
14
|
+
c.command :add do |add|
|
|
15
|
+
add.action do |_g, _o, args|
|
|
16
|
+
raise InvalidArgument, "Section #{args[0]} already exists" if @wwid.sections.include?(args[0])
|
|
17
|
+
|
|
18
|
+
@wwid.content.add_section(args.join(' ').cap_first, log: true)
|
|
19
|
+
@wwid.write(@wwid.doing_file)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
c.desc 'List sections'
|
|
24
|
+
c.command :list do |list|
|
|
25
|
+
list.desc 'List in single column'
|
|
26
|
+
list.switch %i[c column], negatable: false, default_value: false
|
|
27
|
+
|
|
28
|
+
list.action do |_global_options, options, _args|
|
|
29
|
+
joiner = options[:column] ? "\n" : "\t"
|
|
30
|
+
print @wwid.content.section_titles.join(joiner)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
c.desc 'Remove a section'
|
|
35
|
+
c.arg_name 'SECTION_NAME'
|
|
36
|
+
c.command :remove do |remove|
|
|
37
|
+
remove.desc 'Archive entries in section before deleting. --no-archive permanently deletes section contents'
|
|
38
|
+
remove.switch %i[a archive], default_value: true, negatable: true
|
|
39
|
+
|
|
40
|
+
remove.action do |_g, options, args|
|
|
41
|
+
raise InvalidArgument, '--delete cannot be used with --archive' if options[:delete] && options[:archive]
|
|
42
|
+
|
|
43
|
+
section = args[0].cap_first
|
|
44
|
+
|
|
45
|
+
unless @wwid.sections.include?(section)
|
|
46
|
+
Doing.logger.log_now(:warn, 'Section:', "#{section} not found, did you mean #{guess_section(section)}?")
|
|
47
|
+
raise InvalidArgument, "Section #{args[0]} doesn't exist"
|
|
6
48
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
items = @wwid.content.in_section(section)
|
|
52
|
+
|
|
53
|
+
if items.count.positive?
|
|
54
|
+
res = Doing::Prompt.yn("#{options[:archive] ? 'Archive' : 'Delete'} #{items.count} entries from #{section}", default_response: 'n')
|
|
55
|
+
|
|
56
|
+
if options[:archive] && res
|
|
57
|
+
@wwid.archive(section, {keep: 0})
|
|
58
|
+
elsif res
|
|
59
|
+
items.each { |item| @wwid.content.delete_item(item) }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
@wwid.content.delete_section(section, log: true)
|
|
64
|
+
|
|
65
|
+
@wwid.write(@wwid.doing_file)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# For backward compatibility
|
|
71
|
+
# @@add_section
|
|
72
|
+
command :add_section do |c|
|
|
73
|
+
c.desc 'Archive entries in section before deleting'
|
|
74
|
+
c.switch %i[a archive], default_value: true, negatable: true
|
|
75
|
+
|
|
76
|
+
c.desc 'Permanently delete entries in section'
|
|
77
|
+
c.switch %i[d delete], default_value: false
|
|
78
|
+
|
|
79
|
+
c.action do |g, o, a|
|
|
80
|
+
cmd = commands[:sections].commands[:add]
|
|
81
|
+
|
|
82
|
+
action = cmd.send(:get_action, nil)
|
|
83
|
+
action.call(g, o, a)
|
|
10
84
|
end
|
|
11
85
|
end
|
|
86
|
+
|
data/bin/commands/show.rb
CHANGED
|
@@ -33,27 +33,6 @@ command :show do |c|
|
|
|
33
33
|
c.arg_name 'ORDER'
|
|
34
34
|
c.flag %i[s sort], must_match: REGEX_SORT_ORDER, default_value: :asc, type: OrderSymbol
|
|
35
35
|
|
|
36
|
-
c.desc 'Show time intervals on @done tasks'
|
|
37
|
-
c.switch %i[t times], default_value: true, negatable: true
|
|
38
|
-
|
|
39
|
-
c.desc 'Show elapsed time on entries without @done tag'
|
|
40
|
-
c.switch [:duration]
|
|
41
|
-
|
|
42
|
-
c.desc 'Show intervals with totals at the end of output'
|
|
43
|
-
c.switch [:totals], default_value: false, negatable: false
|
|
44
|
-
|
|
45
|
-
c.desc 'Sort tags by (name|time)'
|
|
46
|
-
default = Doing.setting('tag_sort').normalize_tag_sort || :name
|
|
47
|
-
c.arg_name 'KEY'
|
|
48
|
-
c.flag [:tag_sort], must_match: REGEX_TAG_SORT, default_value: default, type: TagSortSymbol
|
|
49
|
-
|
|
50
|
-
c.desc 'Tag sort direction (asc|desc)'
|
|
51
|
-
c.arg_name 'DIRECTION'
|
|
52
|
-
c.flag [:tag_order], must_match: REGEX_SORT_ORDER, default_value: :asc, type: OrderSymbol
|
|
53
|
-
|
|
54
|
-
c.desc 'Only show items with recorded time intervals'
|
|
55
|
-
c.switch [:only_timed], default_value: false, negatable: false
|
|
56
|
-
|
|
57
36
|
c.desc "Output using a template from configuration"
|
|
58
37
|
c.arg_name 'TEMPLATE_KEY'
|
|
59
38
|
c.flag [:config_template], type: TemplateName, default_value: 'default'
|
|
@@ -72,6 +51,7 @@ command :show do |c|
|
|
|
72
51
|
c.arg_name 'FORMAT'
|
|
73
52
|
c.flag %i[o output]
|
|
74
53
|
|
|
54
|
+
add_options(:time_display, c)
|
|
75
55
|
add_options(:search, c)
|
|
76
56
|
add_options(:tag_filter, c)
|
|
77
57
|
add_options(:date_filter, c)
|