Skip to content

Instantly share code, notes, and snippets.

@BaseCase
Created September 19, 2017 17:43
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save BaseCase/c45299e4f8474119881d708a4b728fbf to your computer and use it in GitHub Desktop.
Save BaseCase/c45299e4f8474119881d708a4b728fbf to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -e
main() {
previous_file="$1"
file_to_edit=`select_file $previous_file`
if [ -n "$file_to_edit" ] ; then
"$EDITOR" "$file_to_edit"
main "$file_to_edit"
fi
}
select_file() {
given_file="$1"
fzf --preview="cat {}" --preview-window=right:70%:wrap --query="$given_file"
}
main ""
@dofinn
Copy link

dofinn commented Mar 13, 2019

#!/usr/bin/env bash
set -e

main() {
  cd $HOME/notes
  previous_file="$1"
  file_to_edit=`select_file $previous_file`

  if [ -n "$file_to_edit" ] ; then
    "$EDITOR" "$file_to_edit"
    main "$file_to_edit"
  fi
  cd -
}

select_file() {
  given_file="$1"
  fzf --preview="cat {}" --preview-window=right:70%:wrap --query="$given_file"
}

main ""

Add the two CD commands to wrap around the main func so you could call this from anywhere and have fzf only ever index the $HOME/notes dir

@alichtman
Copy link

alichtman commented Jul 25, 2019

I added in-script file creation.

#!/usr/bin/env bash
# Modified from https://gist.github.com/BaseCase/c45299e4f8474119881d708a4b728fbf
# by Aaron Lichtman -- https://github.com/alichtman

# notes.sh
#
# A script for quickly editing your notes. Allows creation of new files by
# selecting CREATE_NEW_FILE at the menu. Depends on the $NOTES environment
# variable being set.

set -e

new_file_creation_option="CREATE_NEW_FILE"

main() {
	cd "$NOTES"
	touch "$new_file_creation_option"
	previous_file="$1"
	file_to_edit=$(select_file "$previous_file")

	if [ -n "$file_to_edit" ] ; then
	  if [ "$file_to_edit" == "$new_file_creation_option" ] ; then
		  read -p "Enter a new file name: " file_to_edit
		  touch_create_parent "$file_to_edit"
	  fi
	rm "$new_file_creation_option"
	"$EDITOR" "$file_to_edit"
	main "$file_to_edit"
	fi
	cd -
}

touch_create_parent() {
	mkdir -p "$(dirname "$1")" && touch "$1"
}

select_file() {
	given_file="$1"
	fzf --preview="cat {}" --preview-window=right:70%:wrap --query="$given_file"
}

# Hook SIGINT to clean up
trap cleanup EXIT INT TERM

function cleanup () {
	rm "$new_file_creation_option"
}

main ""

@BaseCase
Copy link
Author

I added in-script file creation.

@alichtman awesome! :)

Also awesome is that apparently GitHub now includes Gist comments in its Notification page, which I think is new.

@alichtman
Copy link

https://github.com/alichtman/fzf-notes

I've fleshed this out into a more complete note taking tool and thought I'd share. It now supports multiple notebooks.

@BaseCase
Copy link
Author

Hey @alichtman that's really cool! I'll have to pull down your tool and try it out later today :)

@guychouk
Copy link

guychouk commented Mar 2, 2021

Thanks to this amazing idea, I created this short script to manage notes in the Zettelkasten method, using fzf, ripgrep and bat.

Copy link

ghost commented Apr 30, 2022

Thanks to this amazing idea, I created this small script to manage notes in the Zettelkasten method, using fzf, the silver searcher and bat.

the link to your project is dead

@guychouk
Copy link

guychouk commented Apr 30, 2022

the link to your project is dead

Fixed it @SamDc73, thanks for the heads up!

@rudchenkos
Copy link

Thank you Casey for the idea and the nice article which led me to this script.

As a tribute, I can suggest a simplification. Since version 0.10 fzf supports --bind with execute:

alias fuz=fzf --preview="cat {}" --preview-window=right:70%:wrap --bind 'enter:execute($EDITOR {})'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment