From 5863d5a58fce8842e83fecf52e07c3fc20ba3354 Mon Sep 17 00:00:00 2001 From: Jonathan Hodgson Date: Tue, 22 Dec 2020 09:15:00 +0000 Subject: [PATCH] Moves FZF related code into an include --- inc/fzf | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ kb | 87 +------------------------------------------------------- 2 files changed, 89 insertions(+), 86 deletions(-) create mode 100644 inc/fzf diff --git a/inc/fzf b/inc/fzf new file mode 100644 index 0000000..0a27a8a --- /dev/null +++ b/inc/fzf @@ -0,0 +1,88 @@ +#!/usr/bin/env bash + +fuzzySelect(){ + cd "$dataDir" || return + local id + local query + local operation + local output + local header="$(echo -e "Type to filter + +${YELLOW}ctrl+n $WHITE create new ${YELLOW}ctrl+v $WHITE view selected +${YELLOW}ctrl+e $WHITE edit selected ${YELLOW}ctrl+d $WHITE delete selected +")" + export -f fzfPreview + export dataDir + output="$(listEntries | + fzf --header="$header" --header-lines=2 --print-query \ + --delimiter=" +" --with-nth=3,5 --height=100% \ + --expect="ctrl-n,ctrl-o,ctrl-e,ctrl-d" \ + --preview='bash -c "fzfPreview {}"')" + + query="$(echo "$output" | sed -n '1p')" + operation="$(echo "$output" | sed -n '2p')" + id="$(echo "$output" | sed -n '3p' | cut -d' ' -f1)" + + case "$operation" in + 'ctrl-n') newFile "$query" ;; + 'ctrl-o') viewFile "$id" ;; + 'ctrl-e') editFile "$id" ;; + 'ctrl-d') deleteFile "$id" ;; + '') + case "$1" in + edit) editFile "$id" ;; + view) viewFile "$id" ;; + *) viewFile "$id" ;; + esac + ;; + *) die "unknown operation '$operation'" ;; + esac + +} + +fzfPreview(){ + cd "$dataDir" || return + + local id + local filename + local title + local type + local tags + + id="$(echo "$1" | awk -F ' +' '{print $1}')" + filename="$(echo "$1" | awk -F ' +' '{print $2}')" + title="$(echo "$1" | awk -F ' +' '{print $3}')" + type="$(echo "$1" | awk -F ' +' '{print $4}')" + tags="$(echo "$1" | awk -F ' +' '{print $5}')" + + if [ "$type" = "normal" ]; then + bat --color=always --style=full "$filename" + fi +} + +doDeepSearch(){ + cd "$dataDir" || return + local query="$1" + echo "$query" + rg --column --line-number --no-heading --color=always --smart-case "$query" +} + +doDeepPreview(){ + cd "$dataDir" || return + local file + local line + file="$(echo "$1" | cut -d ':' -f 1)" + line="$(echo "$1" | cut -d ':' -f 2)" + bat --color=always --style=full -H "$line" "$file" +} + +deepSearch(){ + type -p rg > /dev/null || die "You need rg installed for deep search" + export -f doDeepSearch + export -f doDeepPreview + export dataDir + echo "" | fzf --ansi \ + --bind 'change:reload:bash -c "doDeepSearch {q} || true"' \ + --preview 'bash -c "doDeepPreview {} || true"' +} + diff --git a/kb b/kb index 85cbc0b..6d1e5ee 100755 --- a/kb +++ b/kb @@ -31,6 +31,7 @@ source "inc/init" source "inc/tag-management" source "inc/file-management" source "inc/yaml" +source "inc/fzf" # Utility functions # ################################################## @@ -242,92 +243,6 @@ listEntries(){ sqlite3 --column $header "${sqliteFile}" } -fuzzySelect(){ - cd "$dataDir" || return - local id - local query - local operation - local output - local header="$(echo -e "Type to filter - -${YELLOW}ctrl+n $WHITE create new ${YELLOW}ctrl+v $WHITE view selected -${YELLOW}ctrl+e $WHITE edit selected ${YELLOW}ctrl+d $WHITE delete selected -")" - export -f fzfPreview - export dataDir - output="$(listEntries | - fzf --header="$header" --header-lines=2 --print-query \ - --delimiter=" +" --with-nth=3,5 --height=100% \ - --expect="ctrl-n,ctrl-o,ctrl-e,ctrl-d" \ - --preview='bash -c "fzfPreview {}"')" - - query="$(echo "$output" | sed -n '1p')" - operation="$(echo "$output" | sed -n '2p')" - id="$(echo "$output" | sed -n '3p' | cut -d' ' -f1)" - - case "$operation" in - 'ctrl-n') newFile "$query" ;; - 'ctrl-o') viewFile "$id" ;; - 'ctrl-e') editFile "$id" ;; - 'ctrl-d') deleteFile "$id" ;; - '') - case "$1" in - edit) editFile "$id" ;; - view) viewFile "$id" ;; - *) viewFile "$id" ;; - esac - ;; - *) die "unknown operation '$operation'" ;; - esac - -} - -fzfPreview(){ - cd "$dataDir" || return - - local id - local filename - local title - local type - local tags - - id="$(echo "$1" | awk -F ' +' '{print $1}')" - filename="$(echo "$1" | awk -F ' +' '{print $2}')" - title="$(echo "$1" | awk -F ' +' '{print $3}')" - type="$(echo "$1" | awk -F ' +' '{print $4}')" - tags="$(echo "$1" | awk -F ' +' '{print $5}')" - - if [ "$type" = "normal" ]; then - bat --color=always --style=full "$filename" - fi -} - -doDeepSearch(){ - cd "$dataDir" || return - local query="$1" - echo "$query" - rg --column --line-number --no-heading --color=always --smart-case "$query" -} - -doDeepPreview(){ - cd "$dataDir" || return - local file - local line - file="$(echo "$1" | cut -d ':' -f 1)" - line="$(echo "$1" | cut -d ':' -f 2)" - bat --color=always --style=full -H "$line" "$file" -} - -deepSearch(){ - type -p rg > /dev/null || die "You need rg installed for deep search" - export -f doDeepSearch - export -f doDeepPreview - export dataDir - echo "" | fzf --ansi \ - --bind 'change:reload:bash -c "doDeepSearch {q} || true"' \ - --preview 'bash -c "doDeepPreview {} || true"' -} - mainScript() { ############## Begin Script Here ################### ####################################################