whatnext 3.0__tar.gz → 3.2__tar.gz
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.
- {whatnext-3.0 → whatnext-3.2}/.github/workflows/tests.yml +1 -1
- {whatnext-3.0 → whatnext-3.2}/CHANGELOG.md +19 -0
- {whatnext-3.0 → whatnext-3.2}/PKG-INFO +6 -5
- {whatnext-3.0 → whatnext-3.2}/README.md +4 -4
- {whatnext-3.0 → whatnext-3.2}/docs/usage.md +109 -26
- {whatnext-3.0 → whatnext-3.2}/pyproject.toml +1 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/deferring.md +6 -0
- whatnext-3.2/tasks/ignoring.md +3 -0
- whatnext-3.2/tasks/summaries.md +3 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring.bats +87 -0
- {whatnext-3.0 → whatnext-3.2}/tests/list.bats +3 -0
- {whatnext-3.0 → whatnext-3.2}/tests/matching.bats +78 -0
- {whatnext-3.0 → whatnext-3.2}/tests/summary.bats +13 -13
- {whatnext-3.0 → whatnext-3.2}/tests/usage.bats +9 -3
- {whatnext-3.0 → whatnext-3.2}/whatnext/models.py +0 -12
- {whatnext-3.0 → whatnext-3.2}/whatnext/summary.py +6 -1
- {whatnext-3.0 → whatnext-3.2}/whatnext/whatnext.py +41 -8
- {whatnext-3.0 → whatnext-3.2}/.flake8 +0 -0
- {whatnext-3.0 → whatnext-3.2}/.github/dependabot.yml +0 -0
- {whatnext-3.0 → whatnext-3.2}/.github/workflows/publish.yml +0 -0
- {whatnext-3.0 → whatnext-3.2}/.gitignore +0 -0
- {whatnext-3.0 → whatnext-3.2}/.whatnext +0 -0
- {whatnext-3.0 → whatnext-3.2}/LICENCE +0 -0
- {whatnext-3.0 → whatnext-3.2}/LICENSE +0 -0
- {whatnext-3.0 → whatnext-3.2}/Makefile +0 -0
- {whatnext-3.0 → whatnext-3.2}/archive/done/tasks.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/annotations.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/basics.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/deadlines.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/deferring.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/exclusions.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/index.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/installation.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/next.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/prioritisation.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/docs/sequential.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/archived/projects/tangerine.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/projects/curtain.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/projects/fountain.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/projects/harvest.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/projects/obelisk.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/projects/tinsel.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/tasks.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/example/template.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/scripts/update-usage-examples.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/documentation.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/listing.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/next.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/test_refactor.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_0.1.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_0.2.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_0.3.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_0.4.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_0.5.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_1.0.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_1.1.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_1.2.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks/version_1.3.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tasks.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/colour.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config/.whatnext +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config/.whatnext.alt +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config/apples.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config/oranges.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config-external +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/config.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deadline.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/bare-after.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/circular-a.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/circular-b.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/deferred.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/duplicate-warnings.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/missing-dep.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/needs-absolute.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/needs-subdir.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/phase-misplaced.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/phases-empty.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/phases-partial.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/phases-queue.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/phases.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/regular.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/root-target.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/samename.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/subdir/needs-parent.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/subdir/needs-sibling.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/subdir/samename.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/deferring/subdir/target.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/edit.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/headerless/annotation.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/headerless/deadline.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/housekeeping.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/invalid.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/alternate.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/append-after.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/append.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/empty.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/insert.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/projects/alpha/tasks/things.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/projects/alpha/tasks.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/projects/beta/things.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/something.txt +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next/tasks.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/next.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/notnext.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue/all-complete.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue/blocked.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue/in-progress.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue/normal.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue/prioritised.md +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/queue.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_defer.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_edit.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_file.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_limit.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_output.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_summary.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/test_task.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/tests/version.bats +0 -0
- {whatnext-3.0 → whatnext-3.2}/whatnext/__init__.py +0 -0
- {whatnext-3.0 → whatnext-3.2}/whatnext/guide.txt +0 -0
- {whatnext-3.0 → whatnext-3.2}/whatnext/next.py +0 -0
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [v3.2] - 2026-04-09
|
|
5
|
+
|
|
6
|
+
**Added:**
|
|
7
|
+
- Summary view now shows a progress bar on the totals line.
|
|
8
|
+
- `--ignore-queue` flag to ignore `@queue` constraints.
|
|
9
|
+
- `--ignore-phase` flag to ignore `@phase` constraints.
|
|
10
|
+
- `--ignore-all` flag to ignore all deferral constraints.
|
|
11
|
+
|
|
12
|
+
**Fixes:**
|
|
13
|
+
- Directories are now properly ignored without requiring wildcards,
|
|
14
|
+
(`example/` and `example` both now work, `example/**` continues to work).
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [v3.1] - 2026-03-14
|
|
18
|
+
|
|
19
|
+
**Fixes:**
|
|
20
|
+
- `@after` ignoring dependencies not explicitly in search terms.
|
|
21
|
+
|
|
22
|
+
|
|
4
23
|
## [v3.0] - 2026-02-14
|
|
5
24
|
|
|
6
25
|
**Breaking change:** `@after` filenames are now resolved relative to the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: whatnext
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2
|
|
4
4
|
Summary: A lister of tasks found in Markdown files
|
|
5
5
|
Project-URL: Homepage, https://github.com/norm/whatnext
|
|
6
6
|
Project-URL: Repository, https://github.com/norm/whatnext
|
|
@@ -14,6 +14,7 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
18
|
Requires-Python: >=3.10
|
|
18
19
|
Requires-Dist: termcolor
|
|
19
20
|
Requires-Dist: toml
|
|
@@ -62,15 +63,15 @@ Now run it and it'll tell you what's next, sorting by priority and state:
|
|
|
62
63
|
```bash
|
|
63
64
|
(computer)% whatnext
|
|
64
65
|
README.md:
|
|
65
|
-
#
|
|
66
|
-
- [ ]
|
|
66
|
+
# Make apple pie from scratch / HIGH
|
|
67
|
+
- [ ] invent the universe
|
|
67
68
|
|
|
68
69
|
README.md:
|
|
69
70
|
# What next? / MEDIUM
|
|
70
|
-
- [ ]
|
|
71
|
+
- [ ] an important task
|
|
71
72
|
|
|
72
73
|
README.md:
|
|
73
|
-
#
|
|
74
|
+
# Things for later / IMMINENT 6d
|
|
74
75
|
- [ ] get NYE fireworks tickets
|
|
75
76
|
|
|
76
77
|
README.md:
|
|
@@ -38,15 +38,15 @@ Now run it and it'll tell you what's next, sorting by priority and state:
|
|
|
38
38
|
```bash
|
|
39
39
|
(computer)% whatnext
|
|
40
40
|
README.md:
|
|
41
|
-
#
|
|
42
|
-
- [ ]
|
|
41
|
+
# Make apple pie from scratch / HIGH
|
|
42
|
+
- [ ] invent the universe
|
|
43
43
|
|
|
44
44
|
README.md:
|
|
45
45
|
# What next? / MEDIUM
|
|
46
|
-
- [ ]
|
|
46
|
+
- [ ] an important task
|
|
47
47
|
|
|
48
48
|
README.md:
|
|
49
|
-
#
|
|
49
|
+
# Things for later / IMMINENT 6d
|
|
50
50
|
- [ ] get NYE fireworks tickets
|
|
51
51
|
|
|
52
52
|
README.md:
|
|
@@ -15,23 +15,52 @@ projects/obelisk.md:
|
|
|
15
15
|
# Project Obelisk / Discovery / OVERDUE 31y 2m
|
|
16
16
|
Mess with Jackson
|
|
17
17
|
- [<] watch archaeologists discover (needs time machine)
|
|
18
|
-
|
|
18
|
+
projects/tinsel.md:
|
|
19
|
+
# Project Tinsel / OVERDUE 2w 6d
|
|
20
|
+
- [ ] send Christmas cards
|
|
21
|
+
# Project Tinsel / Christmas dinner / OVERDUE 2d
|
|
22
|
+
- [ ] book Christmas delivery
|
|
23
|
+
|
|
24
|
+
projects/harvest.md:
|
|
25
|
+
# Project Harvest / HIGH
|
|
26
|
+
- [ ] order squash seeds
|
|
27
|
+
# Project Harvest / Spring planting / HIGH
|
|
28
|
+
- [ ] sow tomato seeds indoors
|
|
29
|
+
- [ ] direct sow carrots
|
|
19
30
|
projects/obelisk.md:
|
|
20
31
|
# Project Obelisk / HIGH
|
|
21
32
|
Something something star gate
|
|
22
33
|
- [ ] bury obelisk in desert
|
|
34
|
+
projects/tinsel.md:
|
|
35
|
+
# Project Tinsel / Christmas dinner / HIGH
|
|
36
|
+
- [ ] roast the potatoes
|
|
23
37
|
|
|
24
38
|
tasks.md:
|
|
25
39
|
# Get S Done / MEDIUM
|
|
26
40
|
- [ ] question entire existence
|
|
41
|
+
projects/harvest.md:
|
|
42
|
+
# Project Harvest / MEDIUM
|
|
43
|
+
- [ ] buy copper tape for slugs
|
|
44
|
+
projects/tinsel.md:
|
|
45
|
+
# Project Tinsel / Christmas dinner / MEDIUM
|
|
46
|
+
- [ ] prep the make-ahead gravy
|
|
27
47
|
|
|
28
48
|
tasks.md:
|
|
29
49
|
# Get S Done / IMMINENT 11d
|
|
30
50
|
- [ ] start third project
|
|
51
|
+
projects/tinsel.md:
|
|
52
|
+
# Project Tinsel / Christmas dinner / IMMINENT TODAY
|
|
53
|
+
- [ ] prep sprouts
|
|
31
54
|
|
|
32
55
|
projects/curtain.md:
|
|
33
56
|
# Project Curtain / Final bow
|
|
34
57
|
- [ ] Take a bow
|
|
58
|
+
projects/fountain.md:
|
|
59
|
+
- [ ] nigredo, the blackening or melanosis
|
|
60
|
+
projects/harvest.md:
|
|
61
|
+
# Project Harvest
|
|
62
|
+
- [/] turn compost heap
|
|
63
|
+
- [ ] plan raised bed layout
|
|
35
64
|
projects/obelisk.md:
|
|
36
65
|
# Project Obelisk
|
|
37
66
|
Something something star gate
|
|
@@ -91,11 +120,9 @@ projects/obelisk.md:
|
|
|
91
120
|
# Project Obelisk / Discovery / OVERDUE 31y 2m
|
|
92
121
|
Mess with Jackson
|
|
93
122
|
- [<] watch archaeologists discover (needs time machine)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Something something star gate
|
|
98
|
-
- [ ] bury obelisk in desert
|
|
123
|
+
projects/tinsel.md:
|
|
124
|
+
# Project Tinsel / OVERDUE 2w 6d
|
|
125
|
+
- [ ] send Christmas cards
|
|
99
126
|
```
|
|
100
127
|
|
|
101
128
|
Tasks are shown in priority order, so the limit returns the most urgent first.
|
|
@@ -120,19 +147,42 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
120
147
|
# Project Obelisk / Discovery / OVERDUE 31y 2m
|
|
121
148
|
Mess with Jackson
|
|
122
149
|
- [<] watch archaeologists discover (needs time machine)
|
|
123
|
-
|
|
150
|
+
projects/tinsel.md:
|
|
151
|
+
# Project Tinsel / OVERDUE 2w 6d
|
|
152
|
+
- [ ] send Christmas cards
|
|
153
|
+
# Project Tinsel / Christmas dinner / OVERDUE 2d
|
|
154
|
+
- [ ] book Christmas delivery
|
|
155
|
+
|
|
156
|
+
projects/harvest.md:
|
|
157
|
+
# Project Harvest / HIGH
|
|
158
|
+
- [ ] order squash seeds
|
|
159
|
+
# Project Harvest / Spring planting / HIGH
|
|
160
|
+
- [ ] sow tomato seeds indoors
|
|
161
|
+
- [ ] direct sow carrots
|
|
124
162
|
projects/obelisk.md:
|
|
125
163
|
# Project Obelisk / HIGH
|
|
126
164
|
Something something star gate
|
|
127
165
|
- [ ] bury obelisk in desert
|
|
166
|
+
projects/tinsel.md:
|
|
167
|
+
# Project Tinsel / Christmas dinner / HIGH
|
|
168
|
+
- [ ] roast the potatoes
|
|
128
169
|
|
|
129
170
|
tasks.md:
|
|
130
171
|
# Get S Done / MEDIUM
|
|
131
172
|
- [ ] question entire existence
|
|
173
|
+
projects/harvest.md:
|
|
174
|
+
# Project Harvest / MEDIUM
|
|
175
|
+
- [ ] buy copper tape for slugs
|
|
176
|
+
projects/tinsel.md:
|
|
177
|
+
# Project Tinsel / Christmas dinner / MEDIUM
|
|
178
|
+
- [ ] prep the make-ahead gravy
|
|
132
179
|
|
|
133
180
|
tasks.md:
|
|
134
181
|
# Get S Done / IMMINENT 11d
|
|
135
182
|
- [ ] start third project
|
|
183
|
+
projects/tinsel.md:
|
|
184
|
+
# Project Tinsel / Christmas dinner / IMMINENT TODAY
|
|
185
|
+
- [ ] prep sprouts
|
|
136
186
|
|
|
137
187
|
projects/curtain.md:
|
|
138
188
|
# Project Curtain / Final bow
|
|
@@ -142,12 +192,30 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
142
192
|
# Project Curtain / Close the theatre
|
|
143
193
|
- [ ] Escort everyone out
|
|
144
194
|
- [ ] Shut up shop
|
|
195
|
+
projects/fountain.md:
|
|
196
|
+
- [ ] nigredo, the blackening or melanosis
|
|
197
|
+
- [ ] albedo, the whitening or leucosis
|
|
198
|
+
- [ ] citrinitas, the yellowing or xanthosis
|
|
199
|
+
- [ ] rubedo, the reddening, purpling, or iosis
|
|
200
|
+
projects/harvest.md:
|
|
201
|
+
# Project Harvest
|
|
202
|
+
- [/] turn compost heap
|
|
203
|
+
- [ ] plan raised bed layout
|
|
145
204
|
projects/obelisk.md:
|
|
146
205
|
# Project Obelisk
|
|
147
206
|
Something something star gate
|
|
148
207
|
- [/] carve runes into obelisk
|
|
149
208
|
- [ ] research into runic meaning
|
|
150
209
|
|
|
210
|
+
projects/harvest.md:
|
|
211
|
+
# Project Harvest / Hardening off / FINISHED
|
|
212
|
+
- [X] move seedlings to cold frame
|
|
213
|
+
# Project Harvest / Autumn / FINISHED
|
|
214
|
+
- [#] enter giant marrow contest (too late)
|
|
215
|
+
projects/obelisk.md:
|
|
216
|
+
# Project Obelisk / FINISHED
|
|
217
|
+
Something something star gate
|
|
218
|
+
- [X] secure desert burial site
|
|
151
219
|
archived/projects/tangerine.md:
|
|
152
220
|
# Project Tangerine / FINISHED
|
|
153
221
|
- [X] acquire trebuchet plans
|
|
@@ -156,7 +224,13 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
156
224
|
- [#] throw fruit at neighbours (they moved away)
|
|
157
225
|
```
|
|
158
226
|
|
|
159
|
-
- `--ignore-after` —
|
|
227
|
+
- `--ignore-after` — ignore `@after` constraints.
|
|
228
|
+
|
|
229
|
+
- `--ignore-queue` — ignore `@queue` constraints.
|
|
230
|
+
|
|
231
|
+
- `--ignore-phase` — ignore `@phase` constraints.
|
|
232
|
+
|
|
233
|
+
- `--ignore-all` — ignore all deferral constraints (`@after`, `@phase`, `@queue`).
|
|
160
234
|
|
|
161
235
|
- `-o` / `--open` — show only open tasks.
|
|
162
236
|
|
|
@@ -176,12 +250,15 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
176
250
|
|
|
177
251
|
```bash
|
|
178
252
|
(computer)% whatnext --summary
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
253
|
+
B P O
|
|
254
|
+
░░░░░░░░░░░░░░░░░░░░░░░░ 0 0 3 tasks.md
|
|
255
|
+
░░░░░░░░ 0 0 1 projects/curtain.md
|
|
256
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0 0 4 projects/fountain.md
|
|
257
|
+
▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0 1 5 projects/harvest.md
|
|
258
|
+
▚▚▚▚▚▚▚▚▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░ 1 1 2 projects/obelisk.md
|
|
259
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0 0 5 projects/tinsel.md
|
|
260
|
+
──────
|
|
261
|
+
▚▚▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1 2 20 23, of 33 total
|
|
185
262
|
|
|
186
263
|
▚ Blocked ▓ Partial ░ Open
|
|
187
264
|
```
|
|
@@ -194,13 +271,16 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
194
271
|
|
|
195
272
|
```bash
|
|
196
273
|
(computer)% whatnext --summary --all
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
274
|
+
C D B P O
|
|
275
|
+
░░░░░░░░░░░░░ 0 0 0 0 3 tasks.md
|
|
276
|
+
░░░░░░░░░░░░░░░░░ 0 0 0 0 4 projects/curtain.md
|
|
277
|
+
░░░░░░░░░░░░░░░░░ 0 0 0 0 4 projects/fountain.md
|
|
278
|
+
▚▚▚▚████▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░ 1 1 0 1 5 projects/harvest.md
|
|
279
|
+
████▓▓▓▓▒▒▒▒▒░░░░░░░░ 0 1 1 1 2 projects/obelisk.md
|
|
280
|
+
░░░░░░░░░░░░░░░░░░░░░ 0 0 0 0 5 projects/tinsel.md
|
|
281
|
+
▚▚▚▚█████████████ 1 3 0 0 0 archived/projects/tangerine.md
|
|
282
|
+
──────────
|
|
283
|
+
▚▚█████▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░ 2 5 1 2 23 33, of 33 total
|
|
204
284
|
|
|
205
285
|
▚ Cancelled █ Done ▓ Blocked ▒ Partial ░ Open
|
|
206
286
|
```
|
|
@@ -220,12 +300,15 @@ To show a random selection of tasks rather than by priority, use `5r`.
|
|
|
220
300
|
```bash
|
|
221
301
|
(computer)% whatnext --summary --relative --priority high
|
|
222
302
|
H ~
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
303
|
+
░░░░░░░░░░░░░░░ 0 3 tasks.md
|
|
304
|
+
░░░░░ 0 1 projects/curtain.md
|
|
305
|
+
░░░░░░░░░░░░░░░░░░░░ 0 4 projects/fountain.md
|
|
306
|
+
███████████████░░░░░░░░░░░░░░░░░░░░░░░░░ 3 5 projects/harvest.md
|
|
307
|
+
█████░░░░░░░░░░░░░░░░░░░░ 1 4 projects/obelisk.md
|
|
308
|
+
█████░░░░░░░░░░░░░░░░░░░░ 1 4 projects/tinsel.md
|
|
309
|
+
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
227
310
|
────
|
|
228
|
-
|
|
311
|
+
███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 5 25 30, of 33 total
|
|
229
312
|
|
|
230
313
|
█ High ░ (Overdue/Imminent/Medium/Normal)
|
|
231
314
|
```
|
|
@@ -22,3 +22,9 @@ Later sections also tagged with phase are not shown when earlier phases
|
|
|
22
22
|
are incomplete. Non-tagged sections are shown as normal.
|
|
23
23
|
|
|
24
24
|
- [X] implement \@phase directive for section-level sequencing
|
|
25
|
+
|
|
26
|
+
Be able to ignore deferring controls to list all incomplete tasks.
|
|
27
|
+
|
|
28
|
+
- [X] implement --ignore-queue
|
|
29
|
+
- [X] implement --ignore-phase
|
|
30
|
+
- [X] implement catch-all ignore flag
|
|
@@ -218,6 +218,21 @@ teardown_file() {
|
|
|
218
218
|
[ $status -eq 0 ]
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
@test "dependencies checked when not in search" {
|
|
222
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
223
|
+
tests/deferring/subdir/needs-parent.md:
|
|
224
|
+
- [ ] depends on parent file
|
|
225
|
+
EOF
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
run --separate-stderr \
|
|
229
|
+
whatnext \
|
|
230
|
+
tests/deferring/subdir/needs-parent.md
|
|
231
|
+
|
|
232
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
233
|
+
[ $status -eq 0 ]
|
|
234
|
+
}
|
|
235
|
+
|
|
221
236
|
@test "phase shows next when previous complete" {
|
|
222
237
|
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
223
238
|
tests/deferring/phases-partial.md:
|
|
@@ -305,3 +320,75 @@ teardown_file() {
|
|
|
305
320
|
diff -u <(echo "$expected_stderr") <(echo "$stderr")
|
|
306
321
|
[ $status -eq 0 ]
|
|
307
322
|
}
|
|
323
|
+
|
|
324
|
+
@test "queue can be ignored" {
|
|
325
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
326
|
+
example/projects/fountain.md:
|
|
327
|
+
- [ ] nigredo, the blackening or melanosis
|
|
328
|
+
- [ ] albedo, the whitening or leucosis
|
|
329
|
+
- [ ] citrinitas, the yellowing or xanthosis
|
|
330
|
+
- [ ] rubedo, the reddening, purpling, or iosis
|
|
331
|
+
EOF
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
WHATNEXT_TODAY=2025-01-01 \
|
|
335
|
+
run whatnext --ignore-queue example/projects/fountain.md
|
|
336
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
337
|
+
[ $status -eq 0 ]
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
@test "phase can be ignored" {
|
|
341
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
342
|
+
tests/deferring/phases.md:
|
|
343
|
+
# Bugs
|
|
344
|
+
- [ ] fix bug
|
|
345
|
+
# New feature [phase 1/3]
|
|
346
|
+
- [ ] install dependencies
|
|
347
|
+
# New feature / Implement [phase 2/3]
|
|
348
|
+
- [ ] write code
|
|
349
|
+
# New feature / Test [phase 3/3]
|
|
350
|
+
- [ ] run tests
|
|
351
|
+
EOF
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
run --separate-stderr \
|
|
355
|
+
whatnext \
|
|
356
|
+
--ignore-phase \
|
|
357
|
+
tests/deferring/phases.md
|
|
358
|
+
|
|
359
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
360
|
+
[ $status -eq 0 ]
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
@test "all deferral constraints can be ignored" {
|
|
364
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
365
|
+
example/projects/fountain.md:
|
|
366
|
+
- [ ] nigredo, the blackening or melanosis
|
|
367
|
+
- [ ] albedo, the whitening or leucosis
|
|
368
|
+
- [ ] citrinitas, the yellowing or xanthosis
|
|
369
|
+
- [ ] rubedo, the reddening, purpling, or iosis
|
|
370
|
+
tests/deferring/deferred.md:
|
|
371
|
+
- [ ] wait for regular
|
|
372
|
+
tests/deferring/phases.md:
|
|
373
|
+
# Bugs
|
|
374
|
+
- [ ] fix bug
|
|
375
|
+
# New feature [phase 1/3]
|
|
376
|
+
- [ ] install dependencies
|
|
377
|
+
# New feature / Implement [phase 2/3]
|
|
378
|
+
- [ ] write code
|
|
379
|
+
# New feature / Test [phase 3/3]
|
|
380
|
+
- [ ] run tests
|
|
381
|
+
EOF
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
WHATNEXT_TODAY=2025-01-01 \
|
|
385
|
+
run --separate-stderr \
|
|
386
|
+
whatnext \
|
|
387
|
+
--ignore-all \
|
|
388
|
+
example/projects/fountain.md \
|
|
389
|
+
tests/deferring/deferred.md \
|
|
390
|
+
tests/deferring/phases.md
|
|
391
|
+
|
|
392
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
393
|
+
[ $status -eq 0 ]
|
|
394
|
+
}
|
|
@@ -161,6 +161,9 @@ function setup {
|
|
|
161
161
|
# Project Harvest / MEDIUM
|
|
162
162
|
- [ ] buy copper tape for slugs
|
|
163
163
|
|
|
164
|
+
curtain.md:
|
|
165
|
+
# Project Curtain / Final bow
|
|
166
|
+
- [ ] Take a bow
|
|
164
167
|
fountain.md:
|
|
165
168
|
- [ ] nigredo, the blackening or melanosis
|
|
166
169
|
harvest.md:
|
|
@@ -322,6 +325,9 @@ function setup {
|
|
|
322
325
|
# Project Harvest / MEDIUM
|
|
323
326
|
- [ ] buy copper tape for slugs
|
|
324
327
|
|
|
328
|
+
curtain.md:
|
|
329
|
+
# Project Curtain / Final bow
|
|
330
|
+
- [ ] Take a bow
|
|
325
331
|
fountain.md:
|
|
326
332
|
- [ ] nigredo, the blackening or melanosis
|
|
327
333
|
harvest.md:
|
|
@@ -546,3 +552,75 @@ function setup {
|
|
|
546
552
|
[ -n "$(echo "$output" | grep tasks.md)" ]
|
|
547
553
|
[ $status -eq 0 ]
|
|
548
554
|
}
|
|
555
|
+
|
|
556
|
+
@test "ignore patterns without wildcard only match on whole names" {
|
|
557
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
558
|
+
tasks.md:
|
|
559
|
+
# Get S Done / MEDIUM
|
|
560
|
+
- [ ] question entire existence
|
|
561
|
+
|
|
562
|
+
tasks.md:
|
|
563
|
+
# Get S Done
|
|
564
|
+
- [ ] come up with better projects
|
|
565
|
+
- [ ] start third project
|
|
566
|
+
|
|
567
|
+
archived/projects/tangerine.md:
|
|
568
|
+
# Project Tangerine / FINISHED
|
|
569
|
+
- [X] acquire trebuchet plans
|
|
570
|
+
- [X] source counterweight materials
|
|
571
|
+
- [X] build it
|
|
572
|
+
- [#] throw fruit at neighbours (they moved away)
|
|
573
|
+
EOF
|
|
574
|
+
)
|
|
575
|
+
|
|
576
|
+
echo "ignore = ['projects', 'task']" > "$BATS_TEST_TMPDIR/.whatnext"
|
|
577
|
+
|
|
578
|
+
run --separate-stderr \
|
|
579
|
+
whatnext \
|
|
580
|
+
--config "$BATS_TEST_TMPDIR/.whatnext" \
|
|
581
|
+
--all
|
|
582
|
+
|
|
583
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
584
|
+
[ $status -eq 0 ]
|
|
585
|
+
|
|
586
|
+
echo "ignore = ['projects/', 'tasks']" > "$BATS_TEST_TMPDIR/.whatnext"
|
|
587
|
+
|
|
588
|
+
run --separate-stderr \
|
|
589
|
+
whatnext \
|
|
590
|
+
--config "$BATS_TEST_TMPDIR/.whatnext" \
|
|
591
|
+
--all
|
|
592
|
+
|
|
593
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
594
|
+
[ $status -eq 0 ]
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
@test "glob patterns still work with directory patterns" {
|
|
598
|
+
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
599
|
+
tasks.md:
|
|
600
|
+
# Get S Done / MEDIUM
|
|
601
|
+
- [ ] question entire existence
|
|
602
|
+
|
|
603
|
+
tasks.md:
|
|
604
|
+
# Get S Done
|
|
605
|
+
- [ ] come up with better projects
|
|
606
|
+
- [ ] start third project
|
|
607
|
+
|
|
608
|
+
archived/projects/tangerine.md:
|
|
609
|
+
# Project Tangerine / FINISHED
|
|
610
|
+
- [X] acquire trebuchet plans
|
|
611
|
+
- [X] source counterweight materials
|
|
612
|
+
- [X] build it
|
|
613
|
+
- [#] throw fruit at neighbours (they moved away)
|
|
614
|
+
EOF
|
|
615
|
+
)
|
|
616
|
+
|
|
617
|
+
echo "ignore = ['projects/**']" > "$BATS_TEST_TMPDIR/.whatnext"
|
|
618
|
+
|
|
619
|
+
run --separate-stderr \
|
|
620
|
+
whatnext \
|
|
621
|
+
--config "$BATS_TEST_TMPDIR/.whatnext" \
|
|
622
|
+
--all
|
|
623
|
+
|
|
624
|
+
diff -u <(echo "$expected_output") <(echo "$output")
|
|
625
|
+
[ $status -eq 0 ]
|
|
626
|
+
}
|
|
@@ -19,7 +19,7 @@ function setup {
|
|
|
19
19
|
▚▚▚▚▚▚▚▚▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░ 1 1 2 projects/obelisk.md
|
|
20
20
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0 0 5 projects/tinsel.md
|
|
21
21
|
──────
|
|
22
|
-
|
|
22
|
+
▚▚▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1 2 20 23, of 33 total
|
|
23
23
|
|
|
24
24
|
▚ Blocked ▓ Partial ░ Open
|
|
25
25
|
EOF
|
|
@@ -45,7 +45,7 @@ function setup {
|
|
|
45
45
|
░░░░░░░░░░░░░░░░░░░░░ 0 0 0 0 5 projects/tinsel.md
|
|
46
46
|
▚▚▚▚█████████████ 1 3 0 0 0 archived/projects/tangerine.md
|
|
47
47
|
──────────
|
|
48
|
-
|
|
48
|
+
▚▚█████▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░ 2 5 1 2 23 33, of 33 total
|
|
49
49
|
|
|
50
50
|
▚ Cancelled █ Done ▓ Blocked ▒ Partial ░ Open
|
|
51
51
|
EOF
|
|
@@ -101,7 +101,7 @@ function setup {
|
|
|
101
101
|
░░░░░░ 0 0 0 0 5 projects/tinsel.md
|
|
102
102
|
▚████ 1 3 0 0 0 archived/projects/tangerine.md
|
|
103
103
|
──────────
|
|
104
|
-
|
|
104
|
+
▚█▒░░░░░░░ 2 5 1 2 23 33, of 33 total
|
|
105
105
|
|
|
106
106
|
▚ Cancelled █ Done ▓ Blocked ▒ Partial ░ Open
|
|
107
107
|
EOF
|
|
@@ -126,7 +126,7 @@ function setup {
|
|
|
126
126
|
█████████████████████ 2 projects/obelisk.md
|
|
127
127
|
████████████████████████████████████████████████████ 5 projects/tinsel.md
|
|
128
128
|
──
|
|
129
|
-
|
|
129
|
+
████████████████████████████████████████████████████ 20 20, of 33 total
|
|
130
130
|
|
|
131
131
|
█ Open
|
|
132
132
|
EOF
|
|
@@ -153,7 +153,7 @@ function setup {
|
|
|
153
153
|
████████████████████████ 5 0 projects/tinsel.md
|
|
154
154
|
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
155
155
|
─────
|
|
156
|
-
|
|
156
|
+
██████████████████████████░░░░░░░░░░░░░ 20 10 30, of 33 total
|
|
157
157
|
|
|
158
158
|
█ Open ░ (Cancelled/Done/Blocked/Partial)
|
|
159
159
|
EOF
|
|
@@ -180,7 +180,7 @@ function setup {
|
|
|
180
180
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
181
181
|
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
182
182
|
────
|
|
183
|
-
|
|
183
|
+
███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 2 28 30, of 33 total
|
|
184
184
|
|
|
185
185
|
█ Partial ░ (Cancelled/Done/Blocked/Open)
|
|
186
186
|
EOF
|
|
@@ -207,7 +207,7 @@ function setup {
|
|
|
207
207
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
208
208
|
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
209
209
|
────
|
|
210
|
-
|
|
210
|
+
█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1 29 30, of 33 total
|
|
211
211
|
|
|
212
212
|
█ Blocked ░ (Cancelled/Done/Partial/Open)
|
|
213
213
|
EOF
|
|
@@ -234,7 +234,7 @@ function setup {
|
|
|
234
234
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
235
235
|
███████████████░░░░░ 3 1 archived/projects/tangerine.md
|
|
236
236
|
────
|
|
237
|
-
|
|
237
|
+
███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 5 25 30, of 33 total
|
|
238
238
|
|
|
239
239
|
█ Done ░ (Cancelled/Blocked/Partial/Open)
|
|
240
240
|
EOF
|
|
@@ -261,7 +261,7 @@ function setup {
|
|
|
261
261
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
262
262
|
█████░░░░░░░░░░░░░░░ 1 3 archived/projects/tangerine.md
|
|
263
263
|
────
|
|
264
|
-
|
|
264
|
+
███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 2 28 30, of 33 total
|
|
265
265
|
|
|
266
266
|
█ Cancelled ░ (Done/Blocked/Partial/Open)
|
|
267
267
|
EOF
|
|
@@ -289,7 +289,7 @@ function setup {
|
|
|
289
289
|
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 0 5 0 projects/tinsel.md
|
|
290
290
|
▚▚▚▚▚░░░░░░░░░░░░░░ 1 0 3 archived/projects/tangerine.md
|
|
291
291
|
──────
|
|
292
|
-
|
|
292
|
+
▚▚▚▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░ 2 20 8 30, of 33 total
|
|
293
293
|
|
|
294
294
|
▚ Cancelled ▓ Open ░ (Done/Blocked/Partial)
|
|
295
295
|
EOF
|
|
@@ -316,7 +316,7 @@ function setup {
|
|
|
316
316
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
317
317
|
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
318
318
|
────
|
|
319
|
-
|
|
319
|
+
████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 3 27 30, of 33 total
|
|
320
320
|
|
|
321
321
|
█ High ░ (Overdue/Imminent/Medium/Normal)
|
|
322
322
|
EOF
|
|
@@ -343,7 +343,7 @@ function setup {
|
|
|
343
343
|
░░░░░░░░░░░░░░░░░░░░░░░░░ 0 5 projects/tinsel.md
|
|
344
344
|
░░░░░░░░░░░░░░░░░░░░ 0 4 archived/projects/tangerine.md
|
|
345
345
|
────
|
|
346
|
-
|
|
346
|
+
███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 2 28 30, of 33 total
|
|
347
347
|
|
|
348
348
|
█ Medium ░ (Overdue/Imminent/High/Normal)
|
|
349
349
|
EOF
|
|
@@ -371,7 +371,7 @@ function setup {
|
|
|
371
371
|
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 0 5 0 projects/tinsel.md
|
|
372
372
|
░░░░░░░░░░░░░░░░░░ 0 0 4 archived/projects/tangerine.md
|
|
373
373
|
───────
|
|
374
|
-
|
|
374
|
+
▚▚▚▚▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░ 3 17 10 30, of 33 total
|
|
375
375
|
|
|
376
376
|
▚ High ▓ Normal ░ (Overdue/Imminent/Medium)
|
|
377
377
|
EOF
|
|
@@ -7,7 +7,8 @@ bats_require_minimum_version 1.5.0
|
|
|
7
7
|
|
|
8
8
|
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
9
9
|
Usage: whatnext [-h] [--help] [--version] [--guide] [--dir DIR] [-s] [-e]
|
|
10
|
-
[--relative] [-a] [--ignore-after] [--
|
|
10
|
+
[--relative] [-a] [--ignore-after] [--ignore-queue]
|
|
11
|
+
[--ignore-phase] [--ignore-all] [--config CONFIG]
|
|
11
12
|
[--ignore PATTERN] [-q] [-o] [-p] [-b] [-d] [-c]
|
|
12
13
|
[--priority LEVEL] [--color | --no-color]
|
|
13
14
|
[match ...]
|
|
@@ -24,7 +25,8 @@ bats_require_minimum_version 1.5.0
|
|
|
24
25
|
|
|
25
26
|
expected_output=$(sed -e 's/^ //' <<" EOF"
|
|
26
27
|
Usage: whatnext [-h] [--help] [--version] [--guide] [--dir DIR] [-s] [-e]
|
|
27
|
-
[--relative] [-a] [--ignore-after] [--
|
|
28
|
+
[--relative] [-a] [--ignore-after] [--ignore-queue]
|
|
29
|
+
[--ignore-phase] [--ignore-all] [--config CONFIG]
|
|
28
30
|
[--ignore PATTERN] [-q] [-o] [-p] [-b] [-d] [-c]
|
|
29
31
|
[--priority LEVEL] [--color | --no-color]
|
|
30
32
|
[match ...]
|
|
@@ -51,7 +53,11 @@ bats_require_minimum_version 1.5.0
|
|
|
51
53
|
--relative Show selected states relative to all others (use with
|
|
52
54
|
--summary)
|
|
53
55
|
-a, --all Include all tasks and files, not just incomplete
|
|
54
|
-
--ignore-after
|
|
56
|
+
--ignore-after Ignore @after constraints
|
|
57
|
+
--ignore-queue Ignore @queue constraints
|
|
58
|
+
--ignore-phase Ignore @phase constraints
|
|
59
|
+
--ignore-all Ignore all deferral constraints (@after, @phase,
|
|
60
|
+
@queue)
|
|
55
61
|
--config CONFIG Path to config file (default: WHATNEXT_CONFIG, or
|
|
56
62
|
'.whatnext' in --dir)
|
|
57
63
|
--ignore PATTERN Ignore files matching pattern (can be specified
|
|
@@ -658,18 +658,6 @@ class MarkdownFile:
|
|
|
658
658
|
return self.path
|
|
659
659
|
return os.path.relpath(self.path, self.base_dir)
|
|
660
660
|
|
|
661
|
-
@property
|
|
662
|
-
def incomplete(self):
|
|
663
|
-
outstanding_states = {
|
|
664
|
-
State.IN_PROGRESS,
|
|
665
|
-
State.OPEN,
|
|
666
|
-
State.BLOCKED,
|
|
667
|
-
}
|
|
668
|
-
return self.sort_by_state(
|
|
669
|
-
task for task in self.tasks
|
|
670
|
-
if task.state in outstanding_states
|
|
671
|
-
)
|
|
672
|
-
|
|
673
661
|
def sort_by_state(self, tasks):
|
|
674
662
|
by_heading = {}
|
|
675
663
|
for task in tasks:
|
|
@@ -244,8 +244,13 @@ def format_summary(
|
|
|
244
244
|
if all_tasks_total is None:
|
|
245
245
|
all_tasks_total = displayed_total
|
|
246
246
|
lines.append(f"{' ' * bar_width}{gap}{'─' * count_width}")
|
|
247
|
+
total_bar = build_bar(
|
|
248
|
+
total_counts, displayed_total, bar_width, char_map, bar_order
|
|
249
|
+
)
|
|
250
|
+
if use_colour:
|
|
251
|
+
total_bar = colored(total_bar, "blue", force_color=True)
|
|
247
252
|
lines.append(
|
|
248
|
-
f"{
|
|
253
|
+
f"{total_bar}{gap}{total_str.rjust(count_width)}{gap}"
|
|
249
254
|
f"{displayed_total}, of {all_tasks_total} total"
|
|
250
255
|
)
|
|
251
256
|
|
|
@@ -125,9 +125,12 @@ def filter_deferred(data, ignore_patterns):
|
|
|
125
125
|
basename = os.path.basename(path)
|
|
126
126
|
if is_dependency_ignored(basename, ignore_patterns):
|
|
127
127
|
return True
|
|
128
|
-
if path
|
|
128
|
+
if path in file_by_path:
|
|
129
|
+
file = file_by_path[path]
|
|
130
|
+
elif os.path.exists(path):
|
|
131
|
+
file = MarkdownFile(source=path, today=all_files[0].today)
|
|
132
|
+
else:
|
|
129
133
|
return False
|
|
130
|
-
file = file_by_path[path]
|
|
131
134
|
return all(task.state in COMPLETE_STATES for task in file.tasks)
|
|
132
135
|
|
|
133
136
|
def should_show_task(task):
|
|
@@ -246,8 +249,18 @@ def load_config(config_path=None, directory="."):
|
|
|
246
249
|
|
|
247
250
|
def is_ignored(filepath, ignore_patterns):
|
|
248
251
|
for pattern in ignore_patterns:
|
|
249
|
-
if
|
|
250
|
-
|
|
252
|
+
if pattern.endswith('/'):
|
|
253
|
+
dir_name = pattern.rstrip('/')
|
|
254
|
+
if filepath.startswith(dir_name + '/'):
|
|
255
|
+
return True
|
|
256
|
+
elif not any(c in pattern for c in ['*', '?', '[']):
|
|
257
|
+
if filepath == pattern:
|
|
258
|
+
return True
|
|
259
|
+
if filepath.startswith(pattern + '/'):
|
|
260
|
+
return True
|
|
261
|
+
else:
|
|
262
|
+
if fnmatch.fnmatch(filepath, pattern):
|
|
263
|
+
return True
|
|
251
264
|
return False
|
|
252
265
|
|
|
253
266
|
|
|
@@ -484,7 +497,22 @@ def main():
|
|
|
484
497
|
parser.add_argument(
|
|
485
498
|
"--ignore-after",
|
|
486
499
|
action="store_true",
|
|
487
|
-
help="
|
|
500
|
+
help="Ignore @after constraints",
|
|
501
|
+
)
|
|
502
|
+
parser.add_argument(
|
|
503
|
+
"--ignore-queue",
|
|
504
|
+
action="store_true",
|
|
505
|
+
help="Ignore @queue constraints",
|
|
506
|
+
)
|
|
507
|
+
parser.add_argument(
|
|
508
|
+
"--ignore-phase",
|
|
509
|
+
action="store_true",
|
|
510
|
+
help="Ignore @phase constraints",
|
|
511
|
+
)
|
|
512
|
+
parser.add_argument(
|
|
513
|
+
"--ignore-all",
|
|
514
|
+
action="store_true",
|
|
515
|
+
help="Ignore all deferral constraints (@after, @phase, @queue)",
|
|
488
516
|
)
|
|
489
517
|
parser.add_argument(
|
|
490
518
|
"--config",
|
|
@@ -637,13 +665,18 @@ def main():
|
|
|
637
665
|
for file in task_files
|
|
638
666
|
]
|
|
639
667
|
|
|
640
|
-
if not args.all and not args.ignore_after:
|
|
668
|
+
if not args.all and not args.ignore_after and not args.ignore_all:
|
|
641
669
|
filtered_data = filter_deferred(filtered_data, ignore_patterns)
|
|
642
670
|
|
|
643
|
-
if not args.all:
|
|
671
|
+
if not args.all and not args.ignore_phase and not args.ignore_all:
|
|
644
672
|
filtered_data = filter_phases(filtered_data)
|
|
645
673
|
|
|
646
|
-
if
|
|
674
|
+
if (
|
|
675
|
+
not args.all
|
|
676
|
+
and not args.ignore_queue
|
|
677
|
+
and not args.ignore_all
|
|
678
|
+
and not args.summary
|
|
679
|
+
):
|
|
647
680
|
filtered_data = filter_queue(filtered_data)
|
|
648
681
|
|
|
649
682
|
if args.summary:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|