diff --git a/.travis.yml b/.travis.yml index 64c9aaa..619756e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,4 +55,6 @@ script: - colorls --color=auto - colorls --color=never - colorls --color=always + - colorls --tree + - colorls --tree=1 diff --git a/README.md b/README.md index 652f4a5..4c011d5 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,11 @@ A Ruby script that colorizes the `ls` output with color and icons. Here are the - `-h` (or) `--help` - `-l` (or) `--long` - `-r` (or) `--report` - - `-t` (or) `--tree` + - `--tree` (or) `--tree=[DEPTH]` - `--gs` (or) `--git-status` - `--sd` (or) `--sort-dirs` or `--group-directories-first` - `--sf` (or) `--sort-files` + - `-t` - [Combination of flags](#combination-of-flags) - [Installation](#installation) - [Recommended configurations](#recommended-configurations) @@ -79,7 +80,7 @@ Man pages have been added. Checkout `man colorls`. ![image](https://user-images.githubusercontent.com/17109060/32149082-96a83fec-bd25-11e7-9081-7f77e4c90e90.png) -- With `-t` (or) `--tree` : Shows tree view of the directory +- With `--tree` (or) `--tree=[DEPTH]` : Shows tree view of the directory with the specified depth (default 3) ![image](https://user-images.githubusercontent.com/17109060/32149051-32e596e4-bd25-11e7-93a9-5e50c8d2bb19.png) @@ -95,6 +96,8 @@ Man pages have been added. Checkout `man colorls`. ![image](https://user-images.githubusercontent.com/17109060/32149071-6b379de4-bd25-11e7-8764-a0c577e526a1.png) +- With `-t` : Sort by modification time, newest first (NEED TO ADD IMAGE) + - With color options : `--light` or `--dark` can be passed as a flag, to choose the appropriate color scheme. By default, the dark color scheme is chosen. In order to tweak any color, read [Custom configurations](#custom-configurations). ### Combination of flags diff --git a/lib/colorls/core.rb b/lib/colorls/core.rb index 1ce4459..6538c06 100644 --- a/lib/colorls/core.rb +++ b/lib/colorls/core.rb @@ -4,7 +4,7 @@ module ColorLS class Core def initialize(input, all: false, report: false, sort: false, show: false, mode: nil, git_status: false, almost_all: false, colors: [], group: nil, - reverse: false, hyperlink: false) + reverse: false, hyperlink: false, tree_depth: nil) @input = File.absolute_path(input) @count = {folders: 0, recognized_files: 0, unrecognized_files: 0} @all = all @@ -17,7 +17,7 @@ module ColorLS @show = show @one_per_line = mode == :one_per_line @long = mode == :long - @tree = mode == :tree + @tree = {mode: mode == :tree, depth: tree_depth} process_git_status_details(git_status) @screen_width = IO.console.winsize[1] @@ -33,9 +33,9 @@ module ColorLS def ls return print "\n Nothing to show here\n".colorize(@colors[:empty]) if @contents.empty? - if @tree + if @tree[:mode] print "\n" - tree_traverse(@input, 0, 2) + tree_traverse(@input, 0, 1, 2) else @contents = chunkify @contents.each { |chunk| ls_line(chunk) } @@ -349,7 +349,7 @@ module ColorLS [key, color, group] end - def tree_traverse(path, prespace, indent) + def tree_traverse(path, prespace, depth, indent) contents = init_contents(path) contents.each do |content| icon = content == contents.last || content.directory? ? ' └──' : ' ├──' @@ -357,10 +357,14 @@ module ColorLS print " #{fetch_string(path, content, *options(content))} \n" next unless content.directory? - tree_traverse("#{path}/#{content}", prespace + indent, indent) + tree_traverse("#{path}/#{content}", prespace + indent, depth + 1, indent) if keep_going(depth) end end + def keep_going(depth) + @tree[:depth].nil? || depth < @tree[:depth] + end + def tree_branch_preprint(prespace, indent, prespace_icon) return prespace_icon if prespace.zero? diff --git a/lib/colorls/flags.rb b/lib/colorls/flags.rb index 8461703..d1255ef 100644 --- a/lib/colorls/flags.rb +++ b/lib/colorls/flags.rb @@ -20,7 +20,8 @@ module ColorLS almost_all: false, report: false, git_status: false, - colors: [] + colors: [], + tree_depth: 3 } parse_options @@ -116,8 +117,11 @@ module ColorLS end options.on('-1', 'list one file per line') { @opts[:mode] = :one_per_line } options.on('-l', '--long', 'use a long listing format') { @opts[:mode] = :long } - options.on('--tree', 'shows tree view of the directory') { @opts[:mode] = :tree } options.on('-x', 'list entries by lines instead of by columns') { @opts[:mode] = true } + options.on('--tree=[DEPTH]', Integer, 'shows tree view of the directory') do |depth| + @opts[:tree_depth] = depth + @opts[:mode] = :tree + end end def add_general_options(options) diff --git a/man/colorls.1 b/man/colorls.1 index 71dd8bb..0fdae15 100644 --- a/man/colorls.1 +++ b/man/colorls.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "COLORLS" "1" "October 2018" "colorls 1.1.1" "colorls Manual" +.TH "COLORLS" "1" "January 2019" "colorls 1.1.1" "colorls Manual" . .SH "NAME" \fBcolorls\fR \- list directory contents with colors and icons @@ -59,14 +59,14 @@ list one file per line use a long listing format . .TP -\fB\-\-tree\fR -shows tree view of the directory -. -.TP \fB\-x\fR list entries by lines instead of by columns . .TP +\fB\-\-tree\fR +shows tree view of the directory +. +.TP \fB\-\-sd\fR, \fB\-\-sort\-dirs\fR, \fB\-\-group\-directories\-first\fR sort directories first . diff --git a/spec/color_ls/flags_spec.rb b/spec/color_ls/flags_spec.rb index 17dcfa9..9ba2dda 100644 --- a/spec/color_ls/flags_spec.rb +++ b/spec/color_ls/flags_spec.rb @@ -184,6 +184,21 @@ RSpec.describe ColorLS::Flags do let(:args) { ['--tree', FIXTURES] } it { is_expected.to match(/├──/) } # displays file hierarchy + it { is_expected.to match(/third-level-file.txt/) } + end + + context 'with --tree=1 flag' do + let(:args) { ['--tree=1', FIXTURES] } + + it { is_expected.to match(/├──/) } # displays file hierarchy + it { is_expected.not_to match(/ReadmeLink.md|Supportlink|doesnotexisttest.txt|third-level-file.txt/) } + end + + context 'with --tree=3 flag' do + let(:args) { ['--tree=3', FIXTURES] } + + it { is_expected.to match(/├──/) } # displays file hierarchy + it { is_expected.to match(/third-level-file.txt/) } end context 'with --hyperlink flag' do diff --git a/spec/fixtures/second-level/third-level/third-level-file.txt b/spec/fixtures/second-level/third-level/third-level-file.txt new file mode 100644 index 0000000..e69de29 diff --git a/zsh/_colorls b/zsh/_colorls index 6084edc..692084c 100644 --- a/zsh/_colorls +++ b/zsh/_colorls @@ -19,8 +19,8 @@ _arguments -s -S \ "-1[list one file per line]" \ "-l[use a long listing format]" \ "--long[use a long listing format]" \ - "--tree[shows tree view of the directory]" \ "-x[list entries by lines instead of by columns]" \ + "--tree[shows tree view of the directory]" \ "--sd[sort directories first]" \ "--sort-dirs[sort directories first]" \ "--group-directories-first[sort directories first]" \