Commit graph

43 commits

Author SHA1 Message Date
28c551e157
ref: Print optional error message on editor process error
Editor function takes an optional io object which is used to print an
error output if the subprocess errors.
2025-11-29 21:11:31 +01:00
762b4a288f
fix: Correct whitespace separation on editor shell call
Switch to using 'sequence'-delineated arguments given to the subprocess
run call to correctly handle whitespace.
Also check the output, so we exit if we have an error.
Test accordingly.
2025-11-29 21:11:31 +01:00
3f10b429a2
ref: Rename path expansion function
From `_real_path` to `_expand_path` to better express its use.
2025-11-29 21:11:30 +01:00
49bd1292fa
ref: Extract note parent dir creation function 2025-11-29 21:11:30 +01:00
1ea149c1de
fix: Ensure quiet is a flag on the cli
We regressed quiet into requiring a value to be set as a cli option
(`--quiet=true`) instead of just functioning as a flag (`--quiet`). This
change restores the previous interface on the command line,
and adds a test to ensure no regressions.
2025-11-29 21:10:12 +01:00
ff0e6cccfb
fix: Correctly parse boolean config options set to false
Previously, when parsing config options that were set to 'false',
e.g. `TOPEN_NOTES_QUIET=false` in the env vars,
we would still be setting it to true.

This change fixes any falsy value to be correctly parsed as False.
2025-11-29 12:29:34 +01:00
6517eb3971
ref: Reformat build_config function
Make the internal function logic a litte clearer
2025-11-29 12:29:34 +01:00
9b2dc37279
fix: Do not print annotation added if it already exists
Some checks are pending
website / build (push) Waiting to run
website / deploy (push) Blocked by required conditions
Turned annotation adding into a separate (pure) checking function to see
if we have to add an annotation, and a (side-effect) function which
actually adds it.

This way we can decouple checking and send an info to io only if it is
necessary while keeping the two tasks of checking and adding separate.
2025-11-28 23:08:19 +01:00
46135f9325
test: Correctly fall back to EDITOR or VISUAL env vars 2025-11-28 23:08:18 +01:00
ee8fef930a
test: Fix correct cli option value casting
Since we can set the type of the relevant option in the OPTIONS dict, we
should also let the cli correctly cast them on parsing, just as the env
options do.
2025-11-28 23:08:16 +01:00
db11128beb
ref: Extract sys module use from main func
Main function instead returns the given error code and only when invoked
as a cli script will we use the error code to exit with the
corresponding code to the shell.
2025-11-28 23:08:15 +01:00
ce8ffa3ae8
ref: Extract stdio operations into adapter 2025-11-28 23:08:14 +01:00
d103a632d0
ref: Use OPTION dict defaults for TConf 2025-11-28 23:08:14 +01:00
f8f0a2077d
ref: Extract determining default taskrc from TConf class
To start streamlining the TConf class a little, by removing some
internal logic which may be better residing in the Options dict,
we extract determining the correct taskrc file.
2025-11-28 23:08:13 +01:00
0d2e68a03d
ref: Extract configuration assembly into separate function
Some checks failed
website / build (push) Has been cancelled
website / deploy (push) Has been cancelled
2025-11-26 23:18:48 +01:00
c164be29d3
ref: Rename taskrc parsing function to parse_rc 2025-11-26 23:18:47 +01:00
b20d56a007
ref: Load all options from single dictionary source 2025-11-26 23:18:47 +01:00
fccfb85026
ref: Rename configparser to cfg 2025-11-26 23:18:46 +01:00
a088fcbe76
feat: Inform user if no file was written
Some checks failed
website / build (push) Has been cancelled
website / deploy (push) Has been cancelled
When the user exits the note-writing editor process without having
written any file, we also don't attach an annotation to the
corresponding task since it would lead nowhere.

This small change makes this condition obvious to the user, by informing
them that the program is 'doing nothing' when they exit the editor
without having saved a file.
2025-11-11 20:15:41 +01:00
1652e01885
doc: Add better cli option metavar annotations 2025-09-15 10:56:28 +02:00
5e6ab6854f
ref: Use recommended subprocess method to edit 2025-09-15 10:56:28 +02:00
7dbd93796d
ref: Remove property setters from dataclass
Some checks failed
website / deploy (push) Has been cancelled
website / build (push) Has been cancelled
Removed the property setters and getters from variables with complex
defaults. Instead, they are now given a specific const default value
`Path("%%%%I_DONT_EXIST_%%%%")` which is very unlikely to be used by a user
in normal circumstances.

