lsd-rs / lsd-rs/lsd

[Feature request] Second level sort method (for --sort=extension)

Open
#814 2 comments 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
16.2k
Forks
510
PR merge metrics
No merged PRs in 30d

Description

- os: ArcoLinux
- `lsd --version`: lsd 0.23.1
- `echo $TERM`: xterm-256color
- `echo $LS_COLORS`: rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.swp=00;90:*.tmp=00;90:*.dpkg-dist=00;90:*.dpkg-old=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:

## Expected behavior
Be able to have a nested sort option over the main one. This will allow user to nest sorting methods (if applicable).
Sort by `name` is absolute, there is no space for a "second level sorting method"
Sort by `extension` groups files but don't seem to be an order in them (per group/section) by `name` nor `time` nor `size`.

A good option could be able to specify a second level sort method, in my case I prefer by `name` and if it's used with `--sort=extension` each "extension group" will sort its files alphabetically allowing the user to find faster specific file(s). Very useful with a long list of files.
It's very common to find this setting in graphical file browsers.

## Actual behavior
The default sort order is by `name`, files with same extension are separated.
```bash
$ lsd --icon never
2022-09-13 (2).png Avanxe7.zip ID_394_507.zip p5000 venus_box_cover_mod.stl VID_20220819_175931.mp4
20221204_121637.mp4 BPSK image.png Solid.png vernier_caliper.FCStd
asmdemo.c Day7.c oboi7.com-14695.png TS80P.zip VID_20211227_175134.mp4
```
If the sort order is by `extension`, files with same extension are grouped but each group itself is not sorted by name.
```bash
$ lsd --icon never --sort=extension
BPSK Day7.c 2022-09-13 (2).png venus_box_cover_mod.stl
p5000 VID_20211227_175134.mp4 oboi7.com-14695.png ID_394_507.zip
vernier_caliper.FCStd VID_20220819_175931.mp4 Solid.png Avanxe7.zip
asmdemo.c 20221204_121637.mp4 image.png TS80P.zip
```
Is better
```bash
$ lsd --icon never --sort=extension
BPSK vernier_caliper.FCStd 022-09-13 (2).png venus_box_cover_mod.stl
p5000 20221204_121637.mp4 image.png Avanxe7.zip
asmdemo.c VID_20211227_175134.mp4 oboi7.com-14695.png ID_394_507.zip
Day7.c VID_20220819_175931.mp4 Solid.png TS80P.zip
```

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the `lsd --sort=extension` path and how the current sort option orders files within extension groups. Define the nested sort behavior described in the examples, then verify that extension groups use the selected secondary order while preserving the existing name sort behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.