leo-arch / clifm

The shell-like, command line terminal file manager: simple, fast, extensible, and lightweight as hell.
https://github.com/leo-arch/clifm/wiki
GNU General Public License v2.0
1.35k stars 39 forks source link

Easier onboarding #194

Open Slackadays opened 1 year ago

Slackadays commented 1 year ago

Is your feature request related to a problem? Please describe. I want to use clifm, but it's confusing for me to get started. I don't know what's happening in the demo other than only 7 keystrokes being pressed. Also, I don't know what specifically clifm can do for me.

Describe the solution you'd like I'd like the readme condensed and optimized to speed up :rocket: the onboarding process so that I and other users can get started with clifm easier. I don't know what the most important commands are so this would be a great addition.

Describe alternatives you've considered There could be a simple tutorial section in the readme.

Additional context I noticed that the readme is really focused on clifm's features and how it's all CLI. However, I don't know why this matters to me because CLIs are already great. Personally, I realized the same with clipboard and fixed it all up after watching this valuable video: https://www.ted.com/talks/simon_sinek_how_great_leaders_inspire_action/c

leo-arch commented 1 year ago

Hi @Slackadays. At the end of the README you can find a Getting started section, which, among other tips, points to the basic usage-examples page.

I'm not sure that's enough, or clear and simple enough: tips for making it better/simpler are welcome, of course.

Btw, I'll take a look at the video as soon as I can. Thanks for pointing it out!

Slackadays commented 1 year ago

@leo-arch Sorry for the really late response, but here's my list of tips for making it better/simpler:

leo-arch commented 1 year ago

Hey @Slackadays, no problem!

As to the README current arrangement, it's just a logical ordering (programming minds, you know), but maybe not the most psychologically effective ordering, that's true. I'll definitely bear your suggestions in mind. Thanks!

Slackadays commented 1 year ago

@leo-arch Looks like your star count is already increasing faster, so keep up this good work!

Slackadays commented 1 year ago

Another suggestion: Relegate the "privacy" claims to being a small detail somewhere in the documentation. Putting it front-and-center almost feels to me like going up to someone and saying, "Hi! I'm not a murderer." If you're making this claim for a CLI app, what else might be happening?

leo-arch commented 1 year ago

Hi @Slackadays. Yes, maybe having a privacy badge in the front page was a bit too much. I've removed it. Still in the features section though: these days, where analytics are integral part of lots of software's agenda, I feel it's important to let the user know we're not collecting data at all. Due to many reasons, I've become a security/privacy paranoid, and I know I'm not the only one.

Thanks for the suggestion!

Slackadays commented 1 year ago

Here's another suggestion I just remembered: See if the total number of assets in the root directory could be 10 or fewer. I don't know why GitHub doesn't try to keep them all tidy, but personally, I find it a chore when I have to scroll down a lot past the files list to read the readme. One great example of this done right is Howdy: https://github.com/boltgolt/howdy It has only 6. Clipboard has 8 which is about the bare minimum needed to not have to create a build directory manually.

leo-arch commented 1 year ago

Now that you mention it, there are a few files in the root directory that could be just removed. However, I'm not sure I'll be able to cut it down below 12 files.

leo-arch commented 1 year ago

Yeah, 12 files (4 removed). Not bad.

Slackadays commented 1 year ago

Nice!

Slackadays commented 1 year ago

This is kind of huge suggestion, but an important one. I looked through the code and it's chock-full of one-letter variables and funky tricks that I believe might be preventing more PRs from flowing in. If possible, would purging all one-letter variables be a viable option? Maybe something more descriptive unless it's a classic i or j for loops.

leo-arch commented 1 year ago

Hi @Slackadays. I'm fully aware that there's a lot of room for improvement.

As to one-letter-variables, I try to use them only in really short blocks or functions, mostly when we don't lose visual track of the variable. However, I'll take a look at it and bear you suggestion in mind for the future.

As to "funky tricks", what do you mean exactly? Can you please refer to some specific piece of code?

Slackadays commented 1 year ago

I think maybe "tricks" might not have been the best word, but maybe "dense." It's lines like this one https://github.com/leo-arch/clifm/blob/8f28aaab101797f5e56fe0431845309710610047/src/readline.c#L3193 which have a lot of dense logic combined with those one-letter variables and pointer symbols which might make clifm look unappealing to those who want to help contribute.

