From 7921683dd7713d9b8c8a75d5ed8492787163289f Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 26 Jan 2021 19:06:12 -0500 Subject: [PATCH] Added updating and recent files --- mru | 58 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/mru b/mru index 7dd2ee3..82dc841 100755 --- a/mru +++ b/mru @@ -8,8 +8,10 @@ XDG_CACHE_HOME="$HOME/.cache" init() { mkdir -p $XDG_CACHE_HOME/mru + file=XDG_CACHE_HOME/mru/$1 create_new "$1" mv "$file.new" "$file" + touch $XDG_CACHE_HOME/mru/$file.recent } get_cache_path() { @@ -27,19 +29,37 @@ create_new() { -path '*Backups/my-plugins*' -o -path '*.sw[po]' \) -printf \ '%TY-%Tm-%Td\t%TT\t%p\n' | sort -r > $file'.new' } + update() { - clean + file=$XDG_CACHE_HOME/mru/$1 name="$1" - if [ -z "$1" ]; then - name='home' - fi + if [ -z "$1" ]; then name='home'; fi + create_new "$name" + mv "$file.new" "$file" + rm_recent "$1" +} + +# This remove duplicates by deleting files in recent from the main file +rm_recent() { + file=$XDG_CACHE_HOME/mru/$1 + if [ -z "$1" ]; then file=$XDG_CACHE_HOME/mru/home; fi + + while read line + do + l=$(printf "$line" | cut -f3) + if [ ! -z $l ]; then sed -i "\|.*\t.*\t$l|d" $file; fi + done <$file.recent } output() { if [ -z "$1" ]; then - cat $XDG_CACHE_HOME/mru/home; else cat "$XDG_CACHE_HOME/mru/$1"; + file1="$XDG_CACHE_HOME/mru/home.recent"; file2="$XDG_CACHE_HOME/mru/home" + else + file1="$XDG_CACHE_HOME/mru/$1.recent"; file2="$XDG_CACHE_HOME/mru/$1" fi + + cat $file1; printf "\n"; cat $file2 } list() { @@ -48,25 +68,26 @@ list() { insert() { if [ -z "$1" ]; then printf "No path given\n" 1>&2; exit; fi - cache_name=${1+'home'} + cache_name=$2 + if [ -z "$2" ]; then cache_name=home; fi cache_path=$(get_cache_path "$cache_name") - file_path=$(realpath "$1") + if [ -e "$file_path" ]; then - # sed "0,\|.*\t.*\t$file_path|s|||" $XDG_CACHE_HOME/mru/$cache_name - sed -e "0,\|.*\t.*\t$file_path|d" -e "1s;^;$(date '+%Y-%m-%d%t%T')\t$file_path\n;" <$XDG_CACHE_HOME/mru/$cache_name \ - >$XDG_CACHE_HOME/mru/$cache_name.insert$$ - mv $XDG_CACHE_HOME/mru/$cache_name.insert$$ $XDG_CACHE_HOME/mru/$cache_name - else - sed "0,\|.*\t.*\t$file_path|d" <$XDG_CACHE_HOME/mru/$cache_name \ - >$XDG_CACHE_HOME/mru/$cache_name.insert$$ - mv $XDG_CACHE_HOME/mru/$cache_name.insert$$ $XDG_CACHE_HOME/mru/$cache_name + sed -i -e "0,\|.*\t.*\t$file_path|d" $XDG_CACHE_HOME/mru/$cache_name.recent + if [ -s $XDG_CACHE_HOME/mru/$cache_name.recent ]; then + echo "sed starts$(date '+%Y-%m-%d%t%T')\t$file_path\n" + sed -i "1i$(date '+%Y-%m-%d%t%T')\t$file_path" $XDG_CACHE_HOME/mru/$cache_name.recent + echo 'sed ends' + else + printf "$(date '+%Y-%m-%d%t%T')\t$file_path" >$XDG_CACHE_HOME/mru/$cache_name.recent + fi + fi + if [ ! -z $file_path ]; then + sed -i "0,\|.*\t.*\t$file_path|d" $XDG_CACHE_HOME/mru/$cache_name fi -} -clean() { - rm $XDG_CACHE_HOME/mru/*.{insert,new}* } case "$1" in @@ -75,5 +96,4 @@ case "$1" in output) output "$2";; list) list "$2";; insert) insert "$2" "$3";; - clean) clean;; esac