This is necessary to be able to remove the properties since Python does
not distinguish between an empty Path() and a non-given Path() (i.e.
there is no Path value which returns Falsy).

However, this slightly clunky construct does allow setting the various
Paths once and only once, and also to remove all the previously
necessary getters and setters with their hidden backing variables.

Lastly it should open the gates for changing the _real_path
transformation to be part of the TConf class itself and not a global
function.
2025-04-22 22:09:58 +02:00
ee4f3781f8
feat: Use xdg location or home dir taskrc if it exists
The preference structure goes highest to lowest:

1. ~/.taskrc
2. $XDG_CONFIG_HOME/task/taskrc
3. ~/.config/task/taskrc

Uses first file found.
2025-04-08 21:00:27 +02:00
5976651a26
feat: Create note parent directories if necessary 2025-04-08 21:00:26 +02:00
4642b24c6b
ref: Parse conf file with dict comprehension and named tuple 2025-04-08 21:00:26 +02:00
9d5fa3e244
feat: Only annotate tasks if note file was created
In the case of opening the notes but then backing out again without
actually writing a notes file we should also not annotate the task with
anything, since it technically still does not have a note.
2025-04-08 21:00:25 +02:00
caec33120c
feat: Locate notes dir in task data dir by default 2025-04-08 21:00:25 +02:00
46d57042cd
ref: Turn TConf from dict into class factory method
Code from here:

https://stackoverflow.com/questions/56849331/what-is-the-proper-way-in-python-to-define-a-dataclass-that-has-both-an-auto-gen
2025-04-08 21:00:24 +02:00
4ad9f4c981
ref: Move default opt handling into TConf object 2025-04-08 21:00:24 +02:00
4227465bfb
fix: Use tw default dirs 2025-04-08 21:00:23 +02:00
0277f15ca2
doc: Add docstring documentation 2025-04-07 10:49:16 +02:00
0f10789e9c
chore: Change conf options to dot-notation 2025-04-07 10:49:15 +02:00
6e1761e690
chore: Fit env var names to conf option names 2025-04-07 10:49:14 +02:00
8c3ecfa431
chore: Restructure script 2025-04-07 10:49:14 +02:00
cf7e9dd5fe
ref: Ensure paths are Path objects 2025-04-07 10:49:13 +02:00
0e167cf08a
ref: Turn dict into conf obj 2025-04-07 10:49:13 +02:00
c6f05d0b64
feat: Specify taskrc as cli option
In addition to task-data we also allow specifying the taskrc file on the
command line.
2025-04-07 10:49:12 +02:00
3fded7315c
fix: Parse EDITOR and VISUAL env vars with lower precedence
Since the precedence now goes (from lowest to highest):

defaults -> conf_file -> env -> cli

existing EDITOR or VISUAL variables would overwrite those
explicitly set in the conf file. While we do want the general
precedence of env over conf file, this is a special case where
we get the value of the _DEFAULT_ variable from the env, and
only then start parsing our own options. So now, for these vars
we do:

default -> env (EDITOR/VISUAL) -> conf_file -> env (TOPEN_EDITOR) -> cli
2025-04-07 10:49:12 +02:00
96422d254b
fix: Reintegrate env var parsing
Was removed from parsing when conf parsing was added, now re-added into
configuration parsing.
2025-04-07 10:49:11 +02:00
f1f3041928
feat: Add taskrc parsing
We first parse the taskrc file now, before overwriting those options
with ones given on the command line.
2025-04-07 10:49:11 +02:00
1ec3755344
chore: Simplify funcs by removing default args
In preparation for reading the config also from a taskrc file I want to
simplify the configuration management beforehand. There should be one
place where we grab it from the environment, one place to grab from CLI
and then one place from conf file. This helps with simplifying a little
by not again injecting defaults at the mid-point.

Ultimately, we should create one 'config' data structure, probably dict
or NameSpace which we pass around and each function receives it.
2025-04-07 10:49:07 +02:00
790b5b4bad
doc: Update pyproject and cli descriptions
Reflects forge project description.
2025-04-01 14:24:20 +02:00
bda8c3b992
fix: Allow correct installation of script 2025-04-01 10:57:07 +02:00
Renamed from topen (Browse further)