diff options
| author | Jakob Kaivo <jkk@ung.org> | 2018-10-08 12:06:54 -0400 |
|---|---|---|
| committer | Jakob Kaivo <jkk@ung.org> | 2018-10-08 12:06:54 -0400 |
| commit | 77b2a69a8a7a49d62bdd60031ecfdd52baba96c7 (patch) | |
| tree | 4b2b830418358948f8f51bdd9f3dedad2f4ee30a /color-ls.awk | |
| parent | c866692bf04c8d52a9dfc97fcd019cdca4c79ea8 (diff) | |
move AWK stuff to separate AWK script
Diffstat (limited to 'color-ls.awk')
| -rwxr-xr-x | color-ls.awk | 116 |
1 files changed, 116 insertions, 0 deletions
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(); + } +} |
