colorls 1.4.4 → 1.4.5.pre.93

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bed5b872ba1b31b507779e05c32fcffd4f4cd95684f1547490444f3213755726
4
- data.tar.gz: f6d6e53529b4d922d4267b03d2e99a4f56a52d2fc2261e6e854498b14dc42e45
3
+ metadata.gz: f4ebed77f92de70e551998e8a703501c5ed067be1b4bc758a6ce46f9f6ec9437
4
+ data.tar.gz: 924b863b8cfd4fa37ffafaf58aa2b27c89ac4da9d054026058855f43cf2170e1
5
5
  SHA512:
6
- metadata.gz: a71e5a8d24ac10120644eeef844757af599d84b050ad9aa96f9b015f31566c8e5de3b87b07f749fd3ac2bfda601d0cbf817c76b62822a4ae14e6da739fc92b16
7
- data.tar.gz: eaa927ffd86b722d39e0019490d915c102984685da6e4b1da58773de9f0173d8a92563d8dbeabd921aedef5d50145402110cba1ca40ccd9c28c6d070c52fec53
6
+ metadata.gz: 3bcad1811124c707bac63fd81ba07f8a9156f8ebd6eb568238b0c7725abf5f901aa401b06025eac02eb105eb64f86c314c5024f1356eda70b1e117d8984c4a4c
7
+ data.tar.gz: eb44b4b7903fd562556f7ae30ff395ceb11d0d3ff9aa28f09a5be54fa397a73ab7399893d4c93b2bcc4daa659a11939e30c00889d6036807cba0c6ba88357a15
data/.rubocop.yml CHANGED
@@ -10,7 +10,7 @@ AllCops:
10
10
  - 'profile/*'
11
11
  DisplayCopNames: true
12
12
  NewCops: enable
13
- TargetRubyVersion: 2.5
13
+ TargetRubyVersion: 2.6
14
14
 
15
15
  # Preferred codebase style ---------------------------------------------
16
16
 
@@ -58,7 +58,7 @@ Metrics/ClassLength:
58
58
  Max: 350
59
59
 
60
60
  Metrics/ParameterLists:
61
- Max: 15
61
+ Max: 16
62
62
 
63
63
  Naming/FileName:
64
64
  Enabled: false
data/CONTRIBUTORS.md CHANGED
@@ -77,5 +77,7 @@ Color LS contributors (sorted alphabetically)
77
77
 
