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
baselayer 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 (
baseand (can be allowed with added automation))metalayer(s). - Implement temp files to avoid data-loss if we crash during a save.
- Improve behaviour of
outcommand. Current behaviour is unintuitive. - Find equivalents of xdg-mime to enable
opencommand 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.
-
flattenshould not create a layer if the selection is empty. -
projectshould not create a layer if the selection is empty. - Layertrace colouring should always prioritize the current layer.
-
mergecommand 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
replaceshould be shown after the command takes effect. Currently the result is hidden. -
intoshould only navigate into existing layers.
- Fix anything that returns
NOT_IMPLEMENTEDin the code. - Implement
bubblecommand. Don’t forget the interaction with merge. If you merge witha directory there’s potential for bubbling. - Implement
exportcommand. - Implement
.noodle/ignorefile - Implement auto-select behaviours for complex manipulations.
- Implement auto-rotate behaviours for navigation commands.
-
completecommand. 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
splorecommand. Uses meta layer to find doodles near the subgraph. - Implement
aroundcommand. Like focus followed bysplorein one. - Autoselect
-
Ctl+Spaceshould toggle selection on the root doodle instead ofCtl+S. - Implement bang
!for executing shell commands in noodle REPL.
- Create
renamebuffer. Only rename files on save. -
removecommand should be contextual. That is, it should account for the current display not just the layermask. -
removecommand should accept the selection as input. - Multithreading for
statuscalculations. - 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
aboutblurb. - Formatting for the output of
status. -
textshould 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_COLORenvironment variable is set. - The
TERMenvironment variable has the valuedumb. - The user passes the option
--no-color. - Add optional
NOODLE_NO_COLORenvironmnet variable. - Implement intuitive colour toggle in the repl.