You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
89 lines
2.1 KiB
4 years ago
|
#!/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"'
|
||
|
}
|
||
|
|