6 ms·
Fast nnn file browser v1.6 released
- kees99 9y agoThere is this (much older) piece of software that does much of what nnn/noice do, and more: https://en.wikipedia.org/wiki/Midnight_Commander https://en.wikipedia.org/wiki/Midnight_Commander
- apjana 9y agoAuthor of nnn here. I have intentionally kept nnn feature -restricted. The idea is to have the stuff one really needs. And the main goal of nnn is seamless desktop environment integration. Also, please note that the learning curve for the additional features is quite high. E.g. to batch rename, one would rather use Thunar's integrated simple visual batch file rename mode instead. I believe once the number of shortcuts cross a certain limit, regular users normally abandon the utility out of their comfort zone.
- skrause 9y ago> The idea is to have the stuff one really needs. One of my main uses for a file browser is to quickly go through a list of files and delete some of them when I clean up a directory. And nnn doesn't even support deletion... Just for listing files "ls" is still usually the fastest way. Operations on the files is what's cumbersome, e.g. when I try to hit the right files for "rm" with tab completion. When nnn can't help with that its use case is very limited to me.
- apjana 9y agoUnderstood. I do agree a single software can't fit all use cases. nnn avoids destructive operations like delete. However, one can always spawn a terminal in the current directory using `!` and delete the files from the shell. > Just for listing files "ls" is still usually the fastest way Not really. `ls` a dir with 20K files and see the difference with nnn. ;) And then, nnn is more about navigation. Try shortcuts like `-`, `&`, `~` (tilde), `....` and of course the `navigate-as-you-type` mode. Looking for a specific file? Try filter mode with search-as-you-type.
- digi_owl 9y agoIndeed. When i reach for MC or the like, it is more often than not to deal with gnarly file deletions or transfers. This because they allow me to pick the individual files i want to deal with without potentially screwing up wildcards or such.
- apjana 9y agoIn continuation of my earlier comment, nnn has a copy file path to clipboard action (https://github.com/jarun/nnn#file-copy-move-delete https://github.com/jarun/nnn#file-copy-move-delete). I believe we can extend it to append multiple filenames which can then be deleted from the spawned shell. Ideas are welcome! nnn is under active development. ;)
- janekm 9y agoThey claim higher performance for nnn than mc. Not sure it’s really needed in most cases though... but nnn could come in handy in edge cases of really large directories, say. BTW their docs say that they avoid div instructions in favour of floating point multiply. Is this still faster on recent CPUs?
- apjana 9y agoI can't be very specific without citing examples. The following APIs may explain what I mean: https://github.com/jarun/nnn/blob/master/nnn.c#L358 https://github.com/jarun/nnn/blob/master/nnn.c#L358 https://github.com/jarun/nnn/blob/master/nnn.c#L1267 https://github.com/jarun/nnn/blob/master/nnn.c#L1267 https://github.com/jarun/nnn/blob/master/nnn.c#L1617 https://github.com/jarun/nnn/blob/master/nnn.c#L1617 Most of the functions in nnn are targeted to be high-performance like these.
- fredericoqq 9y agoHmm. I'm not convinced any of your routines are more "high-performance" than the standard-library, have you benchmarked them? For example, I don't think your getorder() could possibly be faster than __builtin_ctz(), or even a wrapper around ffs(). You also hardcoded the size of size_t to 32 bits, so it's not more portable than those options. Edit: I checked, ffs is a tiny branch-free routine in glibc: (gdb) disassemble ffs Dump of assembler code for function ffsl: 0x0007e9d0 <+0>: mov $0xffffffff,%edx 0x0007e9d5 <+5>: bsf 0x4(%esp),%eax 0x0007e9da <+10>: cmove %edx,%eax 0x0007e9dd <+13>: add $0x1,%eax 0x0007e9e0 <+16>: ret End of assembler dump.
- apjana 9y ago> __builtin_ctz avoided it to stay out of compiler-specific stuff. we do have plans to replace getorder() with ffsl(). Perhaps I would be more accurate if I say nnn is faster by design. Movement of data around memory is minimal. No redundant bytes are allocated. We use quicksort and optimize further by pushing non-matches down right away so they never appear in a filter comparison again. And of course, using non-lib custom functions enable using static linkage, having a controlled binary size and removing redundant checks/processing because the limits and borderline cases are known.
- eerikkivistik 9y agoGoing to give it a try now, been missing something like this on OS X. Any good alternatives I should try as well?
- mherrmann 9y agoFor a graphical alternative, you might be interested in (my) https://fman.io https://fman.io
- eerikkivistik 9y agoI remember Total Commander from Windows back in the day, similar feature set to that?
- mherrmann 9y agoYup
- eerikkivistik 9y agoDownloaded it and using it now. Thanks!
- apjana 9y agoJust awesome!
- edanm 9y agoAwesome work! Total Commander is the one software that I've never found a good Mac replacement for, and it causes me no end of sadness. Your approach looks very promising, if still early days. Emailing you further specific feedback, hope you keep working on this and continue on your current path.
- apjana 9y agoThank you!
- fareesh 9y agoLooks great. It looks like just what I have always wanted on Ubuntu. Giving it a try!
- apjana 9y agoThanks for the compliment! Merry Christmas!
- li4ick 9y ago"The missing terminal file browser for X"??? What about ranger?
- apjana 9y agoprobably lost in the forest chased by a python... ;)
- alvil 9y agoIt looks like it is bash dependent
- jdowner 9y agoWhy do you believe that? It has a section on shell completion for different shells so I don't think that is the intention, https://github.com/jarun/nnn#shell-completion https://github.com/jarun/nnn#shell-completion
- apjana 9y agoThanks for explaining.
- alvil 9y agohttps://github.com/jarun/nnn/blob/master/nlay https://github.com/jarun/nnn/blob/master/nlay # bash 4.0 way to switch to lowercase ext="${ext,,}"
- apjana 9y agoAhh OK! nlay is not an essential part of nnn anymore. It's only invoked if you use the locker or invoke desktop search utility. We retained those two to keep the utilities customizable. Are you using any of these two? Also, `nlay` is editable and you can customize it anytime.
- Jare 9y agoNo Windows version, I'll keep using (shameless plug) my minimal but useful https://github.com/TheJare/jm https://github.com/TheJare/jm
- apjana 9y agoSorry about that. I don't have Windows myself and maintaining a sizable C utility in both *nix and Windows is tricky.
- Jare 9y agoI know, sorry I was so terse, I didn't mean to sound rude. Even my little thing has given me a few headaches in OSX or in Windows' Linux Subsystem (where I think it still does not work, no SIGIO/O_ASYNC), so I feel your pain.
- apjana 9y agoNo problem! You can use nnn in the Linux subsystem on Win 10. Some of the users reported it works well.
- digi_owl 9y agoI guess trying the Ubuntu package via WSL could be an option.
- orf 9y agoNice! I gave it a go on MacOS, but managed to segfault it when pressing 'D' on a directory. Can't reproduce :( Also after quitting 'ls' output is pretty messed up. Seems good overall though.
- apjana 9y ago> managed to segfault it when pressing 'D' on a directory Very much possible. Though we have tested as much as possible, we are a small team and the latest iteration has undergone substantial changes. I couldn't reproduce it so far. But please raise an issue if you have some details. Something special about the dir name maybe? > quitting 'ls' output is pretty messed up nnn does not write to the stderr/stdout once it is in curses mode. Can you share some more details on the steps? It would be great if you can raise defects on GitHub. nnn is under active development.
- Numberwang 9y agoThe documentation is very poor. Avoid.
- apjana 9y agoWe have up-to-date comprehensive README and man page with examples. If that's not sufficient, please help us make it better. What's missing?
- Numberwang 9y agoThere is NO intro or general overview in the wiki for exemple. Id love to know what this is befors I try and install it.
- ciupicri 9y agoHave you thought of using COPR[1] to provide builds for Fedora and RHEL? I'm asking because I noticed you provide a RPM only for Fedora 26; Fedora 27 is missing. [1]: https://copr.fedorainfracloud.org https://copr.fedorainfracloud.org
- apjana 9y agoWe use PackageCore which integrates well with Travis CI. Fedora 27 is not added to PackageCore yet. Does COPR integrate with Travis?
- rshm 9y agoFor a moment i was expecting Neural Network (NN) from the title. Along the line that NN was used to pre-load directory structures, NN in search results ordering etc.
- hendry 9y agoPrefer ncdu where you can delete stuff.
- apjana 9y agoThe decision to avoid potentially destructive operations was a conscious one.
- floatboth 9y agoncdu is not a general purpose file browser, it's specifically for deleting large stuff
- apjana 9y agoIf we are speaking of ncdu (https://dev.yorhel.nl/ncdu https://dev.yorhel.nl/ncdu) nnn has a much faster disk usage analyzer mode. And it's dynamic while ncdu is static (by default at least). nnn has a path copier which can copy the file names you would like to delete to clipboard. You can a shell in the same directory using `!` and delete the files.