show hidden files first when enabled hidden

This commit is contained in:
2026-04-05 01:35:44 +08:00
parent 03df88a150
commit 32337e4cca
+29 -26
View File
@@ -1,6 +1,5 @@
#!/bin/sh #!/bin/sh
# sfm - Simple File Manager in POSIX sh (flicker-free) # sfm - Simple File Manager in POSIX sh
# version 0.4
# --- terminal control --- # --- terminal control ---
tput_cmd() { command -v tput >/dev/null 2>&1 && tput "$@"; } tput_cmd() { command -v tput >/dev/null 2>&1 && tput "$@"; }
@@ -107,22 +106,11 @@ load_entries() {
ENTRIES="" ENTRIES=""
COUNT=0 COUNT=0
# build list of dir names then file names, including dotfiles if enabled # hidden dirs first
for d in "$CWD"/*/; do
[ -d "$d" ] || continue
[ -L "${d%/}" ] && continue # symlinks handled separately
name="${d%/}"; name="${name##*/}"
[ "$name" = "*" ] && continue
case "$name" in .*) continue ;; esac
ENTRIES="$ENTRIES
${name}/"
COUNT=$((COUNT + 1))
done
if [ "$SHOW_HIDDEN" = "1" ]; then if [ "$SHOW_HIDDEN" = "1" ]; then
for d in "$CWD"/./; do : ; done
for d in "$CWD"/.*/; do for d in "$CWD"/.*/; do
[ -d "$d" ] || continue [ -d "$d" ] || continue
[ -L "${d%/}" ] && continue # symlinks handled separately [ -L "${d%/}" ] && continue
name="${d%/}"; name="${name##*/}" name="${d%/}"; name="${name##*/}"
[ "$name" = "." ] || [ "$name" = ".." ] && continue [ "$name" = "." ] || [ "$name" = ".." ] && continue
[ "$name" = ".*" ] && continue [ "$name" = ".*" ] && continue
@@ -132,21 +120,19 @@ ${name}/"
done done
fi fi
for f in "$CWD"/*; do # regular dirs
[ -e "$f" ] || [ -L "$f" ] || continue for d in "$CWD"/*/; do
[ -d "$f" ] && ! [ -L "$f" ] && continue [ -d "$d" ] || continue
name="${f##*/}" [ -L "${d%/}" ] && continue
name="${d%/}"; name="${name##*/}"
[ "$name" = "*" ] && continue [ "$name" = "*" ] && continue
case "$name" in .*) continue ;; esac case "$name" in .*) continue ;; esac
if [ -L "$f" ]; then ENTRIES="$ENTRIES
ENTRIES="$ENTRIES ${name}/"
${name}@"
else
ENTRIES="$ENTRIES
${name}"
fi
COUNT=$((COUNT + 1)) COUNT=$((COUNT + 1))
done done
# hidden files first
if [ "$SHOW_HIDDEN" = "1" ]; then if [ "$SHOW_HIDDEN" = "1" ]; then
for f in "$CWD"/.*; do for f in "$CWD"/.*; do
[ -e "$f" ] || [ -L "$f" ] || continue [ -e "$f" ] || [ -L "$f" ] || continue
@@ -164,6 +150,23 @@ ${name}"
done done
fi fi
# regular files
for f in "$CWD"/*; do
[ -e "$f" ] || [ -L "$f" ] || continue
[ -d "$f" ] && ! [ -L "$f" ] && continue
name="${f##*/}"
[ "$name" = "*" ] && continue
case "$name" in .*) continue ;; esac
if [ -L "$f" ]; then
ENTRIES="$ENTRIES
${name}@"
else
ENTRIES="$ENTRIES
${name}"
fi
COUNT=$((COUNT + 1))
done
ENTRIES="${ENTRIES# ENTRIES="${ENTRIES#
}" }"