aboutsummaryrefslogtreecommitdiff
path: root/docshower
diff options
context:
space:
mode:
Diffstat (limited to 'docshower')
-rwxr-xr-xdocshower125
1 files changed, 125 insertions, 0 deletions
diff --git a/docshower b/docshower
new file mode 100755
index 0000000..102baae
--- /dev/null
+++ b/docshower
@@ -0,0 +1,125 @@
+#!/bin/bash
+#
+# Fast way to browse documents stored in an archive.
+#
+
+# Parameters
+PROGRAM="$0"
+BASENAME="`basename $0`"
+DOCS="$HOME/data/doc"
+BIBLIO="$DOCS/bibliographies"
+FILELIST=".doclist"
+LIST="$DOCS/$FILELIST"
+DOC_PATTERN=".*\.(txt|doc|docx|rtf|pdf|sxc|csv|odt|odf|ods|xls|xlsx|ppt|epub|mobi|djvu|lit)"
+FIND_OPTS="-regextype posix-egrep -iregex"
+ARG="$1"
+EXTRA_ARG="$2"
+DATE="`date +%s`"
+MAX_AGE="86400"
+
+# Update the filelist
+function __update_filelist {
+ echo "Generating new filelist..."
+
+ # Unnanex if it was erroneously annexed
+ if [ -h "$LIST" ] && [ -d "$DOCS/.git/annex" ]; then
+ ( cd $DOCS && git annex unlock $FILELIST )
+ fi
+
+ # Refresh
+ cd $DOCS && find . -not -path '*.git*' $FIND_OPTS "$DOC_PATTERN" > $LIST
+
+ # Stage
+ git add $LIST
+}
+
+# Check
+if [ -z "$ARG" ]; then
+ echo "usage: $BASENAME [option] [<object>] [extra-args]"
+ echo " $BASENAME --refresh"
+ echo " $BASENAME --<program-name> <item-name>"
+ echo " $BASENAME --open <item-name>"
+ echo " $BASENAME --rifle <item-name> -p 4"
+ echo " $BASENAME --koreader <item-name>"
+ echo " $BASENAME --watch <subfolder>"
+ echo " $BASENAME <item-name>"
+ exit 1
+
+elif [ "$ARG" == "--refresh" ]; then
+ __update_filelist
+
+elif [ ! -d "$DOCS" ]; then
+ echo "missing $DOCS folder"
+ exit 1
+fi
+
+# Check for filelist
+if [ ! -e "$LIST" ]; then
+ __update_filelist
+ CHANGED="`date +%s`"
+else
+ CHANGED="`stat --printf='%Y\n' $LIST`"
+fi
+
+# Automatically refresh lists older than $MAX_AGE
+#if ((($DATE - $CHANGED) >= $MAX_AGE)); then
+# __update_filelist
+#fi
+
+# Dispatch
+#find $DOCS -iname "*$ARG*" | head -1 | while read entry; do xdg-open "$entry"; done
+if [ "$ARG" == "--search" ]; then
+ shift
+ grep -i -- "$*" $LIST
+
+elif [ "$ARG" == "--details" ]; then
+ shift
+ entry="`echo $* | sed -e 's/^@//'`"
+ if grep -qiR -- "$entry" $BIBLIO; then
+ grep -iR -- "$entry" $BIBLIO | cut -d : -f 1 | while read file; do
+ echo "At $file:"
+ echo ""
+ # Thanks https://tex.stackexchange.com/questions/28506/how-to-use-a-command-line-tool-to-extract-a-bibtex-reference-that-contains-a-sea
+ awk -v RS='\n@' "/${entry}/" $file
+ done
+ else
+ find $DOCS -name ${1}.bib -exec cat {} \;
+ fi
+
+elif [ "$ARG" == "--watch" ]; then
+ # Convert symlink to full path and start inotifywait loop
+ folder="`readlink -f $DOCS`"
+ subfolder="$EXTRA_ARG"
+ echo "Watching changes at $folder/$subfolder..."
+
+ #while inotifywait -e modify -e create -e move -e delete -r "$folder"; do
+ #while inotifywait -e modify -e move -r "$folder"; do
+ #while inotifywait -e modify -e move -r "$folder/$subfolder"; do
+ #while inotifywait -e modify -e create -e move -e delete -r "$folder/$subfolder"; do
+ # $PROGRAM --refresh
+ #done
+ inotifier $PROGRAM --refresh
+
+else
+ shift 2
+ EXTRA_ARGS="$*"
+
+ # Allows for specifying a custom command to open the file
+ if [ "${ARG:0:2}" == "--" ] && [ ! -z "$EXTRA_ARG" ]; then
+ OPEN="${ARG:2}"
+ ARG="$EXTRA_ARG"
+
+ # Shortcuts for xdg-open
+ if [ "$OPEN" == "open" ] || [ "$OPEN" == "read" ]; then
+ OPEN="xdg-open"
+ fi
+ else
+ OPEN="xdg-open"
+ EXTRA_ARGS=""
+ fi
+
+ grep -i -- "$ARG" $LIST | while read entry; do
+ echo "Opening $entry..."
+ cd $DOCS && $OPEN $EXTRA_ARGS "$entry"
+ done
+fi