Testing code block
#!/bin/dash

# check if it is run as ROOT and exit the code.
ROOID=$(id -u)
if [ $((ROOID)) -eq 0 ]; then
    notify-send "clean exit" "Oop! it was run as ROOT. please run it as NORMAL user again."
    exit 0
fi

# check if it is running in terminal. otherwise exit.
case "$(ps -o stat= -p $$)" in
    *+*) clear; echo "\ndamshote continue..." ;;
    *) notify-send -t 2700 "clean exit" "please run it in terminal." ;;
esac

# check it is already running and exit.
SCRIPTNAME="$(dirname -- "$0")"
if pidof -x "$SCRIPTNAME" > /dev/null 2>&1; then
    echo "Oop! it is already running. clean exit"
    exit 0
fi

HEREDIR="$(dirname "$(readlink -f "$0")")"
NOTEDIR=""$HEREDIR"/damshote-notes-dir"
TRASHDIR=""$HEREDIR"/damshote-trash-dir"
mkdir -p "$NOTEDIR"
mkdir -p "$TRASHDIR"
GENFILE=""$HEREDIR"/contentcpmvfodesgen"

# generate list of files and filders in the current directory
# content generate
contentgen_func () {
    if [ -f "$GENFILE" ]; then
        rm "$GENFILE"
    fi
    if [ "$PWD" = "$NOTEDIR" ]; then
        local FIFORAW=$(echo "EXIT\nNew-FILE\nNew-FOLDER" && ls --group-directories-first --file-type .)
    else
        local FIFORAW=$(echo "EXIT\nNew-FILE\nNew-FOLDER" && ls -a --group-directories-first --file-type . | grep -v "^\.[0-9a-zA-Z]\|^\./$")
    fi
    local NUM=0
    for FIFO in $FIFORAW; do
        local ZLNUM=$(printf "%03d" "$NUM")
        echo ""$ZLNUM". "$FIFO" @ "$ZLNUM""
        local NUM=$((NUM+1))
    done > "$GENFILE"
    echo; cat "$GENFILE"; echo
}

# cp mv folder destination generate
cpmvfodesgen_func () {
    if [ -f "$GENFILE" ]; then
        rm "$GENFILE"
    fi
    local FOLIST=$(echo "EXIT\n../" && ls -d */ 2>/dev/null)
    local NUM=0
    for FOLDER in $FOLIST; do
        local ZLNUM=$(printf "%03d" "$NUM")
        echo ""$ZLNUM". "$FOLDER" @ "$ZLNUM""
        local NUM=$((NUM+1))
    done > "$GENFILE"
    echo; cat "$GENFILE"; echo
}

# selecting by number
selection_func () {
    while true; do
        read -p "Select Number: " SELNUN
        # correct selected number
        unset CORRECNUM
        case "$SELNUN" in
            [0-9]|[0-9][0-9]) CORRECNUM=$(printf "%03d" "$SELNUN") ;;
            [0-9][0-9][0-9]) CORRECNUM="$SELNUN" ;;
            e|exit|q|quit) exit 0 ;;
            *) echo "Oop! invalid selection. try again."; continue ;;
        esac
        SELECTED=$(cat "$GENFILE" | grep "^$CORRECNUM" | cut -d ' ' -f 2)
        if [ -z "$SELECTED" ]; then
            echo "Oop! selection is empty. try again."; continue
        fi
        break
    done
}

# copy and move function
copymove_func () {
    SELFILE=$(readlink -f "$SELECTED")
    unset SELECTED
    cpmvfodesgen_func
    selection_func
    SELDEST=$(readlink -f "$SELECTED")
    if [ "$1" = "copy" ]; then
        cp "$SELFILE" "$SELDEST"/
    fi
    if [ "$1" = "move" ]; then
        mv "$SELFILE" "$SELDEST"/
    fi
}
# open and go to directory
opengoto_func () {
    if [ -d "$SELECTED" ]; then
        cd "$SELECTED"
    fi
    if [ -f "$SELECTED" ]; then
        nvim "$SELECTED"
    fi
}
# rename file or folder
renamefifo_func () {
    read -p "Type New Name: " NEWNAME
    mv "$SELECTED" "$NEWNAME"
}
# delete file or folder
deletefifo_func () {
    local SELFIFO=$(readlink -f "$SELECTED")
    if [ -f "$SELFIFO" ] || [ -d "$SELFIFO" ]; then
        mv "$SELFIFO" "$TRASHDIR"/
    fi
}

# step one operations
steponeopera_func () {
    unset STEPTWO
    if [ "$SELECTED" = "EXIT" ]; then
        exit 0
    fi
    if [ "$SELECTED" = "New-FILE" ]; then
        read -p "Type New-FILE name without space: " FILENAME
        nvim "$(date +'%Y%m%d-%H%M%S')___"$FILENAME""
        STEPTWO=0
        return
    fi
    if [ "$SELECTED" = "New-FOLDER" ]; then
        read -p "Type New-FOLDER name without space: " FOLDERNAME
        mkdir "$(date +'%Y%m%d-%H%M%S')___"$FOLDERNAME""
        STEPTWO=0
        return
    fi
    if [ "$SELECTED" = "BACK" ]; then
        cd ../
        STEPTWO=0
        return
    fi
    STEPTWO=1
}

# step two operations
steptwoopera_func () {
    if [ $((STEPTWO)) -eq 0 ]; then
        return
    fi
    echo "
    o -> Open/GoTo
    c -> Copy
    m -> Move
    r -> Rename
    d -> Delete
    b -> Go-BACK
    q -> EXIT/QUIT
    e -> EXIT/QUIT
    "
    read -p "Type Character: " SELCHAR
    case "$SELCHAR" in
        o)
            opengoto_func
            ;;
        c)
            copymove_func copy
            ;;
        m)
            copymove_func move
            ;;
        r)
            renamefifo_func
            ;;
        d)
            deletefifo_func
            ;;
        b)
            echo "\ndamshote continue..."
            ;;
        q)
            exit 0
            ;;
        e)
            exit 0
            ;;
        *)
            opengoto_func
            ;;
    esac
}

# start main
cd "$NOTEDIR"
while true; do
    contentgen_func
    selection_func
    steponeopera_func
    steptwoopera_func
    clear
    echo "\ndamshote continue..."
done

Comments

Popular posts from this blog

အလုပ်ထုတ် နစ်နာကြေး နှုန်းထားများ

MOHS Guideline များ နှင့် Checklist များ

၂၀၂၂ ခုနှစ်၊ အများပြည်သူ အလုပ်ပိတ်ရက်များ