I know this might seem nebulous, but I just think more descriptive code will help others feel more attracted to the codebase.

leo-arch commented 1 year ago

Well, maybe you're right. I just tend to avoid calls to strcmp(3) when it is possible to replace it by a few byte comparisons (like in this case) for performance reasons. Secondly, I prefer (and this is just a personal preference) pointer notation over array notation, though this latter might be more readable.

Maybe you have in mind something along these lines:

if (tags_n > 0 && strncmp(text, "t:", 2) == 0 && text[2])

Isn't it?

Slackadays commented 1 year ago

@leo-arch That looks a whole lot better already! If you're using that kind of pattern a lot, then it might actually be worth it to make a wrapper function that looks good to call and has the optimized logic underneath so you can have your cake and eat it too. I'm more used to the C++ versions where you can just use == and substr() but this C version is already a huge improvement over before.

leo-arch commented 1 year ago

I still prefer to avoid calling a function when it is not necessary, So, maybe just removing the pointer notation makes this line look a bit better:

if (tags_n > 0 && text[0] == 't' && text[1] == ':' && text[2])

Be it as it may, I do know what you mean: some lines (and even whole functions) tend to be dense and cryptic (far worse than the one you quoted). Agreed. Refactoring code is something I've been doing since the last year at least: but, yes, there's still a lot of work to be done.

leo-arch commented 1 year ago

As always, thanks for your suggestions @Slackadays!

Slackadays commented 1 year ago

When do you think we should close this? I think this might always be an ongoing "issue" but we've already done a lot so far.

leo-arch commented 1 year ago

Hey @Slackadays! Well, technically this is a never-ending issue. So yes, feel free to close it. You can reopen it any time, of course.

Slackadays commented 1 year ago

@leo-arch This sounds grrreat! However, before doing so, here's a couple more suggestions to help the readme attract even more new users:

I just want to help clifm be as great as it can to as many people as possible. :)

leo-arch commented 1 year ago

What about now? Shorter, leaner, straight to the point.

Slackadays commented 1 year ago

It looks fantastic! I actually forgot you removed the TOC when I read the latest version because the other content is now too well made to need it. :rocket:

leo-arch commented 1 year ago

Thanks for your suggestions Slack, as always!

Slackadays commented 1 year ago

@leo-arch Something else you could do is to add good-first-issue as a topic to the repo, as that'll reveal clifm to anybody looking at https://github.com/topics/good-first-issue to find projects to contribute to. However, I've heard reports of this attracting low-quality submissions, so I'm unsure how this might turn out.

leo-arch commented 1 year ago

I'll take a look at this good-first-issue thing Slack. Thanks for the suggestion.

Slackadays commented 1 year ago

Another suggestion I have that might get clifm more attention is to make the releases more frequent. Right now, it looks like each release has a laundry list of additions/bugfixes, and waiting until you have another laundry list is leaving potential eyes looking at them on the table. If you keep going at the same rate of development then it seems like a new release every couple weeks might be viable. One piece of advice regarding this from the author of SumatraPDF is to make a new release as soon as you make a user-facing improvement. :)

leo-arch commented 1 year ago

Hey Slack, thanks for the advice! Yes, currently I have no fixed rules for when to make a new release: It's not that I'm waiting to have an enough long list of fixes/improvements; I just wait to feel that new features are mature, that they won't break anything (but it's just a feeling, you know; I test everything as much as I can, considering also bug reports, but you can never bu sure). So, I'll consider the user-facing-improvement rule.

Another thing I was thinking is about pre-releases: I bump the revision version about 2-3 days. Maybe I should make a pre-release for each of these versions. However, this approach won't face the potential-eyes-looking-at-bugs issue, for pre-releases, as far as I know, aren't meant to be packaged.

I'll keep thinking about it.

Slackadays commented 1 year ago

Here's another idea for more users: make a website. GitHub Pages works great with the Zola static site generator and that's what we used for CB here: https://getclipboard.app/

In that case, we also picked out a nice looking template and filled in the relevant info. Right now, it looks like clifm just has the Wiki as the website which isn't that good for discoverability. However, a real full-fat site would be exactly as good as you want it to be since you're not constrained to markdown or the GH platform. The result will be a bigger "presence" since you now have your own place to call home.

leo-arch commented 1 year ago

Hey, looks cool! I've been using Github pages for a while, but the generated site is currently broken. I'll take a look at Zola as soon as I have some time to work on it. Thanks Slack!