todo
Things to do in code. I move them to done when they’re done. Still working on the project flow.
I’m grouping these together because it matters what order I do them in. I don’t think they’re critical immediately. But implementing the critical things sort of depends on my putting in this legwork to make my life easier.
- I want to be able to see my changes reflected in the docs and code at the same time. Which means I need to consolidate the repo somehow.
- Create nix flake for development of the cli.
- Enforce clang style throughout the code base. See appendix
- Enforce modern C++ style. See appendix
- Filenames.
- Abstract out replxx library with wrapper class.
- Rethink app state: repl, display, session.
- Settle on properites of my new hash function.
- Implement new ‘set’ datastructure.
- Perculate new ‘set’ class.
- Check environment to disable colour. See appendix
- Try zig build system.
- Try meson.
These are changes which I think are essential to the idea of noodle.
- The way the
base
layer is generated. Choosing a base layer adjacency for an abstract doodle must be deterministic based on the structure. - Create a stronger association between directories and layers.
- Mutex. Prevent multiple instances of noodle from writing metadata simultaneously.
- Disallow edits on the (
base
and (can be allowed with added automation))meta
layer(s). - Implement temp files to avoid data-loss if we crash during a save.
- Improve behaviour of
out
command. Current behaviour is unintuitive. - Find equivalents of xdg-mime to enable
open
command across platforms. - Allow special characters in doodle names per OS or filesystem with additional noodle constraints. This also ties into the next point.
- Fix autocomplete to allow certain special characters and quoted doodle names
"like this.jpeg"
,"or-like-this"
. This should also fix the issue where it doesn’t always autocomplete file extensions. No backslash escaping. - Don’t erase previous output when redrawing tree.
-
flatten
should not create a layer if the selection is empty. -
project
should not create a layer if the selection is empty. - Layertrace colouring should always prioritize the current layer.
-
merge
command fails if the first doodle is an abstract layer and the second is a directory. Investigate and fix. - Make autocomplete case sensitive.
- The result of
replace
should be shown after the command takes effect. Currently the result is hidden. -
into
should only navigate into existing layers.
- Fix anything that returns
NOT_IMPLEMENTED
in the code. - Implement
bubble
command. Don’t forget the interaction with merge. If you merge witha directory there’s potential for bubbling. - Implement
export
command. - Implement
.noodle/ignore
file - Implement auto-select behaviours for complex manipulations.
- Implement auto-rotate behaviours for navigation commands.
-
complete
command. Links within structure are completed on all layers where the doodles are present to “reinforce” them. - A procedurally animated version of the N in
about
. - Autorotate
- Implement
splore
command. Uses meta layer to find doodles near the subgraph. - Implement
around
command. Like focus followed bysplore
in one. - Autoselect
-
Ctl+Space
should toggle selection on the root doodle instead ofCtl+S
. - Implement bang
!
for executing shell commands in noodle REPL.
- Create
rename
buffer. Only rename files on save. -
remove
command should be contextual. That is, it should account for the current display not just the layermask. -
remove
command should accept the selection as input. - Multithreading for
status
calculations. - Integration with std::algorithm (improves code readability).
- Better colour-picking algorithm that more sensibly covers the gamut. Currently, colours are evenly interpolated along an RGB-triangle-outline.
- Improve argument parsing in repl (nicer code).
- Formatting for the
about
blurb. - Formatting for the output of
status
. -
text
should use the CalculateBaseLink() algo to put the new file in a good path, not just the root
- Remove raw pointers.
- Use structure bindings when iterating over unordered_maps whenever possible (requires C++17). Example:
for (const auto&[layer_name,graph]: layers) {
// do stuff with layer_name and graph
}
- Run clang-format on everything.
- Clang style upper/lower case for classes.
- for functions,
- namespaces
- other things.
- How do other terminal programs implement comments and docs? Personally not fan of doxygen. But whatever.
- Comment formatting. How do I connect it to my docs??
The user requests no colour or the program is not in a terminal.
- stdout in not an interactive terminal (TTY). stderr can still get colours because it’s useful.
- The
NO_COLOR
environment variable is set. - The
TERM
environment variable has the valuedumb
. - The user passes the option
--no-color
. - Add optional
NOODLE_NO_COLOR
environmnet variable. - Implement intuitive colour toggle in the repl.