Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40e5d2815c | ||
|
|
0504dec9c7 | ||
|
|
f85d1af121 | ||
|
|
308637d874 | ||
|
|
aaf7fd829d | ||
|
|
8db9a070b7 | ||
|
|
bed888c3c3 | ||
|
|
7c2f21d8ec | ||
|
|
938955120b | ||
|
|
f374506215 | ||
|
|
fe57971b91 | ||
|
|
2f8d3e8d9e | ||
|
|
2a1f8fc0a5 | ||
|
|
346ef7b7cb | ||
|
|
09f60a85ef | ||
|
|
32337e4cca | ||
|
|
03df88a150 | ||
|
|
54352d036c | ||
|
|
6b729ffe8a | ||
|
|
25a329aba9 |
@@ -0,0 +1,2 @@
|
||||
CLAUDE.md
|
||||
sfm
|
||||
@@ -5,29 +5,42 @@ BINDIR ?= $(PREFIX)/bin
|
||||
MANDIR ?= $(PREFIX)/share/man/man1
|
||||
DOCDIR ?= $(PREFIX)/share/doc/sfm
|
||||
|
||||
CXX ?= g++
|
||||
CXXFLAGS ?= -std=c++17 -O2 -Wall -Wextra
|
||||
LDFLAGS ?= -lncursesw
|
||||
|
||||
INSTALL ?= install
|
||||
RM ?= rm -f
|
||||
|
||||
.PHONY: all install uninstall clean
|
||||
|
||||
all:
|
||||
@echo "sfm is a shell script — nothing to build."
|
||||
@echo "Run 'make install' to install."
|
||||
all: sfm
|
||||
|
||||
install:
|
||||
@echo "Installing sfm to $(BINDIR)/sfm ..."
|
||||
sfm: sfm.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $< $(LDFLAGS)
|
||||
|
||||
install: all
|
||||
@echo "Installing sfm to $(DESTDIR)$(BINDIR)/sfm ..."
|
||||
$(INSTALL) -d $(DESTDIR)$(BINDIR)
|
||||
$(INSTALL) -m 755 sfm $(DESTDIR)$(BINDIR)/sfm
|
||||
@echo "Installing README to $(DOCDIR) ..."
|
||||
@echo "Installing sfm.sh to $(DESTDIR)$(BINDIR)/sfm.sh ..."
|
||||
$(INSTALL) -m 755 sfm.sh $(DESTDIR)$(BINDIR)/sfm.sh
|
||||
@echo "Installing man page to $(DESTDIR)$(MANDIR)/sfm.1 ..."
|
||||
$(INSTALL) -d $(DESTDIR)$(MANDIR)
|
||||
$(INSTALL) -m 644 sfm.1 $(DESTDIR)$(MANDIR)/sfm.1
|
||||
@echo "Installing README to $(DESTDIR)$(DOCDIR)/README ..."
|
||||
$(INSTALL) -d $(DESTDIR)$(DOCDIR)
|
||||
$(INSTALL) -m 644 README.txt $(DESTDIR)$(DOCDIR)/README.txt
|
||||
@echo "Done. Run 'sfm' to start."
|
||||
$(INSTALL) -m 644 README $(DESTDIR)$(DOCDIR)/README
|
||||
@echo "Done."
|
||||
|
||||
uninstall:
|
||||
@echo "Removing sfm ..."
|
||||
$(RM) $(DESTDIR)$(BINDIR)/sfm
|
||||
$(RM) $(DESTDIR)$(BINDIR)/sfm.sh
|
||||
$(RM) $(DESTDIR)$(MANDIR)/sfm.1
|
||||
$(RM) -r $(DESTDIR)$(DOCDIR)
|
||||
@echo "Done."
|
||||
|
||||
clean:
|
||||
@echo "Nothing to clean."
|
||||
$(RM) sfm
|
||||
@echo "Cleaned."
|
||||
|
||||
+88
-54
@@ -1,32 +1,41 @@
|
||||
sfm - Simple File Manager
|
||||
==========================
|
||||
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
sfm is a lightweight, terminal-based file manager written entirely in
|
||||
POSIX sh. It runs in your terminal with no external dependencies beyond
|
||||
standard Unix tools (ls, awk, tput, stty, mv, cp, rm). Designed to be
|
||||
fast, flicker-free, and keyboard-driven with a vim-inspired key layout.
|
||||
|
||||
|
||||
sfm is a lightweight, terminal-based file manager with a vim-inspired
|
||||
key layout. The primary version is a fast C++/ncurses binary. A portable
|
||||
POSIX sh version (sfm.sh) is also included, requiring only standard Unix
|
||||
tools (ls, awk, tput, stty, mv, cp, rm).
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
------------
|
||||
C++ version (sfm):
|
||||
- ncursesw (libncursesw)
|
||||
- A C++17 compiler (g++ or compatible)
|
||||
|
||||
Shell version (sfm.sh):
|
||||
- A POSIX-compatible shell (sh, dash, bash, etc.)
|
||||
- Standard Unix tools: ls, awk, tput, stty, cp, mv, rm, mkdir, touch
|
||||
|
||||
Both versions:
|
||||
- Optional: wl-copy / xclip / xsel / pbcopy (for clipboard support)
|
||||
- Optional: mpv, vlc, feh, zathura, etc. (for smart file opening)
|
||||
- Optional: readlink (for symlink display)
|
||||
- Optional: file (for MIME type detection)
|
||||
|
||||
|
||||
|
||||
|
||||
INSTALLATION
|
||||
------------
|
||||
Using make (recommended):
|
||||
|
||||
make install
|
||||
|
||||
This installs sfm to /usr/local/bin by default. To change the prefix:
|
||||
This builds the C++ binary and installs both sfm (C++ binary)
|
||||
and sfm.sh (shell script) to /usr/local/bin by default.
|
||||
To change the prefix:
|
||||
|
||||
make install PREFIX=/usr
|
||||
|
||||
@@ -34,25 +43,25 @@ To uninstall:
|
||||
|
||||
make uninstall
|
||||
|
||||
Manual installation:
|
||||
|
||||
cp sfm /usr/local/bin/sfm
|
||||
chmod +x /usr/local/bin/sfm
|
||||
|
||||
Manual installation (shell version only):
|
||||
|
||||
cp sfm.sh /usr/local/bin/sfm.sh
|
||||
chmod +x /usr/local/bin/sfm.sh
|
||||
|
||||
|
||||
USAGE
|
||||
-----
|
||||
sfm [path]
|
||||
|
||||
|
||||
If no path is given, sfm opens in the current directory.
|
||||
|
||||
|
||||
Examples:
|
||||
sfm # open in current directory
|
||||
sfm /mnt/data # open at a specific path
|
||||
sfm ~ # open home directory
|
||||
sfm .. # open parent directory
|
||||
|
||||
|
||||
|
||||
|
||||
NAVIGATION
|
||||
----------
|
||||
j / k or up/down arrows Move up / down
|
||||
@@ -62,15 +71,15 @@ NAVIGATION
|
||||
G Jump to bottom of list
|
||||
~ Go to home directory
|
||||
` (backtick) Jump to previous directory
|
||||
|
||||
|
||||
|
||||
|
||||
SEARCH & FILTER
|
||||
---------------
|
||||
/ Enter search mode (filters listing as you type)
|
||||
esc Clear filter and exit search mode
|
||||
enter Exit search mode but keep filter active
|
||||
|
||||
|
||||
|
||||
|
||||
DISPLAY TOGGLES
|
||||
---------------
|
||||
. Toggle hidden files (dotfiles)
|
||||
@@ -79,19 +88,42 @@ DISPLAY TOGGLES
|
||||
s Cycle sort mode: name -> size -> date
|
||||
i Show file info (permissions, size, date) in status bar
|
||||
R Refresh current directory listing
|
||||
|
||||
|
||||
|
||||
|
||||
PREVIEW PANE
|
||||
------------
|
||||
Press P to toggle the preview pane on the right side of the screen.
|
||||
The list pane takes the left half, preview takes the right half.
|
||||
|
||||
|
||||
Text files Shows file contents line by line
|
||||
Directories Shows entry count
|
||||
Directories Shows directory contents
|
||||
Symlinks Shows link target
|
||||
Binary files Shows file size
|
||||
|
||||
|
||||
|
||||
|
||||
CUSTOM OPENER
|
||||
-------------
|
||||
sfm checks for a user-defined opener script at:
|
||||
|
||||
~/.config/sfm/opener
|
||||
|
||||
If the file exists and is executable, sfm passes the selected file
|
||||
path to it instead of using the built-in smart opener. Example:
|
||||
|
||||
#!/bin/sh
|
||||
case "$1" in
|
||||
*.jpg|*.jpeg) imv "$1" ;;
|
||||
*.mp4) mpv "$1" ;;
|
||||
*.html|*.pdf) firefox "$1" ;;
|
||||
*) echo "no program set for this file type" ;;
|
||||
esac
|
||||
|
||||
Make it executable: chmod +x ~/.config/sfm/opener
|
||||
|
||||
If the opener script does not exist, sfm falls back to its built-in
|
||||
smart opener automatically.
|
||||
|
||||
|
||||
FILE OPERATIONS
|
||||
---------------
|
||||
r Rename selected entry
|
||||
@@ -101,45 +133,45 @@ FILE OPERATIONS
|
||||
u Move to trash (safe delete)
|
||||
U Open trash directory
|
||||
o Open with custom program
|
||||
|
||||
|
||||
|
||||
|
||||
CLIPBOARD
|
||||
---------
|
||||
y Yank / copy (works on multi-selection)
|
||||
x Cut (works on multi-selection)
|
||||
p Paste into current directory
|
||||
c Copy full path of selected entry to system clipboard
|
||||
|
||||
|
||||
|
||||
|
||||
MULTI-SELECT
|
||||
------------
|
||||
space Toggle multi-select on current entry (cursor advances)
|
||||
a Select all / deselect all
|
||||
|
||||
|
||||
|
||||
|
||||
BOOKMARKS
|
||||
---------
|
||||
b Bookmark current directory (press again to remove)
|
||||
B Open bookmark picker (j/k navigate, enter jump)
|
||||
|
||||
|
||||
Bookmarks are saved to: ~/.config/sfm/bookmarks
|
||||
|
||||
|
||||
|
||||
|
||||
SHELL & UTILITIES
|
||||
-----------------
|
||||
! Drop into $SHELL in current directory (type "exit" to return)
|
||||
|
||||
|
||||
|
||||
|
||||
HELP
|
||||
----
|
||||
? Show keyboard shortcuts overlay
|
||||
|
||||
|
||||
|
||||
|
||||
QUIT
|
||||
----
|
||||
q Quit sfm
|
||||
|
||||
|
||||
|
||||
|
||||
STATUS BAR INDICATORS
|
||||
---------------------
|
||||
[hidden] Hidden files are visible
|
||||
@@ -148,13 +180,13 @@ STATUS BAR INDICATORS
|
||||
[cut] A file is in the clipboard (cut mode)
|
||||
[sel:N] N items are currently selected
|
||||
[details] Size/date column is visible
|
||||
|
||||
|
||||
|
||||
|
||||
SMART FILE OPENER
|
||||
-----------------
|
||||
When you open a file, sfm detects the file type by extension and
|
||||
MIME type, then picks an appropriate program automatically:
|
||||
|
||||
|
||||
Text / code $EDITOR (or vi)
|
||||
Images imv, feh, sxiv, eog, gimp
|
||||
Video mpv, vlc, mplayer, totem
|
||||
@@ -162,24 +194,26 @@ MIME type, then picks an appropriate program automatically:
|
||||
PDF zathura, evince, okular, mupdf
|
||||
Office docs libreoffice
|
||||
Archives atool / bsdtar (lists contents in pager)
|
||||
|
||||
|
||||
Falls back to xdg-open, open (macOS), or $EDITOR if nothing matches.
|
||||
Use 'o' to manually specify any program.
|
||||
|
||||
|
||||
|
||||
|
||||
TRASH
|
||||
-----
|
||||
Files deleted with 'u' are moved to:
|
||||
|
||||
|
||||
~/.local/share/sfm-trash/
|
||||
|
||||
|
||||
Files are prefixed with a timestamp: YYYYMMDD_HHMMSS_filename
|
||||
Use U to browse the trash directory. To restore a file, rename it
|
||||
(press r) to remove the timestamp prefix, then cut (x) and paste (p)
|
||||
it back to the desired location.
|
||||
|
||||
|
||||
|
||||
|
||||
DATA FILES
|
||||
----------
|
||||
~/.config/sfm/bookmarks Saved bookmarks (one path per line)
|
||||
~/.config/sfm/opener Custom file opener script (optional)
|
||||
~/.local/share/sfm-trash/ Trashed files
|
||||
|
||||
@@ -0,0 +1,376 @@
|
||||
.TH SFM 1 "2026-03-16" "0.4" "Simple File Manager"
|
||||
|
||||
.SH NAME
|
||||
sfm \- Simple File Manager
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B sfm
|
||||
.RI [ path ]
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B sfm
|
||||
is a lightweight, terminal-based file manager written entirely in POSIX sh.
|
||||
It runs in your terminal with no external dependencies beyond standard Unix
|
||||
tools. Designed to be fast, flicker-free, and keyboard-driven with a
|
||||
vim-inspired key layout.
|
||||
|
||||
If
|
||||
.I path
|
||||
is given, sfm opens that directory. Otherwise it opens in the current
|
||||
working directory.
|
||||
|
||||
.SH KEY BINDINGS
|
||||
|
||||
.SS Navigation
|
||||
.TP
|
||||
.BR j ", " k " or " "up/down arrows"
|
||||
Move cursor up or down.
|
||||
.TP
|
||||
.BR h " or " "left arrow"
|
||||
Go to parent directory.
|
||||
.TP
|
||||
.BR l ", " "right arrow" ", or " enter
|
||||
Open selected file or enter directory.
|
||||
.TP
|
||||
.B g
|
||||
Jump to top of list.
|
||||
.TP
|
||||
.B G
|
||||
Jump to bottom of list.
|
||||
.TP
|
||||
.B ~
|
||||
Go to home directory.
|
||||
.TP
|
||||
.B \`
|
||||
Jump to previous directory (toggle).
|
||||
.TP
|
||||
.B :
|
||||
Prompt for a path to jump to directly. Supports
|
||||
.B ~
|
||||
expansion. Shows an error if the path does not exist. Press esc to cancel.
|
||||
.TP
|
||||
.B f
|
||||
Find files recursively under the current directory. Opens an interactive
|
||||
picker. Press j/k or arrows to navigate results, enter or l to jump to the
|
||||
selected result, esc/q/h to close.
|
||||
|
||||
.SS Search and Filter
|
||||
.TP
|
||||
.B /
|
||||
Enter search mode. The listing is filtered as you type.
|
||||
.TP
|
||||
.B esc
|
||||
Clear filter and exit search mode.
|
||||
.TP
|
||||
.B enter
|
||||
Exit search mode while keeping the current filter active.
|
||||
|
||||
.SS Display Toggles
|
||||
.TP
|
||||
.B .
|
||||
Toggle hidden files (dotfiles). Hidden entries appear before regular
|
||||
entries (hidden dirs, then regular dirs, then hidden files, then
|
||||
regular files).
|
||||
.TP
|
||||
.B T
|
||||
Toggle size/date detail column.
|
||||
.TP
|
||||
.B P
|
||||
Toggle preview pane on the right side.
|
||||
.TP
|
||||
.B s
|
||||
Cycle sort mode: name \-> size \-> date.
|
||||
.TP
|
||||
.B i
|
||||
Show file info (permissions, size, date) in the status bar.
|
||||
.TP
|
||||
.B R
|
||||
Refresh the current directory listing.
|
||||
|
||||
.SS File Operations
|
||||
.TP
|
||||
.B r
|
||||
Rename selected entry. Press esc to cancel.
|
||||
.TP
|
||||
.B m
|
||||
Create a new directory. Press esc to cancel.
|
||||
.TP
|
||||
.B n
|
||||
Create a new empty file. Press esc to cancel.
|
||||
.TP
|
||||
.B d " or " del
|
||||
Delete selected entry or all multi-selected entries.
|
||||
Non-empty directories require a second confirmation.
|
||||
.TP
|
||||
.B u
|
||||
Move selected entry to trash (safe delete).
|
||||
.TP
|
||||
.B U
|
||||
Open the trash directory.
|
||||
.TP
|
||||
.B o
|
||||
Open selected file with a custom program. Press esc to cancel.
|
||||
.TP
|
||||
.B +
|
||||
Make the selected file executable
|
||||
.RB ( "chmod +x" ).
|
||||
.TP
|
||||
.B \-
|
||||
Remove execute permission from the selected file
|
||||
.RB ( "chmod -x" ).
|
||||
|
||||
.SS Clipboard
|
||||
.TP
|
||||
.B y
|
||||
Yank (copy) selected entry or all multi-selected entries.
|
||||
.TP
|
||||
.B x
|
||||
Cut selected entry or all multi-selected entries.
|
||||
.TP
|
||||
.B p
|
||||
Paste clipboard contents into the current directory.
|
||||
Auto-renames on conflict by appending
|
||||
.IR _copy .
|
||||
.TP
|
||||
.B c
|
||||
Copy the full path of the selected entry to the system clipboard.
|
||||
Requires
|
||||
.BR wl-copy ", " xclip ", " xsel ", or " pbcopy .
|
||||
|
||||
.SS Multi-Select
|
||||
.TP
|
||||
.B space
|
||||
Toggle multi-select on the current entry (cursor advances).
|
||||
.TP
|
||||
.B a
|
||||
Select all entries / deselect all.
|
||||
.PP
|
||||
Multi-select works with
|
||||
.BR y ", " x ", and " d .
|
||||
|
||||
.SS Bookmarks
|
||||
.TP
|
||||
.B b
|
||||
Bookmark the current directory. Press again to remove it.
|
||||
.TP
|
||||
.B B
|
||||
Open the bookmark picker.
|
||||
Use j/k to navigate, enter to jump, esc to close.
|
||||
|
||||
.SS Other
|
||||
.TP
|
||||
.B !
|
||||
Drop into
|
||||
.B $SHELL
|
||||
in the current directory. Type
|
||||
.I exit
|
||||
to return to sfm. The working directory is updated if you cd elsewhere
|
||||
in the shell.
|
||||
.TP
|
||||
.B ?
|
||||
Show the keyboard shortcuts help overlay.
|
||||
.TP
|
||||
.B q
|
||||
Quit sfm.
|
||||
|
||||
.SH PREVIEW PANE
|
||||
When the preview pane is enabled with
|
||||
.BR P ,
|
||||
the terminal is split into a left pane (file list) and a right pane
|
||||
(preview). The preview shows:
|
||||
.IP \(bu 2
|
||||
.B Text files \-
|
||||
file contents displayed line by line.
|
||||
.IP \(bu 2
|
||||
.B Directories \-
|
||||
directory contents (subdirectories first, then files).
|
||||
.IP \(bu 2
|
||||
.B Symlinks \-
|
||||
the link target path.
|
||||
.IP \(bu 2
|
||||
.B Binary files \-
|
||||
file size.
|
||||
|
||||
.SH CUSTOM OPENER
|
||||
.B sfm
|
||||
checks for a user-defined opener script at:
|
||||
.PP
|
||||
.I ~/.config/sfm/opener
|
||||
.PP
|
||||
If the file exists and is executable, sfm passes the selected file path
|
||||
to it as the first argument instead of using the built-in smart opener.
|
||||
.PP
|
||||
Example opener script:
|
||||
.PP
|
||||
.nf
|
||||
#!/bin/sh
|
||||
case "$1" in
|
||||
*.jpg|*.jpeg) imv "$1" ;;
|
||||
*.mp4) mpv "$1" ;;
|
||||
*.html|*.pdf) firefox "$1" ;;
|
||||
*) echo "no program set for this file type" ;;
|
||||
esac
|
||||
.fi
|
||||
.PP
|
||||
Make it executable with:
|
||||
.B chmod +x ~/.config/sfm/opener
|
||||
.PP
|
||||
If the opener script does not exist, sfm falls back to its built-in
|
||||
smart opener which detects file types by extension and MIME type.
|
||||
|
||||
.SH SMART FILE OPENER
|
||||
When no custom opener is configured, sfm opens files using the first
|
||||
available program for each file type:
|
||||
.TP
|
||||
.B Text / code
|
||||
$EDITOR or vi.
|
||||
.TP
|
||||
.B Images
|
||||
imv, feh, sxiv, eog, gimp.
|
||||
.TP
|
||||
.B Video
|
||||
mpv, vlc, mplayer, totem.
|
||||
.TP
|
||||
.B Audio
|
||||
mpv, vlc, cmus, mocp.
|
||||
.TP
|
||||
.B PDF
|
||||
zathura, evince, okular, mupdf.
|
||||
.TP
|
||||
.B Office documents
|
||||
libreoffice.
|
||||
.TP
|
||||
.B Archives
|
||||
atool or bsdtar (lists contents in pager).
|
||||
.PP
|
||||
Falls back to xdg-open, open (macOS), or $EDITOR.
|
||||
|
||||
.SH FILE COLOURS
|
||||
.TP
|
||||
.B Green bold
|
||||
Directories.
|
||||
.TP
|
||||
.B Red bold
|
||||
Executables and broken symlinks.
|
||||
.TP
|
||||
.B Magenta
|
||||
Images.
|
||||
.TP
|
||||
.B Magenta bold
|
||||
Video files and valid symlinks.
|
||||
.TP
|
||||
.B Cyan bold
|
||||
Audio files.
|
||||
.TP
|
||||
.B Red
|
||||
Archives (zip, tar, gz, etc.).
|
||||
.TP
|
||||
.B Yellow
|
||||
Documents (pdf, docx, etc.).
|
||||
.TP
|
||||
.B Green
|
||||
Code and scripts (py, sh, rs, etc.).
|
||||
.TP
|
||||
.B Cyan
|
||||
Config and data files (json, yaml, etc.).
|
||||
.TP
|
||||
.B White
|
||||
Text, markdown, and all other files.
|
||||
|
||||
.SH STATUS BAR INDICATORS
|
||||
.TP
|
||||
.B [hidden]
|
||||
Hidden (dot) files are currently visible.
|
||||
.TP
|
||||
.B [sort:size] or [sort:date]
|
||||
Active sort mode. Not shown when sorting by name (default).
|
||||
.TP
|
||||
.B [copy] or [cut]
|
||||
A file is stored in the clipboard.
|
||||
.TP
|
||||
.B [sel:N]
|
||||
N items are currently multi-selected.
|
||||
.TP
|
||||
.B [details]
|
||||
Size/date detail column is visible.
|
||||
|
||||
.SH TRASH
|
||||
Files deleted with
|
||||
.B u
|
||||
are moved to:
|
||||
.PP
|
||||
.I ~/.local/share/sfm-trash/
|
||||
.PP
|
||||
Files are prefixed with a timestamp in the format
|
||||
.IR YYYYMMDD_HHMMSS_filename .
|
||||
Use
|
||||
.B U
|
||||
to browse the trash directory. To restore a file, rename it with
|
||||
.B r
|
||||
to remove the timestamp prefix, then cut with
|
||||
.B x
|
||||
and paste with
|
||||
.B p
|
||||
to the desired location.
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.I ~/.config/sfm/bookmarks
|
||||
Saved bookmarks, one directory path per line.
|
||||
.TP
|
||||
.I ~/.config/sfm/opener
|
||||
Custom file opener script (optional, must be executable).
|
||||
.TP
|
||||
.I ~/.local/share/sfm-trash/
|
||||
Directory where trashed files are stored.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
.B EDITOR
|
||||
Editor used to open text files when no custom opener is set.
|
||||
.TP
|
||||
.B SHELL
|
||||
Shell used when dropping to the terminal with
|
||||
.BR ! .
|
||||
.TP
|
||||
.B PAGER
|
||||
Pager used when listing archive contents.
|
||||
.TP
|
||||
.B XDG_CONFIG_HOME
|
||||
Base directory for sfm config files. Defaults to
|
||||
.IR ~/.config .
|
||||
.TP
|
||||
.B XDG_DATA_HOME
|
||||
Base directory for sfm data files (trash). Defaults to
|
||||
.IR ~/.local/share .
|
||||
|
||||
.SH EXAMPLES
|
||||
Open sfm in the current directory:
|
||||
.PP
|
||||
.nf
|
||||
sfm
|
||||
.fi
|
||||
.PP
|
||||
Open sfm at a specific path:
|
||||
.PP
|
||||
.nf
|
||||
sfm /mnt/data
|
||||
.fi
|
||||
.PP
|
||||
Use sfm as a cd wrapper (add to shell rc):
|
||||
.PP
|
||||
.nf
|
||||
s() { cd "$(sfm)"; }
|
||||
.fi
|
||||
|
||||
.SH AUTHORS
|
||||
Emmett1 <me@emmett1.my> with help of AI.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR find (1),
|
||||
.BR ls (1),
|
||||
.BR mv (1),
|
||||
.BR cp (1),
|
||||
.BR rm (1),
|
||||
.BR chmod (1),
|
||||
.BR vi (1)
|
||||
+570
-215
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user