ignore_case
option to the do case-insensitie search by/
.- Symbolic link destinations are now displayed when the cursor is hovered over them.
- Symlink items linked to directory now appears in the directory section, not the file section.
- MSRV is now v1.74.1
z
command can now receive multiple arguments:z dot files<CR>
works as in your terminal.
- Restore the cursor position properly after exit in a tmux (and possibly in other multiplexers) session.
:config
to point to the config file if exists.- felix listens to the change of the config file, and re-read the config automatically (after some key inputs).
- Refactor around
_run
andState::new()
.- Add
config_path
field toState
.
- Add
- symlink path and operations with it on Windows.
- Allow SHIFT key to enter characters after
i
,I
,c
,/
,:
andz
.
<C-h>
for Backspace functionality afteri
,I
,c
,/
,:
andz
.
- Added a filter to every user input to reject
Keyup
events. This is required on the windows platform.
- Convert tab to 4 spaces when using bat to preview text files.
bat
integration: Ifbat
installed, felix automatically adds syntax highlighting to the text preview.- Add
has_bat
field toState
. - Add
FxError::InvalidPath
to handle invalid unicode in file path.
- Add
- Change color of untracked/changed files or directories containing such files. Default color is Red(1). You can change it in the config file.
- Add
git2
.
- Add
- Explicitly ignore the key release events for Windows.
- Fix help text.
i{file name}<CR>
to create new file, andI{dir name}<CR>
to create new directory.- If zoxide is installed, whenever changing directory inside felix,
zoxide add
will be executed to add the directory or increment its rank in the zoxide database.- For this, State now has a new field
has_zoxide
, which is checked at startup.
- For this, State now has a new field
- config's
color
is now optional: By this, all config fields are optional.- Remove warning message when you launch felix without the config file.
- When opening file by default editor is failed, felix displays more accurate warning:
$EDITOR may not be set, or config file may be invalid.
.
- Remove
syntect
and syntax highlighting in the preview area. This will improve build and start-up times, and resolve the handling of wide chars such as CJK.
- Minimal supported rust version is now 1.67.1
- Upgrade dependencies.
- Update syntect version to v5.1.0. This fixes the handling of multibyte chars in the preview area.
- Allow file name
config.yml
in addition toconfig.yaml
for the configuration.
- Allow
<C-r>
in command line: Paste item name(s) in register. e.g.<C-r>"
pastes item name in unnamed register. - Allow wild card in command line: e.g.
:zip test *.md
works now. - Ability to
cd
{absolute/relative path}. - Ability to jump backward / forward (
<C-o>
,<C-i>
respectively)
- Ability to exit to LWD (last working directory): See Integrations for details.
- Show status bar and registers even if current directory does not contain any item.
- Add registers (unnamed, zero, numbered, named): Now you can view registers by
:reg
, and add items to registers by usual vim command (prefixed by"
). See the key manual for more details. - Refactor unpacking command:
e
unpacks / decompresses gz(Gzip), tar.gz, xz(lzma), tar.xz, zst(Zstandard), tar.zst, tar, and zip file format and formats based on it.
:z
- Usez
instead.
- Add extra config file path for macOS:
/Users/$USER/.config/felix/config.yaml
will be read after$HOME/Library/Application Support/felix/config.yaml
. - If config file is not found, or found one is broken, felix launches with the default configuration, without creating new one.
- If the current directory is read-only,
dd
,Vd
andp
is disabled in the first place. - Bump up MSRV to 1.65.
- Add
is_ro
field toState
.
- NetBSD install test. It often failed while setting up the VM, which had nothing with felix.
- Kitty-specific: Enable scrolling of the preview text by redrawing the screen only when needed (this also improves the perfomance entirely).
- Print
[RO]
on the headline if user does not have the write permission on the directory. This is available only on UNIX for now.
- Remove duplicated
-v | --version
option. This is because i) Since some users do not havecargo
installed, fetching latest version viacargo
doesn't work for many, and ii)-h | --help
option can already show the current version.
- Allow renaming even when item name contains non-ascii chars (i.e. wide chars).
- Key command with arguments is now supported: For example,
this configuration enables you to execute
exec: 'feh -.': [jpg, jpeg, png, gif, svg, hdr]
feh -. <item path>
byEnter | l | Right
, oro
. - Check for out-of-boundary of the cursor at the top of loop.
- Display when using in kitty: Correctly show the cursor and preview.
- Disable remove_and_yank in the trash dir.
- Clear selection in the select mode if something fails.
- Cursor move after deleting multiple items in select mode.
- Wide chars handling: Using unicode_width, now felix can properly split file name or previewed texts.
- Preview space height: When horizontally split, image preview could break the layout. Fixed this by adjusting the height.
chafa
's minimal supported version: >= v1.10.0- Add pacman installation.
- Disable commands with Ctrl or other modifiers unless explicitly implemented.
(For now,
Ctrl + r
to redo,Alt + j
andAlt + k
to scroll the preview text are implemented) This avoids for example the situation whereCtrl + d
unintentionally deletes an item. - Add
create_dir_all
toconfig_dir
anddata_local_dir
to avoid error. - Check if the argument is directory.
- Fix the compilation on NetBSD.
- IMPORTANT: Trash, log directory, and session file path changed.
- from v2.2.0, felix will use
dirs::data_local_dir()
to store the deleted items and log files, instead ofdirs::config_dir()
. - Due to this change, the path for linux will be
$XDG_DATA_HOME/felix/{Trash, log, .session}
, in most case/home/user/.local/share/felix/{Trash, log, .session}
. For Windows{FOLDERID_LocalAppData}\felix\{Trash, log, .session}
, typicallyC:\Users\user\AppData\Local\felix\{Trash, log, .session}
. No change for macOS users. - Note that config file path does not change on any OS!
- Please don't forget deleting old trash directory and log files if you don't want them anymore.
- from v2.2.0, felix will use
- Refactoring overall.
:trash
to go to the trash directory.
- Support NetBSD to open file in a new window.
- Properly remove broken symlink in Windows as well. Also, when deleting/puttiing a directory, broken symlink(s) in it won't cause any error and will be removed from the file system after deleting/putting.
- You can now open a file in a new window on Wayland environment too.
- Proper handling of wide characters: Even if an item or a info message includes some wide charatcters such as CJK, the layout won't break anymore.
- Fix cursor color after printing the text preview.
- Some refactoring around text-printing in the preview space.
- When you change the sort key, felix refresh the list more efficiently than ever by avoiding to read all the items.
- Item order(Name): Case-insensitive instead of sensitive.
- Feature to unpack archive/compressed file to the current directory. Supported
types:
tar.gz
(Gzip),tar.xz
(lzma),tar.zst
(Zstandard & tar),zst
(Zstandard),tar
, zip file format and formats based on it(zip
,docx
, ...). To unpack, presse
on the item.- The number of dependencies bumps up to around 150 due to this.
- Bug: In the select mode, the selected item was unintentionally canceled when going up/down.
- Delete pointer properly when removing items.
- Instead of panic, return error when
config_dir()
fails.
- Image file detection: Use magic bytes instead of checking the extension. This will enable to detect image more precisely.
- Fixed the bug in making config at the launch.
- Fixed the config file path on macOS.
- Migrated to yaml from toml: New config file will be created at the first
launch (In this process you should enter the default command name or choose to
use $EDITOR). No more need to keep
config.toml
. - Add the fallback when config file cannot be read: In such a case, you can use the default Config.
- HUGE refactoring overall.
- Horizontal split, in addition to the vertical split. To toggle, press
s
. - Syntax highlighting (if possible) in previewed texts. To turn on, state
syntax_hightlight = true
inconfig.toml
. you can also choose your theme, either from the default theme set or your favorite .tmtheme. - Enable scrolling in the preview space.
Alt + j / Up
goes down,Alt + k
goes up. Experimental and may have some bugs, and with a big text file the perf issue may arise. - Search by keyword. Similar to the filter mode, but this feature do not
manipulate the item list, just let users jump to the item that matches the
keyword, just like Vim's
/
.n
andN
after/
also works. - Show permissions on the footer (in unix only).
- Use
exists()
instead ofFile::open()
to check whether the item path is valid when moving between directories. This allows Windows users to use this app at least with the basic commands. - Avoid
unwrap()
/panic!
as possible and return the proper error.
- Removed the filter mode, which is replaced by the keyword search.
- Removed debug print in
make_config_if_not_exists
- Removed
use_full_width
anditem_name_length
inconfig.toml
. Will always use full width of the terminal.
- Add
std::panic::catch_unwind
to manually restore after a panic rewind. This allows the cursor to be restored and the screen cleared when this app panics.
- Fixed: Similar to v1.3.1, attempting to preview a symbolic link to a
nonexistent file caused a panic. Now the preview shows
(file not readable)
for such a link.
- Attempting to preview a symbolic link to a directory caused a panic. It has been fixed and the preview will now show the contents of the linked directory.
- Huge refactoring: Migrated to crossterm from termion due to the
maintainability and future-support for Windows. New module
term.rs
contains (almost) all of the terminal API, so that other modules will not get effected by the future backend change.- Alongside, some changes are added to show the file path properly in Windows.
- With crossterm, opening a file in e.g. Vim, it feels as if this app
"freezes". This behavior is not what I want, so from v1.3.0,
open_file_in_new_window
can work only if [exec] is set in config file, and the extension of the item matches the key.
default
key in the config file becomeOption
, so that users can select$EDITOR
without explicitly setting it up. The initial process of asking users to select the default command has also been fixed accordingly.
- After zoxide jump, turn off the filter mode.
- Many typos fixed.
- New error:
OpenNewWindow
- New GitHub actions: Add windows-install
- Huge refactoring: Instead of
thiserror
, use custom error type to make it easier to handle. - Bump up chrono version to 0.4.22, clarifing the feature to use.
- Avoid extra heap allocation by using write! instead of push_str/format!.
- Copied item will be renamed with the suffix "_{count}" such as "test_1.txt", instead of "test_copied.txt".
- Choose
None
for directory extension.
- Use full width of the terminal when
use_full_width
in config.toml is not set. - Use
cursor::Goto
instead ofcursor::Left
to fix the layout in macOS Terminal.app. - Refactor functions around the layout.
- In the filter mode and shell mode, when you don't have any input,
backspace
now means to return to the normal mode. - Also, when you press
Esc
during the filter mode, the cursor position is now restored.
- Use
chafa
instead oflibsixel
&viuer
to preview image files. This greatly improves the performance and code maintainability, and as a consequence, the number of dependencies is reduced (137 -> 53). - With
chafa
, the hi-res image preview is supported in kitty or terminals that support sixel. - Files larger than 1GB are no longer previewed in order to improve the performance.
- Remove profile.release to support older version of Rust.
- Huge refactoring (layout.rs created).
content-inspector
to exclude binary files to be previewed.
- Add thread sleep time after state.open_file(). This is necessary because, with tiling window managers, the window resizing is sometimes slow and felix reloads the layout so quickly that the display may become broken. By the sleep (50ms for now and I think it's not easy to recognize this sleep), this will be avoided.
- Cursor move when using G in select mode.
- Remove unnecessary loops in
dd
,ZZ
.
- Enable resizing window.
- Print message about the config file when created.
- Move cursor and put properly in an empty directory.
- Formatting of the contents tree.
- Input right before the pattern matching.
z <keyword>
works without prefix:
(jump to a directory that matches the keyword).- Refactor: Use redraw() and reload() instead of multiple methods.
- Better config: If config file not found, now you can interactively set the default command.
- In the filter mode, press
h
orLeft
to return to the normal mode and reload the current directory's contents.
- Hi-res image preview is enabled if i) your terminal supports sixel, and ii)
you've preinstalled
libsixel
. If not, images are printed by blocks as before.
- Some refactoring.
-l
option creates a log file in$XDG_CONFIG_HOME/felix/log
. Information such as put, delete, rename, emptying the trash directory, etc. will be recorded.- Add message when there are no operations left to undo/redo.
- Simplify the info line(below the current directory information).
- Make rename information more understandable("New name: " instead of "⇒").
- Use struct
Operation
to express the manipulation within the app (put/delete/rename) and implement some methods. - Refactor overall.
- Fix put/delete process information.
- [Experimental] Image preview on the right half of the terminal (press
v
). This feature usesviuer
, and high resolution preview, which can be used in kitty or terminals that support sixel, is disabled due to the clearance issues. - create
viuer
andimage
to preview the image.
- Fix text preview bug around new line that occurs when it has tab character.
- file_ext in ItemInfo is now always lowercased to speed up matching with the extension map.
- Disable renaming non-ascii items: Wide characters such as CJK or characters that do not match our intuition caused panic, so before editing, item name is now checked if it contains only ascii characters.
- Version check option now uses -v | --version, instead of -c | --check.
- Refactor: Remove magic number and use variable with proper name in the filter and shell mode.
- Restore debug print, which works in debug mode(RUST_LOG has some value).
- Use
simplelog
instead ofenv_logger
to create the log file.
- Fix bug that after
:h
, cursor move can cause unexpected panic.
- Text preview always wrapped (yet static).
- CHANGELOG.md
- New command:
v
to toggle whether to show i) part of the content for text file (no wrapping and static), or ii) contents tree for directory. Note that this preview feature may not work effectively with small terminal. - trying to make felix user guide (just to show how to use each commands) by mdbook
- felix now works with smaller terminal size (4 rows and 4 columns is the minimum). If column is fewer than 28, modified time is not displayed.
- Huge refactoring overall.
- use
struct colors
forstate.layout.colors
is_hidden
moved toItemInfo
's field, make it easier to toggle show/hidden items- in
open_files
method, useItemInfo
's existing field to get extension Iteminfo.ext
toOption<String>
- split
move_cursor
method to multiple methods
- use
- Inverted color on the last row (to show distinctively)
- Show help text correctly in small window size (scrollable with
j
|k
|Up
|Down
) - 'P' to print manipulation lists (put/delete/rename) is changed to work only when RUST_LOG has a value.
- undo/redo order when new operations occurs. Now manipulation list will be "branched", which means undone operations will be discarded when new manipulation is pushed, so that redo cannot lead to an error.
- New commands: 'u' to undo and 'Ctrl + r' to redo. Targets of these new commands are put/delete/rename.
- Clarified the type of error during initial setup (now explicitly use panic).
- Added minimum row size.
- Better cursor move when terminal size is extremely small (row size < 8).
- Terminal size changes are now automatically detected and the layout is fixed.
- felix -c shows the current version and checks if that is up to date.
- New configuration: You can now use the full width of terminal by setting
use_full_width
to true (false by default). I hope this will lead to a better user experience. For those who use <=0.6.0, felix can work without replacing config.toml becauseuse_full_width
is an option.
- ':z ' lets you jump to a directory that matches the keyword. (zoxide required)
- :cd | :z => Go to home directory.
- Fix bug when reading .git/HEAD to show branch name
- New option for config: Now you can set the max length of the item name to be
displayed (if the terminal size is not enough, it will be automatically
adjusted). It's optional, so you can use your config file in < v.0.5.1 as is.
See
config.toml
for details.
- Fix message when deleting multiple items
- Remove duplicated call for env variable
- Follow symlink if it leads to a directory
- Implement memoization of move when going to symlink dir
- Print help by
fx -h
|fx --help
- Open files whether its extension in lowercase or uppercase
- cursor movement when deleting multiple items
- better indicator when copying/deleting
- show total time to delete/copy items
- show process to delete/copy items
- enable to show/hide hidden items
- felix keeps the state of show_hidden(whether to show hidden items) and sort_by(by name or by modified time): The change remains after exit.
- Restore cursor state after exit
- cursor movement when going to parent directory
- cursor memoization using PathBuf instead of String
- Show item information on the last line (index, file extension, file size)
- Add memoization of cursor position in previous directory
- Adjust cursor movement when going to different child directory
- display of item when selecting
- cursor movement after filter mode
- edition 2018 -> 2021
- the cursor adjustment when moving to the parent directory
- space between file name and modified time
- Enable to delete broken symlink
- now felix can work in small terminals (21 columns or more is sufficient)
- Remove Ctrl + c for copying item name to the clipboard (in order to reduce build dependency)
- Change color of selected items to make them more visible
- show current branch if .git exists
- add message about processing when delete and put
- rename of multiple items when put now works correctly
- show error message when delete faiils
- cursor move when empty the trash dir
- cursor move when deleting the last item
- error handling
- in shell mode (when command does not work)
- when cannot open file
- Now you can install felix without +nightly.
- README.md (executable name)
- Rename app! (fm -> fx)
:h
to show help:empty
to empty the trash directory
- Show info when yank / delete / put / copy item name
:e
to reload the current directory
- fast copy of massive files
- select mode, where you can delete and yank multiple items
- key changes (g -> gg, D -> dd)
- remove m (because you can mkdir in shell mode)
- remove warning when delete
- shell mode.
- Copy file name to clipboard.
- Fix bug when delete item in filtered list.
- Command argument enabled: fm shows items in the path (both relative and absolute can be used).
H
to show help.
t
to change the sort order (file name <-> modified time)
- Add
FileType::Symlink
to change color of symlink item (color configurable inconfig.toml
).