commit 346ef7b7cbe95e043c9ee79f2fd408adc7b3d082
parent 09f60a85efad29f393596c90cf40f1098436ceb3
Author: emmett1 <me@emmett1.my>
Date: Sun, 5 Apr 2026 19:39:24 +0800
add jump to path function
Diffstat:
| M | sfm | | | 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 ;;