CLI notes app for Linux (and probably macOS) ((and maybe Windows Subsystem for Linux)) written in Ruby
CNote is my personal system for managing notes. I wanted something snappy and lightweight that would let me search, tag and edit a folder full of markdown files using just my keyboard and some
vim-ish single-letter commands.
Sept. 23rd, 2017
tagscommand to view all tags used in your notes.
- Note numbers are now consistent from program start to program close. No more confusing indices relative to the last listing.
- Note numbers also no longer correspond to array indices, so deleting multiple notes shouldn't cause problems anymore.
- Expanded the
deletecommand to take a comma separated list of notes to delete.
configcommand to adjust configuration within CNote. Try:
config set prompt >>>or
config get editor, or even just
configto edit the file directly. Current config properties are
0.1.1 - 0.1.3
- Trial and error gem publishing-related fixes.
- First release
First of all, make sure you have a recent version of Ruby installed (including RubyGems). I'm using 2.4.0. Then run:
$ gem install cnote
CNote will be installed as a command on your machine. To get started, run
cnote. The first time you run
cnote, you'll be walked through the basic setup process which will produce a
.cnote.yaml file within your
$HOME directory. To skip this, just create the file yourself. Valid options for this file are covered here.
$ cnote Hello, new user! Enter the path to the folder where you would like to store your notes: _
cnote again will drop you into a REPL interface where you can type in commands to interact with your notes.
help will show the complete list while the program is running.
$ cnote Welcome to CNote! Type 'help' or 'h' to see a list of available commands. > _
Here are the available commands:
Keywords surrounded by
<these> are placeholders. You would enter the real value yourself.
Lists every single note in your notes directory (recursively). This might be a lot of notes. To search for something specific, you would use the
> list All Notes --------- 1. Note Title /subfolder/some-note.md tags: [pickle] [fish] 2. Note Title /whatever.md <no tags> 3. ... Listed 27 Notes
Creates a new note with the given filename. If you pass in a nested directory, the directory will be created relative to your
note_path value from the configuration file.
> new general/whatever.md #=> creates file at '$note_path/general/whatever.md' > create note.jpg #=> creates file at '$note_path/note.md' #=> (File extension is ignored. All notes are markdown.) > c note.md > n note.md #=> All aliases do the same thing.
Opens the note file in your editor of choice, first looking for the
editor property in your
.cnote.yaml config file, and if that fails, uses the
EDITOR environment variable.
Deletes the note(s) specified by their numbers. The numbers will be whatever number appeared next to that note the last time the notes were listed.
> delete 12 Are you sure you want to delete note number 12 with title 'Some Title Here'? [y/n] y Deleted! > _
Searches and returns a list of all notes whose title or contents contain the search term.
> find cnote #=> Returns a list of notes whose titles or content match the given term. #=> Sample output: Found 2 Notes ------------- 1. CNote Commands /cnote/commands.md tags: [cnote] [programming] 2. CNote Sync Backends /cnote/cnote-sync.md <no tags> Listed 2 Notes > find +t cnote #=> Returns a list of notes that include the tag 'cnote' #=> Sample output: Found 1 Note ------------ 1. CNote Commands /cnote/commands.md tags: [cnote] [programming] Listed 1 Note > find -t cnote #=> Returns a list of notes that DO NOT contain the tag 'cnote' > f project +t cnote #=> Returns a list of notes that both match the text 'project' AND contain the tag 'cnote'
Shows a short preview of the note, just to make sure it's the one you're looking for before you commit to editing, tagging, etc.
> peek 10 > p 10 #=> Shows the first 15 lines of note number 10
tag <note_number(s)> <tag> <tag> <tag> ...
Adds a space separated list of tags to the note specified by its list number.
> tag 15 pizza charcoal fishness #=> Adds ['pizza', 'charcoal', 'fishness'] to the tag list of note number 15 > tag 4,17 double_tag #=> Adds 'double_tag' to the tag lists of BOTH notes 4 and 17.
untag <note_number(s)> <tag> <tag> ...
Removes the space separated list of tags from the note specified by its list number. Works exactly the same as
tag, but in reverse.
CNote uses a YAML file called
.cnote.yaml to store your preferences. The file is stored in your home directory and is editable in any text editor. Here are the options:
# note_path is the only required property. # This is the root directory for your notes folder. note_path: ~/Documents/Notes # Optionally, you can provide an editor that CNote will # open your notes in. This can be any editor that handles # markdown files: vscode, gedit, emacs, etc... editor: vim # prompt can be any string. This will show up just # before your cursor whenever CNote is waiting for you to # type something. prompt: "=> uLtR4Hax <=(🌭)>>"
The gem is available as open source under the terms of the MIT License.