colorls 0.1.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/colorls.svg)](https://badge.fury.io/rb/colorls)
|
7
7
|
[![Build Status](https://travis-ci.org/athityakumar/colorls.svg?branch=master)](https://travis-ci.org/athityakumar/colorls)
|
8
8
|
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=shields)](http://makeapullrequest.com)
|
9
|
-
[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](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
|
![Example #1](readme/usage1.png)
|
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
|
![Usage #1](readme/usage1.png)
|
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
|
![Usage #2](readme/usage2.png)
|
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
|
![Usage #3](readme/usage3.png)
|
42
42
|
![Usage #4](readme/usage4.png)
|
@@ -55,14 +55,16 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the
|
|
55
55
|
|
56
56
|
![Usage #9](readme/usage9.png)
|
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
|