whatnext 2.0__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-2.0/.flake8 +3 -0
- whatnext-2.0/.github/dependabot.yml +11 -0
- whatnext-2.0/.github/workflows/publish.yml +95 -0
- whatnext-2.0/.github/workflows/tests.yml +33 -0
- whatnext-2.0/.gitignore +4 -0
- whatnext-2.0/.whatnext +7 -0
- whatnext-2.0/CHANGELOG.md +117 -0
- whatnext-2.0/LICENCE +21 -0
- whatnext-2.0/LICENSE +1 -0
- whatnext-2.0/Makefile +18 -0
- whatnext-2.0/PKG-INFO +91 -0
- whatnext-2.0/README.md +67 -0
- whatnext-2.0/archive/done/tasks.md +5 -0
- whatnext-2.0/docs/annotations.md +17 -0
- whatnext-2.0/docs/basics.md +48 -0
- whatnext-2.0/docs/deadlines.md +44 -0
- whatnext-2.0/docs/deferring.md +42 -0
- whatnext-2.0/docs/exclusions.md +36 -0
- whatnext-2.0/docs/index.md +73 -0
- whatnext-2.0/docs/installation.md +7 -0
- whatnext-2.0/docs/next.md +65 -0
- whatnext-2.0/docs/prioritisation.md +43 -0
- whatnext-2.0/docs/usage.md +259 -0
- whatnext-2.0/example/archived/projects/tangerine.md +15 -0
- whatnext-2.0/example/projects/curtain.md +24 -0
- whatnext-2.0/example/projects/harvest.md +19 -0
- whatnext-2.0/example/projects/obelisk.md +21 -0
- whatnext-2.0/example/projects/tinsel.md +10 -0
- whatnext-2.0/example/tasks.md +5 -0
- whatnext-2.0/example/template.md +7 -0
- whatnext-2.0/pyproject.toml +65 -0
- whatnext-2.0/scripts/update-usage-examples.py +115 -0
- whatnext-2.0/tasks/deferring.md +4 -0
- whatnext-2.0/tasks/documentation.md +6 -0
- whatnext-2.0/tasks/next.md +9 -0
- whatnext-2.0/tasks/test_refactor.md +133 -0
- whatnext-2.0/tasks/version_0.1.md +9 -0
- whatnext-2.0/tasks/version_0.2.md +9 -0
- whatnext-2.0/tasks/version_0.3.md +12 -0
- whatnext-2.0/tasks/version_0.4.md +9 -0
- whatnext-2.0/tasks/version_0.5.md +8 -0
- whatnext-2.0/tasks/version_1.0.md +9 -0
- whatnext-2.0/tasks/version_1.1.md +6 -0
- whatnext-2.0/tasks/version_1.2.md +5 -0
- whatnext-2.0/tasks/version_1.3.md +10 -0
- whatnext-2.0/tasks.md +17 -0
- whatnext-2.0/tests/colour.bats +60 -0
- whatnext-2.0/tests/config/.whatnext +3 -0
- whatnext-2.0/tests/config/.whatnext.alt +3 -0
- whatnext-2.0/tests/config/apples.md +4 -0
- whatnext-2.0/tests/config/oranges.md +4 -0
- whatnext-2.0/tests/config-external +1 -0
- whatnext-2.0/tests/config.bats +84 -0
- whatnext-2.0/tests/deadline.bats +189 -0
- whatnext-2.0/tests/deferring/bare-after.md +1 -0
- whatnext-2.0/tests/deferring/circular-a.md +1 -0
- whatnext-2.0/tests/deferring/circular-b.md +1 -0
- whatnext-2.0/tests/deferring/deferred.md +1 -0
- whatnext-2.0/tests/deferring/duplicate-warnings.md +7 -0
- whatnext-2.0/tests/deferring/missing-dep.md +1 -0
- whatnext-2.0/tests/deferring/regular.md +1 -0
- whatnext-2.0/tests/deferring.bats +108 -0
- whatnext-2.0/tests/edit.bats +84 -0
- whatnext-2.0/tests/headerless.md +1 -0
- whatnext-2.0/tests/housekeeping.bats +42 -0
- whatnext-2.0/tests/invalid.md +1 -0
- whatnext-2.0/tests/list.bats +664 -0
- whatnext-2.0/tests/matching.bats +539 -0
- whatnext-2.0/tests/next/alternate.md +3 -0
- whatnext-2.0/tests/next/append-after.md +5 -0
- whatnext-2.0/tests/next/append.md +3 -0
- whatnext-2.0/tests/next/empty.md +4 -0
- whatnext-2.0/tests/next/insert.md +27 -0
- whatnext-2.0/tests/next/projects/alpha/tasks/things.md +3 -0
- whatnext-2.0/tests/next/projects/alpha/tasks.md +3 -0
- whatnext-2.0/tests/next/projects/beta/things.md +3 -0
- whatnext-2.0/tests/next/something.txt +1 -0
- whatnext-2.0/tests/next/tasks.md +3 -0
- whatnext-2.0/tests/next.bats +578 -0
- whatnext-2.0/tests/notnext.bats +34 -0
- whatnext-2.0/tests/summary.bats +368 -0
- whatnext-2.0/tests/test_defer.py +607 -0
- whatnext-2.0/tests/test_edit.py +51 -0
- whatnext-2.0/tests/test_file.py +878 -0
- whatnext-2.0/tests/test_limit.py +120 -0
- whatnext-2.0/tests/test_output.py +150 -0
- whatnext-2.0/tests/test_summary.py +97 -0
- whatnext-2.0/tests/test_task.py +148 -0
- whatnext-2.0/tests/usage.bats +83 -0
- whatnext-2.0/tests/version.bats +9 -0
- whatnext-2.0/whatnext/__init__.py +0 -0
- whatnext-2.0/whatnext/guide.txt +76 -0
- whatnext-2.0/whatnext/models.py +622 -0
- whatnext-2.0/whatnext/next.py +199 -0
- whatnext-2.0/whatnext/summary.py +257 -0
- whatnext-2.0/whatnext/whatnext.py +589 -0
whatnext-2.0/.flake8
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v6
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v6
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.12'
|
|
19
|
+
|
|
20
|
+
- name: Install whatnext
|
|
21
|
+
run: pip install .[test]
|
|
22
|
+
|
|
23
|
+
- name: Install testing dependencies
|
|
24
|
+
run: |
|
|
25
|
+
sudo apt-get update
|
|
26
|
+
sudo apt-get install -y bats ripgrep
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: make test
|
|
30
|
+
|
|
31
|
+
publish:
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
needs: test
|
|
34
|
+
permissions:
|
|
35
|
+
id-token: write
|
|
36
|
+
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v6
|
|
39
|
+
|
|
40
|
+
- name: Set up Python
|
|
41
|
+
uses: actions/setup-python@v6
|
|
42
|
+
with:
|
|
43
|
+
python-version: '3.12'
|
|
44
|
+
|
|
45
|
+
- name: Install build tools
|
|
46
|
+
run: pip install build
|
|
47
|
+
|
|
48
|
+
- name: Build package
|
|
49
|
+
run: python -m build
|
|
50
|
+
|
|
51
|
+
- name: Publish to PyPI
|
|
52
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
53
|
+
|
|
54
|
+
release:
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
needs: publish
|
|
57
|
+
permissions:
|
|
58
|
+
contents: write
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v6
|
|
62
|
+
|
|
63
|
+
- name: Get version from tag
|
|
64
|
+
id: version
|
|
65
|
+
run: echo "version=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
|
|
66
|
+
|
|
67
|
+
- name: Extract changelog for version
|
|
68
|
+
id: changelog
|
|
69
|
+
run: |
|
|
70
|
+
version="${{ steps.version.outputs.version }}"
|
|
71
|
+
changelog=$(awk -v ver="$version" '
|
|
72
|
+
/^## \[/ {
|
|
73
|
+
if (found) exit
|
|
74
|
+
if ($0 ~ "\\[v" ver "\\]") found=1
|
|
75
|
+
next
|
|
76
|
+
}
|
|
77
|
+
found { print }
|
|
78
|
+
' CHANGELOG.md)
|
|
79
|
+
{
|
|
80
|
+
echo "notes<<EOF"
|
|
81
|
+
echo "$changelog"
|
|
82
|
+
echo "EOF"
|
|
83
|
+
} >> "$GITHUB_OUTPUT"
|
|
84
|
+
|
|
85
|
+
- name: Create GitHub release
|
|
86
|
+
env:
|
|
87
|
+
GH_TOKEN: ${{ github.token }}
|
|
88
|
+
NOTES: ${{ steps.changelog.outputs.notes }}
|
|
89
|
+
run: |
|
|
90
|
+
version="${{ steps.version.outputs.version }}"
|
|
91
|
+
pypi_link="https://pypi.org/project/whatnext/${version}/"
|
|
92
|
+
full_notes=$(printf '%s\n\n---\n[pypi release](%s)' "$NOTES" "$pypi_link")
|
|
93
|
+
gh release create "${{ github.ref_name }}" \
|
|
94
|
+
--title "whatnext ${version}" \
|
|
95
|
+
--notes "$full_notes"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ['3.10', '3.11', '3.12']
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Install whatnext
|
|
25
|
+
run: pip install .[test]
|
|
26
|
+
|
|
27
|
+
- name: Install testing dependencies
|
|
28
|
+
run: |
|
|
29
|
+
sudo apt-get update
|
|
30
|
+
sudo apt-get install -y bats ripgrep
|
|
31
|
+
|
|
32
|
+
- name: Run tests
|
|
33
|
+
run: make test
|
whatnext-2.0/.gitignore
ADDED
whatnext-2.0/.whatnext
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## [v2.0] - 2026-01-28
|
|
5
|
+
|
|
6
|
+
**Breaking change:** `whatnext` now ignores tasks and headers within
|
|
7
|
+
quoting elements -- blockquotes, code fences, and indented text.
|
|
8
|
+
|
|
9
|
+
**Fixes:**
|
|
10
|
+
- bug in relative summaries was reusing characters for different states
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## [v1.4] - 2026-01-27
|
|
14
|
+
|
|
15
|
+
`next` now shows a diff of the change made to the task file.
|
|
16
|
+
|
|
17
|
+
Prefer `tasks.md` in the current directory to `~/tasks.md`.
|
|
18
|
+
|
|
19
|
+
**Fixes:**
|
|
20
|
+
- Bare `@after` waiting for all incomplete tasks, including those with
|
|
21
|
+
`@after file.md` dependencies.
|
|
22
|
+
- `next` rejecting task text containing flag-like arguments (e.g. `-e`).
|
|
23
|
+
- `next -a` inserting after the last task instead of at the end of the file.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## [v1.3.2] - 2026-01-11
|
|
27
|
+
|
|
28
|
+
Fixed repeated warnings when a file has a missing `@after` dependency.
|
|
29
|
+
|
|
30
|
+
Added `--ignore-after` flag to show all outstanding tasks regardless of
|
|
31
|
+
`@after` constraints.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## [v1.3.1] - 2026-01-10
|
|
35
|
+
|
|
36
|
+
Fixed file-level `@after` being ignored when the file has no headings.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
## [v1.3] - 2026-01-09
|
|
40
|
+
|
|
41
|
+
Added `next` command to quickly add tasks from the command line.
|
|
42
|
+
|
|
43
|
+
Files can self-exclude from results using `@notnext`.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## [v1.2] - 2026-01-08
|
|
47
|
+
|
|
48
|
+
Files, sections, or individual tasks can be deferred using `@after` to hide
|
|
49
|
+
them until other tasks are complete.
|
|
50
|
+
|
|
51
|
+
Added `--guide` to show a short Markdown formatting reference, separating
|
|
52
|
+
it out of the `--help` usage.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## [v1.1] - 2025-12-04
|
|
56
|
+
|
|
57
|
+
Fixed relative summaries to include all tasks, not just some.
|
|
58
|
+
|
|
59
|
+
Removed slashes from summary columns for cleaner output.
|
|
60
|
+
|
|
61
|
+
Added `-e`/`--edit` flag to open task files in your editor at the line number
|
|
62
|
+
of the first matching task.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## [v1.0] - 2025-12-02
|
|
66
|
+
|
|
67
|
+
Output is now colour-coded by default, override with `--color/--no-color`
|
|
68
|
+
or by setting `WHATNEXT_COLOR`.
|
|
69
|
+
|
|
70
|
+
Focused task selection:
|
|
71
|
+
|
|
72
|
+
- `whatnext 5` will show the five highest status tasks.
|
|
73
|
+
- `whatnext 5r` will show five randomly selected tasks.
|
|
74
|
+
|
|
75
|
+
Annotations, including a ` ```whatnext ` fenced block allows notes that appear
|
|
76
|
+
in context in the output.
|
|
77
|
+
|
|
78
|
+
Include totals in summaries.
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## [v0.5] - 2025-12-01
|
|
82
|
+
|
|
83
|
+
Tasks can have deadlines using the `@YYYY-MM-DD/4w` syntax. As the deadline
|
|
84
|
+
approaches, the task's priority automatically shifts to `imminent` (two weeks
|
|
85
|
+
before by default). Once past the deadline, the priority becomes `overdue`.
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## [v0.4] - 2025-12-01
|
|
89
|
+
|
|
90
|
+
Individual tasks and sections of tasks can be marked with emphasis to denote
|
|
91
|
+
\_medium\_ priority or as \*\*high\*\* priority. They will be displayed at the
|
|
92
|
+
top of the output, each priority in separate blocks.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## [v0.3] — 2025-11-29
|
|
96
|
+
|
|
97
|
+
Adding more states to the roster, tasks can be marked as open (unstarted),
|
|
98
|
+
in progress, cancelled, blocked, and completed.
|
|
99
|
+
|
|
100
|
+
Tasks can be filtered by any of these states when showing tasks or summaries.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## [v0.2] — 2025-11-28
|
|
104
|
+
|
|
105
|
+
Filtering tasks by text/header can be helpful. And as useful as it
|
|
106
|
+
can be to use `--dir` to specify the base dir, sometimes you just
|
|
107
|
+
want to do it quicker, so you can also specify a dir or file as
|
|
108
|
+
an argument to restrict searching just to that.
|
|
109
|
+
|
|
110
|
+
Arguments can be mixed and matched freely. Multiple search terms
|
|
111
|
+
are additive not exclusive.
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## [v0.1] — 2025-11-28
|
|
115
|
+
|
|
116
|
+
First version, very basic. Lists tasks found in Markdown files in a
|
|
117
|
+
given directory. Can produce summaries.
|
whatnext-2.0/LICENCE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Mark Norman Francis
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
whatnext-2.0/LICENSE
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
LICENCE
|
whatnext-2.0/Makefile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
ifndef CI
|
|
2
|
+
ifndef VIRTUAL_ENV
|
|
3
|
+
$(error Development has to happen inside venv, whatnext is also installed globally.)
|
|
4
|
+
endif
|
|
5
|
+
endif
|
|
6
|
+
|
|
7
|
+
.PHONY: test flake8 pytest bats
|
|
8
|
+
|
|
9
|
+
test: flake8 pytest bats
|
|
10
|
+
|
|
11
|
+
flake8:
|
|
12
|
+
flake8 whatnext tests
|
|
13
|
+
|
|
14
|
+
pytest: flake8
|
|
15
|
+
pytest tests/
|
|
16
|
+
|
|
17
|
+
bats:
|
|
18
|
+
bats tests/*.bats
|
whatnext-2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: whatnext
|
|
3
|
+
Version: 2.0
|
|
4
|
+
Summary: A lister of tasks found in Markdown files
|
|
5
|
+
Project-URL: Homepage, https://github.com/norm/whatnext
|
|
6
|
+
Project-URL: Repository, https://github.com/norm/whatnext
|
|
7
|
+
Project-URL: Documentation, https://github.com/norm/whatnext
|
|
8
|
+
Author: Mark Norman Francis
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENCE
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: cli,markdown,tasks,todo
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: termcolor
|
|
19
|
+
Requires-Dist: toml
|
|
20
|
+
Provides-Extra: test
|
|
21
|
+
Requires-Dist: flake8; extra == 'test'
|
|
22
|
+
Requires-Dist: pytest; extra == 'test'
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# What next?
|
|
26
|
+
|
|
27
|
+
I like to keep tasks in Markdown files. That way they can be interspersed
|
|
28
|
+
within instructions, serving as reminders, FIXMEs, and other todos.
|
|
29
|
+
|
|
30
|
+
All the features for enhancing your task lists are discussed in detail in
|
|
31
|
+
[the documentation](https://github.com/norm/whatnext/blob/main/docs/index.md).
|
|
32
|
+
|
|
33
|
+
Document your tasks using an expanded version of the original
|
|
34
|
+
[GitHub task list notation][sn]:
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
- [ ] open, this task is outstanding
|
|
38
|
+
- [/] in progress, this task is partially complete
|
|
39
|
+
- [X] complete, this task has been finished
|
|
40
|
+
- [#] cancelled, this task has been scratched
|
|
41
|
+
- [<] blocked, this task needs more input
|
|
42
|
+
|
|
43
|
+
- [ ] _an important task_
|
|
44
|
+
|
|
45
|
+
# **Make apple pie from scratch**
|
|
46
|
+
- [ ] invent the universe
|
|
47
|
+
|
|
48
|
+
# Things for later
|
|
49
|
+
|
|
50
|
+
- [ ] get NYE fireworks tickets @2025-12-31
|
|
51
|
+
- [ ] but in the end it doesn't even matter @after
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Then install `whatnext`:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install whatnext
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Now run it and it'll tell you what's next, sorting by priority and state:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
(computer)% whatnext
|
|
64
|
+
README.md:
|
|
65
|
+
# What next? / HIGH
|
|
66
|
+
- [ ] a lot more important
|
|
67
|
+
|
|
68
|
+
README.md:
|
|
69
|
+
# What next? / MEDIUM
|
|
70
|
+
- [ ] a little more important
|
|
71
|
+
|
|
72
|
+
README.md:
|
|
73
|
+
# What next? / IMMINENT 6d
|
|
74
|
+
- [ ] get NYE fireworks tickets
|
|
75
|
+
|
|
76
|
+
README.md:
|
|
77
|
+
# What next?
|
|
78
|
+
- [/] in progress, this task is partially complete
|
|
79
|
+
- [ ] open, this task is outstanding
|
|
80
|
+
- [<] blocked, this task needs more input
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Also provided, `next` to add tasks to files.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# by default, adds to $HOME/tasks.md
|
|
87
|
+
(computer)% next Add more features to whatnext
|
|
88
|
+
Updated tasks.md
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
[sn]: https://blog.github.com/2013-01-09-task-lists-in-gfm-issues-pulls-comments/
|
whatnext-2.0/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# What next?
|
|
2
|
+
|
|
3
|
+
I like to keep tasks in Markdown files. That way they can be interspersed
|
|
4
|
+
within instructions, serving as reminders, FIXMEs, and other todos.
|
|
5
|
+
|
|
6
|
+
All the features for enhancing your task lists are discussed in detail in
|
|
7
|
+
[the documentation](docs/index.md).
|
|
8
|
+
|
|
9
|
+
Document your tasks using an expanded version of the original
|
|
10
|
+
[GitHub task list notation][sn]:
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
- [ ] open, this task is outstanding
|
|
14
|
+
- [/] in progress, this task is partially complete
|
|
15
|
+
- [X] complete, this task has been finished
|
|
16
|
+
- [#] cancelled, this task has been scratched
|
|
17
|
+
- [<] blocked, this task needs more input
|
|
18
|
+
|
|
19
|
+
- [ ] _an important task_
|
|
20
|
+
|
|
21
|
+
# **Make apple pie from scratch**
|
|
22
|
+
- [ ] invent the universe
|
|
23
|
+
|
|
24
|
+
# Things for later
|
|
25
|
+
|
|
26
|
+
- [ ] get NYE fireworks tickets @2025-12-31
|
|
27
|
+
- [ ] but in the end it doesn't even matter @after
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Then install `whatnext`:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install whatnext
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Now run it and it'll tell you what's next, sorting by priority and state:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
(computer)% whatnext
|
|
40
|
+
README.md:
|
|
41
|
+
# What next? / HIGH
|
|
42
|
+
- [ ] a lot more important
|
|
43
|
+
|
|
44
|
+
README.md:
|
|
45
|
+
# What next? / MEDIUM
|
|
46
|
+
- [ ] a little more important
|
|
47
|
+
|
|
48
|
+
README.md:
|
|
49
|
+
# What next? / IMMINENT 6d
|
|
50
|
+
- [ ] get NYE fireworks tickets
|
|
51
|
+
|
|
52
|
+
README.md:
|
|
53
|
+
# What next?
|
|
54
|
+
- [/] in progress, this task is partially complete
|
|
55
|
+
- [ ] open, this task is outstanding
|
|
56
|
+
- [<] blocked, this task needs more input
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Also provided, `next` to add tasks to files.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# by default, adds to $HOME/tasks.md
|
|
63
|
+
(computer)% next Add more features to whatnext
|
|
64
|
+
Updated tasks.md
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
[sn]: https://blog.github.com/2013-01-09-task-lists-in-gfm-issues-pulls-comments/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Annotations
|
|
2
|
+
|
|
3
|
+
If you need any explanatory text to appear in the output along with the
|
|
4
|
+
task(s), add a named fence block to the file:
|
|
5
|
+
|
|
6
|
+
````markdown
|
|
7
|
+
# Project Anvil
|
|
8
|
+
|
|
9
|
+
```whatnext
|
|
10
|
+
Let the anvils ring!
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- [ ] introduce ourselves
|
|
14
|
+
- [ ] inherit throne
|
|
15
|
+
````
|
|
16
|
+
|
|
17
|
+
Other named and unnamed fence blocks are ignored.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Indicating the state of a task
|
|
2
|
+
|
|
3
|
+
Tasks have states, which are indicated as such:
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
- [ ] open, this task is outstanding
|
|
7
|
+
- [/] in progress, this task is partially complete
|
|
8
|
+
- [X] complete, this task has been finished
|
|
9
|
+
- [#] cancelled, this task has been scratched
|
|
10
|
+
- [<] blocked, this task needs more input
|
|
11
|
+
|
|
12
|
+
- [@] no idea what this means
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
By default, `whatnext` lists open, in progress, and blocked tasks. In progress
|
|
16
|
+
tasks are shown first, blocked tasks are shown last. Completed and cancelled
|
|
17
|
+
tasks are not listed unless `--all` is used.
|
|
18
|
+
|
|
19
|
+
Headers are used in grouping tasks. The second-level header that comes next
|
|
20
|
+
shows these tasks are a part of the main header. This does not indicate
|
|
21
|
+
a lower priority, only grouping.
|
|
22
|
+
|
|
23
|
+
An unknown state marker will generate a warning, but they can be suppressed
|
|
24
|
+
if you are using other states for a purpose.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## Multiline tasks and indentation
|
|
28
|
+
|
|
29
|
+
Tasks can be indented, and their text can continue across lines:
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
- [ ] Lorem ipsum dolor sit amet,
|
|
33
|
+
consectetur adipisicing elit,
|
|
34
|
+
sed do eiusmod tempor incididunt
|
|
35
|
+
ut labore et dolore magna aliqua.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The output of `whatnext` will wrap text to the terminal width, and does not
|
|
39
|
+
consider spacing of individual words or line wrapping semantically important.
|
|
40
|
+
|
|
41
|
+
Indentation of individual tasks is ignored, but the continuation has
|
|
42
|
+
to be indented to match, unlike in this task which is detected as
|
|
43
|
+
"Ut enim ad minim veniam," only:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
- [ ] Ut enim ad minim veniam,
|
|
47
|
+
quis nostrud exercitation ullamco laboris
|
|
48
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Deadlines
|
|
2
|
+
|
|
3
|
+
Tasks can be marked as needing to be done by a certain date:
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# version 0.5
|
|
7
|
+
- [ ] complete and release @2025-12-05
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
This task has not been given a priority, so would appear in the bulk of the
|
|
11
|
+
task list. That is, until two weeks before the date mentioned, at which point
|
|
12
|
+
it will be given a priority of `imminent`. And if the date is now in the past,
|
|
13
|
+
the priority set will be `overdue`.
|
|
14
|
+
|
|
15
|
+
The default two-week urgency window in which a task is marked imminent
|
|
16
|
+
can be controlled:
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
# Christmas dinner
|
|
20
|
+
- [ ] book Christmas delivery @2025-12-23/3w
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The `/1d` adjustment can be a number of days or weeks. `/0d` means the
|
|
24
|
+
task will only change priority on the day itself.
|
|
25
|
+
|
|
26
|
+
If you need to include it without it being parsed, either surround it in
|
|
27
|
+
backticks (` `@YYYY-...` `) or put a backslash before (`\@YYYY-...`).
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Deadlines and priorities
|
|
31
|
+
|
|
32
|
+
Due date takes precedence over priorities. Assuming the date today was
|
|
33
|
+
December 1st, both of these tasks would be listed as having normal
|
|
34
|
+
priority.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
# Christmas dinner
|
|
38
|
+
- [ ] _prep the make-ahead gravy_ @2025-12-25/1d
|
|
39
|
+
- [ ] **roast the potatoes** @2025-12-25/0d
|
|
40
|
+
- [ ] prep sprouts @2025-12-25
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Later, gravy would appear as medium priority on December 24th,
|
|
44
|
+
and potatoes as high priority on December 25th.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Deferring tasks
|
|
2
|
+
|
|
3
|
+
Some tasks either can't or won't be considered until some other tasks
|
|
4
|
+
are done, so you can indicate that these tasks _should not show up_ yet:
|
|
5
|
+
|
|
6
|
+
# Someday
|
|
7
|
+
|
|
8
|
+
@after
|
|
9
|
+
|
|
10
|
+
- [ ] rewrite everything in Rust
|
|
11
|
+
|
|
12
|
+
`@after` on a line by itself applies to the whole file, on a header it
|
|
13
|
+
applies to the section, and on a task only applies to that task.
|
|
14
|
+
|
|
15
|
+
If you need to include it without it being parsed, either surround it in
|
|
16
|
+
backticks (` `@after` `) or put a backslash before (`\@after`).
|
|
17
|
+
|
|
18
|
+
To ignore this when querying for tasks, use `whatnext --ignore-after`
|
|
19
|
+
(plus `whatnext --all` will always show all tasks regardless).
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## After ... what?
|
|
23
|
+
|
|
24
|
+
Without any clarification, any deferred tasks will only appear in `whatnext`
|
|
25
|
+
output once every other non-deferred task is completed.
|
|
26
|
+
|
|
27
|
+
If you are trying to define project dependencies, you can indicate this
|
|
28
|
+
by naming the other task file(s):
|
|
29
|
+
|
|
30
|
+
# Stage three
|
|
31
|
+
|
|
32
|
+
@after stage_one.md stage_two.md
|
|
33
|
+
|
|
34
|
+
- [ ] design the booster separation
|
|
35
|
+
|
|
36
|
+
Filenames are compared against all task files found, without considering
|
|
37
|
+
the directory they are in.
|
|
38
|
+
|
|
39
|
+
Circular dependencies (where A depends on B and B depends on A) will
|
|
40
|
+
cause an error showing the cycle. Referencing a nonexistent file will
|
|
41
|
+
produce a warning.
|
|
42
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Excluding files
|
|
2
|
+
|
|
3
|
+
If you need to ignore a file (or three), but don't want to keep typing out
|
|
4
|
+
the `--ignore` option, there are two ways of doing this.
|
|
5
|
+
|
|
6
|
+
## Exclude a single file
|
|
7
|
+
|
|
8
|
+
To have a file declare itself not suitable for finding tasks within,
|
|
9
|
+
add this marker anywhere in the file:
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
@notnext [explanation if necessary]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Exclude multiple files
|
|
16
|
+
|
|
17
|
+
You can include a `.whatnext` file in the directory being examined for tasks:
|
|
18
|
+
|
|
19
|
+
```toml
|
|
20
|
+
# not considered in any summaries
|
|
21
|
+
ignore = [
|
|
22
|
+
'README.md',
|
|
23
|
+
'tasks.md',
|
|
24
|
+
'docs/usage.md',
|
|
25
|
+
]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If you need to store it somewhere else, or have it be a different
|
|
29
|
+
filename, you can use the `--config` option, or set the location
|
|
30
|
+
in the environment variable `WHATNEXT_CONFIG`.
|
|
31
|
+
|
|
32
|
+
## Overriding exclusions
|
|
33
|
+
|
|
34
|
+
Explicitly naming a file on the command line will show its tasks
|
|
35
|
+
regardless of `@notnext` or ignore patterns. This allows you to
|
|
36
|
+
query a specific file when needed without removing the exclusion.
|