]> ruderich.org/simon Gitweb - config/dotfiles.git/commitdiff
shell/aliases,setup.sh: Move ls color detection to setup.sh.
authorSimon Ruderich <simon@ruderich.org>
Tue, 16 Oct 2012 03:14:44 +0000 (05:14 +0200)
committerSimon Ruderich <simon@ruderich.org>
Tue, 16 Oct 2012 03:14:44 +0000 (05:14 +0200)
setup.sh
shell/aliases.in [moved from shell/aliases with 79% similarity]

index 55efa84bb13cadfae3cbef9ea446eff703f5c3b2..44074f0a0767732289e8e808e5cb1a53e2d075d1 100755 (executable)
--- a/setup.sh
+++ b/setup.sh
@@ -43,6 +43,46 @@ chmod 0700 ~/.tmp
 lesskey lesskey
 chmod 0600 ~/.less
 
+# Find the required options to get colored ls output. GNU ls is preferred. See
+# shell/aliases.in for details. Doing this here instead of in shell/aliases
+# speeds up shell starts.
+#
+# Check if colors are available.
+ls --color > /dev/null 2>&1
+if test $? -eq 0; then
+    ls_color=gnu
+else
+    ls -G > /dev/null 2>&1
+    if test $? -eq 0; then
+        ls_color=cli
+    else
+        ls_color=
+    fi
+fi
+# Absolute path to `ls`.
+ls_path=`which ls`
+# GNU ls with colors.
+if test "x$ls_color" = xgnu; then
+    ls_env=
+    ls_color='--color'
+# Normal (BSD) ls with colors.
+elif test "x$ls_color" = xcli; then
+    ls_env='CLICOLOR_FORCE=1'
+    ls_color='-G'
+# Simple ls with no colors.
+else
+    ls_env=
+    ls_color=
+fi
+generate perl shell/aliases \
+    -e 'while (<STDIN>) {
+            s/\bLS_ENV\b/$ARGV[0]/;
+            s/\bLS_PATH\b/$ARGV[1]/;
+            s/\bLS_COLOR\b/$ARGV[2]/;
+            print;
+        }' \
+    "$ls_env" "$ls_path" "$ls_color"
+
 generate cat screenrc .in
 # As screen-256color is not widely supported use it only on machines where the
 # matching terminfo entry is available. This also requires a terminal emulator
similarity index 79%
rename from shell/aliases
rename to shell/aliases.in
index 98e2931a90f9bd46c0694da5dae60026ceb09231..94b001dfa56ff99ecc6f5fa5de7ffd1d91f29d09 100644 (file)
@@ -29,6 +29,9 @@ alias s=mpc  # s for sound, m is already used
 alias v=vim
 
 
+# Make sure there is no alias named ls as it causes problems with the
+# following ls function on (at least) bash 4.0.35.
+unalias ls 2> /dev/null
 # Improved ls which displays the files in columns (-C), visualizes
 # directories, links and other special files (-F) and pages everything through
 # less.
@@ -36,45 +39,13 @@ alias v=vim
 # If available use GNU ls with colorized output. If it isn't available try
 # normal ls which needs CLICOLOR_FORCE so it displays colors when used with a
 # pager. If none work no colors are used.
-
-# Check if colors are available.
-ls --color > /dev/null 2>&1
-if [ $? -eq 0 ]; then
-    ls_color=gnu
-else
-    ls -G > /dev/null 2>&1
-    if [ $? -eq 0 ]; then
-        ls_color=cli
-    else
-        ls_color=
-    fi
-fi
-
-# Main ls function, separated to prevent code duplication.
-ls_path=`which ls`
-my_ls() {
-    "$ls_path" -C -F "$@" 2>&1 | less
+#
+# See `setup.sh` for details. LS_ENV, LS_PATH, LS_COLOR are replaced with the
+# correct values when this file is generated.
+ls() {
+    LS_ENV LS_PATH LS_COLOR -C -F "$@" 2>&1 | less
 }
-# Make sure there is no alias named ls as it causes problems with the
-# following ls function on (at least) bash 4.0.35.
-unalias ls 2> /dev/null
-# GNU ls with colors.
-if [ x$ls_color = xgnu ]; then
-    ls() {
-        my_ls --color "$@"
-    }
-# Normal ls with colors.
-elif [ x$ls_color = xcli ]; then
-    ls() {
-        CLICOLOR_FORCE=1 my_ls -G "$@"
-    }
-# Simple ls with no colors.
-else
-    ls() {
-        my_ls "$@"
-    }
-fi
-unset ls_color
+
 # Helper function to list all files.
 la() {
     ls -a "$@"