info mode now shows info box
This commit is contained in:
@@ -1407,14 +1407,94 @@ do_info() {
|
|||||||
[ -z "$entry" ] && return
|
[ -z "$entry" ] && return
|
||||||
_name="${entry%@}"; _name="${_name%/}"
|
_name="${entry%@}"; _name="${_name%/}"
|
||||||
target="${CWD}/${_name}"
|
target="${CWD}/${_name}"
|
||||||
# permissions + type
|
|
||||||
_perm=$(ls -ld "$target" 2>/dev/null | awk '{print $1}')
|
# gather info
|
||||||
# size (human readable via du, fallback to ls)
|
_info_perm=$(ls -ld "$target" 2>/dev/null | awk '{print $1}')
|
||||||
_size=$(du -sh "$target" 2>/dev/null | cut -f1)
|
_info_owner=$(ls -ld "$target" 2>/dev/null | awk '{print $3}')
|
||||||
[ -z "$_size" ] && _size=$(ls -lh "$target" 2>/dev/null | awk '{print $5}')
|
_info_group=$(ls -ld "$target" 2>/dev/null | awk '{print $4}')
|
||||||
# modification date
|
_info_size=$(du -sh "$target" 2>/dev/null | cut -f1)
|
||||||
_date=$(ls -ld "$target" 2>/dev/null | awk '{print $6, $7, $8}')
|
[ -z "$_info_size" ] && _info_size=$(ls -lh "$target" 2>/dev/null | awk '{print $5}')
|
||||||
INFO_MSG="${_perm} ${_size} ${_date}"
|
_info_date=$(ls -ld "$target" 2>/dev/null | awk '{print $6, $7, $8}')
|
||||||
|
|
||||||
|
case "$entry" in
|
||||||
|
*/) _info_type="directory" ;;
|
||||||
|
*@) _info_type="symlink -> $(ls -ld "$target" 2>/dev/null | awk '{print $NF}')" ;;
|
||||||
|
*) _info_type="file"
|
||||||
|
if [ -x "$target" ]; then _info_type="executable"; fi ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
_info_lines=""
|
||||||
|
_info_lines="${_info_lines}Name: ${_name}
|
||||||
|
"
|
||||||
|
_info_lines="${_info_lines}Type: ${_info_type}
|
||||||
|
"
|
||||||
|
_info_lines="${_info_lines}Perm: ${_info_perm}
|
||||||
|
"
|
||||||
|
_info_lines="${_info_lines}Owner: ${_info_owner}:${_info_group}
|
||||||
|
"
|
||||||
|
_info_lines="${_info_lines}Size: ${_info_size}
|
||||||
|
"
|
||||||
|
_info_lines="${_info_lines}Mod: ${_info_date}
|
||||||
|
"
|
||||||
|
|
||||||
|
# measure longest line
|
||||||
|
_maxw=0
|
||||||
|
_info_rest="$_info_lines"
|
||||||
|
while [ -n "$_info_rest" ]; do
|
||||||
|
_info_l="${_info_rest%%
|
||||||
|
*}"
|
||||||
|
[ "${#_info_l}" -gt "$_maxw" ] && _maxw=${#_info_l}
|
||||||
|
_info_next="${_info_rest#*
|
||||||
|
}"
|
||||||
|
[ "$_info_next" = "$_info_rest" ] && break
|
||||||
|
_info_rest="$_info_next"
|
||||||
|
done
|
||||||
|
|
||||||
|
_info_h=8 # 6 data rows + top + bottom
|
||||||
|
ROWS=$(term_rows); COLS=$(term_cols)
|
||||||
|
_iw=$((_maxw + 2)); [ "$_iw" -lt 20 ] && _iw=20
|
||||||
|
_bw=$((_iw + 2)); [ "$_bw" -gt "$COLS" ] && _bw=$COLS && _iw=$((_bw - 2))
|
||||||
|
_ix=$(( (COLS - _bw) / 2 )); [ "$_ix" -lt 0 ] && _ix=0
|
||||||
|
_iy=$(( (ROWS - _info_h) / 2 )); [ "$_iy" -lt 1 ] && _iy=1
|
||||||
|
_hl=$(printf '%*s' "$_iw" '' | tr ' ' '-')
|
||||||
|
|
||||||
|
# draw
|
||||||
|
goto "$_iy" "$_ix"
|
||||||
|
printf '%s+%s+%s' "${BOLD}${CYAN}" "$_hl" "${RESET}"
|
||||||
|
goto "$((_iy+1))" "$_ix"
|
||||||
|
_title=" FILE INFO"
|
||||||
|
_tpad=$((_iw - ${#_title}))
|
||||||
|
[ "$_tpad" -lt 0 ] && _tpad=0
|
||||||
|
printf '%s|%s%s%s%s|%s' "${BOLD}${CYAN}" "${RESET}" "$_title" "$(printf '%*s' "$_tpad" '')" "${BOLD}${CYAN}" "${RESET}"
|
||||||
|
goto "$((_iy+2))" "$_ix"
|
||||||
|
printf '%s|%s|%s' "${BOLD}${CYAN}" "$_hl" "${RESET}"
|
||||||
|
|
||||||
|
_ri=3
|
||||||
|
_info_rest="$_info_lines"
|
||||||
|
while [ -n "$_info_rest" ]; do
|
||||||
|
_info_l="${_info_rest%%
|
||||||
|
*}"
|
||||||
|
_info_next="${_info_rest#*
|
||||||
|
}"
|
||||||
|
[ "$_info_next" = "$_info_rest" ] && break
|
||||||
|
_info_rest="$_info_next"
|
||||||
|
[ -z "$_info_l" ] && continue
|
||||||
|
goto "$((_iy+_ri))" "$_ix"
|
||||||
|
_lpad=$((_iw - ${#_info_l}))
|
||||||
|
[ "$_lpad" -lt 0 ] && _lpad=0
|
||||||
|
printf '%s|%s%s%s%s|%s' "${BOLD}${CYAN}" "${RESET}" "$_info_l" "$(printf '%*s' "$_lpad" '')" "${BOLD}${CYAN}" "${RESET}"
|
||||||
|
_ri=$((_ri + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
goto "$((_iy+_ri))" "$_ix"
|
||||||
|
printf '%s+%s+%s' "${BOLD}${CYAN}" "$_hl" "${RESET}"
|
||||||
|
|
||||||
|
# wait for key
|
||||||
|
IFS= read -r -n1 _infok 2>/dev/null || IFS= read -r _infok
|
||||||
|
case "$_infok" in
|
||||||
|
"$(printf '\033')")
|
||||||
|
IFS= read -r -n5 -t 0.1 _infoseq 2>/dev/null || _infoseq="" ;;
|
||||||
|
esac
|
||||||
NEED_FULL_REDRAW=1
|
NEED_FULL_REDRAW=1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user