From b6220c85c418d949e4a5d8fba90ad2cda2379645 Mon Sep 17 00:00:00 2001 From: Rikuoh Date: Tue, 21 May 2024 22:32:10 +0900 Subject: [PATCH] -l --- ls.rb | 24 +++++++++++++++++++++--- ls2.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 ls2.rb diff --git a/ls.rb b/ls.rb index cf612ad..31432e7 100644 --- a/ls.rb +++ b/ls.rb @@ -5,6 +5,24 @@ require 'etc' COLUMNS = 3 MARGIN = 3 +PERMISSION = { + '0' => '---', + '1' => '--x', + '2' => '-w-', + '3' => '-wx', + '4' => 'r--', + '5' => 'r-x', + '6' => 'rw-', + '7' => 'rwx' +}.freeze +FILETYPE = { + '1' => 'p', + '2' => 'c', + '4' => 'd', + '6' => 'b', + '10' => '-', + '12' => 'l' +}.freeze def run listed_filenames = list_filenames @@ -17,9 +35,9 @@ def list_filenames params = ARGV.getopts('a', 'r', 'l') filenames = params['a'] ? Dir.glob('*', File::FNM_DOTMATCH) : Dir.glob('*') filenames = filenames.reverse if params['r'] - params['l'] ? ownerinfo(filenames) : filenames - if params['r'] - filenames.reverse + if params['l'] + ownerinfo(filenames) + exit else filenames end diff --git a/ls2.rb b/ls2.rb new file mode 100644 index 0000000..028e958 --- /dev/null +++ b/ls2.rb @@ -0,0 +1,30 @@ +require 'optparse' +require 'etc' + +NUMBER_OF_COLUMNS = 3 +COLUMN_MARGIN = 3 +SIZE_INDENT = 2 + +def main + files = Dir.glob('*').sort + output_ls(files) +end + +def output_ls(files) + number_of_row = (files.size / NUMBER_OF_COLUMNS.to_f) + max_lengths = make_max_lengths(files, number_of_row) + + (0...number_of_row).each do |row| + NUMBER_OF_COLUMNS.times do |column| + index = row + column * number_of_row + print files[index].ljust(max_lengths[column] + COLUMN_MARGIN) if files[index] + end + puts + end +end + +def make_max_lengths(files, number_of_row) + files.each_slice(number_of_row).to_a.map { _1.map(&:length).max } +end + +main