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
- Added
tags
command 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
delete
command to take a comma separated list of notes to delete.
- Added
config
command to adjust configuration within CNote. Try:config set prompt >>>
orconfig get editor
, or even justconfig
to edit the file directly. Current config properties areprompt
,editor
, andnote_path
.
- 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: _
Running 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.
Aliases:
l
,ls
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 find
command.
> list
All Notes
---------
1. Note Title
/subfolder/some-note.md
tags: [pickle] [fish]
2. Note Title
/whatever.md
<no tags>
3. ...
Listed 27 Notes
Aliases:
create
,n
,c
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.
Aliases:
open
,o
,e
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.
Aliases:
d
,rm
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!
> _
Aliases:
search
,s
,f
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
Aliases:
t
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.
Aliases:
ut
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.