From 5d805a77fe958c7ebdfd6aa96bcf63bfb2461e4b Mon Sep 17 00:00:00 2001 From: Ville Rantanen Date: Mon, 27 Jan 2020 15:39:14 +0200 Subject: [PATCH] finally updating cclip --- files/cclip | 85 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 14 deletions(-) diff --git a/files/cclip b/files/cclip index 2c8723a..0353eeb 100755 --- a/files/cclip +++ b/files/cclip @@ -11,8 +11,10 @@ _help() { (r)ead Display on screen / copies to file (w)rite Save from stdin / from file (d)elete Delete an entry + (D)elete Clear the whole clibboard (e)dit Edit contents, with \$EDITOR (l)ist [default] List names of clipboards + rmenu/readmenu Read a file/folder using a simple menu (for MC ex.) Name: Any string for the clipboard name. default: 0 Filename: @@ -64,10 +66,20 @@ _list() { _write() { # no file mentioned, use stdin [[ -z "$FILE" ]] && stream_in=1 - # stdin is open, use stdin - [ -t 0 ] || stream_in=1 + # no file mentioned, use the name as file + [[ -z "$FILE" ]] && { + [[ -e "$NAME" ]] && { + # NAME is actually the file, reverse roles + FILE="$NAME" + NAME=$( basename "$NAME" ) + } + } + [[ -e "$FILE" ]] && { + # Input file exists, dont use stream + stream_in=0 + } - [ -t 0 ] && [[ -z "$FILE" ]] && { + [[ $stream_in -ne 1 ]] && [[ -z "$FILE" ]] && { _msg File to read needed, or use stdin exit 1 } @@ -83,34 +95,57 @@ _write() { } _write_files() { # name, file - cp -av "$2" "$STORAGE/$1" + echo Storing "$2" to "$1" + cp -aT "$2" "$STORAGE/$1" + touch "$STORAGE/$1" } _write_stdin() { # name cat - > "$STORAGE/$1" } +_read_menu() { + pushd "$STORAGE" &>/dev/null + echo "Select clipboard from menu" + ls + read -e NAME + popd &>/dev/null + if [[ -e "$STORAGE/$NAME" ]]; then + NAME=$( basename $NAME ) + _read + fi +} + + _read() { [[ -e "$STORAGE/$NAME" ]] || { _msg "No such clipboard" return } - [[ -z "$FILE" ]] && stream_out=1 + [[ "$FILE" = "-" ]] && stream_out=1 [ -t 1 ] || stream_out=1 - [[ "$stream_out" -eq 1 ]] && { - [[ -d "$STORAGE/$NAME" ]] && { - _msg "$NAME is a directory, needs target [file]" - exit 1 - } _read_stdout "$NAME" - } || { - _read_files "$NAME" "$FILE" + return } + # no file mentioned, use the name as file + [[ -z "$FILE" ]] && { + [[ -n "$NAME" ]] && { + FILE=$( basename "$NAME" ) + } + [[ -e "$FILE" ]] && { + echo "'$FILE' already exists, not overwriting" + exit 1 + } + } + _read_files "$NAME" "$FILE" } + _read_files() { # name, file - cp -av "$STORAGE/$1" "$2" + echo Reading "$1" to "$2" + cp -aT "$STORAGE/$1" "$2" } + _read_stdout() { # name cat "$STORAGE/$1" } @@ -123,7 +158,19 @@ _delete() { # name [[ "$FORCE" -ne 1 ]] && { read -p "Really delete $1 ? Break to cancel. " foo } - rm -vrf "$STORAGE/$1" + echo Deleting "$1" + rm -rf "$STORAGE/$1" +} + +_delete_all() { + [[ -e "$STORAGE" ]] || { + exit 0 + } + [[ "$FORCE" -ne 1 ]] && { + read -p "Really delete $STORAGE ? Break to cancel. " foo + } + rm -vrf "$STORAGE/" + mkdir "$STORAGE" } _msg() { @@ -168,8 +215,10 @@ ARG2="$2" ARG3="$3" CMD=list [[ "$1" = "r" || "$1" = "read" ]] && { CMD=read; ARG1=$CMD; } +[[ "$1" = "rmenu" || "$1" = "readmenu" ]] && { CMD=read_menu; ARG1=$CMD; } [[ "$1" = "w" || "$1" = "write" ]] && { CMD=write; ARG1=$CMD; } [[ "$1" = "d" || "$1" = "delete" || "$1" = "del" ]] && { CMD=delete; ARG1=$CMD; } +[[ "$1" = "D" || "$1" = "Delete" || "$1" = "Del" ]] && { CMD=delete_all; ARG1=$CMD; } [[ "$1" = "l" || "$1" = "list" ]] && { CMD=list; ARG1=$CMD; } [[ "$1" = "e" || "$1" = "edit" ]] && { CMD=edit; ARG1=$CMD; } [[ "$1" = "h" || "$1" = "help" ]] && _help @@ -183,12 +232,20 @@ CMD=list _list exit $? } +[[ "$CMD" = delete_all ]] && { + _delete_all + exit $? +} _get_name _get_file [[ "$CMD" = read ]] && { _read exit $? } +[[ "$CMD" = read_menu ]] && { + _read_menu + exit $? +} [[ "$CMD" = delete ]] && { _delete "$NAME" exit $?