Releases: qkzk/fm
Version 0.1.32
-
print on quit doesn't work anymore in bash / zsh and surelly in fish also (not tested.)
I tried to make environement variables to work but couldn't.
The alternative uses a temporary file :Put this in your bashrc / zshrc and use it as you did already.
function f() { fm $@ dest=$(cat /tmp/fm_output.txt) if [[ -n $dest ]]; then cd "$dest" fi }
-
case insentive search.
- A lowercase pattern matches regardless of case
- An uppercase pattern will match regarding case.
search for "car", it will find "Cargo", "cargo", "Car".
search for "Car", it will find "Cargo", "Car" but won't match "cargo"
-
new expansion for shell commands: %c expands into the clipboard content.
Haven't found an usage yet but I couldn't live without it.
It's the same as!
,some_command <Ctrl+v>
-
chmod improvment. Enter "chmod" mode with "+" or "alt+m"
- you can type a permission in octal mode (like 640), litterally (like rwxrwxrwx) or like in chmod "a+x", "-w" etc.
-
Temporary marks. Use Char(") and Alt+" to jump and save. Only 10 are saved so we can index with the digits.
Those marks aren't saved on disk and are dropped when the application stops. -
Use the current window when possible.
- When you start a shell with
s
or open a file opened in a terminal, we use the current window instead of starting a new terminal emulator.
It doesn't work if you open multiple files which doesn't share a common opener (like a text file and a pdf). - Tui application (lazygit, ncdu, btop, htop...) reuse the same window.
- Shell commands expansion & custom commands expansion:
%t
allows the command to be executed in a new shell in the same window.%t
should always be the first argument.
- When you start a shell with
-
Nerdfont icons for filetypes. When metadata isn't shown, use nerdfont devicons to display the filekind.
Association is copied from ranger_devicons.
Fuzzy finder of files display the same icon. -
Bugfixes:
- Fuzzy navigation (home, end, ensure window surrounds index)
Version 0.1.31
-
tuikit is replaced by crossterm & ratatui.
-
skim is replaced by nucleo.
tuikit and other crates created by the same author aren't maintened anymore.
fm relied a lot on the work of a single author: terminal events, rendering,
fuzzy finding, parsing of ANSI output etc. were all written by the same developper
and it created a lot of technology debt.Maintaing this code required to fork some repositories which was a lot of work and could create more debt if someone took the project further.
It's been a pleasure to work with those crates but I believe it's the right move.
By switching to maintened crates we ensure to be able to evolve the project
more safely.Most of the code is adapted "as is". I did my best to keep everything as it was
and don't break anything.The fuzzy finder looks really different but all its rendering is now much simpler.
-
double click is replaced by middleclick. Less intuitive but much more convenient in crossterm.
-
redirection in shell commands.
You can enter a shell command by typing
!
thenps -ef | grep %s
and see the if the selection is beeing executed.
It allows you to execute complex shell commands and see their output.Expansion haven't change (%s selection, %p current path, %n filename, %e extension, %f flagegd files, %t terminal emulator)
Strings likeecho "Hello World"
orecho 'Hello World'
should be processed correctly.
Tokens like*
and shorcuts like~
are recognized and dealt by sh.
Most environment variables aren't known since it's a new shell which run the command. You can still do!
export a=2; echo $a
and see...2
on the output.
It also works for sudo commands :sudo ls %s | grep pattern
will ask a password and executesudo ls your/selected/path | grep pattern
.There's a lot of steps and it's surelly buggy, I'll have to simplify it as much as possible in a future version.
The interface won't change, the internal will surelly do.
Since this parser is used everywhere, it means you can define custom commands with redirections. I can't think of an usage but may be you will ! -
Bugfixes:
- FIX: trash: bottom line is wrong "Enter" doesn't select but restore - refresh & reselect
- FIX: input_simple: when height is low, static elements are out of the window
- FIX: crash when deleting a file in tree mode
- FIX: diplay directory last line shouldn't be printed - erase the last line before printing log.
- FIX: Alt+c (open config file) should be betterly logged
- FIX: shortcut. dedup_slow keeps crashing. Sort unstable + dedup will do the trick.
- FIX: second pane ueberzub 1 char too left
Version 0.1.30
- shell & exec menu allow %t as terminal expansion. It allows you to open a file in a new terminal.
! %t nvim %s
will open the selected file with neovim in a new terminal. - cd command (Alt+g) includes children of a path (detected as soon as you type a /)
- double clic on a menu item to execute it. Same as a clic then press enter.
- Fixed a bug where search completion would be made before the char is inserted, displaying wrong results
- Fixed a bug where preview were built for second pane even if it wasn't visible, wasting ressources
- Move as you type. In Cd menu (Alt+g), the display and preview is updated as you type.
Pressing Esc (leave mode) go back to where you started from.
You need to validate with enter. - Sync left tab from right path shift+left. shift+right go the other way.
- A lot of refactoring:
- flagged files,
- input history,
- application start, main loop & quit,
- display
- menus
- Fixed a bug where leaving a menu while a tree is displayed resets the index.
Version 0.1.29
-
Fixed the documentation and updated the badges
-
Flagged files are now displayed in a menu instead of the main window. You can still jump to them, removed them individually
-
Fix jump mode (Alt+g) to allow paths to file. It will jump there and select the file.
-
Preview valid symlink as their target. Broken symlink aren't previewed at all
-
Fixed a few bugs. See details below.
-
Breaking changes: color configuration.
Only one mapping is used in config.yml. All colors are now regrouped there.
Some names have changed :- "start" -> "normal_start"
- "stop" -> "normal_stop"
Your old config will still be loaded, but their colors won't be recognized unless you update the config.
See the source for more infos.
Version 0.1.28
- Refactored colors, configuration. Replaced lazystatic by oncelock, reducing the dependencies.
- Removed a few dependencies.
- Fixed the documentation.
- Changed the way to install the application: use
cargo install fm-tui --locked
to prevent weird display bugs - Loaded monokai lazyly, no need to store it forever in the binary if you never preview a source file
- Improved the source code previewing by allowing more details from syntect
- Fixed a bug where ~ wasn't expanded from args
v0.1.26
- BREAKING: removed jump mode completeley.
You can see your flagged files in the display::flagged mode, default bind: . - BREAKING: removed all MOCP controls from fm. What was it doing there anyway ?.
Those change won't break your config file. While building the application, line with reference to removed binds will be erased. - search with regex. You can search (Char('/')) a regex pattern. Search next (Char('f')) will use that regex.
- left or right aligned and clickable elements in header
- shift+up, shift+down while typing something cycle trough previous entries.
Those are filtered: while typing a path, suggestions are limited to previous pathes, not previous commands. - shift+left erases the whole input line
- wrap tuikit::event into custom event. Use an mpsc to request refresh and bulk execution.
While editing filenames in bulk, the application isn't bloked anymore. - improve neovim filepicking. While ran from a neovim terminal emulator, use the flag
--neovim
. Every text file will be opened directly in current neovim session.
Watchout, if you try to open text & non text files at the same time, it will run a new terminal with your text editor instead. Don't mix file kinds. - Dynamic filtering while typing a filter
- Search as you type: do / then type a pattern and you will jump to the match.
- replace
tar tvf
bybsdtar -v --list --file
. Which can preview .deb and .rpm files - preview torrent files with
transmission-show
- preview mark, shortcut & history content in second pane while navigating
- zoxide integration. While typing a path in "Goto mode" (default keybind "alt+g"), the first proposition will come from your zoxide answers.
Merge pull request #87 from qkzk/v0.1.25-dev
Version 0.1.25
Summary
- Improve scrolling in tree mode.
- Bulk & normal rename: create intermediate folders when renaming.
- Bulk now asks a confirmation before execution.
- Scroll to selection when opening a menu. Selected file should alway be displayed in top window.
- Scroll completion & navigation menus.
- Configurable cli applications. See
~/fm/cli.yaml
- Simplify tui config files. Remove
cwd
boolean parameter. Doesn't break old config files. - Display the number of entries as the size of a directory instead of '-'. Might affect performance for very large directories.
- Enable logging with
-l
or--log
. Nothing is logged anywhere without this flag. - FIX: Tree mode. Unfolding a directory unfold its children
- BREAKING: Use specific argument read from config file to run a command at startup for most common terminal emulators.
It allows the user to setup a specific terminal unknown to me and use it with fm.
To make this work, it will require the user to update its config file by copying the last part: "terminal_emulator_flags:..." - FIX: entering an inaccessible dir or writing in any way to a readonly dir shouldn't crash the app anymore...
- Display & Update separation. Use a thread for display, allowing 30 fps. It uses more CPU :(
This feature is subject to change in future versions. - Flagged display mode. Enter with and show all your flagged files. You can rename, open, trash, delete, bulk rename, open, open with etc.
Custom and simple search (filename containing input).
Jump to the file with
ATM both "edit::jump" and "display::flagged" show the same content. The former may be removed soon. - Configurable menu colors. Every color used on screen is now configurable like file colors.
v0.1.24
- New Context Menu (right click, Alt+t) with basic file operations.
- Header (path, filename), Footer (other informations).
- Every window can be clicked. Header, Footer, Files, Menus. Selectable element from menu can be clicked.
- Integrated a lot of commands into
TuiApplications
orCliApplications
. - Session for display settings. Settings are saved after each modification.
- Better (?) keybindings. Alt+char open a menu whose name starts with this char.
- Refactoring
lib
. Moved file to a few folders, separated display from status. - Many bug fixes
What's Changed
Full Changelog: v0.1.23...v0.1.24
Version 0.1.23 : improve tree mode and display. MTP, SSHFS
Version 0.1.23
- preview tar archive
- Jump mode : 'Space' Toggle flag, 'u' remove all flags, 'Enter' jump to the file
- FIX: copy / move while existing file already exist use another name
- Jump mode (display flagged files) should allow to delete / trash the flagged files
- binary preview also display parsed ASCII strings
- skim fuzzy find (ctrl-f) starts from current dir, not current selected file
- open/file pick flagged files if there are, use selected file instead
- regroup openers when opening multiple files.
- refresh every 10 seconds. If no file in current dir has changed, nothing happens.
- scroll in preview second screen
- FIX sending
Event::User(())
events from refresher hangs skim. UseEvent(Key::AltPageUp)
which is now reserved. - allow file selection from args : -p filename selects the file from parent dir
- more args : dual pane, preview second, display full, show hidden
- history: when moving back select back the file we were at
- use yellow block char to make flagged files more visibles.
- move input 1 char right since we inserted a space
- preview pdf with ueberzug. First page extracted with poppler -> cairo -> thumbnail -> ueberzug
- FIX: when encrypted drive is already mounted don't let user mount it again
- FIX: group & owner metadata alignement in tree mode
- Tree mode Copy / Move / New should copy in selected directory not root of tree
- Allow scrolling in preview pdf. Required a lot of change in Preview::ueberzug. Update thumbnail when required.
- Flag the selected file if no file is flagged before entering delete mode or trashing a file.
- FIX: fuzzy finder should do nothing if escape (quit?) is inputed
- preview openoffice / office documents as images. Don't use pandoc for .doc .odb etc. previews
- mtp mount with gio nnn plugin
- add MTP mount points to shortcuts
- list, mount, unmount mtp mount points
- bulk, skim & removable are
None
until first use. - remove dependencies
- complete refactor of many files.
- Use
lazy_static
to loadColors
configuration. Don't use a cache. Calculate every color for every extension - allow rgb colors in config file
- FIX: can't read filename from / ... which crashes the app.
- FIX: exploring root folder leads to wrong first line display.
- allow seveval palettes for normal file colors
- move every lazy_static configuration into config.
- FIX: encrypted are never shown as mounted
- Tree remade without recursion. Use an
HashMap<PathBuf, Node>
- FIX: folders are max depth hangs the app
- FIX: rename renames the root path
- FIX: scrolling to bottom of tree is bugged
- FIX: scrolling starts 1 row to low
- FIX: filename in first line
- FIX: can't "open" a folder to redo the tree there
- FIX: move back from root should redo the parent tree
- FIX: move up from to go to last and vice versa
- FIX: enter a dir from normal mode shouldn't set mode tree
- Use a generic trait for movements
- FIX: first line position for tree
- FIX: searching for file very low don't scroll there
- FIX: search can only find the first match
- FIX: leaving preview doesn't reset tree
- Add a link to previous and next node in Node. Simplify navigation, increase ram usage :/
- test everything
- refactor
- document
v0.1.22
- FIX: copying 0 bytes crash progress bar thread
- FIX: refresh users (from tab) reset the selection in pathcontent.
- FIX: when switching from single to dual pane, sort and position are lost
- FIX: tree mode: move down from bottom crashes
- FIX: inxi --full or inxi -F hangs. Use inxi -v 2 instead
- allow shell expansion (~ -> /home/user) in goto mode
- FIX: mode CHMOD reset the file index
- better display of selected tab. Reverse the colors in the first line
- display a message when trash is empty in trash explore mode (alt-o)
- display last executed action (use a string as message)
- FIX: vertical resize to a smaller window : files expand to the last line and message are overwritten
- FIX: open a secondary window and messages are overwritten by files. Don't display messages...
- FIX: clippy term_manager::windmain has too many arguments. Create a struct holding params for winmain
- NeedConfirmation modes are responsible for their confirmation message
- Use Alt+r to remote mount with sshfs.
- request
username hostname remotepath
in one stroke, - execute
sshfs remote_user@hostname:remote_path current_path
which will mount the remote path in current path
- request
- FIX: search keybindings don't work. Need to trim a string.
- FIX: archive depends on CWD and will crash if it's not set properly (ie. change tab, move, change tab, compress)
- use memory and not disk to read last line of logs.
- mocp clear playlist with ctrl+x
- FIX: MOCP print error message on screen
- cryptdevice requires lsblk & cryptdevice. Display a message if not installed
- mocp must be installed to run relatives commands
- nitrogen must be installed to set a wallpaper
- mediainfo must be installed to preview a media file with it
- ueberzug must be installed to preview images & font files with it
- pandoc must be installed to preview doc (.doc, .odb)
- jupyter must be installed to preview .ipynb notebooks.
- isoinfo must be installed to preview .iso files
- diff must be installed to preview a diff of 2 files
- git muse be installed to display a git status string
- inform user if file already exits when creating / renaming
- factorise new file & new dir
- metadata in tree mode. Toggle like display full with alt-e
- FIX: pagedown may select a file outside window without scrolling to it
- FIX: multiple scrolling bugs. It should be smooth in every context
- FIX: after scrolling left click doesn't select the correct file
- FIX: page down when few files in current path screw the display
- remove doublons from shortcut (Ctrl+g) "goto mode"
- FIX: scrolling isn't smooth anymore
- InputSimple is responsible of its help lines
- Preview epub. Requires pandoc.
- FIX: symlink aren't displayed at all.
- Improve broken symlink detection and display
- Use
symlink_metadata
to avoid following symlink in tree mode, which may cause recursive filetree - Don't display symlink destination in tree mode since it clutters the display
- Use a different configurable color for broken symlink
- display selected file in first line
- FIX: sort by size use wrong value and order badly 2B > 1M
- refactor copy move. CopyOrMove is responsible for its setup.
- refactor main. Split setup, exit and main loop.
- refactor main. Use a struct responsible for setup, update, display and quit.
- preview fonts, svg & video thumbnail
- video thumbnail requires ffmpeg
- fonts preview otf not supported
- fonts preview requires fontimage
- svg preview requires rsvg-convert
- preview for special files :
- block device using lsblk
- socket using ss
- fifo & chardevice
lsof path
- size for char & block device exa
- use a struct for ColumnSize
- FIX: goto mode from tree node with a selected file crashes the application
- Not accessible file in tree mode crashes the application
- Look for nvim listen address in
ss -l
output