sfm

Simple File Manager
git clone git://git.emmett1.my/sfm.git
Log | Files | Refs | README | LICENSE

commit 346ef7b7cbe95e043c9ee79f2fd408adc7b3d082
parent 09f60a85efad29f393596c90cf40f1098436ceb3
Author: emmett1 <me@emmett1.my>
Date:   Sun,  5 Apr 2026 19:39:24 +0800

add jump to path function

Diffstat:
Msfm | 38+++++++++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/sfm b/sfm @@ -894,7 +894,7 @@ do_help() { bw=$((COLS - 4)) [ "$bw" -gt 52 ] && bw=52 [ "$bw" -lt 36 ] && bw=36 - bh=44 + bh=45 _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_iw=$((bw - 2)) @@ -940,11 +940,12 @@ do_help() { help_row 35 " c copy path to clipboard" help_row 36 " ~ go to home directory" help_row 37 " \` jump to previous directory" - help_sep 38 - help_row 39 " q quit" - help_row 40 " ? this help" - help_row 41 "" - help_row 42 " press any key to close..." + help_row 38 " : jump to path" + help_sep 39 + help_row 40 " q quit" + help_row 41 " ? this help" + help_row 42 "" + help_row 43 " press any key to close..." goto "$(( _help_by + bh ))" "$_help_bx" printf '%s+%s+%s' "${BOLD}${CYAN}" "$_help_hl" "${RESET}" @@ -1025,6 +1026,29 @@ do_toggle_preview() { NEED_FULL_REDRAW=1 } +do_jump_path() { + goto "$(term_rows)" 1 + printf '%s%s jump to: %s' "${ERASE_LINE}" "${CYAN}${BOLD}" "${RESET}" + if read_line && [ -n "$READ_LINE" ]; then + # expand ~ manually + case "$READ_LINE" in + "~"*) READ_LINE="${HOME}${READ_LINE#\~}" ;; + esac + if [ -d "$READ_LINE" ]; then + PREV_CWD="$CWD" + CWD="$READ_LINE"; norm_cwd + FILTER=""; SELECTED="" + SEL=0; OFFSET=0; PREV_SEL=0; PREV_OFFSET=0 + load_entries + else + INFO_MSG="not found: ${READ_LINE}" + NEED_FULL_REDRAW=1; draw + fi + else + NEED_FULL_REDRAW=1; draw + fi +} + do_go_back() { [ "$CWD" = "/" ] && return FILTER="" @@ -1558,7 +1582,7 @@ while true; do s) do_sort ;; u) do_trash ;; U) do_open_trash ;; - '`') do_jump_back ;; + ':') do_jump_path ;; '~') PREV_CWD="$CWD"; CWD=$(cd "$HOME" && pwd); FILTER=""; SELECTED="" SEL=0; OFFSET=0; PREV_SEL=0; PREV_OFFSET=0; load_entries ;; c) do_copy_path ;;