Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rphii/c-nexus
Proof of Concept Terminal Note Browsing Application
https://github.com/rphii/c-nexus
c c99 knowledge-base knowledge-management local nexus note-management notes-app notes-application personal-knowledge-base personal-wiki proof-of-concept self-hosted small-footprint terminal terminal-app terminal-based vim-style
Last synced: about 17 hours ago
JSON representation
Proof of Concept Terminal Note Browsing Application
- Host: GitHub
- URL: https://github.com/rphii/c-nexus
- Owner: rphii
- License: mit
- Created: 2024-02-07T03:23:53.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-04-13T12:53:13.000Z (7 months ago)
- Last Synced: 2024-04-14T02:28:47.947Z (7 months ago)
- Topics: c, c99, knowledge-base, knowledge-management, local, nexus, note-management, notes-app, notes-application, personal-knowledge-base, personal-wiki, proof-of-concept, self-hosted, small-footprint, terminal, terminal-app, terminal-based, vim-style
- Language: C
- Homepage:
- Size: 2.33 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# c-nexus
| normal | search | icon |
| --- | --- | --- |
| ![normal](images/start.png) | ![search](images/search.png) | ![icon](images/icon.png) |Small code footprint.
Create notes and link them, however you can think of. Once created you can browse the nodes.
It's possible to link a note to one that may or may not get created in the future.
## Installation
```sh
git clone https://github.com/rphii/c-nexus
cd c-nexus
make
```or alternatively *without* `make` (you can choose your compiler of choice; gcc, clang, tcc, ...)
```sh
git clone https://github.com/rphii/c-nexus
cd c-nexus
gcc src/*.c -o a
```In both cases it creates an executable `a`; adjust it if desired.
### Compile Flags
- `-DCOLORPRINT_DISABLE` disable all colored/bold/italic (formatted) output
- `-DPROC_COUNT=` number of threads
- `-DNODE_SHOW_COUNT_IN_OUT=1` show in and outgoing number of notes, instead of the sum
- `-DVECTOR_SORT_DATES_FIRST=1` show dates first, then icons### Clean
- run `make clean`
- on Cygwin trick it into thinking we're on linux so it can use rm etc. by running `OS= make clean`
- on Windows I don't know if this cleaning stuff works (or anything in general... if something
doesn't quite work on windows, well, I'll fix it maybe, if I know about the issue and feel like
fixing it)## Views
These controls (and maybe even more) are also found in the nexus itself, since I keep that more
updated than this readme... Gotta use your program, y'know :)### Normal View
- ``h`` : go back in history (can be: viewed notes, searches)
- ``j`` : down
- ``k`` : up
- ``l`` : follow the arrow
- ``q`` : quit
- ``Q`` : rebuild (certainly works on linux)
- ``[space]`` : fold/unfold descriptions
- ``f`` : enter search view
- ``t`` : enter icon view### Search View
- ``[type something]`` : search for something, case insensitive
- ``[enter]`` : switch from editing search string to selecting found nodes; in this mode ..
- .. `hjkl` : behaves as it would in normal view
- .. `f`, `[enter]` : puts you back to editing the search string
- .. `F` : clears the editing string and puts you back to editing it
- .. `[escape]` : goes back to node you've watched before searching; as if nothing was
selected (it goes back in the history)
- .. ``t`` : enter icon view
- .. ``q`` : quit
- .. ``Q`` : rebuild (certainly works on linux)### Icon View
- `hjkl` : behaves as it would in normal view
- ``t``, `[escape]` : abort icon view and go back
- ``f`` : enter search view
- ``q`` : quit
- ``Q`` : rebuild (certainly works on linux)## Command Line Arguments
- Print version and exit : `--version`
- Change default view : `--view`
- Change entry note : `--entry`
- Print help (about these and more arguments) and exit : `--help`## How to add notes?
Edit the [source file](src/content.c).
There's a handy macro called `NEXUS_INSERT`. See the example(s) provided.
### Upsides?
- at startup, all notes are stored in RAM (fast lookup)
- compile checked code/notes! _isn't that cool?_
- you can just disable the notes you don't want to be seen via. code!
- advanced formatting is [quite easily doable](src/colorprint.h); bold, italicize, underline and even colorize your texts!
- every note can have a icon + description (unlike in a file/folder structure, where folders typically don't)### Downsides?
- at startup, all notes are stored in RAM (amount limited through RAM)
- no editing of notes while browsing them _(at least not yet)_
- terminal interface doesn't yet handle the displaying of very long notes### Tradeoffs
One could argue that this approach is bad; well, it certainly
_isn't bad_ - I could've used (and probably will in the future) a file/folder structure with
HTML/Markdown files and just parse them instead. Since that also costs time to do, I for the time being,
focus on just getting the app working. Once that's all done and good and the project is at a point
where I'm satisfied with all the other, more important tasks that are screaming to get fixed, I'll
probably look into that a bit more.During development of this project I came across several tradeoffs that I'm quite willingly going to
accept, for better or worse - but mainly for simplicity's sake in note organization.- only one note with the same title is possible - and that is case insensitive at that
- each note can "only" have one command attached
- each note can only have one icon## Notes on Searching
- if you have many notes, you might benefit from parallelized searching. you can activate it via
specifing the number of threads with the preprocessor token `PROC_COUNT` (e.g. if you want to
search with 8 threads, in the Makefile add `-DPROC_COUNT=8` to the `CFLAGS`)
- if multithreaded searching is enabled, I at the moment do not bother to sort the found results, so
that's that (equal searches of something might spit them out in randomized order)
- even if you're not searching with multithreading, the results can seem unordered, because we're
searching through the items in a hash table, after all. and I do not bother to sort them as well
- Q: why not sort the results?
- A: 1) I don't know what to sort for, except maybe how likely a string is present...
- A: 2) ...which I don't quite know how to do. I'd have to rework the searching algorithm...
- A: 3) ...so when it bothers me too much, I'll rework it, eventually, maybe