Introduction
Introduction Statistics Contact Development Disclaimer Help
----------------------------------------
CLI Tricks: n - note taking
March 21st, 2018
----------------------------------------
This is the first in a series of phlog entries where I will share
some of my command line tricks, tips and scripts.
## n ##
Note-taking in the terminal is a big deal for me. Whether I'm in
a meeting or someone stops by for a quick interruption, I need to
be able to jot down notes quickly and get at them again easily. To
handle this I have built a helper function called "n".
Note: If you are familiar with my dotfiles [0] then you know
I keep all these scripts in a folder called ~/.functions and
source them as part of my .bash_profile.
### The Idea ###
When I'm on the command line I enter the command "n" and it pops
up a list of all my notes using the FZF [1] fuzzy finder. These
have a nice preview window to the side so I can quickly scan what
I'm looking for as I type in parts of the name. If I see what
I need in the preview I can either hit ESC to quit back to my
shell or ENTER to open up the note in my EDITOR.
Creating a new note is easy:
$ n monkeys
> creates a new note in my NOTE_DIR called monkeys.md (I default
> all my notes to markdown) and opens it in EDITOR
Want to categorize them? Add a folder path:
$ n animals/monkeys
> creates a new note at $NOTE_DIR/animals/monkeys.md and opens
> it in EDITOR
You can search foldernames as part of the fuzzy-finding.
The script also has bash-completion built-in. If you don't want to
use FZF to browse for the file, just type part of the word and hit
tab, like so:
$ n mo<TAB>
> n monkeys<ENTER>
### Requirements ###
This requires FZF [1], a fantastic utility for fuzzy-finding. I'm
sure you could port it to another tool if you really wanted,
though.
This also requires that you have an environment variable set
called NOTE_DIR. For me that points to Dropbox where I have a
notes folder. This means all my notes are generated and stored
there and are shared across systems. I can even get at them
with my phone.
### The Source ###
#!/usr/bin/env bash
# Note taking function and command completion
_n() {
local lis cur
lis=$(find "${NOTE_DIR}" -name "*.md" | \
sed -e "s|${NOTE_DIR}/||" | \
sed -e 's/\.md$//')
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "$lis" -- "$cur") )
}
n() {
: "${NOTE_DIR:?'NOTE_DIR ENV Var not set'}"
if [ $# -eq 0 ]; then
local file
file=$(find "${NOTE_DIR}" -name "*.md" | \
sed -e "s|${NOTE_DIR}/||" | \
sed -e 's/\.md$//' | \
fzf \
--multi \
--select-1 \
--exit-0 \
--preview="cat ${NOTE_DIR}/{}.md" \
--preview-window=right:70%:wrap)
[[ -n $file ]] && \
${EDITOR:-vim} "${NOTE_DIR}/${file}.md"
else
case "$1" in
"-d")
rm "${NOTE_DIR}"/"$2".md
;;
*)
${EDITOR:-vim} "${NOTE_DIR}"/"$*".md
;;
esac
fi
}
complete -F _n n
[0] tomasino's dotfiles
[1] FZF
You are viewing proxied material from gopher.black. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.