summaryrefslogtreecommitdiff
path: root/color-ls.awk
diff options
context:
space:
mode:
Diffstat (limited to 'color-ls.awk')
-rwxr-xr-xcolor-ls.awk116
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();
+ }
+}