lsd icon indicating copy to clipboard operation
lsd copied to clipboard

Windows tilde expansion and multiple config / theme paths

Open ofersadan85 opened this issue 1 year ago • 13 comments

This PR adds some features that I was really missing in lsd:

  • Tilde (~) expansion on Windows - This is already supported when seaching for theme files, and is also supported on windows for many other cli apps. Fixes #903
  • Multiple config paths: accept both config.yml and config.yaml as they are both very common (.yml especially on Windows, as most Windows users are used to 3 letter extensions).
  • Multiple config paths (continued) - Support the config file in both $XDG_CONFIG_HOME/lsd or $HOME/.config/lsd on non-Windows platforms, and both %APPDATA%\lsd or %USERPROFILE%\.config\lsd on Windows. This is important for consistency with normal dotfiles for other apps. Fixes #758
  • Remove dependancy on xdg as this was unneeded. dirs already uses xdg internally, and using only dir is more consistent and reliable for all systems.
  • Added support to search theme files in all the same paths that config files are searched for.

TODO

  • [x] Use cargo fmt
  • [x] Add necessary tests - Not needed, these are really simple changes. All current tests pass
  • [x] Update default config/theme in README (if applicable) - Not needed
  • [x] Update man page at lsd/doc/lsd.md (if applicable) - not needed. Updated the README.md file only

ofersadan85 avatar Jan 02 '24 11:01 ofersadan85

Any reason to not support XDG env on Windows other than just "consistency" (not followed by bunch of apps like git)?

Destroy666x avatar Jan 03 '24 17:01 Destroy666x

There would still need to be a fallback for when xdg environment variables are not set. In that case it makes sense for $XDG_CONFIG_HOME to default to $APPDATA.

ChrisDenton avatar Jan 03 '24 17:01 ChrisDenton

Any reason to not support XDG env on Windows other than just "consistency" (not followed by bunch of apps like git)?

The 'xdg' package used before this PR did not support this env variable either way, since it strictly didn't support Windows at all. Removing it didn't change that.

We can now support multiple paths anyway with this PR so more can be added if that's required

ofersadan85 avatar Jan 03 '24 21:01 ofersadan85

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: ofersadan85

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment Approvers can cancel approval by writing /approve cancel in a comment

muniu-bot[bot] avatar Jan 04 '24 14:01 muniu-bot[bot]

Added a small fix for this compiler warning, as this was also relevant to Windows only:

warning: `&` without an explicit lifetime name cannot be used here
  --> src\meta\filetype.rs:19:34
   |
19 |     const EXECUTABLE_EXTENSIONS: &[&'static str] = &["exe", "msi", "bat", "ps1"];
   |                                  ^
   |
   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
   = note: for more information, see issue #115010 <https://github.com/rust-lang/rust/issues/115010>
   = note: `#[warn(elided_lifetimes_in_associated_constant)]` on by default
help: use the `'static` lifetime
   |
19 |     const EXECUTABLE_EXTENSIONS: &'static [&'static str] = &["exe", "msi", "bat", "ps1"];
   |                                   +++++++

ofersadan85 avatar Jan 04 '24 14:01 ofersadan85

Adding XDG support cross-platform for this would be fairly simple.

For all directories in the array [ $XDG_CONFIG_HOME, ...$XDG_CONFIG_DIRS, $HOME/.config, $APPDATA, $LOCALAPPDATA, $USERPROFILE/.config ], if the directory exists and 'lsd' is accessible within it, look for the config file within that 'lsd' subdirectory. If the config file is not found, proceed to the next directory.

The only platform specific issue would likely be the split of the $XDG_CONFIG_DIRS directory list, which is separated by ':' on POSIX and ';' on WinOS.

The described method works as the XDG spec expects and falls back to reasonable defaults on all platforms (including WinOS).

Less platform-specific code which should be a win-win for both devs and users.

rivy avatar Jan 05 '24 17:01 rivy

Adding XDG support cross-platform for this would be fairly simple.

For all directories in the array [ $XDG_CONFIG_HOME, ...$XDG_CONFIG_DIRS, $HOME/.config, $APPDATA, $LOCALAPPDATA, $USERPROFILE/.config ], if the directory exists and 'lsd' is accessible within it, look for the config file within that 'lsd' subdirectory. If the config file is not found, proceed to the next directory.

The only platform specific issue would likely be the split of the $XDG_CONFIG_DIRS directory list, which is separated by ':' on POSIX and ';' on WinOS.

The described method works as the XDG spec expects and falls back to reasonable defaults on all platforms (including WinOS).

Less platform-specific code which should be a win-win for both devs and users.

I tend to agree with this, but like I said before, this is a bigger change that can wait for after this PR in my opinion. This PR only adds some functionality to reuse code between Windows and other OSs when searching for paths (i.e. using the logic within dirs package) and supporting multiple paths for searching the config. This can later be extended as @zwpaper wants

ofersadan85 avatar Jan 08 '24 09:01 ofersadan85

sorry for the late reply, I am in a sick leave, it may need days to get back 🤧

zwpaper avatar Jan 08 '24 14:01 zwpaper

this is a bigger change that can wait for after this PR in my opinion

yes, let's leave that enhancement to another PR

zwpaper avatar Jan 10 '24 12:01 zwpaper

Codecov Report

Attention: Patch coverage is 43.47826% with 13 lines in your changes are missing coverage. Please review.

Project coverage is 84.41%. Comparing base (d2538a6) to head (9b0edf2). Report is 11 commits behind head on master.

Files Patch % Lines
src/config_file.rs 28.57% 10 Missing :warning:
src/theme.rs 75.00% 2 Missing :warning:
src/core.rs 0.00% 1 Missing :warning:
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #975      +/-   ##
==========================================
- Coverage   84.51%   84.41%   -0.10%     
==========================================
  Files          51       51              
  Lines        5068     5075       +7     
==========================================
+ Hits         4283     4284       +1     
- Misses        785      791       +6     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Jan 10 '24 12:01 codecov[bot]

hi @ofersadan85, do you have time for this PR? it seems the CI also needs to be fixed.

zwpaper avatar Feb 04 '24 16:02 zwpaper

hi @ofersadan85, do you have time for this PR? it seems the CI also needs to be fixed.

I apologize again for the delay, I can't find time for this yet. I'll try again soon but feel free to send it off to someone else if it seems more urgent than I can handle

ofersadan85 avatar Feb 28 '24 07:02 ofersadan85

hi @ofersadan85, I have rebased your branch, but not able to push to your repo, so I created another PR: https://github.com/lsd-rs/lsd/pull/999, should we merge #999 or you pick my change into this one?

zwpaper avatar Mar 01 '24 16:03 zwpaper