diff --git a/README.md b/README.md index b6006eb..c310626 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,12 @@ y: mark copy m: mark move d: mark trash (~/.cache/fff/trash/) b: mark bulk rename + +Y: mark all for copy +M: mark all for move +D: mark all for trash (~/.cache/fff/trash/) +B: mark all for bulk rename + p: paste/move/delete/bulk_rename c: clear file selections @@ -232,6 +238,11 @@ export FFF_KEY_MOVE="m" export FFF_KEY_TRASH="d" export FFF_KEY_BULK_RENAME="b" +export FFF_KEY_YANK_ALL="Y" +export FFF_KEY_MOVE_ALL="M" +export FFF_KEY_TRASH_ALL="D" +export FFF_KEY_BULK_RENAME_ALL="B" + export FFF_KEY_PASTE="p" export FFF_KEY_CLEAR="c" diff --git a/fff b/fff index 6742fd4..b1e39a5 100755 --- a/fff +++ b/fff @@ -330,26 +330,37 @@ mark() { [[ $PWD != "$mark_dir" ]] && marked_files=() - if [[ ${marked_files[$1]} == "${list[$1]}" ]]; then - unset 'marked_files[scroll]' + if [[ $1 == all ]]; then + if ((${#marked_files[@]} != ${#list[@]})); then + marked_files=("${list[@]}") + mark_dir="$PWD" + else + marked_files=() + fi + redraw else - marked_files[$1]="${list[$1]}" - mark_dir="$PWD" - fi + if [[ ${marked_files[$1]} == "${list[$1]}" ]]; then + unset 'marked_files[scroll]' + + else + marked_files[$1]="${list[$1]}" + mark_dir="$PWD" + fi - # Clear line before changing it. - printf '\e[K' - print_line "$1" + # Clear line before changing it. + printf '\e[K' + print_line "$1" + fi # Find the program to use. case "$2" in - y) file_program=(cp -iR) ;; - m) file_program=(mv -i) ;; + y|Y) file_program=(cp -iR) ;; + m|M) file_program=(mv -i) ;; # These are 'fff' functions. - d) file_program=(trash) ;; - b) file_program=(bulk_rename) ;; + d|D) file_program=(trash) ;; + b|B) file_program=(bulk_rename) ;; esac status_line @@ -368,7 +379,7 @@ trash() { "$FFF_TRASH_CMD" "${@:1:$#-1}" else - cd "$FFF_TRASH" && "mv" "$@" + cd "$FFF_TRASH" && mv "$@" # Go back to where we were. cd - &>/dev/null ||: @@ -709,6 +720,14 @@ key() { mark "$scroll" "$1" ;; + # Mark all files for operation. + "${FFF_KEY_YANK_ALL:=Y}"|\ + "${FFF_KEY_MOVE_ALL:=M}"|\ + "${FFF_KEY_TRASH_ALL:=D}"|\ + "${FFF_KEY_BULK_RENAME_ALL:=B}") + mark all "$1" + ;; + # Do the file operation. "${FFF_KEY_PASTE:=p}") [[ ${marked_files[*]} ]] && { diff --git a/fff.1 b/fff.1 index 611dcfa..94d0ed5 100644 --- a/fff.1 +++ b/fff.1 @@ -46,6 +46,12 @@ y: mark copy m: mark move d: mark trash (~/\.cache/fff/trash/) b: mark bulk rename + +Y: mark all for copy +M: mark all for move +D: mark all for trash (~/\.cache/fff/trash/) +B: mark all for bulk rename + p: paste/move/delete/bulk_rename c: clear file selections @@ -164,6 +170,11 @@ export FFF_KEY_MOVE="m" export FFF_KEY_TRASH="d" export FFF_KEY_BULK_RENAME="b" +export FFF_KEY_YANK_ALL="Y" +export FFF_KEY_MOVE_ALL="M" +export FFF_KEY_TRASH_ALL="D" +export FFF_KEY_BULK_RENAME_ALL="B" + export FFF_KEY_PASTE="p" export FFF_KEY_CLEAR="c"