mirror of
https://github.com/athityakumar/colorls.git
synced 2024-09-19 05:31:23 +02:00
Merge pull request #200 from avdv/sort-by-extension
Add `-X` / `--sort=extension` flags
This commit is contained in:
commit
159649ab65
9 changed files with 34 additions and 15 deletions
1
Rakefile
1
Rakefile
|
@ -13,6 +13,7 @@ end
|
||||||
desc 'Build the manual'
|
desc 'Build the manual'
|
||||||
file 'man/colorls.1' => ['man/colorls.1.ronn', 'lib/colorls/flags.rb'] do
|
file 'man/colorls.1' => ['man/colorls.1.ronn', 'lib/colorls/flags.rb'] do
|
||||||
require 'colorls'
|
require 'colorls'
|
||||||
|
require 'date'
|
||||||
require 'ronn'
|
require 'ronn'
|
||||||
|
|
||||||
flags = ColorLS::Flags.new
|
flags = ColorLS::Flags.new
|
||||||
|
|
|
@ -92,6 +92,13 @@ module ColorLS
|
||||||
|
|
||||||
def sort_contents
|
def sort_contents
|
||||||
case @sort
|
case @sort
|
||||||
|
when :extension
|
||||||
|
@contents.sort_by! do |f|
|
||||||
|
name = f.name
|
||||||
|
ext = File.extname(name)
|
||||||
|
name = name.chomp(ext) unless ext.empty?
|
||||||
|
[ext, name].map { |s| CLocale.strxfrm(s) }
|
||||||
|
end
|
||||||
when :time
|
when :time
|
||||||
@contents.sort_by! { |a| -a.mtime.to_f }
|
@contents.sort_by! { |a| -a.mtime.to_f }
|
||||||
when :size
|
when :size
|
||||||
|
|
|
@ -76,15 +76,15 @@ module ColorLS
|
||||||
options.on('-t', 'sort by modification time, newest first') { @opts[:sort] = :time }
|
options.on('-t', 'sort by modification time, newest first') { @opts[:sort] = :time }
|
||||||
options.on('-U', 'do not sort; list entries in directory order') { @opts[:sort] = false }
|
options.on('-U', 'do not sort; list entries in directory order') { @opts[:sort] = false }
|
||||||
options.on('-S', 'sort by file size, largest first') { @opts[:sort] = :size }
|
options.on('-S', 'sort by file size, largest first') { @opts[:sort] = :size }
|
||||||
|
options.on('-X', 'sort by file extension') { @opts[:sort] = :extension }
|
||||||
options.on(
|
options.on(
|
||||||
'--sort=WORD',
|
'--sort=WORD',
|
||||||
%w[none time size],
|
%w[none time size extension],
|
||||||
'sort by WORD instead of name: none, size (-S), time (-t)'
|
'sort by WORD instead of name: none, size (-S), time (-t), extension (-X)'
|
||||||
) do |word|
|
) do |word|
|
||||||
@opts[:sort] = case word
|
@opts[:sort] = case word
|
||||||
when 'none' then false
|
when 'none' then false
|
||||||
when 'time' then :time
|
else word.to_sym
|
||||||
when 'size' then :size
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "COLORLS" "1" "November 2017" "colorls 1.1.0" "colorls Manual"
|
.TH "COLORLS" "1" "January 2018" "colorls 1.1.1" "colorls Manual"
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBcolorls\fR \- list directory contents with colors and icons
|
\fBcolorls\fR \- list directory contents with colors and icons
|
||||||
|
@ -79,8 +79,12 @@ do not sort; list entries in directory order
|
||||||
sort by file size, largest first
|
sort by file size, largest first
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-X\fR
|
||||||
|
sort by file extension
|
||||||
|
.
|
||||||
|
.TP
|
||||||
\fB\-\-sort\fR
|
\fB\-\-sort\fR
|
||||||
sort by WORD instead of name: none, size (\-S), time (\-t)
|
sort by WORD instead of name: none, size (\-S), time (\-t), extension (\-X)
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-r\fR, \fB\-\-reverse\fR
|
\fB\-r\fR, \fB\-\-reverse\fR
|
||||||
|
|
|
@ -20,7 +20,7 @@ RSpec.describe ColorLS::Flags do
|
||||||
it { is_expected.not_to match(/((r|-).*(w|-).*(x|-).*){3}/) } # does not list file info
|
it { is_expected.not_to match(/((r|-).*(w|-).*(x|-).*){3}/) } # does not list file info
|
||||||
it { is_expected.not_to match(/\.hidden-file/) } # does not display hidden files
|
it { is_expected.not_to match(/\.hidden-file/) } # does not display hidden files
|
||||||
it { is_expected.not_to match(/Found \d+ contents/) } # does not show a report
|
it { is_expected.not_to match(/Found \d+ contents/) } # does not show a report
|
||||||
it { is_expected.to match(/a-file.+symlinks.+z-file/) } # displays dirs & files alphabetically
|
it { is_expected.to match(/a-file.+symlinks.+z-file/m) } # displays dirs & files alphabetically
|
||||||
it { is_expected.not_to match(/(.*\n){3}/) } # displays multiple files per line
|
it { is_expected.not_to match(/(.*\n){3}/) } # displays multiple files per line
|
||||||
it { is_expected.not_to match(%r(\.{1,2}/)) } # does not display ./ or ../
|
it { is_expected.not_to match(%r(\.{1,2}/)) } # does not display ./ or ../
|
||||||
it { is_expected.not_to match(/├──/) } # does not display file hierarchy
|
it { is_expected.not_to match(/├──/) } # does not display file hierarchy
|
||||||
|
@ -29,7 +29,7 @@ RSpec.describe ColorLS::Flags do
|
||||||
context 'with --reverse flag' do
|
context 'with --reverse flag' do
|
||||||
let(:args) { ['--reverse', FIXTURES] }
|
let(:args) { ['--reverse', FIXTURES] }
|
||||||
|
|
||||||
it { is_expected.to match(/z-file.+symlinks.+a-file/) } # displays dirs & files in reverse alphabetical order
|
it { is_expected.to match(/z-file.+symlinks.+a-file/m) } # displays dirs & files in reverse alphabetical order
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with --long flag & file path' do
|
context 'with --long flag & file path' do
|
||||||
|
@ -53,13 +53,13 @@ RSpec.describe ColorLS::Flags do
|
||||||
context 'with --sort-dirs flag' do
|
context 'with --sort-dirs flag' do
|
||||||
let(:args) { ['--sort-dirs', FIXTURES] }
|
let(:args) { ['--sort-dirs', FIXTURES] }
|
||||||
|
|
||||||
it { is_expected.to match(/symlinks.+a-file.+z-file/) } # sorts results alphabetically, directories first
|
it { is_expected.to match(/symlinks.+a-file.+z-file/m) } # sorts results alphabetically, directories first
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with --sort-files flag' do
|
context 'with --sort-files flag' do
|
||||||
let(:args) { ['--sort-files', FIXTURES] }
|
let(:args) { ['--sort-files', FIXTURES] }
|
||||||
|
|
||||||
it { is_expected.to match(/a-file.+z-file.+symlinks/) } # sorts results alphabetically, files first
|
it { is_expected.to match(/a-file.+z-file.+symlinks/m) } # sorts results alphabetically, files first
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with --sort=time' do
|
context 'with --sort=time' do
|
||||||
|
@ -85,6 +85,12 @@ RSpec.describe ColorLS::Flags do
|
||||||
it { is_expected.to match(/a-file.+z-file.+symlinks/) } # sorts results by size
|
it { is_expected.to match(/a-file.+z-file.+symlinks/) } # sorts results by size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with --sort=extension flag' do
|
||||||
|
let(:args) { ['--sort=extension', FIXTURES] }
|
||||||
|
|
||||||
|
it { is_expected.to match(/a-file.+symlinks.+z-file.+a.md.+a.txt.+z.txt/m) } # sorts results by extension
|
||||||
|
end
|
||||||
|
|
||||||
context 'with --dirs flag' do
|
context 'with --dirs flag' do
|
||||||
let(:args) { ['--dirs', FIXTURES] }
|
let(:args) { ['--dirs', FIXTURES] }
|
||||||
|
|
||||||
|
|
0
spec/fixtures/a.md
vendored
Normal file
0
spec/fixtures/a.md
vendored
Normal file
0
spec/fixtures/a.txt
vendored
Normal file
0
spec/fixtures/a.txt
vendored
Normal file
0
spec/fixtures/z.txt
vendored
Normal file
0
spec/fixtures/z.txt
vendored
Normal file
|
@ -27,7 +27,8 @@ _arguments -s -S \
|
||||||
"-t[sort by modification time, newest first]" \
|
"-t[sort by modification time, newest first]" \
|
||||||
"-U[do not sort; list entries in directory order]" \
|
"-U[do not sort; list entries in directory order]" \
|
||||||
"-S[sort by file size, largest first]" \
|
"-S[sort by file size, largest first]" \
|
||||||
"--sort[sort by WORD instead of name: none, size (-S), time (-t)]" \
|
"-X[sort by file extension]" \
|
||||||
|
"--sort[sort by WORD instead of name: none, size (-S), time (-t), extension (-X)]" \
|
||||||
"-r[reverse order while sorting]" \
|
"-r[reverse order while sorting]" \
|
||||||
"--reverse[reverse order while sorting]" \
|
"--reverse[reverse order while sorting]" \
|
||||||
"--light[use light color scheme]" \
|
"--light[use light color scheme]" \
|
||||||
|
|
Loading…
Reference in a new issue