shfm [wip] ________________________________________________________________________________ wip file manager written in posix shell features ________________________________________________________________________________ * Really nice escape sequence handling for keys which emit '\033['. Not based on shitty read timeouts (can't do 'em anyway). Instead based on tracking position within escape sequences. * no dependencies other than a POSIX shell and POSIX (just printf, dd and stty) * tiny? todo ________________________________________________________________________________ - [x] scrolling is torture. - [x] stop redrawing whole screen on key press. - [x] store list somehow. - [x] search - [x] prompts - [x] opener - [x] resize - [ ] ... keybinds ________________________________________________________________________________ j - down k - up l - open file or directory h - go up level g - go to top G - go to bottom q - quit : - cd to / - search current directory ** - - go to last directory ~ - go home ! - spawn shell . - toggle hidden files opener ________________________________________________________________________________ Opening files in different applications (based on mime-type or file extension) can be achieved via an environment variable (SHFM_OPENER) set to the location of a small external script. If unset, the default for all files is '$EDITOR' (and if that is unset, 'vi'). The script receives a single argument, the full path to the selected file. The opener script is also useful on the command-line. The environment variable is set as follows. export SHFM_OPENER=/path/to/script Example scripts: #!/bin/sh -e # # open file in application based on file extension case $1 in *.mp3|*.flac|*.wav) mpv --no-video "$1" ;; *.mp4|*.mkv|*.webm) mpv "$1" ;; *.png|*.gif||*.jpg|*.jpe|*.jpeg) gimp "$1" ;; *.html|*.pdf) firefox "$1" ;; # all other files *) "${EDITOR:=vi}" "$1" ;; esac #!/bin/sh -e # # open file in application based on mime-type mime_type=$(file -bi) case $mime_type in audio/*) mpv --no-video "$1" ;; video/*) mpv "$1" ;; image/*) gimp "$1" ;; text/html*|application/pdf*) firefox "$1" ;; text/*|) "${EDITOR:=vi}" "$1" ;; *) printf 'unknown mime-type %s\n' "$mime_type" ;; esac