sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

dragdrop (1950B)


      1 #!/usr/bin/env sh
      2 
      3 # Description: Open a Drag and drop window, to drop files onto other programs.
      4 #              Also provides drag and drop window for files.
      5 #
      6 # Dependencies: dragon - https://github.com/mwh/dragon
      7 #
      8 # Notes:
      9 #   1. Files that are dropped will be added to nnn's selection
     10 #      Some web-based files will be downloaded to current dir
     11 #      with curl and it may overwrite some existing files
     12 #   2. The user has to mm to clear nnn's selection first
     13 #
     14 # Shell: POSIX compliant
     15 # Author: 0xACE
     16 
     17 selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
     18 resp=f
     19 all=
     20 if type dragon-drag-and-drop >/dev/null 2>&1; then
     21     dnd="dragon-drag-and-drop"
     22 elif type dragon-drop >/dev/null 2>&1; then
     23     dnd="dragon-drop"
     24 else
     25     dnd="dragon"
     26 fi
     27 
     28 add_file ()
     29 {
     30     printf '%s\0' "$@" >> "$selection"
     31 }
     32 
     33 use_all ()
     34 {
     35     printf "mark --all (a) [default=none]: "
     36     read -r resp
     37     if [ "$resp" = "a" ]; then
     38         all="--all"
     39     else
     40         all=""
     41     fi
     42 }
     43 
     44 if [ -s "$selection" ]; then
     45     printf "Drop file (r). Drag selection (s), Drag current directory (d) or drag current file (f) [default=f]: "
     46     read -r resp
     47 else
     48     printf "Drop file (r). Drag current directory (d) or drag current file (f) [default=f]: "
     49     read -r resp
     50     if [ "$resp" = "s" ]; then
     51         resp=f
     52     fi
     53 fi
     54 
     55 if [ "$resp" = "s" ]; then
     56     use_all
     57     sed -z 's|'"$PWD/"'||g' < "$selection" | xargs -0 "$dnd" "$all" &
     58 elif [ "$resp" = "d" ]; then
     59     use_all
     60     "$dnd" "$all" "$PWD/"* &
     61 elif [ "$resp" = "r" ]; then
     62     true > "$selection"
     63     "$dnd" --print-path --target | while read -r f
     64     do
     65             if printf "%s" "$f" | grep '^\(https\?\|ftps\?\|s\?ftp\):\/\/' ; then
     66                     curl -LJO "$f"
     67                     add_file "$PWD/$(basename "$f")"
     68             elif [ -e "$f" ]; then
     69                     add_file "$f"
     70             fi
     71     done &
     72 else
     73     if [ -n "$1" ] && [ -e "$1" ]; then
     74         "$dnd" "$1" &
     75     fi
     76 fi
     77