78
78
  * **[Vladislav Isakov](https://github.com/bladebhs)**
79
79
 
80
+ * **[T.Mangoe](https://github.com/t-mangoe)**
81
+
80
82
 
81
83
  **[Full contributors list](https://github.com/athityakumar/colorls/graphs/contributors).**
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![forthebadge](http://forthebadge.com/images/badges/built-with-love.svg)](http://forthebadge.com)
5
5
 
6
6
  [![Gem Version](https://badge.fury.io/rb/colorls.svg)](https://badge.fury.io/rb/colorls)
7
- [![Build Status](https://travis-ci.org/athityakumar/colorls.svg?branch=master)](https://travis-ci.org/athityakumar/colorls)
7
+ [![CI](https://github.com/athityakumar/colorls/actions/workflows/ruby.yml/badge.svg)](https://github.com/athityakumar/colorls/actions/workflows/ruby.yml)
8
8
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=shields)](http://makeapullrequest.com)
9
9
 
10
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.
@@ -117,8 +117,8 @@ Man pages have been added. Checkout `man colorls`.
117
117
 
118
118
  [(Back to top)](#table-of-contents)
119
119
 
120
- 1. Install Ruby (preferably, version >= 2.5)
121
- 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.
120
+ 1. Install Ruby (preferably, version >= 2.6)
121
+ 2. [Download](https://www.nerdfonts.com/font-downloads) and install a Nerd Font. Have a look at the [Nerd Font README](https://github.com/ryanoasis/nerd-fonts/blob/master/readme.md) for installation instructions.
122
122
 
123
123
  *Note for `iTerm2` users - Please enable the Nerd Font at iTerm2 > Preferences > Profiles > Text > Non-ASCII font > Hack Regular Nerd Font Complete.*
124
124
 
@@ -170,7 +170,7 @@ You can overwrite the existing icons and colors mapping by copying the yaml file
170
170
  Let's say that you're using the dark color scheme and would like to change the color of untracked file (`??`) in the `--git-status` flag to yellow. Copy the defaut `dark_colors.yaml` and change it.
171
171
 
172
172
  ```sh
173
- cp $(dirname $(gem which colorls))/yaml/dark_colors.yaml ~/.config/colorls/dark_colors.yaml`
173
+ cp $(dirname $(gem which colorls))/yaml/dark_colors.yaml ~/.config/colorls/dark_colors.yaml
174
174
  ```
175
175
 
176
176
  In the `~/.config/colorls/dark_colors.yaml` file, change the color set for `untracked` from `darkorange` to `yellow`, and save the change.
data/Rakefile CHANGED
@@ -20,12 +20,12 @@ file 'man/colorls.1' => ['man/colorls.1.ronn', 'lib/colorls/flags.rb'] do
20
20
 
21
21
  flags = ColorLS::Flags.new
22
22
  attributes = {
23
- date: Date.iso8601(`git log -1 --pretty=format:%cI -- man/colorls.1`),
23
+ date: Date.iso8601(`git log -1 --pretty=format:%cI -- lib/colorls/flags.rb`),
24
24
  manual: 'colorls Manual',
25
25
  organization: "colorls #{ColorLS::VERSION}"
26
26
  }
27
27
  doc = Ronn::Document.new(nil, attributes) do
28
- template = IO.read('man/colorls.1.ronn')
28
+ template = File.read('man/colorls.1.ronn')
29
29
 
30
30
  section = ''
31
31
  flags.options.each do |o|
@@ -37,12 +37,14 @@ OPTION
37
37
  end
38
38
  template.sub('{{ OPTIONS }}', section)
39
39
  end
40
- IO.write('man/colorls.1', doc.convert('roff'))
40
+ File.write('man/colorls.1', doc.convert('roff'))
41
41
  end
42
42
 
43
+ directory 'zsh'
44
+
43
45
  desc 'Build the Zsh completion file'
44
- file 'zsh/_colorls' => ['lib/colorls/flags.rb'] do
46
+ file 'zsh/_colorls' => %w[zsh lib/colorls/flags.rb] do
45
47
  ruby "exe/colorls '--*-completion-zsh=colorls' > zsh/_colorls"
46
48
  end
47
49
 
48
- task default: %w[spec rubocop]
50
+ task default: %w[spec rubocop man/colorls.1 zsh/_colorls]
data/colorls.gemspec CHANGED
@@ -27,13 +27,13 @@ POST_INSTALL_MESSAGE = %(
27
27
 
28
28
  # rubocop:disable Metrics/BlockLength
29
29
  Gem::Specification.new do |spec|
30
- is_tagged = ENV['TRAVIS_TAG'] == "v#{ColorLS::VERSION}"
31
- is_origin = ENV['TRAVIS_REPO_SLUG'] == 'athityakumar/colorls'
32
- build_number = ENV['TRAVIS_BUILD_NUMBER']
30
+ is_tagged = ENV['GITHUB_REF'] == "refs/tags/v#{ColorLS::VERSION}"
31
+ is_origin = ENV['GITHUB_REPOSITORY_OWNER'] == 'athityakumar'
32
+ build_number = ENV['GITHUB_RUN_NUMBER']
33
33
 
34
34
  spec.name = 'colorls'
35
35
  spec.version = if build_number && is_origin && !is_tagged
36
- # Prereleasing on Travis CI
36
+ # Prereleasing on Github
37
37
  digits = ColorLS::VERSION.to_s.split '.'
38
38
  digits[-1] = digits[-1].to_s.succ
39
39
 
@@ -47,12 +47,12 @@ Gem::Specification.new do |spec|
47
47
  spec.homepage = 'https://github.com/athityakumar/colorls'
48
48
  spec.license = 'MIT'
49
49
 
50
- spec.required_ruby_version = '>= 2.5.0'
50
+ spec.required_ruby_version = '>= 2.6.0'
51
51
 
52
- spec.files = IO.popen(
52
+ spec.files = %w[man/colorls.1 man/colorls.1 zsh/_colorls] + IO.popen(
53
53
  %w[git ls-files -z], external_encoding: Encoding::ASCII_8BIT
54
54
  ).read.split("\x0").reject do |f|
55
- f.match(%r{^(test|spec|features)/})
55
+ f.match(%r{^(test|spec|features|[.]github)/})
56
56
  end
57
57
 
58
58
  spec.bindir = 'exe'
@@ -76,10 +76,10 @@ Gem::Specification.new do |spec|
76
76
  spec.add_development_dependency 'ronn', '~> 0'
77
77
  spec.add_development_dependency 'rspec', '~> 3.7'
78
78
  spec.add_development_dependency 'rspec-its', '~> 1.2'
79
- spec.add_development_dependency 'rubocop', '~> 1.11.0'
80
- spec.add_development_dependency 'rubocop-performance', '~> 1.10.1'
79
+ spec.add_development_dependency 'rubocop', '~> 1.22.0'
80
+ spec.add_development_dependency 'rubocop-performance', '~> 1.13.0'
81
81
  spec.add_development_dependency 'rubocop-rake', '~> 0.5'
82
- spec.add_development_dependency 'rubocop-rspec', '~> 2.0'
82
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.9.0'
83
83
  spec.add_development_dependency 'rubygems-tasks', '~> 0'
84
84
  spec.add_development_dependency 'simplecov', '~> 0.21.2'
85
85
  end
data/lib/colorls/core.rb CHANGED
@@ -8,8 +8,17 @@ module ColorLS
8
8
  @file_encoding
9
9
  end
10
10
 
11
- @screen_width = IO.console.winsize[1]
12
- @screen_width = 80 if @screen_width.zero?
11
+ def self.terminal_width
12
+ console = IO.console
13
+
14
+ width = IO.console_size[1]
15
+
16
+ return width if console.nil? || console.winsize[1].zero?
17
+
18
+ console.winsize[1]
19
+ end
20
+
21
+ @screen_width = terminal_width
13
22
 
14
23
  def self.screen_width
15
24
  @screen_width
@@ -17,8 +26,9 @@ module ColorLS
17
26
 
18
27
  class Core
19
28
  def initialize(all: false, sort: false, show: false,
20
- mode: nil, git_status: false, almost_all: false, colors: [], group: nil,
21
- reverse: false, hyperlink: false, tree_depth: nil, show_group: true, show_user: true)
29
+ mode: nil, show_git: false, almost_all: false, colors: [], group: nil,
30
+ reverse: false, hyperlink: false, tree_depth: nil, show_inode: false,
31
+ indicator_style: 'slash', long_style_options: {})
22
32
  @count = {folders: 0, recognized_files: 0, unrecognized_files: 0}
23
33
  @all = all
24
34
  @almost_all = almost_all
@@ -28,10 +38,16 @@ module ColorLS
28
38
  @group = group
29
39
  @show = show
30
40
  @one_per_line = mode == :one_per_line
31
- init_long_format(mode,show_group,show_user)
41
+ @show_inode = show_inode
42
+ init_long_format(mode,long_style_options)
32
43
  @tree = {mode: mode == :tree, depth: tree_depth}
33
44
  @horizontal = mode == :horizontal
34
- @git_status = init_git_status(git_status)
45
+ @git_status = init_git_status(show_git)
46
+ @time_style = long_style_options.key?(:time_style) ? long_style_options[:time_style] : ''
47
+ @indicator_style = indicator_style
48
+ @hard_links_count = long_style_options.key?(:hard_links_count) ? long_style_options[:hard_links_count] : true
49
+ # how much characters an item occupies besides its name
50
+ @additional_chars_per_item = 12 + (@show_git ? 4 : 0) + (@show_inode ? 10 : 0)
35
51
 
36
52
  init_colors colors
37
53
 
@@ -65,13 +81,24 @@ module ColorLS
65
81
  ls
66
82
  end
67
83
 
68
- def display_report
69
- print "\n Found #{@count.values.sum} items in total.".colorize(@colors[:report])
84
+ def display_report(report_mode)
85
+ if report_mode == :short
86
+ puts <<~REPORT
87
+
88
+ \s\s\s\sFolders: #{@count[:folders]}, Files: #{@count[:recognized_files] + @count[:unrecognized_files]}.
89
+ REPORT
90
+ .colorize(@colors[:report])
91
+ else
92
+ puts <<~REPORT
70
93
 
71
- puts "\n\n\tFolders\t\t\t: #{@count[:folders]}"\
72
- "\n\tRecognized files\t: #{@count[:recognized_files]}"\
73
- "\n\tUnrecognized files\t: #{@count[:unrecognized_files]}"
74
- .colorize(@colors[:report])
94
+ Found #{@count.values.sum} items in total.
95
+
96
+ \tFolders\t\t\t: #{@count[:folders]}
97
+ \tRecognized files\t: #{@count[:recognized_files]}
98
+ \tUnrecognized files\t: #{@count[:unrecognized_files]}
99
+ REPORT
100
+ .colorize(@colors[:report])
101
+ end
75
102
  end
76
103
 
77
104
  private
@@ -106,13 +133,14 @@ module ColorLS
106
133
  end
107
134
  end
108
135
 
109
- def init_long_format(mode, show_group, show_user)
136
+ def init_long_format(mode, long_style_options)
110
137
  @long = mode == :long
111
- @show_group = show_group
112
- @show_user = show_user
138
+ @show_group = long_style_options.key?(:show_group) ? long_style_options[:show_group] : true
139
+ @show_user = long_style_options.key?(:show_user) ? long_style_options[:show_user] : true
113
140
  end
114
141
 
115
142
  def init_git_status(show_git)
143
+ @show_git = show_git
116
144
  return {}.freeze unless show_git
117
145
 
118
146
  # stores git status information per directory
@@ -126,11 +154,8 @@ module ColorLS
126
154
  end
127
155
  end
128
156
 
129
- # how much characters an item occupies besides its name
130
- CHARS_PER_ITEM = 12
131
-
132
157
  def item_widths
133
- @contents.map { |item| Unicode::DisplayWidth.of(item.show) + CHARS_PER_ITEM }
158
+ @contents.map { |item| Unicode::DisplayWidth.of(item.show) + @additional_chars_per_item }
134
159
  end
135
160
 
136
161
  def filter_hidden_contents
@@ -228,14 +253,14 @@ module ColorLS
228
253
  def size_info(filesize)
229
254
  size = Filesize.new(filesize).pretty.split
230
255
  size = "#{size[0][0..-4].rjust(4,' ')} #{size[1].ljust(3,' ')}"
231
- return size.colorize(@colors[:file_large]) if filesize >= 512 * 1024 ** 2
232
- return size.colorize(@colors[:file_medium]) if filesize >= 128 * 1024 ** 2
256
+ return size.colorize(@colors[:file_large]) if filesize >= 512 * (1024 ** 2)
257
+ return size.colorize(@colors[:file_medium]) if filesize >= 128 * (1024 ** 2)
233
258
 
234
259
  size.colorize(@colors[:file_small])
235
260
  end
236
261
 
237
262
  def mtime_info(file_mtime)
238
- mtime = file_mtime.asctime
263
+ mtime = @time_style.start_with?('+') ? file_mtime.strftime(@time_style.delete_prefix('+')) : file_mtime.asctime
239
264
  now = Time.now
240
265
  return mtime.colorize(@colors[:hour_old]) if now - file_mtime < 60 * 60
241
266
  return mtime.colorize(@colors[:day_old]) if now - file_mtime < 24 * 60 * 60
@@ -275,12 +300,19 @@ module ColorLS
275
300
  end
276
301
  end
277
302
 
303
+ def inode(content)
304
+ return '' unless @show_inode
305
+
306
+ content.stats.ino.to_s.rjust(10).colorize(@colors[:inode])
307
+ end
308
+
278
309
  def long_info(content)
279
310
  return '' unless @long
280
311
 
281
312
  links = content.nlink.to_s.rjust(@linklength)
282
313
 
283
- line_array = [mode_info(content.stats), links]
314
+ line_array = [mode_info(content.stats)]
315
+ line_array.push links if @hard_links_count
284
316
  line_array.push user_info(content) if @show_user
285
317
  line_array.push group_info(content.group) if @show_group
286
318
  line_array.concat [size_info(content.size), mtime_info(content.mtime)]
@@ -306,14 +338,14 @@ module ColorLS
306
338
  def fetch_string(content, key, color, increment)
307
339
  @count[increment] += 1
308
340
  value = increment == :folders ? @folders[key] : @files[key]
309
- logo = value.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
341
+ logo = value.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..].to_i(16)].pack('U') }
310
342
  name = content.show
311
343
  name = make_link(content) if @hyperlink
312
- name += content.directory? ? '/' : ' '
344
+ name += content.directory? && @indicator_style != 'none' ? '/' : ' '
313
345
  entry = "#{out_encode(logo)} #{out_encode(name)}"
314
346
  entry = entry.bright if !content.directory? && content.executable?
315
347
 
316
- "#{long_info(content)} #{git_info(content)} #{entry.colorize(color)}#{symlink_info(content)}"
348
+ "#{inode(content)} #{long_info(content)} #{git_info(content)} #{entry.colorize(color)}#{symlink_info(content)}"
317
349
  end
318
350
 
319
351
  def ls_line(chunk, widths)
@@ -321,9 +353,9 @@ module ColorLS
321
353
  line = +''
322
354
  chunk.each_with_index do |content, i|
323
355
  entry = fetch_string(content, *options(content))
324
- line << ' ' * padding
356
+ line << (' ' * padding)
325
357
  line << ' ' << entry.encode(Encoding.default_external, undef: :replace)
326
- padding = widths[i] - Unicode::DisplayWidth.of(content.show) - CHARS_PER_ITEM
358
+ padding = widths[i] - Unicode::DisplayWidth.of(content.show) - @additional_chars_per_item
327
359
  end
328
360
  print line << "\n"
329
361
  end
@@ -391,7 +423,7 @@ module ColorLS
391
423
  def tree_branch_preprint(prespace, indent, prespace_icon)
392
424
  return prespace_icon if prespace.zero?
393
425
 
394
- ' │ ' * (prespace/indent) + prespace_icon + '─' * indent
426
+ (' │ ' * (prespace/indent)) + prespace_icon + ('─' * indent)
395
427
  end
396
428
 
397
429
  def make_link(content)
@@ -14,10 +14,12 @@ module ColorLS
14
14
  def initialize(name:, parent:, path: nil, link_info: true)
15
15
  @name = name
16
16
  @parent = parent
17
- @path = path.nil? ? File.join(parent, name) : path
17
+ @path = path.nil? ? File.join(parent, name) : +path
18
18
  @stats = File.lstat(@path)
19
19
  @show_name = nil
20
20
 
21
+ @path.force_encoding(ColorLS.file_encoding)
22
+
21
23
  handle_symlink(@path) if link_info && @stats.symlink?
22
24
  end
23
25
 
data/lib/colorls/flags.rb CHANGED
@@ -11,7 +11,7 @@ module ColorLS
11
11
  @light_colors = false
12
12
 
13
13
  @opts = default_opts
14
- @show_report = false
14
+ @report_mode = false
15
15
  @exit_status_code = 0
16
16
 
17
17
  parse_options
@@ -35,7 +35,7 @@ module ColorLS
35
35
  list = @parser.top.list + @parser.base.list
36
36
 
37
37
  result = list.collect do |o|
38
- next unless o.respond_to? 'desc'
38
+ next unless o.respond_to? :desc
39
39
 
40
40
  flags = o.short + o.long
41
41
  next if flags.empty?
@@ -88,7 +88,7 @@ module ColorLS
88
88
  $stderr.puts "#{dir}: #{e}".colorize(:red)
89
89
  end
90
90
 
91
- core.display_report if @show_report
91
+ core.display_report(@report_mode) if @report_mode
92
92
 
93
93
  @exit_status_code
94
94
  end
@@ -102,11 +102,12 @@ module ColorLS
102
102
  mode: STDOUT.tty? ? :vertical : :one_per_line, # rubocop:disable Style/GlobalStdStream
103
103
  all: false,
104
104
  almost_all: false,
105
- git_status: false,
105
+ show_git: false,
106
106
  colors: [],
107
107
  tree_depth: 3,
108
- show_group: true,
109
- show_user: true
108
+ show_inode: false,
109
+ indicator_style: 'slash',
110
+ long_style_options: {}
110
111
  }
111
112
  end
112
113
 
@@ -139,8 +140,19 @@ module ColorLS
139
140
  options.on('-A', '--almost-all', 'do not list . and ..') { @opts[:almost_all] = true }
140
141
  options.on('-d', '--dirs', 'show only directories') { @opts[:show] = :dirs }
141
142
  options.on('-f', '--files', 'show only files') { @opts[:show] = :files }
142
- options.on('--gs', '--git-status', 'show git status for each file') { @opts[:git_status] = true }
143
- options.on('--report', 'show brief report') { @show_report = true }
143
+ options.on('--gs', '--git-status', 'show git status for each file') { @opts[:show_git] = true }
144
+ options.on('-p', 'append / indicator to directories') { @opts[:indicator_style] = 'slash' }
145
+ options.on('-i', '--inode', 'show inode number') { @opts[:show_inode] = true }
146
+ options.on('--report=[WORD]', %w[short long], 'show report: short, long (default if omitted)') do |word|
147
+ word ||= :long
148
+ @report_mode = word.to_sym
149
+ end
150
+ options.on(
151
+ '--indicator-style=[STYLE]',
152
+ %w[none slash], 'append indicator with style STYLE to entry names: none, slash (-p) (default)'
153
+ ) do |style|
154
+ @opts[:indicator_style] = style
155
+ end
144
156
  end
145
157
 
146
158
  def add_format_options(options)
@@ -164,17 +176,36 @@ module ColorLS
164
176
  options.on('-C', 'list entries by columns instead of by lines') { @opts[:mode] = :vertical }
165
177
  end
166
178
 
179
+ def default_long_style_options
180
+ {
181
+ show_group: true,
182
+ show_user: true,
183
+ time_style: '',
184
+ hard_links_count: true
185
+ }
186
+ end
187
+
167
188
  def add_long_style_options(options)
168
- options.on('-l', '--long', 'use a long listing format') { @opts[:mode] = :long }
189
+ long_style_options = default_long_style_options
190
+ options.on('-l', '--long', 'use a long listing format') { @opts[:mode] = :long }
169
191
  options.on('-o', 'use a long listing format without group information') do
170
192
  @opts[:mode] = :long
171
- @opts[:show_group] = false
193
+ long_style_options[:show_group] = false
172
194
  end
173
195
  options.on('-g', 'use a long listing format without owner information') do
174
196
  @opts[:mode] = :long
175
- @opts[:show_user] = false
197
+ long_style_options[:show_user] = false
198
+ end
199
+ options.on('-G', '--no-group', 'show no group information in a long listing') do
200
+ long_style_options[:show_group] = false
201
+ end
202
+ options.on('--time-style=FORMAT', String, 'use time display format') do |time_style|
203
+ long_style_options[:time_style] = time_style
204
+ end
205
+ options.on('--no-hardlinks', 'show no hard links count in a long listing') do
206
+ long_style_options[:hard_links_count] = false
176
207
  end
177
- options.on('-G', '--no-group', 'show no group information in a long listing') { @opts[:show_group] = false }
208
+ @opts[:long_style_options] = long_style_options
178
209
  end
179
210
 
180
211
  def add_general_options(options)
data/lib/colorls/git.rb CHANGED
@@ -5,6 +5,9 @@ require 'set'
5
5
 
6
6
  module ColorLS
7
7
  module Git
8
+ EMPTY_SET = Set.new.freeze
9
+ private_constant :EMPTY_SET
10
+
8
11
  def self.status(repo_path)
9
12
  prefix, success = git_prefix(repo_path)
10
13
 
@@ -13,10 +16,11 @@ module ColorLS
13
16
  prefix_path = Pathname.new(prefix)
14
17
 
15
18
  git_status = Hash.new { |hash, key| hash[key] = Set.new }
19
+ git_status_default = EMPTY_SET
16
20
 
17
21
  git_subdir_status(repo_path) do |mode, file|
18
22
  if file == prefix
19
- git_status.default = Set[mode].freeze
23
+ git_status_default = Set[mode].freeze
20
24
  else
21
25
  path = Pathname.new(file).relative_path_from(prefix_path)
22
26
  git_status[path.descend.first.cleanpath.to_s].add(mode)
@@ -25,7 +29,7 @@ module ColorLS
25
29
 
26
30
  warn "git status failed in #{repo_path}" unless $CHILD_STATUS.success?
27
31
 
28
- git_status.default = Set.new.freeze if git_status.default.nil?
32
+ git_status.default = git_status_default
29
33
  git_status.freeze
30
34
  end
31
35
 
@@ -6,6 +6,6 @@ class String
6
6
  end
7
7
 
8
8
  def uniq
9
- split('').uniq.join
9
+ chars.uniq.join
10
10
  end
11
11
  end
data/lib/colorls.rb CHANGED
@@ -5,6 +5,7 @@ require 'etc'
5
5
  require 'English'
6
6
  require 'filesize'
7
7
  require 'io/console'
8
+ require 'io/console/size'
8
9
  require 'rainbow/ext/string'
9
10
  require 'clocale'
10
11
  require 'unicode/display_width'
@@ -36,6 +36,7 @@ tree: cyan
36
36
  empty: yellow
37
37
  error: red
38
38
  normal: darkkhaki
39
+ inode: moccasin
39
40
 
40
41
  # Git
41
42
  addition: chartreuse
@@ -11,6 +11,7 @@ editorconfig: conf
11
11
  scss: css
12
12
  docx: doc
13
13
  gdoc: doc
14
+ odt: doc
14
15
  dockerfile: docker
15
16
  mobi: ebook
16
17
  eot: font
@@ -27,6 +28,7 @@ gif: image
27
28
  ico: image
28
29
  jpeg: image
29
30
  jpg: image
31
+ odg: image
30
32
  png: image
31
33
  pxm: image
32
34
  svg: image
@@ -41,6 +43,7 @@ mkd: md
41
43
  rdoc: md
42
44
  readme: md
43
45
  gslides: ppt
46
+ odp: ppt
44
47
  pptx: ppt
45
48
  ipynb: py
46
49
  pyc: py
@@ -81,6 +84,7 @@ exe: windows
81
84
  ini: windows
82
85
  csv: xls
83
86
  gsheet: xls
87
+ ods: xls
84
88
  xlsx: xls
85
89
  xul: xml
86
90
  yaml: yml
@@ -36,6 +36,7 @@ tree: cyan
36
36
  empty: yellow
37
37
  error: red
38
38
  normal: black
39
+ inode: black
39
40
 
40
41
  # Git
41
42
  addition: chartreuse
data/man/colorls.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "COLORLS" "1" "January 2021" "colorls 1.4.4" "colorls Manual"
4
+ .TH "COLORLS" "1" "March 2022" "colorls 1.4.4" "colorls Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBcolorls\fR \- list directory contents with colors and icons
@@ -43,8 +43,20 @@ show only files
43
43
  show git status for each file
44
44
  .
45
45
  .TP
46
+ \fB\-p\fR
47
+ append / indicator to directories
48
+ .
49
+ .TP
50
+ \fB\-i\fR, \fB\-\-inode\fR
51
+ show inode number
52
+ .
53
+ .TP
46
54
  \fB\-\-report\fR
47
- show brief report
55
+ show report: short, long (default if omitted)
56
+ .
57
+ .TP
58
+ \fB\-\-indicator\-style\fR
59
+ append indicator with style STYLE to entry names: none, slash (\-p) (default)
48
60
  .
49
61
  .TP
50
62
  \fB\-\-format\fR
@@ -83,6 +95,14 @@ use a long listing format without owner information
83
95
  show no group information in a long listing
84
96
  .
85
97
  .TP
98
+ \fB\-\-time\-style\fR
99
+ use time display format
100
+ .
101
+ .TP
102
+ \fB\-\-no\-hardlinks\fR
103
+ show no hard links count in a long listing
104
+ .
105
+ .TP
86
106
  \fB\-\-sd\fR, \fB\-\-sort\-dirs\fR, \fB\-\-group\-directories\-first\fR
87
107
  sort directories first
88
108
  .
data/zsh/_colorls CHANGED
@@ -14,7 +14,11 @@ _arguments -s -S \
14
14
  "--files[show only files]" \
15
15
  "--gs[show git status for each file]" \
16
16
  "--git-status[show git status for each file]" \
17
- "--report[show brief report]" \
17
+ "-p[append / indicator to directories]" \
18
+ "-i[show inode number]" \
19
+ "--inode[show inode number]" \
20
+ "--report[show report: short, long (default if omitted)]" \
21
+ "--indicator-style[append indicator with style STYLE to entry names: none, slash (-p) (default)]" \
18
22
  "--format[use format: across (-x), horizontal (-x), long (-l), single-column (-1), vertical (-C)]" \
19
23
  "-1[list one file per line]" \
20
24
  "--tree[shows tree view of the directory]" \
@@ -26,6 +30,8 @@ _arguments -s -S \
26
30
  "-g[use a long listing format without owner information]" \
27
31
  "-G[show no group information in a long listing]" \
28
32
  "--no-group[show no group information in a long listing]" \
33
+ "--time-style[use time display format]" \
34
+ "--no-hardlinks[show no hard links count in a long listing]" \
29
35
  "--sd[sort directories first]" \
30
36
  "--sort-dirs[sort directories first]" \
31
37
  "--group-directories-first[sort directories first]" \
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: 1.4.4
4
+ version: 1.4.5.pre.93
5
5
  platform: ruby
6
6
  authors:
7
7
  - Athitya Kumar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-10 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -224,28 +224,28 @@ dependencies:
224
224
  requirements:
225
225
  - - "~>"
226
226
  - !ruby/object:Gem::Version
227
- version: 1.11.0
227
+ version: 1.22.0
228
228
  type: :development
229
229
  prerelease: false
230
230
  version_requirements: !ruby/object:Gem::Requirement
231
231
  requirements:
232
232
  - - "~>"
233
233
  - !ruby/object:Gem::Version
234
- version: 1.11.0
234
+ version: 1.22.0
235
235
  - !ruby/object:Gem::Dependency
236
236
  name: rubocop-performance
237
237
  requirement: !ruby/object:Gem::Requirement
238
238
  requirements:
239
239
  - - "~>"
240
240
  - !ruby/object:Gem::Version
241
- version: 1.10.1
241
+ version: 1.13.0
242
242
  type: :development
243
243
  prerelease: false
244
244
  version_requirements: !ruby/object:Gem::Requirement
245
245
  requirements:
246
246
  - - "~>"
247
247
  - !ruby/object:Gem::Version
248
- version: 1.10.1
248
+ version: 1.13.0
249
249
  - !ruby/object:Gem::Dependency
250
250
  name: rubocop-rake
251
251
  requirement: !ruby/object:Gem::Requirement
@@ -266,14 +266,14 @@ dependencies:
266
266
  requirements:
267
267
  - - "~>"
268
268
  - !ruby/object:Gem::Version
269
- version: '2.0'
269
+ version: 2.9.0
270
270
  type: :development
271
271
  prerelease: false
272
272
  version_requirements: !ruby/object:Gem::Requirement
273
273
  requirements:
274
274
  - - "~>"
275
275
  - !ruby/object:Gem::Version
276
- version: '2.0'
276
+ version: 2.9.0
277
277
  - !ruby/object:Gem::Dependency
278
278
  name: rubygems-tasks
279
279
  requirement: !ruby/object:Gem::Requirement
@@ -312,7 +312,6 @@ extra_rdoc_files: []
312
312
  files:
313
313
  - ".gitignore"
314
314
  - ".rubocop.yml"
315
- - ".travis.yml"
316
315
  - CODE_OF_CONDUCT.md
317
316
  - CONTRIBUTING.md
318
317
  - CONTRIBUTORS.md
@@ -376,14 +375,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
376
375
  requirements:
377
376
  - - ">="
378
377
  - !ruby/object:Gem::Version
379
- version: 2.5.0
378
+ version: 2.6.0
380
379
  required_rubygems_version: !ruby/object:Gem::Requirement
381
380
  requirements:
382
- - - ">="
381
+ - - ">"
383
382
  - !ruby/object:Gem::Version
384
- version: '0'
383
+ version: 1.3.1
385
384
  requirements: []
386
- rubygems_version: 3.0.8
385
+ rubygems_version: 3.3.7
387
386
  signing_key:
388
387
  specification_version: 4
389
388
  summary: A Ruby CLI gem that beautifies the terminal's ls command, with color and
data/.travis.yml DELETED
@@ -1,123 +0,0 @@
1
- conditions: v1
2
-
3
- if: branch = master OR tag IS present
4
-
5
- language:
6
- ruby
7
-
8
- os:
9
- - linux
10
-
11
- cache: bundler
12
-
13
- rvm:
14
- - '2.5'
15
- - '2.6'
16
- - '2.7'
17
- - 'truffleruby-head'
18
-
19
- jobs:
20
- fast_finish: true
21
-
22
- allow_failures:
23
- - rvm: truffleruby-head
24
-
25
- include:
26
- - os: osx
27
- rvm: '2.7'
28
-
29
- - os: windows
30
- language: bash
31
- before_cache:
32
- - |-
33
- # https://unix.stackexchange.com/a/137322/107554
34
- pacman --sync --clean --noconfirm
35
- - bundle clean
36
- before_install:
37
- - ruby --version
38
- - gem --version
39
- - |
40
- if [[ ! -f /C/tools/msys64/--msys2-- ]]; then
41
- rm -rf /C/tools/msys64
42
- choco uninstall -y mingw
43
- choco upgrade --no-progress -y msys2 --params /NoUpdate
44
- ridk.cmd install dev_tools
45
- fi
46
- - touch /C/tools/msys64/--msys2--
47
- install:
48
- - bundle config set path 'vendor/bundle'
49
- - bundle install --retry=3
50
- - export MSYS=winsymlinks:nativestrict
51
- cache:
52
- directories:
53
- - $HOME/AppData/Local/Temp/chocolatey
54
- - /C/tools/msys64
55
- - vendor/bundle
56
-
57
- before_install:
58
- - gem --version
59
- - gem install bundler -v '~> 2'
60
-
61
- script:
62
- - bundle exec rubocop
63
- - bundle exec rake spec
64
- - bundle exec rake install
65
- - bundle binstubs colorls
66
- - PATH=$PWD/bin:$PATH
67
- - colorls
68
- - colorls -1
69
- - colorls -a
70
- - colorls -A
71
- - colorls -d
72
- - colorls -f
73
- - colorls -l
74
- - colorls -l spec/fixtures/symlinks
75
- - ( cd spec/fixtures ; colorls .hidden-file ) | fgrep '.hidden-file'
76
- - colorls -l README.md
77
- - colorls -r
78
- - colorls --sd
79
- - colorls --sf
80
- - colorls --hyperlink
81
- - colorls -t
82
- - colorls --sort=time
83
- - colorls -U
84
- - colorls --sort=none
85
- - colorls -S
86
- - colorls --sort=size
87
- - colorls -h
88
- - colorls --gs
89
- - colorls spec/fixtures/symlinks
90
- - colorls README.md
91
- - colorls *
92
- - colorls | grep /
93
- - colorls --color
94
- - colorls --color=auto
95
- - colorls --color=never
96
- - colorls --color=always
97
- - colorls --tree spec
98
- - colorls --tree=1
99
- - LC_ALL=C colorls spec/fixtures/
100
- - LC_ALL=C colorls --git spec/fixtures/
101
- - |
102
- if colorls does-not-exist; then
103
- echo "expected error!"
104
- exit 1
105
- else
106
- ret=$?
107
- if [ $ret -ne 2 ]; then
108
- echo "unexpected error: $ret"
109
- exit 1
110
- fi
111
- fi
112
-
113
- deploy:
114
- provider: rubygems
115
- api_key:
116
- secure: iHo85pvy3iIp0/r8mbP0q0VPCFyYcwaQb19YUxwIGbMrksswIJPe2bsdAQTvd1fU3U+uwAgyzfaLMWgY6T1evVjv5GGXW0zmNthgWuaCbTBmzx3q6OPV6zJLsinKSJ4xbKjmTOi6BIhXTtc09dRRNp1d9U8HtmM9KyvD5ORm5M9W0/WxP3+8oOe0/yl3DOVNgCQ0j64KEqowLlfdJXe2q5iSUkZEvf+o5F6pz0g7dFiVHPVpJbZ9sOchPzYNMjLCx4jPt42J806oAH7TMeRC4lFpKgJr9U05LRGb22jiokHH6gl17RpuGRYJIexWkf3jb5iy9bivT2S2fGo9/BBKO5BvQAaL7McCwpdKM2QEyVy7RVbUz5D8vfXkJNIJankQj3Ikuz7qYyDglucGCpSGjecNCqL61NoBag7ORJ0RMWg7zklKjR59zeT4oks8rByx688y5Oi4f9Z98SPfc9NIJbHxbrDHtr13gm509cEXxwOLuVePa9J+mDGq2Uawi/PuIon1x2ztHUgvTx0DSYtwv96HzXet8QqXHwRKKjddxEApvCvGvaJV3akeUVjcsyei892ajHP6CffaKazPtogotfsu68g8WmKFWHFRkdmS6NIqg7MrnMRCjDkxAoQYYzt6cl95aBk4G7CTbjtXgIct1LGMM/WjE6K/jpeF0YLsVR4=
117
- gem: colorls
118
- on:
119
- all_branches: true
120
- condition: $TRAVIS_BRANCH = master || $TRAVIS_TAG =~ ^v[0-9][.]
121
- repo: athityakumar/colorls
122
- rvm: '2.6'
123
- os: linux