N oodle
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

todo

Things to do in code. I move them to done when they’re done. Still working on the project flow.

High-level changes:

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.

Urgent:

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.

Issues:

  • 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.

Features:

  • 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 by splore in one.
  • Autoselect
  • Ctl+Space should toggle selection on the root doodle instead of Ctl+S.
  • Implement bang ! for executing shell commands in noodle REPL.

Improvements:

  • 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

Appendix

Modern C++ Style

  • 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
}

clang Style

  • 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??

Disable Colour if:

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 value dumb.
  • The user passes the option --no-color.
  • Add optional NOODLE_NO_COLOR environmnet variable.
  • Implement intuitive colour toggle in the repl.