Author here. It has been some time since I last posted this here. I would like to get feedback especially from non-users. Do not hesitate to be rude though I may try to give answers :)
I am aware that lf
may still be missing some important features. If you are a ranger
user, feel free to say what you are missing that holds you to switch to lf
. It may help me prioritize what to work on in the future.
Lastly, if you do not want to install to give it a try, there are some screencasts in the tutorial.
Author here. It has been some time since I last posted this here. I would like to get feedback especially from non-users. Do not hesitate to be rude though I may try to give answers :)
I am aware that lf
may still be missing some important features. If you are a ranger
user, feel free to say what you are missing that holds you to switch to lf
. It may help me prioritize what to work on in the future.
Lastly, if you do not want to install to give it a try, there are some screencasts in the tutorial.
Nice work!
Something that keeps me attached to lf
(https://github.com/gokcehan/lf) is its client/server architecture which basically lets you open 2 instances and yank/paste files between them.
Other managers usually integrate some sort of “multiple views” functionality to achieve this, but lf
is really elegant in this sense, because it doesn’t try doing what a window manager/multiplexer does best.
But at the same time I’d love to use a simpler, non-curses FM that works similar to fzf, like the one you got here. Do you have any plans on doing a client/server architecture?
Good point. Some of the improvements of lf
such as performance improvements, memory use and short startup times may not be possible in ranger
since it is tied to python
, so I felt like a change to a native language was needed. Also, I felt like there are too many features in ranger
that I don't use and customization is more complicated than it should be, so I took this opportunity to simplify the design as I see fit. For example, there are no window management (i.e. tabs and/or panes) implemented in lf
since these are better handled in external tools (e.g. window managers or terminal multiplexers). Instead lf
implements a server/client architecture to share file selections so you can use it in multiple terminals at the same time. I guess server/client architecture may be added to ranger
as well, though I'm not sure if they would be interested in this. I see ranger
and lf
have slightly different visions at some points. There are more ranger
comparison in faq wiki.
Also it is always fun to start something from scratch :)
By default lf
is more similar to ranger
which uses miller columns to display the directory tree. However, since lf
uses a server/client architecture, you can configure to use it as a dual pane file manager with screen
or tmux
. This should give a similar feeling to these file managers though I was never a full time user of these programs. Feel free to tell if there is a feature you are missing. You can see tips wiki for the dual pane configuration.
Author here. It has been some time since I last posted this here. I would like to get feedback especially from non-users. Do not hesitate to be rude though I may try to give answers :)
I am aware that lf
may still be missing some important features. If you are a ranger
user, feel free to say what you are missing that holds you to switch to lf
. It may help me prioritize what to work on in the future.
Lastly, if you do not want to install to give it a try, there are some screencasts in the tutorial.
It seems that your comment contains 1 or more links that are hard to tap for mobile users. I will extend those so they're easier for our sausage fingers to click!
Here is link number 1 - Previous text "lf"
^Please ^PM ^/u/eganwall ^with ^issues ^or ^feedback! ^| ^Delete
> but if I would I would use vifm or nnn
...Or <code>lf</code>, which is a single binary, blazingly fast, configured with shell commands, highly customizable, easily integrates with Vim.
Not sure if it fits the criteria you're looking for. I still use the ranger file manager because it's more complete and works better out of the box. There's an alternative called lf. Both are console apps, but the difference in speed is really noticeable.
Maybe it's because ranger does a lot more, but even simple navigation in folders is faster in lf.
Not saying i prefer one language over another because i'm not even a developer. It's just something that i noticed recently.
Yes, I'm looking to be using Kitty. I believe that WezTerm does pretty much everything as well. Kitty can display images with kitty +kitten icat image.jpg
. But that's a little bit different to allowing image previews in a file manager. However, lf with image previews seems to be very capable. Image previews work fine in urxvt for example.
You can have a look at LF, according to its GitHub page it is at least partially supported on windows. I have not used it myself though.
Other than that, do you know of ranger? It is not supported for windows but it seems to be more popular and powerful than nnn, so it may help you in searching for windows alternatives (if you get what I mean)
Have tried lf? It's written in Go and heavily inspired by ranger. I've switched over and don't regret it (make sure to copy the default config file in your home directory config folder)
I am currently doing the same thing. I decided in favor of C instead of Rust because from my understanding, with Rust, one needs to have decent idea about the design of the program first. I embedded luajit to use it as configuration language and to extend the functionality with commands (and maybe more). It also makes prototyping very easy, for example all key handling is still being done in lua.
Some more ideas:
I took (some might say stole) many inspirations from Lf. Even though it is written in Go I think it is very easy to understand.
https://github.com/gokcehan/lf has everything you want i think.
Other than that you can easily do everything you want in just vanilla PowerShell, I use the classic combination of default Explorer and PowerShell for file management and honestly it's great and comprehensive. Everything you're asking for is already in the OS.
It's anecdotal. But, if we compare two similar TUIs: <code>ranger</code> written in Python and <code>lf</code> written in Go, loading a directory with thousands of files (e.g. node_modules
) in ranger
, as opposed to lf
, the former starts dragging its feet and lag whenever you do something CPU intensive. The slow startup issue is not to be downplayed, too. e.g. youtube-dl
.
pretty sure the file manager is lf (stands for list files). There are plugins for ranger to show icons but it's enabled with a custom font easily in lf (assuming you set this in your terminal). lf is also faster than ranger since it's written in GO rather than python.
Why guys you never read before getting obsessed with "ideas"? E.g., https://github.com/gokcehan/lf/issues/134, etc
To put it simply, previews should be managed by external tools (and there are plenty of those) instead of over bloating the core code. Because make each program do one thing well.
Anyway, if kids are interested in bells and whistles that much, there's also ranger clone written in Rust (meaning it's also fast), which seems to support previews: https://github.com/rabite0/hunter
I have the errors thing in the TODO :) What is the idiomatic way of handling a fatal error though (like ROM missing in this case)?
Also where should the source files go in that case? /cmd/appname?
It's weird because in practice a lot of "big" Go projects don't bother with that, e.g. lf: https://github.com/gokcehan/lf
If you are not fun of bash soup you can try LF. It's ranger-like but you can create new commands with your preferred shell. It works in server-client model so you can for example copy files between instances. Installation is easy - it's single statically linked executable.
Files are opened with xdg-open
on linux by default but of course you can change it. There is an example in lfrc.example which is basically what you mention that is open text files in the editor and leave the rest to xdg-open
. More information in the doc under 'Opening Files'.
I have never tried this on android. Does is crash with an error? Is there anything related to the crash in the log files (i.e. /tmp/lf.${USER}.1000.log
or /tmp/lf.${USER}.server.log
). Feel free to open an issue about this and I may take a look at it when I have some time.
lf -doc
is the man page for now, which also works in windows. It is bundled with the binary for easier installation. You can also read it online here. I have this mapping in my configuration:
cmd doc $lf -doc | less
You can also bind this to a key:
map ? $lf -doc | less
We will probably add some defaults for these in the future (tracked here).
In general, I think some distributions disallows programs without man pages so we may also add a man page at some point, which should either direct users to lf -doc
or duplicate that information in man format.
Well, I don't have a mac for homebrew but if anyone wants to do this, I would try my best to help and we can add it to packages wiki afterwards. It shouldn't be difficult to package since it is only a single binary.
check out <code>lf</code> if you like ranger.
personally i like lf better - seems a bit more sane than ranger (opening/previewing files is plain jane compared to rifle) and a bit lighter, not that ranger is the heaviest thing.... also, server/client style.
> Okay, got it regarding read, read-shell and read-shell-wait, this all makes sense. Since the server uses unix socket I suppose it does not work on windows, is that correct?
Yes we still need to write some fallback code for windows. There is a meta issue about the problems for windows here: https://github.com/gokcehan/lf/issues/12
> Well right now I cannot select a few files and then do $ mpv $fs. What I would like is to to just have each selected file passed as separate arguments to the program specified, without having to create a (even simple) script to split them on :.
You can do so by using $ IFS=':'; mpv $fs
and if you set the ifs
option with set ifs ':'
you can simply do $ mpv $fs
.
> This, and also the fact than the preview of a directory symlink is not correct, it just shows the content of the previous directory I had selected before.
Oh, it's a bug. I will try to take care of it as soon as possible, thanks.