Merge pull request #229 from avdv/socket-chardev-blockdev

Add support for special files
This commit is contained in:
Claudio Bley 2018-11-12 08:23:51 +01:00 committed by GitHub
commit 7a9ea25808
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 41 deletions

View file

@ -139,14 +139,6 @@ module ColorLS
@file_aliases = ColorLS::Yaml.new('file_aliases.yaml').load(aliase: true) @file_aliases = ColorLS::Yaml.new('file_aliases.yaml').load(aliase: true)
@folders = ColorLS::Yaml.new('folders.yaml').load @folders = ColorLS::Yaml.new('folders.yaml').load
@folder_aliases = ColorLS::Yaml.new('folder_aliases.yaml').load(aliase: true) @folder_aliases = ColorLS::Yaml.new('folder_aliases.yaml').load(aliase: true)
@file_keys = @files.keys
@file_aliase_keys = @file_aliases.keys
@folder_keys = @folders.keys
@folder_aliase_keys = @folder_aliases.keys
@all_files = @file_keys + @file_aliase_keys
@all_folders = @folder_keys + @folder_aliase_keys
end end
def chunkify def chunkify
@ -318,23 +310,33 @@ module ColorLS
print "\n" print "\n"
end end
def file_color(file, key)
color_key = case
when file.chardev? then :chardev
when file.blockdev? then :blockdev
when file.socket? then :socket
else
@files.key?(key) ? :recognized_file : :unrecognized_file
end
@colors[color_key]
end
def options(content) def options(content)
if content.directory? if content.directory?
key = content.name.to_sym key = content.name.to_sym
key = @folder_aliases[key] unless @folders.key? key
key = :folder if key.nil?
color = @colors[:dir] color = @colors[:dir]
return [:folder, color, :folders] unless @all_folders.include?(key) group = :folders
key = @folder_aliases[key] unless @folder_keys.include?(key) else
return [key, color, :folders] key = content.name.split('.').last.downcase.to_sym
key = @file_aliases[key] unless @files.key? key
key = :file if key.nil?
color = file_color(content, key)
group = @files.key?(key) ? :recognized_files : :unrecognized_files
end end
color = @colors[:recognized_file] [key, color, group]
return [content.downcase.to_sym, color, :recognized_files] if @file_keys.include?(key)
key = content.name.split('.').last.downcase.to_sym
return [:file, @colors[:unrecognized_file], :unrecognized_files] unless @all_files.include?(key)
key = @file_aliases[key] unless @file_keys.include?(key)
[key, color, :recognized_files]
end end
def tree_traverse(path, prespace, indent) def tree_traverse(path, prespace, indent)

View file

@ -1,5 +1,7 @@
module ColorLS module ColorLS
class FileInfo class FileInfo
extend Forwardable
@@users = {} # rubocop:disable Style/ClassVars @@users = {} # rubocop:disable Style/ClassVars
@@groups = {} # rubocop:disable Style/ClassVars @@groups = {} # rubocop:disable Style/ClassVars
@ -31,10 +33,6 @@ module ColorLS
@stats.uid.to_s @stats.uid.to_s
end end
def owned?
@stats.owned?
end
def group def group
return @@groups[@stats.gid] if @@groups.key? @stats.gid return @@groups[@stats.gid] if @@groups.key? @stats.gid
group = Etc.getgrgid(@stats.gid) group = Etc.getgrgid(@stats.gid)
@ -43,22 +41,6 @@ module ColorLS
@stats.gid.to_s @stats.gid.to_s
end end
def mtime
@stats.mtime
end
def size
@stats.size
end
def directory?
@stats.directory?
end
def symlink?
@stats.symlink?
end
# target of a symlink (only available for symlinks) # target of a symlink (only available for symlinks)
def link_target def link_target
@target @target
@ -67,5 +49,7 @@ module ColorLS
def to_s def to_s
name name
end end
def_delegators :@stats, :directory?, :socket?, :chardev?, :symlink?, :blockdev?, :mtime, :size, :owned?
end end
end end

View file

@ -7,6 +7,11 @@ dir: dodgerblue
dead_link: red dead_link: red
link: cyan link: cyan
# special files
socket: green
blockdev: green
chardev: green
# Access Modes # Access Modes
write: darkkhaki write: darkkhaki
read: limegreen read: limegreen

View file

@ -7,6 +7,11 @@ dir: navyblue
dead_link: red dead_link: red
link: cyan link: cyan
# special files
socket: darkgray
blockdev: darkgray
chardev: darkgray
# Access Modes # Access Modes
write: red write: red
read: sienna read: sienna

View file

@ -65,6 +65,9 @@ RSpec.describe ColorLS::Flags do
:owner => "user", :owner => "user",
:name => "a.txt", :name => "a.txt",
:size => 128, :size => 128,
:blockdev? => false,
:chardev? => false,
:socket? => false,
:symlink? => false, :symlink? => false,
:stats => OpenStruct.new( :stats => OpenStruct.new(
mode: 0o444, # read for user, owner, other mode: 0o444, # read for user, owner, other