123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- #!/bin/bash
- about="
- ### Dmen File Manager #############################################
- # Version 0.1.2 by Scott Garrett <wintervenom [(a)] archlinux.us> #
- ###################################################################"
- ### Changelog #####################################################
- # 0.1.0 # * Initial version #
- # 0.1.1 # + Option 'Open last used dir' #
- # # + Options 'Always open dirs' and 'Always open files' #
- # 0.1.2 # + Config moved to $XDG_CONFIG_HOME #
- # # + Options for dmenu styling #
- # # + Option to change executor #
- # # + Option to open file manager in current directory #
- # # + Plugins support #
- ###################################################################
- function defaults {
- show_hidden=1
- show_backup=1
- always_open_files=0
- always_open_dirs=1
- open_last=1
- dmenu_caseinsens=1
- dmenu_onbottom=0
- dmenu_bg='#000000'
- dmenu_fg='#ffffff'
- dmenu_sbg='#000000'
- dmenu_sfg='#00ff00'
- executor='xdg-open'
- editor='emacsclient'
- filemanager='spacefm'
- }
- function saveconfig {
- echo "show_hidden=$show_hidden
- show_backup=$show_backup
- always_open_dirs=$always_open_dirs
- always_open_files=$always_open_files
- open_last=$open_last
- dmenu_caseinsens=$dmenu_caseinsens
- dmenu_onbottom=$dmenu_onbottom
- dmenu_bg='$dmenu_bg'
- dmenu_fg='$dmenu_fg'
- dmenu_sbg='$dmenu_sbg'
- dmenu_sfg='$dmenu_sfg'
- editor=\"$editor\"
- executor='exo'
- filemanager=\"$filemanager\"
- last_dir=\"$(pwd)\"
- " > "$config"
- }
- function setmenu {
- menu="$menu $([ "$dmenu_caseinsens" == '1' ] && echo '-i') $([ "$dmenu_onbottom" == '1' ] && echo '-b') -nb $dmenu_bg -nf $dmenu_fg -sb $dmenu_sbg -sf $dmenu_sfg"
- }
- file=1
- config_file="preferences"
- config_dir="$XDG_CONFIG_HOME/dmenfm"
- config="$config_dir/$config_file"
- plugins_dir="$XDG_CONFIG_HOME/dmenfm/plugins"
- menu='dmenu'
- [ ! -d "$config_dir" ] && mkdir "$config_dir"
- [ ! -d "$plugins_dir" ] && mkdir "$plugins_dir"
- [ ! -d "$plugins_dir/browser" ] && mkdir "$plugins_dir/browser"
- [ ! -d "$plugins_dir/operations" ] && mkdir "$plugins_dir/operations"
- [ ! -d "$plugins_dir/preferences" ] && mkdir "$plugins_dir/preferences"
- [ -e "$HOME/.dmanfs" ] && mv "$HOME/.dmanfs" "$config"
- defaults
- touch "$config"
- source "$config"
- setmenu
- [[ "$last_dir" && "$open_last" == 1 ]] && cd "$last_dir"
- while [ "$file" ]; do
- file=$((echo -e '..\n.'; ls $([[ "$show_hidden" == '1' ]] && echo '-A') $([[ "$show_backup" == '1' ]] && echo '-B'); echo -e "[Preferences]\n[Open in $filemanager]"; ls -B "$plugins_dir/browser") | $menu -p "$(basename $(pwd))")
- if [ "$file" ]; then
- if [ -e "$file" ]; then
- if $([ -d "$file" ] && [[ "$always_open_dirs" != '1' && "$file" != "." && "$file" != ".." ]]) || $([ -f "$file" ] && [[ "$always_open_files" != '1' ]]); then
- owd=$(pwd)
- opt=$((echo 'Open'; ([ -f "$file" ] && echo 'Edit'); echo -e 'Copy\nMove\nRename\nDelete'; ls -B "$plugins_dir/operations") | $menu -p "<$file>")
- else
- opt='Open'
- fi
- case "$opt" in
- 'Open')
- if [ -d "$file" ]; then
- cd "$file"
- else
- if [ "$executor" ] && which "$executor" &> /dev/null; then
- exec "$executor" "$owd/$file" &
- unset file
- elif which exo-open &> /dev/null; then
- exo-open "$owd/$file"
- unset file
- elif gnome-open &> /dev/null; then
- gnome-open "$owd/$file"
- unset file
- else
- xmessage 'No executor found. Set one in [Preferences].'
- fi
- fi
- ;;
- 'Edit')
- if [ "$editor" ] && which "$editor" &> /dev/null; then
- exec "$editor" "$owd/$file" &
- unset file
- elif which geany &> /dev/null; then
- exec geany "$owd/$file"
- unset file
- elif which gedit &> /dev/null; then
- exec gedit "$owd/$file"
- unset file
- elif which kwrite &> /dev/null; then
- exec kwrite "$owd/$file"
- unset file
- else
- xmessage 'No editor found. Set one in [Preferences].'
- fi
- ;;
- 'Copy')
- cdir=1
- while [ "$cdir" ]; do
- cdir=$((echo -e '..\n.'; ls $([[ "$show_hidden" == 1 ]] && echo "-A") $([[ "$show_backup" == 1 ]] && echo "-B") -d */) | $menu -p "Copy <$file> to:")
- if [[ "$cdir" ]]; then
- opt=$(echo -e 'Open\nCopy' | $menu -p "Copy <$file> to <$cdir>:")
- if [[ "$opt" == "Open" ]]; then
- cd "$cdir"
- elif [[ "$opt" == "Copy" ]]; then
- echo "$file"
- [ -e "$cdir/$file" ] && opt=$(echo -e "No\nYes" | $menu -p "Replace existing <$file>?")
- [[ "$opt" == "Copy" || "$opt" == "Yes" ]] && cp -af "$owd/$file" "$cdir/$file"
- unset cdir
- fi
- fi
- done
- ;;
- 'Move')
- cdir=1
- while [ "$cdir" ]; do
- cdir=$((echo -e '..\n.' && ls $([[ "$show_hidden" == 1 ]] && echo "-A") $([[ "$show_backup" == 1 ]] && echo "-B") -d */) | $menu -p "Move <$file> to:")
- if [[ "$cdir" ]]; then
- opt=$(echo -e 'Open\nMove' | $menu -p "Move <$file> to <$cdir>:")
- if [[ "$opt" == "Open" ]]; then
- cd "$cdir"
- elif [[ "$opt" == "Move" ]]; then
- echo "$file"
- [ -e "$cdir/$file" ] && opt=$(echo -e "No\nYes" | $menu -p "Replace existing <$file>?")
- [[ "$opt" == "Move" || "$opt" == "Yes" ]] && mv -f "$owd/$file" "$cdir/$file"
- unset cdir
- fi
- fi
- done
- ;;
- 'Rename')
- opt=$(echo "" | $menu -p "Rename <$file> to:")
- [ "$opt" ] && mv -f "$file" "$opt"
- ;;
- 'Delete')
- opt=$(echo -e "No\nYes" | $menu -p "Really delete <$file>?")
- [[ "$opt" == "Yes" ]] && rm -rf "$file"
- ;;
- *) [ "$opt" ] && [ -e "$plugins_dir/operations/$opt" ] && source "$plugins_dir/operations/$opt" ;;
- esac
- elif [[ "$file" =~ '[Open in' ]]; then
- which "$filemanager" &> /dev/null && exec "$filemanager" . &
- unset file
- elif [[ "$file" == '[Preferences]' ]]; then
- opt=1
- while [ "$opt" ]; do
- opt=$((echo "[$show_hidden] Show hidden files
- [$show_backup] Show backup files
- [$always_open_dirs] Always open dirs
- [$always_open_files] Always open files
- [$open_last] Open last used dir
- [$dmenu_caseinsens] Case-insensitive
- [$dmenu_onbottom] Display on bottom
- [$dmenu_bg] Background
- [$dmenu_fg] Foreground
- [$dmenu_sbg] Selected background
- [$dmenu_sfg] Selected foreground
- [$executor] Executor
- [$editor] Editor
- [$filemanager] File manager
- Set defaults
- About"; ls -B "$plugins_dir/preferences") | $menu -p "Preferences")
- case "$opt" in
- *'hidden files') (('show_hidden=!show_hidden')) ;;
- *'backup dirs') (('show_backup=!show_backup')) ;;
- *'open dirs') (('always_open_dirs=!always_open_dirs')) ;;
- *'open files') (('always_open_files=!always_open_files')) ;;
- *'used dir') (('open_last=!open_last')) ;;
- *'insensitive') (('dmenu_caseinsens=!dmenu_caseinsens')) ;;
- *'on bottom') (('dmenu_onbottom=!dmenu_onbottom')) ;;
- *'Background')
- opt=$(echo -e "$dmenu_bg\n[Default]" | $menu -p "Background:")
- [[ "$opt" == '[Default]' ]] && opt='000000'
- [ "$opt" ] && dmenu_bg="$opt"
- dmenu_test=1
- ;;
- *'Foreground')
- opt=$(echo -e "$dmenu_fg\n[Default]" | $menu -p "Foreground:")
- [[ "$opt" == '[Default]' ]] && opt='9999CC'
- [ "$opt" ] && dmenu_fg="$opt"
- dmenu_test=1
- ;;
- *'Selected background')
- opt=$(echo -e "$dmenu_bg\n[Default]" | $menu -p "Selected background:")
- [[ "$opt" == '[Default]' ]] && opt='000066'
- [ "$opt" ] && dmenu_sbg="$opt"
- dmenu_test=1
- ;;
- *'Selected foreground')
- opt=$(echo -e "$dmenu_bg\n[Default]" | $menu -p "Selected foreground:")
- [[ "$opt" == '[Default]' ]] && opt='FFFFFF'
- [ "$opt" ] && dmenu_sfg="$opt"
- dmenu_test=1
- ;;
- *'Executor')
- opt=$(echo -e "$executor\n[Default]" | $menu -p "Executor:")
- [[ "$opt" == '[Default]' ]] && opt='exo'
- [ "$opt" ] && editor="$opt"
- ;;
- *'Editor')
- opt=$(echo -e "$editor\n[Default]" | $menu -p "Editor:")
- [[ "$opt" == '[Default]' ]] && opt='geany'
- [ "$opt" ] && editor="$opt"
- ;;
- *'File manager')
- opt=$(echo -e "$filemanager\n[Default]" | $menu -p "File manager:")
- [[ "$opt" == '[Default]' ]] && opt='thunar'
- [ "$opt" ] && filemanager="$opt"
- ;;
- *'defaults')
- opt=$(echo -e "No\nYes" | $menu -p "Really set defaults?")
- [[ "$opt" == "Yes" ]] && defaults
- ;;
- 'About') xmessage -maxWidth 80 -maxHeight 80 "$about" ;;
- *)
- [ "$opt" ] && [ -e "$plugins_dir/preferences/$opt" ] && source "$plugins_dir/preferences/$opt"
- ;;
- esac
- done
- menu="$menu $([ "$dmenu_caseinsens" == '1' ] && echo '-i') $([ "$dmenu_onbottom" == '1' ] && echo '-b') -nb $dmenu_bg -nf $dmenu_fg -sb $dmenu_sbg -sf $dmenu_sfg"
- if [[ "$dmenu_test" == '1' ]]; then
- if [[ "OK" != "$(echo 'OK' | $menu -p 'Dmenu settings changed.')" ]]; then
- defaults
- source "$config"
- setmenu
- echo 'OK' | $menu -p 'Error in Dmenu settings. Reverted.'
- fi
- fi
- saveconfig
- elif [ -e "$plugins_dir/browser/$file" ]; then
- source "$plugins_dir/browser/$file"
- fi
- fi
- done
- saveconfig
|