diff --git a/README.md b/README.md index 291ac4d..b353d4c 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,12 @@ this is an attempt to wrap them into a single script and then have aliases to ma ## Philosophy -- cadmus acts as a menu for scripts to acheive things +- ****cadmus**** acts as a menu for scripts to acheive things - the script name will always be printed to the terminal so the individual script can be used for whatever purpose. -- SubFunctions will take only two arguments: - - `-h` or `--help` as a help function - - If this is seen anywhere the help will be printed and the script exit will. - - Some type of input: - - `-d` or `--dir` as a directory location - - `-p` or `--path` as a file location - - `STDIN` which is piped into the subfunction. +- SubFunctions will take *only one* argument or `STDIN` + - If the first argument is either `-h` or `--help` help will be printed and then `exit 0` + - This might lead to some limitations but the simplicity is for sanity, modularity and extensibility. diff --git a/bin/NoteFind.sh b/bin/NoteFind.sh index cfb4fe4..8f92a66 100755 --- a/bin/NoteFind.sh +++ b/bin/NoteFind.sh @@ -10,24 +10,90 @@ set -o pipefail # don't hide errors within pipes # * Main Function main() { - setVars - check_for_help "${@}" # If help is detected this script will exit check_for_dependencies - arguments "${@}" - SkimAndGrep + setVars + readFirstArgument "${@}" + SkimNotes "${@}" } # ** Helper Functions +# *** Check for Dependencies +check_for_dependencies () { + + for i in ${DependArray[@]}; do + command -v "$i" >/dev/null 2>&1 || { echo >&2 "I require $i but it's not installed. Aborting."; exit 1; } + done + + +} + +# **** List of Dependencies + +declare -a DependArray=( + "rg" + "sk" + "mdcat" + "xclip" + ) + + +# *** Set variables below main +setVars () { + readonly script_name=$(basename "${0}") + readonly script_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + IFS=$'\t\n' # Split on newlines and tabs (but not on spaces) +} + +# **** Print Help +Help () { + + + echo + echo -e " \e[3m\e[1m NoteFind.sh \e[0m; Helpful Shell Scripts for Markdown Notes" + echo -e " \e[1;31m -------------------------\e[0m " + echo + echo -e " \e[3m\e[1m• Usage \e[0m " + echo + echo -e " "${script_name}" []" + echo -e " "${script_name}" [-h]" + echo -e " "${script_name}" [--help]" + echo + echo -e " \e[3m By Design: No Options; No other Arguments\e[0m" + echo + echo + echo -e " \e[1;91m \e[1m Binding \e[0m\e[0m \e[1;34m┊┊┊ \e[0m Description " + echo -e " ..............\e[1;34m┊┊┊\e[0m........................................... " + echo -e " \e[1;95m Ctrl - q \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Search \e[0m with \e[0m\e[3mripgrep\e[0m" + echo -e " \e[1;93m Ctrl - w \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Copy \e[0m the Full Path to the Clipboard" + echo -e " \e[1;93m Alt - w \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Copy \e[0m the Relative Path to the Clipboard" + echo -e " \e[1;94m Alt - e \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Open \e[0m in Emacs" + echo -e " \e[1;94m Alt - v \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Open \e[0m in VSCode" + echo -e " \e[1;94m Ctrl - o \e[0m \e[1;34m ┊┊┊ \e[0m \e[1m Open \e[0m in Default Program" + echo + + echo -e " \e[3m\e[1m• Compatability \e[0m " + echo + echo -e " Match highlighting occurs automatically if \e[1m\$SHELL\e[0m is \e[1m **/fish\e[0m" + echo -e " This uses \e[1mtmpfs\e[0m at \e[1m /dev/shm\e[0m, this should work on \e[3mArch\e[0m, \e[3mFedora\e[0m and \e[3mUbuntu\e[0m, I don't know about \e[3mMacOS\e[0m " + echo +} + + +# *** Read First Argument +readFirstArgument () { + + if [[ "${1:-}" == "-h" ]] || [[ "${1:-}" == "--help" ]] || [[ "${1:-}" == "" ]]; then + Help && exit 0 + fi + +} # *** Skim and Grep, the important stuff -SkimAndGrep () { +SkimNotes () { ## Change directory if One was specified, exit if no directory exists - if [ "${1:-}" != "" ]; then - cd "${1}" || exit 4 - fi - + cd "${1}" ## If using fish, cleverness can be utilised to highlight matches. ## fish only, not zsh or bash @@ -74,13 +140,7 @@ SkimGrepHighlightFish () { ## C-q toggles interactive ## C-y Copies Full path to clipboard } -# -# *** Set variables below main -setVars () { - readonly script_name=$(basename "${0}") - readonly script_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - IFS=$'\t\n' # Split on newlines and tabs (but not on spaces) -} + # **** Skim with Grep SkimGrep () { @@ -95,93 +155,6 @@ SkimGrep () { } -# *** Interpret arguments -## TODO I should change this, the -d and -p options only complicate things -arguments () { - while test $# -gt 0 - do - case "$1" in - -d) SkimAndGrep "${2}" && exit 0 - ;; - --d) SkimAndGrep $2 && exit 0 - ;; - --*) echo "bad option $1 in "${script_name}"" - ;; - -?) echo "(5) Unknown option $1 in "${script_name}""; Help; exit 1 - ;; -## ?*) echo -e "argument \e[1;35m${1}\e[0m has no definition laksdjfaklsdfj." -## ;; - esac - shift - done -} -# *** Check for Help -# **** Print Help -# -check_for_help () { - while test $# -gt 0 - do - case "$1" in - --help) Help && exit 0 - ;; - -h) Help && exit 0 - ;; - esac - shift - done -} - -Help () { - - - echo - echo -e " \e[3m\e[1m NoteFind.sh \e[0m; Helpful Shell Scripts for Markdown Notes" - echo -e " \e[1;31m -------------------------\e[0m " - echo - echo -e " \e[3m\e[1m• Usage \e[0m " - echo - echo -e " "${script_name}" [-d /dev/null 2>&1 || { echo >&2 "I require $i but it's not installed. Aborting."; exit 1; } - done - - -} - -# **** List of Dependencies - -declare -a DependArray=( - "rg" - "sk" - "mdcat" - "xclip" - ) - - -## * Call Main Function +# * Call Main Function main "${@}" diff --git a/bin/cadmus b/bin/cadmus index b0deb2b..64dc6ba 100755 --- a/bin/cadmus +++ b/bin/cadmus @@ -72,7 +72,7 @@ arguments () { ;; -h) mainHelp && exit 0 ;; - find) shift; NoteFind -d "${NOTES_DIR}" "${@:-}" ## Don't steal function name + find) shift; NoteFind "${NOTES_DIR}" "${@:-}" ## Don't steal function name ;; search) echo "begin note search" ;;