diff options
| -rwxr-xr-x | color-ls | 96 | ||||
| -rwxr-xr-x | color-ls.awk | 116 |
2 files changed, 117 insertions, 95 deletions
@@ -28,100 +28,6 @@ output=x long=0 trim=1 -_colorize () { - awk -vwidest=0 -vlong=${long} -vtrim=${trim} -voutput=${output} ' - function columns_down() { - widest++; - column = 0; - columns = ENVIRON["COLUMNS"]; - if (columns == 0) { - columns = 80; - } - ncolumns = columns / widest; - - for (i = 1; i <= NR; i++) { - # FIXME: this is all jacked up - printf("%-*s", widest, all[(row * ncolumns) + (i % ncolumns)]); - column += widest; - if (column > columns) { - printf("\n"); - column = 0; - row++; - } - i++; - } - - if (column != 0) { - printf("\n"); - } - } - - function columns_across() { - widest++; - column = 0; - columns = ENVIRON["COLUMNS"]; - if (columns == 0) { - columns = 80; - } - - for (i = 1; i <= NR; i++) { - printf("%-*s", widest, all[i]); - column += widest; - if (column > columns) { - printf("\n"); - column = 0; - } - } - - if (column != 0) { - printf("\n"); - } - } - - function long_output() { - for (i = 1; i <= NR; i++) { - printf("%s\n", file[i]); - } - } - - function comma_output() { - for (i = 1; i <= NR; i++) { - printf("%s%s", i == 1 ? "" : ", ", $0 ); - } - } - - { color=39; } - /\/$/ || (long && /^d/) || (long && $0 == $1) { color=34; } - /\*$/ || (long && /^-/ && $1 ~ /x/){ color=32; } - /\|$/ || (long && /^p/) { color=33; } - /@$/ || (long && /^l/) { color=35; } - - { - if (trim == 1) { - gsub(/[\/\*\|@]$/, ""); - } - - if (length > widest) { - widest = length; - } - - file[NR] = "\033[" color "m" $0 "\033\[0m"; - } - - END { - if (output == "-x") { - columns_across(); - } else if (output == "-C") { - columns_down(); - } else if (output == "-m") { - commat_output(); - } else { - long_output(); - } - } -' -} - while getopts ACFHLRSacdfgiklmnopqrstux1 option do case $option in @@ -139,4 +45,4 @@ fi # FIXME: the script returns 0 even if ls does not # FIXME: always pass -1 when needed, but do it before operands -ls $dash_F ${1+$@} | _colorize +ls $dash_F ${1+$@} | awk -vwidest=0 -vlong=${long} -vtrim=${trim} -voutput=${output} -f $(dirname $0)/color-ls.awk diff --git a/color-ls.awk b/color-ls.awk new file mode 100755 index 0000000..b5d3d3b --- /dev/null +++ b/color-ls.awk @@ -0,0 +1,116 @@ +#!/bin/sh + +# MIT License +# +# Copyright (c) 2018 Jakob Kaivo +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# TODO: handle recursive stuff +# TODO: change this back to -C when that is fixed + +function columns_down() { + widest++; + column = 0; + columns = ENVIRON["COLUMNS"]; + if (columns == 0) { + columns = 80; + } + ncolumns = columns / widest; + + for (i = 1; i <= NR; i++) { + # FIXME: this is all jacked up + printf("%-*s", widest, all[(row * ncolumns) + (i % ncolumns)]); + column += widest; + if (column > columns) { + printf("\n"); + column = 0; + row++; + } + i++; + } + + if (column != 0) { + printf("\n"); + } +} + +function columns_across() { + widest++; + column = 0; + columns = ENVIRON["COLUMNS"]; + if (columns == 0) { + columns = 80; + } + + for (i = 1; i <= NR; i++) { + printf("%-*s", widest, all[i]); + column += widest; + if (column > columns) { + printf("\n"); + column = 0; + } + } + + if (column != 0) { + printf("\n"); + } +} + +function long_output() { + for (i = 1; i <= NR; i++) { + printf("%s\n", file[i]); + } +} + +function comma_output() { + for (i = 1; i <= NR; i++) { + printf("%s%s", i == 1 ? "" : ", ", $0 ); + } +} + +{ color=39; } +/\/$/ || (long && /^d/) || (long && $0 == $1) { color=34; } +/\*$/ || (long && /^-/ && $1 ~ /x/){ color=32; } +/\|$/ || (long && /^p/) { color=33; } +/@$/ || (long && /^l/) { color=35; } + +{ + if (trim == 1) { + gsub(/[\/\*\|@]$/, ""); + } + + if (length > widest) { + widest = length; + } + + file[NR] = "\033[" color "m" $0 "\033\[0m"; +} + +END { + if (output == "-x") { + columns_across(); + } else if (output == "-C") { + columns_down(); + } else if (output == "-m") { + commat_output(); + } else { + long_output(); + } +} |
