From b2a42cb947f2a21a42fe2650a47f7d36e3762d59 Mon Sep 17 00:00:00 2001 From: Frank Terbeck Date: Wed, 1 Feb 2012 20:28:07 +0100 Subject: [PATCH] Fix ls (and grep) option handling on non-linux systems --color=... only works with GNU ls and grep. Test for that and behave accordingly. Reported-by: ChiCuong HA Signed-off-by: Frank Terbeck --- etc/zsh/zshrc | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 2d89da2..30f1550 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -332,6 +332,17 @@ BATTERY=${BATTERY:-0} GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1} ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0} +typeset -ga ls_options +typeset -ga grep_options +if ls --help 2> /dev/null | grep -q GNU; then + ls_options=( --color=auto ) +elif [[ $OSTYPE == freebsd* ]]; then + ls_options=( -G ) +fi +if grep --help 2> /dev/null | grep -q GNU; then + grep_options=( --color=auto ) +fi + # utility functions # this function checks if a command exists and returns either true # or false. This avoids using 'which' and 'whence', which will @@ -886,7 +897,7 @@ abk=( '....' '../../..' 'BG' '& exit' 'C' '| wc -l' - 'G' '|& grep --color=auto ' + 'G' '|& grep '${grep_options:+"${grep_options[*]} "} 'H' '| head' 'Hl' ' --help |& less -r' #d (Display help in pager) 'L' '| less' @@ -1460,19 +1471,17 @@ if check_com -c screen ; then fi # do we have GNU ls with color-support? -if ls --help 2>/dev/null | grep -- --color= >/dev/null \ - && [[ "$TERM" != dumb ]] -then +if [[ "$TERM" != dumb ]]; then #a1# execute \kbd{@a@}:\quad ls with colors - alias ls='ls -b -CF --color=auto' + alias ls='ls -b -CF '${ls_options:+"${ls_options[*]} "} #a1# execute \kbd{@a@}:\quad list all files, with colors - alias la='ls -la --color=auto' + alias la='ls -la '${ls_options:+"${ls_options[*]} "} #a1# long colored list, without dotfiles (@a@) - alias ll='ls -l --color=auto' + alias ll='ls -l '${ls_options:+"${ls_options[*]} "} #a1# long colored list, human readable sizes (@a@) - alias lh='ls -hAl --color=auto' + alias lh='ls -hAl '${ls_options:+"${ls_options[*]} "} #a1# List files, append qualifier to filenames \\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...) - alias l='ls -lF --color=auto' + alias l='ls -lF '${ls_options:+"${ls_options[*]} "} else alias ls='ls -b -CF' alias la='ls -la' @@ -2164,7 +2173,7 @@ any() { echo "any - grep for process(es) by keyword" >&2 echo "Usage: any " >&2 ; return 1 else - ps xauwww | grep -i --color=auto "[${1[1]}]${1[2,-1]}" + ps xauwww | grep -i "${grep_options[@]}" "[${1[1]}]${1[2,-1]}" fi } @@ -2409,7 +2418,7 @@ check_com new || alias new=modified # use colors when GNU grep with color-support #a2# Execute \kbd{grep -{}-color=auto} -(grep --help 2>/dev/null |grep -- --color) >/dev/null && alias grep='grep --color=auto' +(( $#grml_options > 0 )) && alias grep='grep '${grml_options:+"${grml_options[*]} "}' # Translate DE<=>EN # 'translate' looks up fot a word in a file with language-to-language -- 2.1.4