add chmod +x and -x function

This commit is contained in:
2026-04-05 19:33:56 +08:00
parent 32337e4cca
commit 09f60a85ef
+42 -13
View File
@@ -894,7 +894,7 @@ do_help() {
bw=$((COLS - 4)) bw=$((COLS - 4))
[ "$bw" -gt 52 ] && bw=52 [ "$bw" -gt 52 ] && bw=52
[ "$bw" -lt 36 ] && bw=36 [ "$bw" -lt 36 ] && bw=36
bh=42 bh=44
_help_bx=$(( (COLS - bw) / 2 )); [ "$_help_bx" -lt 1 ] && _help_bx=1 _help_bx=$(( (COLS - bw) / 2 )); [ "$_help_bx" -lt 1 ] && _help_bx=1
_help_by=$(( (ROWS - bh) / 2 )); [ "$_help_by" -lt 1 ] && _help_by=1 _help_by=$(( (ROWS - bh) / 2 )); [ "$_help_by" -lt 1 ] && _help_by=1
_help_iw=$((bw - 2)) _help_iw=$((bw - 2))
@@ -932,17 +932,19 @@ do_help() {
help_row 27 " U open trash directory" help_row 27 " U open trash directory"
help_row 28 " ! drop to shell in CWD" help_row 28 " ! drop to shell in CWD"
help_row 29 " o open with custom program" help_row 29 " o open with custom program"
help_sep 30 help_row 30 " + chmod +x (make executable)"
help_row 31 " b bookmark current dir" help_row 31 " - chmod -x (remove executable)"
help_row 32 " B open bookmark picker" help_sep 32
help_row 33 " c copy path to clipboard" help_row 33 " b bookmark current dir"
help_row 34 " ~ go to home directory" help_row 34 " B open bookmark picker"
help_row 35 " \` jump to previous directory" help_row 35 " c copy path to clipboard"
help_sep 36 help_row 36 " ~ go to home directory"
help_row 37 " q quit" help_row 37 " \` jump to previous directory"
help_row 38 " ? this help" help_sep 38
help_row 39 "" help_row 39 " q quit"
help_row 40 " press any key to close..." help_row 40 " ? this help"
help_row 41 ""
help_row 42 " press any key to close..."
goto "$(( _help_by + bh ))" "$_help_bx" goto "$(( _help_by + bh ))" "$_help_bx"
printf '%s+%s+%s' "${BOLD}${CYAN}" "$_help_hl" "${RESET}" printf '%s+%s+%s' "${BOLD}${CYAN}" "$_help_hl" "${RESET}"
@@ -1193,6 +1195,32 @@ do_mkdir() {
fi fi
} }
do_chmod_x() {
entry=$(get_entry "$SEL")
[ -z "$entry" ] && return
case "$entry" in */) INFO_MSG="cannot chmod a directory"; NEED_FULL_REDRAW=1; return ;; esac
_target=$(joinpath "${entry%@}")
if chmod +x "$_target" 2>/dev/null; then
INFO_MSG="chmod +x: ${entry}"
else
INFO_MSG="chmod failed: ${entry}"
fi
NEED_FULL_REDRAW=1
}
do_chmod_nox() {
entry=$(get_entry "$SEL")
[ -z "$entry" ] && return
case "$entry" in */) INFO_MSG="cannot chmod a directory"; NEED_FULL_REDRAW=1; return ;; esac
_target=$(joinpath "${entry%@}")
if chmod -x "$_target" 2>/dev/null; then
INFO_MSG="chmod -x: ${entry}"
else
INFO_MSG="chmod failed: ${entry}"
fi
NEED_FULL_REDRAW=1
}
do_info() { do_info() {
entry=$(get_entry "$SEL") entry=$(get_entry "$SEL")
[ -z "$entry" ] && return [ -z "$entry" ] && return
@@ -1524,7 +1552,8 @@ while true; do
T) do_toggle_details ;; T) do_toggle_details ;;
P) do_toggle_preview ;; P) do_toggle_preview ;;
i) do_info ;; i) do_info ;;
'!') do_shell ;; '+') do_chmod_x ;;
'-') do_chmod_nox ;;
o) do_open_with ;; o) do_open_with ;;
s) do_sort ;; s) do_sort ;;
u) do_trash ;; u) do_trash ;;