From af3cf9359b56bd8d2fc98b7e3c46211e081c4b2e Mon Sep 17 00:00:00 2001 From: Ryan Greenup Date: Mon, 16 Nov 2020 15:03:26 +1100 Subject: [PATCH] Added some logic for Rofi Find (See Joplin for some notes on this) --- bin/cadmus | 2 +- bin/rofi_find.sh | 119 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 105 insertions(+), 16 deletions(-) diff --git a/bin/cadmus b/bin/cadmus index 35233f4..7f75ea6 100755 --- a/bin/cadmus +++ b/bin/cadmus @@ -97,7 +97,7 @@ function mainHelp() { echo -e " 🔍 \e[1;93m \e[4mf\e[0m\e[1;93mind \e[0m \e[1;34m ┊┊┊ 🎆 \e[0m Find Notes based on FileName" echo -e " 🔎 \e[1;32m \e[4ms\e[0m\e[1;32mearch \e[0m \e[1;34m ┊┊┊ 🎆 \e[0m Search through Notes using Recoll" echo -e " 🏷 \e[1;33m \e[4mt\e[0m\e[1;33mags \e[0m \e[1;34m ┊┊┊ 📁\e[0m Use TMSU to work with tags" - echo -e " 📖 \e[1;33m \e[4mr\e[0m\e[1;33mofi \e[0m \e[1;34m ┊┊┊ 📁\e[0m Use ROFI instead of fzf " + echo -e " 📖 \e[1;33m \e[4mr\e[0m\e[1;33mofi \e[0m \e[1;34m ┊┊┊ 📁\e[0m Use ROFI instead of fzf (WIP) " echo -e " 🔧 \e[1;34m \e[4mto\e[0m\e[1;34mols \e[0m \e[1;34m ┊┊┊ 📁\e[0m Tools for Editing" echo -e " 📝 \e[1;35m \e[4me\e[0m\e[1;35mxport \e[0m \e[1;34m ┊┊┊ 📁\e[0m Export Notes to Different Formats " echo -e " ⎋ \e[1;36m \e[4mc\e[0m\e[1;36monvert \e[0m \e[1;34m ┊┊┊ 📁\e[0m Convert Clipboard Contents to Different Formats " diff --git a/bin/rofi_find.sh b/bin/rofi_find.sh index 7bb1bdc..d53d2d2 100755 --- a/bin/rofi_find.sh +++ b/bin/rofi_find.sh @@ -59,21 +59,21 @@ Help () { echo echo -e " \e[3m By Design: No Options; No other Arguments\e[0m" echo - echo -e " \e[3m\e[1m• Key Bindings\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• Key Bindings\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 " \e[3m\e[1m• Compatability \e[0m " + # echo } @@ -86,6 +86,7 @@ readFirstArgument () { } # *** Skim and Grep, the important stuff +# rofi_over_Notes () { ## Change directory if One was specified, exit if no directory exists @@ -106,7 +107,95 @@ rofi_over_Notes () { # **** Skim with Grep RofiFind () { - echo "mynote.md" + ## Change directory if One was specified, exit if no directory exists + + # I took this bit from https://github.com/davatorium/rofi/issues/997 + # Not totally sure how it works but it does :shrug + + ## Set Variables + local selected + local string + selected="${1:-}" + + TEMP_DIR="/tmp/cadmus_rofi_preview" + mkdir -p "${TEMP_DIR}" + +# schemes="$(fd '\.org$')" # TODO Only look at org-mode files (hmmmm) + schemes="$(find ./ -name '*\.org' -or -name '*\.md')" + lines=$(printf '%s\n' "${schemes}" | wc -l) + menu=$(printf '%s\n' "${schemes}" | rofi -matching fuzzy -location 1 -kb-row-up "" -kb-row-down "" -kb-custom-1 "Up" -kb-custom-2 "Down" -format 'd:s' -dmenu -selected-row $selected) + + exit_code=$? + + selected="${menu%:*}" + string="${menu##*:}" + + case "${exit_code}" in + "1") exit 0;; + "0") PRINT_OUT "${string}" & disown;; + "10") + if [[ $selected == "1" ]]; then + foo_selected="${lines}" + call="3" + else + foo_selected="$(echo -e $(( ${selected} - 1 )))"; + call=$(echo $(( ${selected} - 2 ))) + fi + foo="$(printf '%s' "${schemes}" | sed -n "${foo_selected}"p)"; + PRINT_OUT "${foo}" & disown;; + "11") + if [[ "${selected}" -ge "${lines}" ]]; then + foo_selected="1" + call="0" + else + foo_selected="$(echo -e $(( ${selected} + 1 )))"; + call="${selected}" + fi + foo="$(printf '%s' "${schemes}" | sed -n "${foo_selected}"p)"; + PRINT_OUT "${foo}" & disown + esac + + RofiFind "${call}" + + exit 0 + +} + +# **** Convert the File with Pandoc and Show in Browser +PRINT_OUT () { + FILEPATH="$(realpath ${1})" + FILEPATH_NO_EXT="$(realpath ${1} | cut -f 1 -d '.')" + DIRECTORY="$(dirname ${FILEPATH}})" + NAME="$(basename ${@} | cut -f 1 -d '.')" + + BROWSER="chromium" + + # Simpler calls + # pandoc -f org -t html "${FILEPATH}" --quiet | cat + + function pandoc_browser() { + #pandoc -f org -t html "${FILEPATH}" -A /home/ryan/Templates/CSS/gitOrgWrapped.css --mathjax -s --quiet -o "/dev/shm/${NAME}.html" && \ + pandoc -t html "${FILEPATH}" --extract-media="${TEMP_DIR}/media_${NAME}" -A /home/ryan/Templates/CSS/gitOrgWrapped.css --katex -s --quiet -o "${TEMP_DIR}/${NAME}.html" && \ + "${BROWSER}" "${TEMP_DIR}/${NAME}.html" > /dev/null & disown # Chromium is faster than firefox + } + + ## By caching the export in /dev/shm/ chrome will just go back to the last tab (quicker) + ## and pandoc won't reconvert unnecessarily (quicker) + ## Given that most of the time is spent looking and reading this makes a lot of sense + + if [ "${FILEPATH}" -nt "${TEMP_DIR}/${NAME}.html" ]; then + # The Live_Reload_JS lets me reload this, otherwise do not disown this process + pandoc_browser & disown + else + "${BROWSER}" "${TEMP_DIR}/${NAME}.html" & disown + fi + + # I tried this with org-ruby, no luck though for latex though + # Org-ruby is much faster than pandoc + # /home/ryan/.gem/ruby/2.7.0/bin/org-ruby "${FILEPATH}" -t html > /dev/shm/mpv.html + # cat /home/ryan/Templates/mathjax >> /dev/shm/mpv.html + # cat /home/ryan/Templates/CSS/gitOrgWrapped.css >> /dev/shm/mpv.html + # chromium /dev/shm/mpv.html & disown }