cupidfm is a terminal-based file manager implemented in C. It uses the ncurses library for the user interface, providing features like directory navigation, directory tree preview, file preview, file editing, and file information display.
For proper emoji display:
- Make sure your terminal emulator supports Unicode and emoji rendering For proper emoji and icon display:
- Install a Nerd Font (recommended):
# On Ubuntu/Debian:
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/JetBrainsMono.zip
unzip JetBrainsMono.zip
fc-cache -fv- Configure your terminal:
- Set your terminal font to "JetBrainsMono Nerd Font" (or another Nerd Font)
- Ensure your terminal emulator supports Unicode and emoji rendering
- Set your locale to support UTF-8:
export LANG=en_US.UTF-8
Alternative fonts:
- Noto Color Emoji (
sudo apt install fonts-noto-color-emoji) - Fira Code Nerd Font
- Hack Nerd Font
If emojis aren't displaying correctly:
- Check your terminal supports Unicode:
echo -e "\xf0\x9f\x93\x81" - Verify locale settings:
locale - Try updating your terminal emulator to a newer version
Note: Some terminal emulators like Alacritty, iTerm2, Konsole, and Kitty are known to work better with unicode/emojis. Note: Image preview uses 256-color blocks or ANSI truecolor rendering. Kitty terminal users get native graphics protocol support for the highest quality image previews. Sixel-capable terminals (mlterm, foot, xterm, Konsole 22+, VTE 0.52+, Windows Terminal, iTerm2) get high-quality color-quantized image previews with dithering.
System/third-party dependencies:
- ncurses (terminal UI)
- libmagic (MIME/type detection)
- OpenSSL (TLS/HTTPS support for cupidscript)
- zlib, bzip2, and xz/liblzma (compression backends used by archive preview)
- xclip (clipboard integration)
Project libraries (customized/updated versions):
- cupidconf (config loader; this repo vendors a customized version in
lib/cupidconf.c) - cupidscript (plugin scripting; linked as
lib/libcupidscript.a) - cupidarchive (archive preview; linked as
lib/libcupidarchive.a) - cupidimage (image preview; linked as
lib/libcupidimage.a) - [cupidgit](https://github.com/cupidthecat/Please cupidgit/) (git status detection; linked as
lib/libcupidgit.a)
To build and run cupidfm, you must have the following packages installed:
- A C Compiler & Build Tools (e.g.
gcc,make) - ncurses development libraries (for terminal handling)
- libmagic development libraries (for MIME type detection)
- OpenSSL development libraries (for HTTPS support in cupidscript)
- zlib + bzip2 + xz development libraries (archive preview via
cupidarchive) - xclip (for clipboard support)
Open a terminal and run:
sudo apt update
sudo apt install build-essential libncurses-dev libmagic-dev libssl-dev zlib1g-dev libbz2-dev liblzma-dev xclipOpen a terminal and run:
sudo pacman -Syu
sudo pacman -S base-devel ncurses file openssl zlib bzip2 xz xclipNotes:
- On Arch, the package named file provides libmagic.
- The package base-devel installs gcc, make, and other essential build tools.
To compile the project, run the provided build script:
./dev.shThis script invokes make (with predefined flags) to compile the source code and produce an executable named cupidfm.
The build script uses flags such as:
-Wall -Wextra -pedanticto enable warnings- Additional warnings (
-Wshadow -Werror -Wstrict-overflow) - Sanitizers (
-fsanitize=address -fsanitize=undefined) for debugging
After building, start cupidfm with:
./cupidfmError logs (if any) will be saved to log.txt.
- Navigate directories using arrow keys
- View file details and preview supported file types
- Display MIME types based on file content using
libmagic - Archive preview for common formats (
.zip,.tar,.tar.gz,.7z, etc.) viacupidarchive - Image preview for common image formats (PNG, JPEG, WebP, GIF, BMP, ICO, TIFF) rendered directly in the terminal via
cupidimage:- Kitty terminal: Native graphics protocol with full color fidelity and hardware acceleration
- Sixel terminals: High-quality color quantization with dithering support (mlterm, foot, xterm, Konsole 22+, VTE 0.52+, Windows Terminal, iTerm2)
- Truecolor terminals: ANSI escape sequence rendering with 24-bit color
- 256-color terminals: Fallback to 256-color palette rendering
- Git integration - Visual git status indicators displayed inline with file listings via
cupidgit:- 🔴 Modified files (tracked files with uncommitted changes)
- 🟢 Untracked files (files not in git index)
- ⚪ Unmodified files (tracked files with no changes)
- Automatic repository detection when navigating directories
- No external git dependency - uses custom SHA-1 implementation
- File type indicators with emoji icons:
- 📄 Text files
- 📝 C source files
- 🔣 JSON files
- 📑 XML files
- 🐍 Python files
- 🌐 HTML files
- 🎨 CSS files
- ☕ Java files
- 💻 Shell scripts
- 🦀 Rust files
- 📘 Markdown files
- 📊 CSV files
- 🐪 Perl files
- 💎 Ruby files
- 🐘 PHP files
- 🐹 Go files
- 🦅 Swift files
- 🎯 Kotlin files
- ⚡ Scala files
- 🌙 Lua files
- 📦 Archive files
- Text editing capabilities within the terminal
- Directory tree visualization with permissions
- File information display (size, permissions, modification time)
- Background directory size calculation with a live "Calculating... " progress display
- Scrollable preview window
- Tab-based window switching between directory and preview panes
- Configure keybinds
CupidFM is optimized for speed and efficiency. Our comprehensive test suite (63 tests across 8 suites) and performance benchmarks demonstrate excellent performance characteristics:
-
Vector Operations:
- Add 100 elements: 0.645 μs (645 ns)
- Element access: 1.95 ns
- Capacity management: 651-749 ns
-
VecStack Operations:
- Push/pop: 0.167 μs (166.5 ns) - 50% faster after optimization
- Peek: 2.03 ns (100x faster than push/pop, as expected)
- Large stack (1k elements): 15.6 μs
- Path Join: 38-138 ns depending on complexity
- Directory Reading:
- Small directories (
/tmp): 42.6 μs (hot cache) - Medium directories (
/usr/lib, 99 entries): 10.5 μs (hot cache) - Large directories (
/usr/bin, 2,254 entries): 325.4 μs (hot cache)
- Small directories (
- Cold Cache Performance (realistic browsing scenario):
- First read is 1.75-3.8x slower than hot cache, demonstrating the importance of OS page caching
- Warm steady-state matches hot cache performance
-
VecStack Optimizations - Achieved 32% performance improvement:
- Cached Vector length to eliminate redundant function calls
- Used
Vector_set_len_no_freefor push operations - Pre-allocated capacity (10 elements) to reduce reallocations
-
Memory Safety - All critical memory issues fixed:
- Safe
reallocusage with temporary pointers - Proper memory cleanup in all data structures
- Zero memory leaks (validated with AddressSanitizer and Valgrind)
- Safe
-
String Operations:
strlen: 1.90 nsstrncpy: 7.34 nssnprintf: 54.52 ns
For detailed performance analysis and test suite documentation, see TESTING_AND_PERFORMANCE.md.
All keybinds are configurable via ~/.cupidfmrc. These are the defaults.
| Action | Default |
|---|---|
| Move up | KEY_UP |
| Move down | KEY_DOWN |
| Go to parent directory | KEY_LEFT |
| Enter directory | KEY_RIGHT |
| Switch Directory/Preview pane | Tab |
| Exit | F1 |
| Edit file (from Preview pane) | ^E |
| Copy | ^C |
| Paste | ^V |
| Cut | ^X |
| Delete | ^D |
| Rename | ^R |
| New file | ^N |
| New directory | Shift+N |
| Fuzzy search | ^F |
| Select all (current view) | ^A |
| Open console | ^O |
| Action | Key |
|---|---|
| Move selection | KEY_UP / KEY_DOWN |
| Page | PageUp / PageDown |
| Accept (keep filtered list) | Enter |
| Cancel (restore previous selection) | Esc |
| Action | Default |
|---|---|
| Move cursor | KEY_UP / KEY_DOWN / KEY_LEFT / KEY_RIGHT |
| Save | ^S |
| Quit | ^Q |
| Backspace | KEY_BACKSPACE |
cupidfm comes with a set of default keybindings. On first run, if cupidfm cannot find a user configuration file, it will auto-generate one at:
~/.cupidfmrc
Below is a screenshot showing the start up
This auto-generated config file includes default bindings, for example:
The default includes key_search=^F (Ctrl+F) for fuzzy search and key_new_dir=Shift+N for creating directories, both of which you can change by editing ~/.cupidfmrc and restarting CupidFM.
key_up=KEY_UP
key_down=KEY_DOWN
key_left=KEY_LEFT
key_right=KEY_RIGHT
key_tab=Tab
key_exit=F1
key_edit=^E
key_copy=^C
key_paste=^V
key_cut=^X
key_delete=^D
key_rename=^R
key_new=^N
key_search=^F
key_new_dir=Shift+N
key_select_all=^A
key_undo=^Z
key_redo=^Y
key_permissions=^P
key_console=^O
edit_up=KEY_UP
edit_down=KEY_DOWN
edit_left=KEY_LEFT
edit_right=KEY_RIGHT
edit_save=^S
edit_quit=^Q
edit_backspace=KEY_BACKSPACE
edit_copy=^C
edit_cut=^X
edit_paste=^V
edit_select_all=^A
edit_undo=^Z
edit_redo=^Y
Immediately after creating ~/.cupidfmrc for the first time, CupidFM will display a popup in the interface letting you know where it wrote your new config.
After CupidFM creates this file, you are free to edit it to customize keybindings or add new mappings. Here are some rules/notes:
-
Valid Formats
- You may use special ncurses names like
KEY_UP,KEY_DOWN,KEY_LEFT, etc. - You can assign Ctrl+key by using a caret, e.g.
^C. - Single characters (
a,b,x) are also valid.
- You may use special ncurses names like
-
Commenting and Whitespace
- Lines beginning with
#are treated as comments and ignored. - Blank or whitespace-only lines are also ignored.
- Lines beginning with
-
Sample
If you only want to change the exit key from F1 to Esc, you might do:
key_exit=27since ASCII 27 is Esc in decimal form.
-
Restart Required
- Changes to
~/.cupidfmrctake effect next time you launch CupidFM.
- Changes to
-
~/.cupidfmrc
By default, CupidFM looks for this file in your home directory. -
No config found?
- CupidFM loads hard-coded defaults (arrow keys, F1, etc.)
- Automatically writes a new file to
~/.cupidfmrc, which you can later edit.
-
Config exists but can’t be loaded?
- CupidFM keeps defaults and shows a Configuration Errors popup instead of overwriting your config.
- Changing the Exit Key
or
key_exit=F10key_exit=27 # 27 = ESC - Using Emacs-like Keys
If you preferCtrl+Pfor up andCtrl+Nfor down:key_up=^P key_down=^N - Remapping Left/Right
key_left=KEY_BACKSPACE key_right=KEY_ENTER
- Config Not Created:
Make sure you have a valid$HOMEenvironment variable set. If$HOMEis missing or empty, CupidFM will try to create the config in the current directory instead. - Invalid or Unknown Key:
If you enter an invalid key name, it will be ignored and remain at default. Check the logs or run from a terminal to see error messages. - Changing Keybindings:
- If something stops working after changes, revert the line or remove it to fall back to the default.
- You can always delete
~/.cupidfmrcand relaunch to regenerate a fresh config.
With these steps, you can fully customize your keybindings in ~/.cupidfmrc. If you ever lose or remove it, CupidFM will rewrite the default file and let you know on the next run!
CupidFM features a powerful and extensible syntax highlighting system for the built-in text editor. Syntax highlighting enhances code readability by applying different colors to keywords, types, strings, comments, operators, and more.
Out of the box, CupidFM includes syntax highlighting for:
- C/C++ (
.c,.h,.cpp,.hpp,.cc,.cxx, etc.) - Bash/Shell (
.sh,.bash) - Markdown (
.md,.markdown)
Syntax highlighting configuration files use the .cupidconf extension and are stored in:
~/.cupidfm/syntax/
To install a syntax file:
-
Create the syntax directory (if it doesn't exist):
mkdir -p ~/.cupidfm/syntax -
Copy syntax files to the directory:
cp c.cupidconf ~/.cupidfm/syntax/ cp bash.cupidconf ~/.cupidfm/syntax/ cp md.cupidconf ~/.cupidfm/syntax/
-
Restart CupidFM to load the new syntax definitions.
Syntax files use a simple key-value format. Here's how to create your own:
Name your file <language>.cupidconf, for example:
python.cupidconffor Pythonjavascript.cupidconffor JavaScriptrust.cupidconffor Rust
# Language name
language = python
# File extensions (comma-separated)
extensions = .py, .pyw, .pyi
# Keywords - control flow and main language keywords
keywords = if, else, elif, for, while, def, class, return, break, continue
# Statements - modifiers and declarations
statements = import, from, as, with, pass, yield, async, await, lambda
# Types - built-in types
types = int, str, float, bool, list, dict, tuple, set, None
# Constants - built-in constants
constants = True, False, None, __name__, __main__
# Preprocessor directives (language-specific)
preprocessor =
# Comments
line_comment = #
block_comment_start = """
block_comment_end = """
# String delimiters
string_delim = "
char_delim = '
# Preprocessor character (e.g., # for C preprocessor)
preprocessor_char =
# Colors (optional - uses Monokai theme by default)
color_keyword = #e87d3e
color_type = #b4d273
color_string = #e5b567
color_comment = #797979
color_number = #9e86c8
color_preprocessor = #b05279
color_operator = #e87d3e
color_function = #6c99bb
| Option | Description | Example |
|---|---|---|
language |
Language name (informational) | python |
extensions |
File extensions to match (comma-separated) | .py, .pyw |
keywords |
Control flow keywords (highlighted bold) | if, else, for |
statements |
Statement keywords and modifiers | import, export, const |
types |
Type keywords and built-in types | int, str, void |
constants |
Built-in constants | true, false, NULL |
preprocessor |
Preprocessor directive names | define, include |
line_comment |
Single-line comment delimiter | // or # |
block_comment_start |
Block comment start | /* or """ |
block_comment_end |
Block comment end | */ or """ |
string_delim |
String quote character | " |
char_delim |
Character quote | ' |
preprocessor_char |
Preprocessor trigger character | # |
You can customize colors using hex format (#RRGGBB) or RGB format (R,G,B):
# Hex format
color_keyword = #e87d3e
color_type = #b4d273
# RGB format (alternative)
color_keyword = 232,125,62
color_type = 180,210,115
Available color options:
color_keyword- Control flow keywordscolor_type- Type names and type keywordscolor_string- String and character literalscolor_comment- Commentscolor_number- Numbers and constantscolor_preprocessor- Preprocessor directivescolor_operator- Operators (+, -, *, etc.)color_function- Function calls
If colors are not specified, CupidFM uses the default Monokai theme.
The syntax highlighter automatically detects and highlights:
- Keywords - Control flow statements (bold orange)
- Types - Type declarations and built-in types (green)
- Strings - String and character literals (yellow)
- Escape sequences - Special highlighting for
\n,\t,\xHH, etc. (bold purple)
- Escape sequences - Special highlighting for
- Comments - Single-line and block comments (gray)
- Numbers - Integer, floating-point, hex, binary, octal (purple)
- Operators - Arithmetic and logical operators (orange)
- Function calls - Functions followed by
((blue) - Labels - Goto labels at line start (bold pink)
- Constants - ALL_CAPS identifiers (purple)
- Type suffixes - Identifiers ending with
_tor_T(green) - Preprocessor - Directives like
#include,#define(pink) - Block comments across scrolling - Maintains comment state when scrolling
-
Keep keyword lists manageable - Very long comma-separated lists can cause performance issues. Keep each category under 50 items.
-
Test with sample files - Create a test file with various language constructs to verify highlighting works correctly.
-
Order matters - More specific patterns should come before general ones in your lists.
-
Use comments - Document your syntax file with comments starting with
#. -
File extensions - Include all common extensions (e.g.,
.cpp,.cc,.cxxfor C++).
# Python Syntax Highlighting
language = python
extensions = .py, .pyw
keywords = if, else, elif, for, while, def, class, return
statements = import, from, with, as, pass
types = int, str, float, bool, list, dict, None
constants = True, False, None
line_comment = #
string_delim = "
char_delim = '
color_keyword = #e87d3e
color_type = #b4d273
color_string = #e5b567
color_comment = #797979
- Syntax file not loaded: Ensure the file is in
~/.cupidfm/syntax/and has the.cupidconfextension. - Colors not showing: Check that your terminal supports 256 colors (
echo $TERMshould showxterm-256coloror similar). - Highlighting incomplete: Make sure all required fields are present (language, extensions, at least one keyword/type/statement).
- Performance issues: Reduce the number of keywords/types in your syntax file if hovering over files causes lag.
CupidFM can load Cupidscript plugins (.cs) on startup.
By default it loads from your home directory:
~/.cupidfm/plugins~/.cupidfm/plugin
Local/repo plugin folders are supported, but are disabled by default (to avoid accidentally executing repo scripts):
- Enable local plugin loading with:
CUPIDFM_LOAD_LOCAL_PLUGINS=1 - Then CupidFM will also search:
./cupidfm/pluginsand./cupidfm/plugin./pluginsand./plugin
fn on_load()fn on_key(key)-> returntrueto consume the keypressfn on_dir_change(new_cwd, old_cwd)fn on_selection_change(new_name, old_name)
fm.notify(msg)/fm.status(msg)- show a notificationfm.popup(title, msg)- show a popupfm.console_print(msg)/fm.console(msg)- append to the in-app console (^Oby default)fm.prompt(title, initial)->string|nilfm.confirm(title, msg)->boolfm.menu(title, items[])->index|-1fm.cwd()- current directoryfm.selected_name()/fm.selected_path()- current selectionfm.cursor()/fm.count()- cursor index + list sizefm.search_active()/fm.search_query()- fuzzy search statefm.pane()-"directory"or"preview"fm.bind(key, func_name)- bind a key to a function (key can be"^T","F5","KEY_UP", or a numeric keycode)- File operations (integrated with undo/redo):
fm.copy(path_or_paths, dst_dir)fm.move(path_or_paths, dst_dir)fm.rename(path, new_name)fm.delete(path_or_paths)(trash)fm.mkdir(name_or_path)fm.touch(name_or_path)fm.undo()/fm.redo()
fm.reload()- request a directory reloadfm.exit()- request CupidFM to quitfm.cd(path)- change directory (absolute or relative)fm.select(name)/fm.select_index(i)- move selection (best effort)fm.key_name(code)/fm.key_code(name)- convert between keycodes and names
See plugins/examples/ for example scripts (not auto-loaded) and CUPIDFM_CUPIDSCRIPT_API.md for the full API reference.
- Add file filtering options
- Write custom magic library for in-house MIME type detection
- Add a quick select feature for selecting file names, dir names, and current directory
- Add configuration file support for customizing:
- Key bindings
- Color schemes
- Default text editor (using in house editor)
- File associations
- Change default text preview files
- Basic file dialog for web and other applications
- Use YSAP make-diagram program to learn more about files
- Design and implement the command bar UI. (Most likely in the same spot of notify)
- Design API functions for cupidscript to use with the commandline.
- Add a command parser to interpret user input.
- Implement core file operations (
cd,ls,open, etc.). - Add error handling and feedback messages.
- Support command history with Up/Down arrow keys.
- Implement tab-based auto-completion for file and directory names.
- Develop custom cupidfm commands (
tree,info, etc.). - Integrate with system shell commands.
- Allow user-defined aliases in a configuration file.
- Add image preview (in house lib?)
- Fallback to extension-based detection instead of MIME type when detection fails
- Fix directory list not staying within the border
- Implement directory tree preview for directories
- Fix weird crash on different window resize
- Fix text buffer from breaking the preview win border
- Fix issue with title banner notif rotating showing char when rotating from left side to right
- Fix inputs being overloaded and taking awhile to execute
- Add build version and name display
- Add cursor highlighting to text editing buffer
- Add line numbers to text editing buffer
- Fix preview window not updating on directory enter and leave
- Implement proper file item list
- Fix directory list being too big and getting cut off
- Fix crashing when trying to edit too small of a file
- Add support for sig winch handling
- Fix being able to enter directory before calculation is done
- Add directory window scrolling
- Add tree structure visualization with proper icons and indentation
- File info not using emojis
- Add text display on tree preview when user enters an empty dir and on dir preview
- Enable scrolling for tree preview in the preview window when tabbed over
- Add preview support for
.zipand.tarfiles - implemented via cupidarchive - Fix directory preview not scrolling
- Implement proper memory management and cleanup for file attributes and vectors
- Add error handling for failed memory allocations
- Optimize file loading performance for large directories
- Optimize scrolling, also make sure tree preview is optimized
- [?] Use tree command to rewrite tree preview
- Fixed cursor issue in directory window scroll
- Fix dir size calc not working (wont calc files inside)
- Fix long preview file names
- Add file operations:
- Copy/paste files and directories
- Create new file/directory
- Delete file/directory
- Rename file/directory
- Display symbolic links with correct arrow notation (e.g.,
->showing the target path) - Basic install script for building, installing nerd fonts and other dependencies, and then moving the executable to /usr/bin
- Implement file search functionality (fuzzy search)
- Implement lazy loading for large directories
- Optimize memory usage for file preview
- Cache directory contents for faster navigation
- Improve MIME type detection performance
- Implement background loading for directory contents
- Banner bug when its going lefct the fisrst tick it goes in it goes to the right one tick then back like normal
- Implement text editing shortcuts:
- Shift+arrow for selection
- Ctrl+arrow for faster cursor movement
- Standard shortcuts (Ctrl+X, Ctrl+C, Ctrl+V)
- Add undo (control Z) /redo (contriol Y) functionality in edit mode
- Implement proper text selection in edit mode (Currnety mouse selecting, will select line numbers )
- Custom plugin system with cupidscript a custom scripting lang
- Implement file/directory permissions editing
- Implement syntax highlighting for supported file types (use config system like micro)
- Banner marquee not rotating correctly when rotating in edit mode
- Fix issue casued by patch, they are in seperate locations dpeedning on timing
- Fix banner not rotating when prompted eg. (new file or dir)
- Fix issue casued by patch, they are in seperate locations dpeedning on timing
- Fix sig winch handling breaking while in edit mode
- Fix cursor showing up at the bottom of the text editing buffer
- Fix text buffer not scrolling to the right when typing and hitting the border of the window
The Command Line Interface (CLI) for cupidfm will introduce a powerful way for users to perform common file operations directly from the application, similar to a terminal within the file manager. This feature will enable users to execute commands like navigating directories, opening files, copying/moving files, and even running system commands without leaving the cupidfm interface.
-
Command Input:
- Users will have access to a bottom command bar where commands can be typed.
- Basic commands like
cd,ls,open,copy,move,deletewill be supported.
-
Command History:
- Pressing the Up/Down arrow keys will cycle through previously executed commands, similar to a traditional terminal.
-
Tab Completion:
- Auto-complete file and directory names by pressing TAB while typing a command.
-
Error Handling:
- Clear and descriptive error messages will be displayed in the command bar when commands fail (e.g., "File not found" or "Permission denied").
-
Custom cupidfm Commands:
- Extend the functionality of traditional file operations with cupidfm-specific commands, such as:
tree: Display the directory tree structure.preview [file]: Quickly open a file in the preview window.info [file/dir]: Show detailed information about a file or directory.
- Extend the functionality of traditional file operations with cupidfm-specific commands, such as:
-
System Command Integration:
- Run standard shell commands like
grep,find,chmod, and others directly from the cupidfm command bar.
- Run standard shell commands like
-
Notification on shortcut
- Convert the notfication bar to work with the command line
- Ex. When a user enters command mode it will show up where the notifications does.
-
Copy and Paste (Ctrl+C, Ctrl+V)
- Copy selected file or directory.
- Paste copied item into the current directory.
-
Cut and Paste (Ctrl+X, Ctrl+V)
- Move selected file or directory.
- Paste cut item into the current directory.
-
Delete (Ctrl+D)
- Delete selected file or dir with no prompt
- Delete selected file or directory with a confirmation prompt.
-
Rename (Ctrl+R)
- Rename the selected file or directory.
-
Create New File (Ctrl+N)
- Create a new, empty file in the current directory.
-
Create New Directory (Shift+N)
- Create a new directory in the current directory.
-
Select All (Ctrl+A)
- Select all files and directories in the current view.
-
File Search (Ctrl+F)
- Search for files or directories by name or pattern.
-
Quick File Info (Ctrl+T)
- Display detailed information about the selected file or directory.
-
Undo/Redo (Ctrl+Z / Ctrl+Y)
- Undo or redo the last file operation.
-
File Permissions (Ctrl+P)
- Edit permissions of the selected file or directory.
-
Quick Move (F2)
- Open a prompt to quickly move the selected file or directory to a specified path.
-
Batch Operations (Ctrl+Shift+B)
- Perform batch operations like copying, moving, or deleting multiple selected files.
-
Symbolic Link Creation (Ctrl+L)
- Create a symbolic link for the selected file or directory.
-
File Filtering (Ctrl+Shift+F)
- Apply filters to display files by type, size, or modification date.
-
Open command bar (Ctrl+Shift+C)
- Lets users type in command bar
- Add a command bar at the bottom of the cupidfm interface.
- Display typed commands dynamically and update the UI to show results or error messages.
- Parse and interpret user input.
- Support basic file operations (
open,cd,ls,copy,move,delete, etc.). - Integrate with system utilities for advanced commands.
- Display real-time feedback or results in the command bar.
- Handle errors gracefully and inform users of invalid commands or paths.
- Introduce cupidfm-specific commands for enhanced functionality, like:
treepreviewinfo
- Allow users to run basic shell commands without leaving the application.
- Commands like
grepandchmodshould work seamlessly.
- Allow users to create command aliases for frequently used commands (e.g., alias
lstolist).
- Navigation:
- Up/Down: Move between files
- Left/Right: Navigate to parent/child directories
- F1: Exit the application
- TAB: Switch between directory and preview windows
- CONTROL+E: Edit file in preview window
- CONTROL+G: Save file while editing
- CONTROL+C: Copy selected file to clipboard
- CONTORL+V: Paste selected file to current location
Contributions are welcome! Please submit a pull request or open an issue for any changes.
This project is licensed under the GNU General Public License v3.0 terms.








