colorls 0.1.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +11 -8
- data/.travis.yml +6 -2
- data/CONTRIBUTING.md +5 -0
- data/COVERAGES.md +14 -0
- data/ISSUE_TEMPLATE.md +12 -0
- data/PULL_REQUEST_TEMPLATE.md +12 -0
- data/README.md +27 -9
- data/RELEASE_POLICY.md +20 -0
- data/Rakefile +8 -3
- data/colorls.gemspec +17 -4
- data/lib/colorls.rb +1 -0
- data/lib/colorls/core.rb +41 -16
- data/lib/colorls/flags.rb +99 -64
- data/lib/colorls/load_from_yaml.rb +13 -2
- data/lib/colorls/version.rb +1 -1
- data/lib/yaml/dark_colors.yaml +5 -0
- data/lib/yaml/file_aliases.yaml +11 -1
- data/lib/yaml/files.yaml +5 -1
- data/lib/yaml/folders.yaml +5 -2
- data/lib/yaml/light_colors.yaml +5 -0
- metadata +48 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03284e40013cff842081767d4f8118e037ab5ecf
|
4
|
+
data.tar.gz: f9f342894cccb5dc7f5231e4273f8ebacf17877e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1597a907cc5fb9b4dc1a9e928d6ef514cd49d19f44ae8a9723382edb25b2652faf561fa238509351b8a0f41c94fb101c231dafe90c9368e24e2924a42a400f52
|
7
|
+
data.tar.gz: 9af5861331a7d00b3c3ee7336352cb17cb053b26b3d47e3fd6566950e16dcefece09b9c0e451e7e7c98dc067e85c050f46442c42d87c60980b3bea64bc58fbfe
|
data/.rubocop.yml
CHANGED
@@ -45,10 +45,13 @@ Metrics/ModuleLength:
|
|
45
45
|
Max: 200
|
46
46
|
|
47
47
|
Metrics/ClassLength:
|
48
|
-
Max:
|
48
|
+
Max: 300
|
49
49
|
|
50
50
|
Metrics/ParameterLists:
|
51
|
-
Max:
|
51
|
+
Max: 15
|
52
|
+
|
53
|
+
Naming/FileName:
|
54
|
+
Enabled: false
|
52
55
|
|
53
56
|
Style/ParallelAssignment:
|
54
57
|
Enabled: false
|
@@ -71,22 +74,22 @@ Layout/SpaceAroundOperators:
|
|
71
74
|
Style/EmptyCaseCondition:
|
72
75
|
Enabled: false
|
73
76
|
|
74
|
-
Style/FileName:
|
75
|
-
Enabled: false
|
76
|
-
|
77
77
|
Style/MultilineBlockChain:
|
78
78
|
Enabled: false
|
79
79
|
|
80
80
|
# Current preferred metrics --------------------------------------------
|
81
81
|
# Better values are encouraged, but not required.
|
82
82
|
Metrics/AbcSize:
|
83
|
-
Max:
|
83
|
+
Max: 30
|
84
84
|
|
85
85
|
Metrics/MethodLength:
|
86
|
-
Max:
|
86
|
+
Max: 20
|
87
87
|
|
88
88
|
Metrics/CyclomaticComplexity:
|
89
|
-
Max:
|
89
|
+
Max: 8
|
90
|
+
|
91
|
+
Metrics/PerceivedComplexity:
|
92
|
+
Max: 8
|
90
93
|
|
91
94
|
# TODO -----------------------------------------------------------------
|
92
95
|
|
data/.travis.yml
CHANGED
@@ -19,10 +19,14 @@ script:
|
|
19
19
|
- colorls -f
|
20
20
|
- colorls -l
|
21
21
|
- colorls -l spec/fixtures/symlinks
|
22
|
+
- ( cd spec/fixtures ; colorls .hidden-file ) | fgrep '.hidden-file'
|
23
|
+
- colorls -l README.md
|
22
24
|
- colorls -r
|
23
|
-
- colorls
|
24
|
-
- colorls
|
25
|
+
- colorls --sd
|
26
|
+
- colorls --sf
|
25
27
|
- colorls -t
|
28
|
+
- colorls -h
|
29
|
+
- colorls --gs
|
26
30
|
- colorls spec/fixtures/symlinks
|
27
31
|
- colorls README.md
|
28
32
|
- colorls *
|
data/CONTRIBUTING.md
CHANGED
@@ -28,6 +28,9 @@ Please proceed with a Pull Request only after you're assigned. It'd be sad if yo
|
|
28
28
|
3. (Optional) To test whether `colorls` executable is working properly, do
|
29
29
|
```sh
|
30
30
|
rake install
|
31
|
+
```
|
32
|
+
Then install the gem file in the folder `pkg`. After that to use the new binary,
|
33
|
+
```sh
|
31
34
|
colorls # start using colorls
|
32
35
|
```
|
33
36
|
|
@@ -42,3 +45,5 @@ Please proceed with a Pull Request only after you're assigned. It'd be sad if yo
|
|
42
45
|
bundle exec rubocop
|
43
46
|
bundle exec rspec
|
44
47
|
```
|
48
|
+
|
49
|
+
6. (Required for new flags) Add command to `.travis.yml` file.
|
data/COVERAGES.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# COVERAGES
|
2
|
+
|
3
|
+
A documentation of all the places on the World Wide Web, where `colorls` has been featured:
|
4
|
+
|
5
|
+
- [YouTube : File Icons on Linux Terminal](https://m.youtube.com/watch?v=NESi45Q2mHg)
|
6
|
+
- [GitHub : Awesome README](https://github.com/matiassingers/awesome-readme)
|
7
|
+
- [HackerNews : Colorls – A Ruby script that beautifies the terminal's ls command](https://news.ycombinator.com/item?id=14717341)
|
8
|
+
- [GitHub : A curated list of Terminal frameworks, plugins & resources for CLI lovers](https://github.com/k4m4/terminals-are-sexy)
|
9
|
+
- [Facebook : colorls story](https://m.facebook.com/story.php?story_fbid=1972265916349994&id=1884586571784596)
|
10
|
+
- [openruby : colorls a ruby script that beautifies the terminals ls](https://openruby.com/pages/98288680-colorls-a-ruby-script-that-beautifies-the-terminals-ls)
|
11
|
+
- [omgubuntu : add-bling-ls-bash-command-colorls](http://www.omgubuntu.co.uk/2017/07/add-bling-ls-bash-command-colorls)
|
12
|
+
- [GitHub : nerd-fonts](https://github.com/ryanoasis/nerd-fonts/wiki/Real-World-Mentions-&-Usage-(Sightings))
|
13
|
+
- [GitHub : Awesome Ruby](https://github.com/markets/awesome-ruby)
|
14
|
+
- [GitHub : Awesome Shell](https://github.com/uhub/awesome-shell)
|
data/ISSUE_TEMPLATE.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
### Description
|
2
|
+
|
3
|
+
Thanks for opening this issue. Add a brief description of what this issue is, and how to recreate it. Do tag the relevant issue(s) and PR(s) below. If required, add some screenshot(s) to showcase the issue.
|
4
|
+
|
5
|
+
- Relevant Issues : (none)
|
6
|
+
- Relevant PRs : (none)
|
7
|
+
- Type of issue :
|
8
|
+
- [ ] Installation
|
9
|
+
- [ ] Font-related
|
10
|
+
- [ ] Feature request
|
11
|
+
- [ ] Bug in existing feature
|
12
|
+
- [ ] Developer mode : Code quality / Tests / Documentation
|
@@ -0,0 +1,12 @@
|
|
1
|
+
### Description
|
2
|
+
|
3
|
+
Thanks for contributing this Pull Request. Add a brief description of what this Pull Request does. Do tag the relevant issue(s) and PR(s) below. If required, add some screenshot(s) to support your changes.
|
4
|
+
|
5
|
+
- Relevant Issues : (none)
|
6
|
+
- Relevant PRs : (none)
|
7
|
+
- Type of change :
|
8
|
+
- [ ] New feature
|
9
|
+
- [ ] Bug fix for existing feature
|
10
|
+
- [ ] Code quality improvement
|
11
|
+
- [ ] Addition or Improvement of tests
|
12
|
+
- [ ] Addition or Improvement of documentation
|
data/README.md
CHANGED
@@ -6,9 +6,8 @@
|
|
6
6
|
[](https://badge.fury.io/rb/colorls)
|
7
7
|
[](https://travis-ci.org/athityakumar/colorls)
|
8
8
|
[](http://makeapullrequest.com)
|
9
|
-
[](https://github.com/sindresorhus/awesome)
|
10
9
|
|
11
|
-
A Ruby script that colorizes the `ls` output with color and icons. Here are the screenshots of working example on an iTerm2 terminal (Mac OS), `oh-my-zsh` with `powerlevel9k` theme and `powerline nerd-font + awesome-config` font with the `Solarized Dark` color theme.
|
10
|
+
A Ruby script that colorizes the `ls` output with color and icons. Here are the screenshots of working example on an iTerm2 terminal (Mac OS), `oh-my-zsh` with `powerlevel9k` theme and `powerline nerd-font + awesome-config` font with the `Solarized Dark` color theme.
|
12
11
|
|
13
12
|

|
14
13
|
|
@@ -19,6 +18,7 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the
|
|
19
18
|
- [Usage](#usage)
|
20
19
|
- [Installation](#installation)
|
21
20
|
- [Recommended configurations](#recommended-configurations)
|
21
|
+
- [Custom configurations](#custom-configurations)
|
22
22
|
- [Updating](#updating)
|
23
23
|
- [Uninstallation](#uninstallation)
|
24
24
|
- [Contributing](#contributing)
|
@@ -28,15 +28,15 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the
|
|
28
28
|
|
29
29
|
[(Back to top)](#table-of-contents)
|
30
30
|
|
31
|
-
-
|
31
|
+
- With `-a` : `lc` prints all directories, files and dotfiles in current directory.
|
32
32
|
|
33
33
|

|
34
34
|
|
35
|
-
- With paths : `lc path(s)` prints all directories, files and dotfiles in given directory / directories.
|
35
|
+
- With paths : `lc path(s) -a` prints all directories, files and dotfiles in given directory / directories.
|
36
36
|
|
37
37
|

|
38
38
|
|
39
|
-
- With `--report` or `-r` flag : `lc path(s) -r` : Prints all directories, files and dotfiles in directories, along with a brief report about number of files and folders shown.
|
39
|
+
- With `--report` or `-r` flag : `lc path(s) -r -a` : Prints all directories, files and dotfiles in directories, along with a brief report about number of files and folders shown.
|
40
40
|
|
41
41
|

|
42
42
|

|
@@ -55,14 +55,16 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the
|
|
55
55
|
|
56
56
|

|
57
57
|
|
58
|
+
- Additional flags: `--almost_all` or `-A`, `--long` or `-l`, `--tree` or `-t`
|
59
|
+
|
58
60
|
# Installation
|
59
61
|
|
60
62
|
[(Back to top)](#table-of-contents)
|
61
63
|
|
62
|
-
1. Install Ruby (
|
63
|
-
2. Install the patched fonts of powerline nerd-font and/or font-awesome. Have a look at [
|
64
|
+
1. Install Ruby (preferably, version > 2.1)
|
65
|
+
2. Install the patched fonts of powerline nerd-font and/or font-awesome. Have a look at the [Nerd Font README](https://github.com/ryanoasis/nerd-fonts/blob/master/readme.md) for more installation instructions.
|
64
66
|
|
65
|
-
*Note for `iTerm2` users - Please enable the
|
67
|
+
*Note for `iTerm2` users - Please enable the Nerd Font at iTerm2 > Preferences > Profiles > Text > Non-ASCII font > Knack Regular Nerd Font Complete.*
|
66
68
|
|
67
69
|
3. Install the [colorls](https://rubygems.org/gems/colorls/) ruby gem with `gem install colorls`
|
68
70
|
|
@@ -88,9 +90,25 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the
|
|
88
90
|
2. For changing the icon(s) to other unicode icons of choice (select icons from [here](https://nerdfonts.com/)), change the YAML files in a text editor of your choice (say, `subl`)
|
89
91
|
|
90
92
|
```sh
|
91
|
-
subl $(gem which colorls)
|
93
|
+
subl $(dirname $(gem which colorls))/yaml
|
92
94
|
```
|
93
95
|
|
96
|
+
# Custom configurations
|
97
|
+
|
98
|
+
[(Back to top)](#table-of-contents)
|
99
|
+
|
100
|
+
You can overwrite the existing icons and colors mapping by creating yaml files in ~/.config/lscolors.
|
101
|
+
|
102
|
+
Each .yaml file inside the lib/colorls/yaml directory of this repo can be overwrited.
|
103
|
+
|
104
|
+
Let's say you want to add an icon for swift files, you might create a `files.yaml` inside `~/.config/lscolors` and add the following:
|
105
|
+
|
106
|
+
```
|
107
|
+
swift: "\uF179"
|
108
|
+
```
|
109
|
+
|
110
|
+
Which will add the Apple logo to swift files.
|
111
|
+
|
94
112
|
# Updating
|
95
113
|
|
96
114
|
[(Back to top)](#table-of-contents)
|
data/RELEASE_POLICY.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Release Policy
|
2
|
+
|
3
|
+
Applicable from colorls v1.0.0 onwards
|
4
|
+
|
5
|
+
### Versioning
|
6
|
+
|
7
|
+
Colorls follows semantic versioning whereby the version number is always in the form MAJOR.MINOR.PATCH
|
8
|
+
|
9
|
+
- Patch bump : Bug fixes
|
10
|
+
- Minor bump : New features (with backwards compatibility)
|
11
|
+
- Major bump : API breaking changes
|
12
|
+
|
13
|
+
For Major and Minor bumps release candidates should be released around 2 weeks prior to the bump and are indicated by MAJOR.MINOR.0.rc.
|
14
|
+
|
15
|
+
For more information see the full semantic versioning specification at http://semver.org/.
|
16
|
+
|
17
|
+
### Release Timing
|
18
|
+
|
19
|
+
Patch releases should be done after every fix of a major bug (as tagged in the github issue tracker).
|
20
|
+
Major releases should be kept to the minimum.
|
data/Rakefile
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
-
require 'bundler/
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'rubygems/tasks'
|
3
|
+
Gem::Tasks.new
|
4
|
+
|
2
5
|
require 'rspec/core/rake_task'
|
6
|
+
RSpec::Core::RakeTask.new
|
3
7
|
|
4
|
-
|
8
|
+
require 'rubocop/rake_task'
|
9
|
+
RuboCop::RakeTask.new
|
5
10
|
|
6
|
-
task default:
|
11
|
+
task default: %w[spec rubocop]
|
data/colorls.gemspec
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
lib = File.expand_path('../lib', __FILE__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'colorls/version'
|
@@ -21,14 +19,29 @@ Gem::Specification.new do |spec|
|
|
21
19
|
spec.executables = 'colorls'
|
22
20
|
spec.require_paths = ['lib']
|
23
21
|
|
22
|
+
spec.post_install_message = <<-EOF
|
23
|
+
*************************************************************************
|
24
|
+
Changes introduced in colorls-v1.0.0
|
25
|
+
|
26
|
+
Sort by dirs : -sd flag has been renamed to --sd
|
27
|
+
Sort by files : -sf flag has been renamed to --sf
|
28
|
+
Git status : -gs flag has been renamed to --gs
|
29
|
+
|
30
|
+
Clubbed flags : `colorls -ald` works
|
31
|
+
Help menu : `colorls -h` provides all possible flag options
|
32
|
+
*************************************************************************
|
33
|
+
EOF
|
34
|
+
|
24
35
|
spec.add_runtime_dependency 'colorize'
|
25
36
|
spec.add_runtime_dependency 'facets'
|
26
|
-
spec.add_runtime_dependency 'ruby-terminfo'
|
27
37
|
spec.add_runtime_dependency 'filesize'
|
38
|
+
spec.add_runtime_dependency 'git'
|
39
|
+
spec.add_runtime_dependency 'ruby-terminfo'
|
28
40
|
|
29
41
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
42
|
+
spec.add_development_dependency 'diffy'
|
30
43
|
spec.add_development_dependency 'rake'
|
31
44
|
spec.add_development_dependency 'rspec'
|
32
45
|
spec.add_development_dependency 'rubocop'
|
33
|
-
spec.add_development_dependency '
|
46
|
+
spec.add_development_dependency 'rubygems-tasks'
|
34
47
|
end
|
data/lib/colorls.rb
CHANGED
data/lib/colorls/core.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module ColorLS
|
2
2
|
class Core
|
3
3
|
def initialize(input=nil, all: false, report: false, sort: false, show: false,
|
4
|
-
one_per_line: false, long: false, almost_all: false, tree: false, colors: [])
|
4
|
+
one_per_line: false, git_status: false,long: false, almost_all: false, tree: false, colors: [])
|
5
5
|
@input = input || Dir.pwd
|
6
6
|
@count = {folders: 0, recognized_files: 0, unrecognized_files: 0}
|
7
7
|
@all = all
|
@@ -12,6 +12,7 @@ module ColorLS
|
|
12
12
|
@one_per_line = one_per_line
|
13
13
|
@long = long
|
14
14
|
@tree = tree
|
15
|
+
@git_status = git_status
|
15
16
|
@screen_width = ::TermInfo.screen_size.last
|
16
17
|
@colors = colors
|
17
18
|
|
@@ -33,20 +34,21 @@ module ColorLS
|
|
33
34
|
end
|
34
35
|
print "\n"
|
35
36
|
display_report if @report
|
36
|
-
|
37
37
|
true
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
42
|
def init_contents(path)
|
43
|
-
|
43
|
+
is_directory = Dir.exist?(path)
|
44
|
+
@contents = if is_directory
|
44
45
|
Dir.entries(path)
|
45
46
|
else
|
46
|
-
|
47
|
+
@input = File.dirname(path)
|
48
|
+
[File.basename(path)]
|
47
49
|
end
|
48
50
|
|
49
|
-
filter_hidden_contents
|
51
|
+
filter_hidden_contents if is_directory
|
50
52
|
filter_contents(path) if @show
|
51
53
|
sort_contents(path) if @sort
|
52
54
|
|
@@ -149,8 +151,7 @@ module ColorLS
|
|
149
151
|
end
|
150
152
|
|
151
153
|
def in_line(chunk_size)
|
152
|
-
|
153
|
-
true
|
154
|
+
(@max_widths.sum + 12 * chunk_size <= @screen_width)
|
154
155
|
end
|
155
156
|
|
156
157
|
def display_report
|
@@ -202,27 +203,50 @@ module ColorLS
|
|
202
203
|
|
203
204
|
def size_info(stat)
|
204
205
|
size = Filesize.from("#{stat.size} B").pretty.split(' ')
|
205
|
-
"#{size[0][0..-4].rjust(3,' ')} #{size[1].ljust(3,' ')}"
|
206
|
+
size = "#{size[0][0..-4].rjust(3,' ')} #{size[1].ljust(3,' ')}"
|
207
|
+
return size.colorize(@colors[:file_large]) if stat.size >= 512 * 1024 ** 2
|
208
|
+
return size.colorize(@colors[:file_medium]) if stat.size >= 128 * 1024 ** 2
|
209
|
+
size.colorize(@colors[:file_small])
|
206
210
|
end
|
207
211
|
|
208
212
|
def mtime_info(stat)
|
209
|
-
mtime = stat.mtime.asctime
|
210
|
-
|
211
|
-
|
212
|
-
mtime
|
213
|
+
mtime = stat.mtime.asctime
|
214
|
+
return mtime.colorize(@colors[:hour_old]) if Time.now - stat.mtime < 60 * 60
|
215
|
+
return mtime.colorize(@colors[:day_old]) if Time.now - stat.mtime < 24 * 60 * 60
|
216
|
+
mtime.colorize(@colors[:no_modifier])
|
217
|
+
end
|
218
|
+
|
219
|
+
def git_info(path, content)
|
220
|
+
return '' unless @git_status
|
221
|
+
until File.exist?('.git') # check whether the repository is git controlled
|
222
|
+
return '' if Dir.pwd=='/'
|
223
|
+
Dir.chdir('..')
|
224
|
+
end
|
225
|
+
|
226
|
+
relative_path = path.remove(Dir.pwd+'/')
|
227
|
+
relative_path = relative_path==path ? '' : relative_path+'/'
|
228
|
+
|
229
|
+
status = Git.open('.').status
|
230
|
+
return '(A)'.colorize(:green) if status.added.keys.any? { |a| a.include?("#{relative_path}#{content}") }
|
231
|
+
return '(U)'.colorize(:red) if status.untracked.keys.any? { |u| u.include?("#{relative_path}#{content}") }
|
232
|
+
return '(C)'.colorize(:yellow) if status.changed.keys.any? { |c| c.include?("#{relative_path}#{content}") }
|
233
|
+
'(-)'
|
213
234
|
end
|
214
235
|
|
215
236
|
def long_info(path, content)
|
216
237
|
return '' unless @long
|
238
|
+
@git_status = true
|
217
239
|
unless File.exist?("#{path}/#{content}")
|
218
240
|
return '[No Info]'.colorize(@colors[:error]) + ' ' * (39 + @userlength + @grouplength)
|
219
241
|
end
|
220
242
|
stat = File.stat("#{path}/#{content}")
|
221
|
-
|
243
|
+
@git_status = false
|
244
|
+
[mode_info(stat), user_info(stat), group_info(stat), size_info(stat), mtime_info(stat),git_info(path,content)]
|
245
|
+
.join(' ')
|
222
246
|
end
|
223
247
|
|
224
248
|
def symlink_info(path, content)
|
225
|
-
return '' unless @long && File.
|
249
|
+
return '' unless @long && File.symlink?("#{path}/#{content}")
|
226
250
|
if File.exist?("#{path}/#{content}")
|
227
251
|
" ⇒ #{File.readlink("#{path}/#{content}")}/".colorize(@colors[:link])
|
228
252
|
else
|
@@ -241,9 +265,10 @@ module ColorLS
|
|
241
265
|
|
242
266
|
[
|
243
267
|
long_info(path, content),
|
268
|
+
"#{git_info(path,content)} ",
|
244
269
|
logo.colorize(color),
|
245
|
-
"#{content.colorize(color)}#{slash?(path, content)}#{symlink_info(path, content)}"
|
246
|
-
].join
|
270
|
+
" #{content.colorize(color)}#{slash?(path, content)}#{symlink_info(path, content)}"
|
271
|
+
].join
|
247
272
|
end
|
248
273
|
|
249
274
|
def ls_line(chunk)
|
data/lib/colorls/flags.rb
CHANGED
@@ -1,30 +1,42 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'colorls/version'
|
3
|
+
|
1
4
|
module ColorLS
|
2
5
|
class Flags
|
3
6
|
def initialize(*args)
|
4
7
|
@args = args
|
5
|
-
|
8
|
+
@light_colors = false
|
9
|
+
@mode = :one_per_line unless STDOUT.tty?
|
6
10
|
|
7
11
|
@opts = {
|
8
|
-
show:
|
9
|
-
sort:
|
10
|
-
all:
|
11
|
-
almost_all:
|
12
|
-
report:
|
13
|
-
|
14
|
-
|
15
|
-
tree: flag_given?(%w[-t --tree]),
|
16
|
-
colors: @colors
|
12
|
+
show: false,
|
13
|
+
sort: false,
|
14
|
+
all: false,
|
15
|
+
almost_all: false,
|
16
|
+
report: false,
|
17
|
+
git_status: false,
|
18
|
+
colors: []
|
17
19
|
}
|
18
20
|
|
19
|
-
|
21
|
+
parse_options
|
22
|
+
|
23
|
+
# handle mutual exclusive options
|
24
|
+
%i[tree long one_per_line].each do |value|
|
25
|
+
@opts[value] = @mode == value
|
26
|
+
end
|
27
|
+
|
28
|
+
return unless @mode == :tree
|
29
|
+
|
30
|
+
# FIXME: `--all` and `--tree` do not work together, use `--almost-all` instead
|
31
|
+
@opts[:almost_all] = true if @opts[:all]
|
32
|
+
@opts[:all] = false
|
33
|
+
|
34
|
+
# `--tree` does not support reports
|
35
|
+
@opts[:report] = false
|
20
36
|
end
|
21
37
|
|
22
38
|
def process
|
23
|
-
incompatible = report_incompatible_flags
|
24
|
-
return STDERR.puts "\n #{incompatible}".colorize(:red) if incompatible
|
25
|
-
|
26
39
|
return Core.new(@opts).ls if @args.empty?
|
27
|
-
|
28
40
|
@args.each do |path|
|
29
41
|
next STDERR.puts "\n Specified path '#{path}' doesn't exist.".colorize(:red) unless File.exist?(path)
|
30
42
|
Core.new(path, @opts).ls
|
@@ -33,66 +45,89 @@ module ColorLS
|
|
33
45
|
|
34
46
|
private
|
35
47
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
48
|
+
def add_sort_options(options)
|
49
|
+
options.separator ''
|
50
|
+
options.separator 'sorting options:'
|
51
|
+
options.separator ''
|
52
|
+
options.on('--sd', '--sort-dirs', '--group-directories-first', 'sort directories first') { @opts[:sort] = :dirs }
|
53
|
+
options.on('--sf', '--sort-files', 'sort files first') { @opts[:sort] = :files }
|
39
54
|
end
|
40
55
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
else # default colors
|
52
|
-
@colors = ColorLS.load_from_yaml('dark_colors.yaml', true)
|
53
|
-
end
|
54
|
-
|
55
|
-
@colors
|
56
|
+
def add_common_options(options)
|
57
|
+
options.on('-a', '--all', 'do not ignore entries starting with .') { @opts[:all] = true }
|
58
|
+
options.on('-A', '--almost-all', 'do not list . and ..') { @opts[:almost_all] = true }
|
59
|
+
options.on('-l', '--long', 'use a long listing format') { @mode = :long }
|
60
|
+
options.on('-t', '--tree', 'shows tree view of the directory') { @mode = :tree }
|
61
|
+
options.on('-r', '--report', 'show brief report') { @opts[:report] = true }
|
62
|
+
options.on('-1', 'list one file per line') { @mode = :one_per_line }
|
63
|
+
options.on('-d', '--dirs', 'show only directories') { @opts[:show] = :dirs }
|
64
|
+
options.on('-f', '--files', 'show only files') { @opts[:show] = :files }
|
65
|
+
options.on('--gs', '--git-status', 'show git status for each file') { @opts[:git_status] = true }
|
56
66
|
end
|
57
67
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
return nil
|
66
|
-
else
|
67
|
-
return :files if show_files_only
|
68
|
-
return :dirs if show_dirs_only
|
69
|
-
false
|
70
|
-
end
|
68
|
+
def add_general_options(options)
|
69
|
+
options.separator ''
|
70
|
+
options.separator 'general options:'
|
71
|
+
|
72
|
+
options.separator ''
|
73
|
+
options.on('--light', 'use light color scheme') { @light_colors = true }
|
74
|
+
options.on('--dark', 'use dark color scheme') { @light_colors = false }
|
71
75
|
end
|
72
76
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
77
|
+
def show_examples
|
78
|
+
puts <<EXAMPLES.gsub(/^ /, '')
|
79
|
+
|
80
|
+
examples:
|
81
|
+
|
82
|
+
* show the given file:
|
83
|
+
|
84
|
+
#{'colorls README.md'.colorize(:green)}
|
85
|
+
|
86
|
+
* show matching files and list matching directories:
|
87
|
+
|
88
|
+
#{'colorls *'.colorize(:green)}
|
89
|
+
|
90
|
+
* filter output by a regular expression:
|
91
|
+
|
92
|
+
#{'colorls | grep PATTERN'.colorize(:green)}
|
93
|
+
|
94
|
+
* several short options can be combined:
|
95
|
+
|
96
|
+
#{'colorls -d -l -a'.colorize(:green)}
|
97
|
+
#{'colorls -dla'.colorize(:green)}
|
98
|
+
|
99
|
+
EXAMPLES
|
86
100
|
end
|
87
101
|
|
88
|
-
def
|
89
|
-
|
102
|
+
def parse_options
|
103
|
+
parser = OptionParser.new do |opts|
|
104
|
+
opts.banner = 'Usage: colorls [OPTION]... [FILE]...'
|
105
|
+
opts.separator ''
|
106
|
+
|
107
|
+
add_common_options(opts)
|
108
|
+
add_sort_options(opts)
|
109
|
+
add_general_options(opts)
|
110
|
+
|
111
|
+
opts.separator ''
|
112
|
+
opts.on_tail('-h', '--help', 'prints this help') do
|
113
|
+
puts parser
|
114
|
+
show_examples
|
115
|
+
exit
|
116
|
+
end
|
117
|
+
opts.on_tail('--version', 'show version') do
|
118
|
+
puts ColorLS::VERSION
|
119
|
+
exit
|
120
|
+
end
|
121
|
+
end
|
90
122
|
|
91
|
-
|
123
|
+
parser.parse!(@args)
|
92
124
|
|
93
|
-
|
125
|
+
set_color_opts
|
126
|
+
end
|
94
127
|
|
95
|
-
|
128
|
+
def set_color_opts
|
129
|
+
color_scheme_file = @light_colors ? 'light_colors.yaml' : 'dark_colors.yaml'
|
130
|
+
@opts[:colors] = ColorLS.load_from_yaml(color_scheme_file, true)
|
96
131
|
end
|
97
132
|
end
|
98
133
|
end
|
@@ -1,11 +1,22 @@
|
|
1
1
|
module ColorLS
|
2
2
|
def self.load_from_yaml(filename, aliase=false)
|
3
|
-
|
4
|
-
|
3
|
+
user_config_filepath = File.join(Dir.home, ".config/colorls/#{filename}")
|
4
|
+
filepath = File.join(File.dirname(__FILE__),"../yaml/#{filename}")
|
5
|
+
yaml = read_file(filepath)
|
6
|
+
|
7
|
+
if File.exist?(user_config_filepath)
|
8
|
+
user_config_yaml = read_file(user_config_filepath)
|
9
|
+
yaml = yaml.merge(user_config_yaml)
|
10
|
+
end
|
11
|
+
|
5
12
|
return yaml unless aliase
|
6
13
|
yaml
|
7
14
|
.to_a
|
8
15
|
.map! { |k, v| [k, v.to_sym] }
|
9
16
|
.to_h
|
10
17
|
end
|
18
|
+
|
19
|
+
def self.read_file(filepath)
|
20
|
+
YAML.safe_load(File.read(filepath)).symbolize_keys
|
21
|
+
end
|
11
22
|
end
|
data/lib/colorls/version.rb
CHANGED
data/lib/yaml/dark_colors.yaml
CHANGED
data/lib/yaml/file_aliases.yaml
CHANGED
@@ -3,6 +3,8 @@ gradle: android
|
|
3
3
|
ds_store: apple
|
4
4
|
localized: apple
|
5
5
|
mp3: audio
|
6
|
+
ogg: audio
|
7
|
+
editorconfig: conf
|
6
8
|
scss: css
|
7
9
|
docx: doc
|
8
10
|
gdoc: doc
|
@@ -11,7 +13,7 @@ eot: font
|
|
11
13
|
otf: font
|
12
14
|
ttf: font
|
13
15
|
woff: font
|
14
|
-
|
16
|
+
woff2: font
|
15
17
|
gitconfig: git
|
16
18
|
gitignore: git
|
17
19
|
gitignore_global: git
|
@@ -25,6 +27,7 @@ png: image
|
|
25
27
|
svg: image
|
26
28
|
jar: java
|
27
29
|
properties: json
|
30
|
+
tsx: jsx
|
28
31
|
license: md
|
29
32
|
markdown: md
|
30
33
|
mkd: md
|
@@ -45,6 +48,8 @@ rspec: rb
|
|
45
48
|
rspec_parallel: rb
|
46
49
|
rspec_status: rb
|
47
50
|
ru: rb
|
51
|
+
erb: rubydoc
|
52
|
+
slim: rubydoc
|
48
53
|
bash: shell
|
49
54
|
bash_history: shell
|
50
55
|
bash_profile: shell
|
@@ -54,8 +59,13 @@ sh: shell
|
|
54
59
|
zsh: shell
|
55
60
|
zsh-theme: shell
|
56
61
|
zshrc: shell
|
62
|
+
stylus: styl
|
57
63
|
cls: tex
|
64
|
+
avi: video
|
65
|
+
mkv: video
|
58
66
|
mp4: video
|
67
|
+
ogv: video
|
68
|
+
webm: video
|
59
69
|
bat: windows
|
60
70
|
exe: windows
|
61
71
|
ini: windows
|
data/lib/yaml/files.yaml
CHANGED
@@ -15,6 +15,7 @@ db: "\uf1c0"
|
|
15
15
|
diff: "\uf440"
|
16
16
|
doc: "\uf1c2"
|
17
17
|
ebook: "\ue28b"
|
18
|
+
env: "\uf462"
|
18
19
|
epub: "\ue28a"
|
19
20
|
erl: "\ue7b1"
|
20
21
|
file: "\uf15b"
|
@@ -22,7 +23,7 @@ font: "\uf031"
|
|
22
23
|
gform: "\uf298"
|
23
24
|
git: "\uf1d3"
|
24
25
|
go: "\ue626"
|
25
|
-
gruntfile.js: "\ue74c"
|
26
|
+
gruntfile.js: "\ue74c"
|
26
27
|
hs: "\ue777"
|
27
28
|
html: "\uf13b"
|
28
29
|
image: "\uf1c5"
|
@@ -30,6 +31,7 @@ iml: "\ue7b5"
|
|
30
31
|
java: "\ue204"
|
31
32
|
js: "\ue74e"
|
32
33
|
json: "\ue60b"
|
34
|
+
jsx: "\ue7ba"
|
33
35
|
less: "\ue758"
|
34
36
|
log: "\uf18d"
|
35
37
|
lua: "\ue620"
|
@@ -46,6 +48,8 @@ r: "\uf25d"
|
|
46
48
|
rb: "\ue21e"
|
47
49
|
rdb: "\ue76d"
|
48
50
|
rss: "\uf09e"
|
51
|
+
rubydoc: "\ue73b"
|
52
|
+
sass: "\ue603"
|
49
53
|
scala: "\ue737"
|
50
54
|
shell: "\uf489"
|
51
55
|
sqlite3: "\ue7c4"
|
data/lib/yaml/folders.yaml
CHANGED
data/lib/yaml/light_colors.yaml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: colorls
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Athitya Kumar
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: filesize
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,21 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: git
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ruby-terminfo
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '1.15'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: diffy
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rake
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,7 +151,7 @@ dependencies:
|
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
154
|
+
name: rubygems-tasks
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
157
|
- - ">="
|
@@ -149,9 +177,13 @@ files:
|
|
149
177
|
- ".travis.yml"
|
150
178
|
- CODE_OF_CONDUCT.md
|
151
179
|
- CONTRIBUTING.md
|
180
|
+
- COVERAGES.md
|
152
181
|
- Gemfile
|
182
|
+
- ISSUE_TEMPLATE.md
|
153
183
|
- LICENSE.md
|
184
|
+
- PULL_REQUEST_TEMPLATE.md
|
154
185
|
- README.md
|
186
|
+
- RELEASE_POLICY.md
|
155
187
|
- Rakefile
|
156
188
|
- colorls.gemspec
|
157
189
|
- exe/colorls
|
@@ -180,7 +212,17 @@ homepage: https://github.com/athityakumar/colorls
|
|
180
212
|
licenses:
|
181
213
|
- MIT
|
182
214
|
metadata: {}
|
183
|
-
post_install_message:
|
215
|
+
post_install_message: |
|
216
|
+
*************************************************************************
|
217
|
+
Changes introduced in colorls-v1.0.0
|
218
|
+
|
219
|
+
Sort by dirs : -sd flag has been renamed to --sd
|
220
|
+
Sort by files : -sf flag has been renamed to --sf
|
221
|
+
Git status : -gs flag has been renamed to --gs
|
222
|
+
|
223
|
+
Clubbed flags : `colorls -ald` works
|
224
|
+
Help menu : `colorls -h` provides all possible flag options
|
225
|
+
*************************************************************************
|
184
226
|
rdoc_options: []
|
185
227
|
require_paths:
|
186
228
|
- lib
|