add bash-only version
This commit is contained in:
parent
d96cba52df
commit
f2790b54ca
2 changed files with 80 additions and 96 deletions
80
mark_recall.sh
Normal file
80
mark_recall.sh
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
### Mark and recall
|
||||
#
|
||||
# Jan Petykiewicz 2017-01-26
|
||||
#
|
||||
# Functions:
|
||||
# mark : Mark a path for later recall.
|
||||
# If no directory is given as an argument, marks the current working directory.
|
||||
# mlist : List marked directories.
|
||||
# Entries are unique and sorted most-to-least recent by mark time.
|
||||
# recall: Return to a previously-marked directory.
|
||||
# Pass a number to specify an entry in mlist; default is 1 (most recently marked).
|
||||
# bamf: Return to a marked directory using a fuzzy search, e.g.
|
||||
# ```bamf proj``` may match /home/username/projects/
|
||||
#
|
||||
# Use of bamf requires python3 and fuzzywuzzy.
|
||||
#
|
||||
|
||||
if [ -z $XDG_DATA_DIR ]; then
|
||||
dir=$HOME/.local/share
|
||||
else
|
||||
dir=$XDG_DATA_DIR
|
||||
fi
|
||||
mkdir -p $dir
|
||||
MARK_RECALL_FILE=$dir/.mark_recall
|
||||
touch $MARK_RECALL_FILE
|
||||
|
||||
MARK_RECALL_MEMORY=100
|
||||
|
||||
|
||||
mark() {
|
||||
# If no arg given, add current dir
|
||||
if [ "$#" -lt 1 ]; then
|
||||
dir="$PWD"
|
||||
else
|
||||
dir="$(cd "$1" && pwd)"
|
||||
fi
|
||||
|
||||
# cat inside echo to avoid overwriting before we read
|
||||
new_list="$dir
|
||||
$(cat $MARK_RECALL_FILE)"
|
||||
|
||||
# Remove duplicates, keep a limited number, drop empty lines, and write to file
|
||||
echo "$new_list" \
|
||||
| awk '!a[$0]++' - \
|
||||
| head -n $MARK_RECALL_MEMORY \
|
||||
| sed '/^[[:space:]]*$/d' \
|
||||
> $MARK_RECALL_FILE
|
||||
}
|
||||
|
||||
|
||||
recall() {
|
||||
if [ "$#" -lt 1 ]; then
|
||||
cd $(head -n 1 $MARK_RECALL_FILE)
|
||||
else
|
||||
cd $(sed "${1}q;d" $MARK_RECALL_FILE)
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
mlist() {
|
||||
cat -n $MARK_RECALL_FILE
|
||||
}
|
||||
|
||||
|
||||
bamf() {
|
||||
if [ "$#" -lt 1 ]; then
|
||||
recall
|
||||
else
|
||||
dir=$(python3 -W ignore -c "
|
||||
import sys
|
||||
from fuzzywuzzy import process, fuzz
|
||||
with open('$MARK_RECALL_FILE') as f:
|
||||
path_list = f.readlines()
|
||||
print(process.extractOne(' '.join(sys.argv[1:]), path_list,
|
||||
scorer=fuzz.token_sort_ratio)[0][:-1])
|
||||
" "$@")
|
||||
cd $dir
|
||||
fi
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue