diff --git a/lib/colorls/core.rb b/lib/colorls/core.rb index 89a647f..f5f7707 100644 --- a/lib/colorls/core.rb +++ b/lib/colorls/core.rb @@ -407,6 +407,7 @@ module ColorLS when file.blockdev? then :blockdev when file.socket? then :socket when file.executable? then :executable_file + when file.hidden? then :hidden when @files.key?(key) then :recognized_file else :unrecognized_file end @@ -415,20 +416,32 @@ module ColorLS def options(content) if content.directory? - key = content.name.downcase.to_sym - key = @folder_aliases[key] unless @folders.key? key - key = :folder if key.nil? - color = @colors[:dir] - group = :folders + options_directory(content).values_at(:key, :color, :group) else - key = File.extname(content.name).delete_prefix('.').downcase.to_sym - key = @file_aliases[key] unless @files.key? key - color = file_color(content, key) - group = @files.key?(key) ? :recognized_files : :unrecognized_files - key = :file if key.nil? + options_file(content).values_at(:key, :color, :group) end + end - [key, color, group] + def options_directory(content) + key = content.name.downcase.to_sym + key = @folder_aliases[key] unless @folders.key?(key) + key = :folder if key.nil? + + color = content.hidden? ? @colors[:hidden_dir] : @colors[:dir] + + {key: key, color: color, group: :folders} + end + + def options_file(content) + key = File.extname(content.name).delete_prefix('.').downcase.to_sym + key = @file_aliases[key] unless @files.key?(key) + + color = file_color(content, key) + group = @files.key?(key) ? :recognized_files : :unrecognized_files + + key = :file if key.nil? + + {key: key, color: color, group: group} end def tree_contents(path) diff --git a/lib/colorls/fileinfo.rb b/lib/colorls/fileinfo.rb index 94f421e..0ade7a0 100644 --- a/lib/colorls/fileinfo.rb +++ b/lib/colorls/fileinfo.rb @@ -40,6 +40,10 @@ module ColorLS @dead end + def hidden? + @name.start_with?('.') + end + def owner return @@users[@stats.uid] if @@users.key? @stats.uid diff --git a/lib/yaml/dark_colors.yaml b/lib/yaml/dark_colors.yaml index 37f4510..cb52a0d 100644 --- a/lib/yaml/dark_colors.yaml +++ b/lib/yaml/dark_colors.yaml @@ -9,9 +9,11 @@ dead_link: red link: cyan # special files -socket: green -blockdev: green -chardev: green +socket: green +blockdev: green +chardev: green +hidden: burlywood +hidden_dir: slategray # Access Modes write: darkkhaki diff --git a/lib/yaml/light_colors.yaml b/lib/yaml/light_colors.yaml index dff3283..e665c7a 100644 --- a/lib/yaml/light_colors.yaml +++ b/lib/yaml/light_colors.yaml @@ -9,9 +9,11 @@ dead_link: red link: cyan # special files -socket: darkgray -blockdev: darkgray -chardev: darkgray +socket: darkgray +blockdev: darkgray +chardev: darkgray +hidden: seagreen +hidden_dir: royalblue # Access Modes write: red diff --git a/spec/color_ls/core_spec.rb b/spec/color_ls/core_spec.rb index 907abbb..e6470dd 100644 --- a/spec/color_ls/core_spec.rb +++ b/spec/color_ls/core_spec.rb @@ -25,6 +25,7 @@ RSpec.describe ColorLS::Core do chardev?: false, socket?: false, symlink?: false, + hidden?: false, stats: instance_double(File::Stat, mode: 0o444, # read for user, owner, other setuid?: false, @@ -47,6 +48,7 @@ RSpec.describe ColorLS::Core do chardev?: false, socket?: false, symlink?: false, + hidden?: false, stats: instance_double(File::Stat, mode: 0o444, # read for user, owner, other setuid?: false, @@ -77,6 +79,7 @@ RSpec.describe ColorLS::Core do chardev?: false, socket?: false, symlink?: false, + hidden?: true, executable?: false ) diff --git a/spec/color_ls/flags_spec.rb b/spec/color_ls/flags_spec.rb index d09b1f6..746df84 100644 --- a/spec/color_ls/flags_spec.rb +++ b/spec/color_ls/flags_spec.rb @@ -26,6 +26,7 @@ RSpec.describe ColorLS::Flags do chardev?: false, socket?: false, symlink?: false, + hidden?: false, stats: instance_double(File::Stat, mode: 0o444, # read for user, owner, other setuid?: true, @@ -467,6 +468,7 @@ RSpec.describe ColorLS::Flags do chardev?: false, socket?: false, symlink?: true, + hidden?: false, link_target: "#{FIXTURES}/z.txt", dead?: false, executable?: false