multiple changes: New functions, dropped functions, ...
authorJoerg Jaspert <joerg@ganneff.de>
Mon, 25 Mar 2013 15:35:24 +0000 (16:35 +0100)
committerJoerg Jaspert <joerg@ganneff.de>
Mon, 25 Mar 2013 15:35:24 +0000 (16:35 +0100)
new functions is-{callable,alias,builtin,command,function} to check
if something is an alias, builtin, command, function or any of it.
various places now use it, others need to be converted.

new function warn, to just print out an error to stderr

new function zpgrep, either using pgrep or ps and shell handling
to always have a pgrep handy

new zstyle to decide if one likes lesspipe or lessfile more

removed cmd_exists and {normal,privileged}_user functions, unused.

change `` into $()

17 files changed:
.zsh/01_Terminfo.zsh
.zsh/05_Functions.zsh
.zsh/10_Environment.zsh
.zsh/12_Locale.zsh
.zsh/30_Options.zsh
.zsh/99_Exec.zsh
.zsh/README
.zsh/functions/is-alias [new file with mode: 0644]
.zsh/functions/is-builtin [new file with mode: 0644]
.zsh/functions/is-callable [new file with mode: 0644]
.zsh/functions/is-command [new file with mode: 0644]
.zsh/functions/is-function [new file with mode: 0644]
.zsh/functions/warn [new file with mode: 0644]
.zsh/functions/zman [new file with mode: 0644]
.zsh/functions/zpgrep [new file with mode: 0644]
.zsh/zshenv.local [new symlink]
.zsh/zshenv.local.sample

index 56f4e0a..3a4b7af 100644 (file)
@@ -4,7 +4,7 @@
 __() {
     local terminfo
     local termpath
-    if which tic >/dev/null; then
+    if is-callable tic >/dev/null; then
         for terminfo in $ZSH/terminfo/*.terminfo(.N); do
             # We assume that the file is named appropriately for this to work
             termpath=~/.terminfo/${(@)${terminfo##*/}[1]}/${${terminfo##*/}%%.terminfo}
index 4403b10..2d2f98a 100644 (file)
@@ -2,11 +2,6 @@
 
 ##     User-defined functions
 #
-cmd_exists ()
-{
-       \which -p $1 >/dev/null 2>&1
-}
-
 preprint()
 {
        local my_color start stop pipe1 pipe2 hbar out
@@ -44,24 +39,9 @@ preprint()
     print -Pn -- $out
 }
 
-normal_user ()
-{
-       if [ -e /etc/login.defs ]; then
-               eval `grep -v '^[$#]' /etc/login.defs | grep "^UID_" | tr -d '[:blank:]' | sed 's/^[A-Z_]\+/&=/'`
-               [ \( $UID -ge $UID_MIN \) ]
-       else
-               [ "`whoami`" != "root" ]
-       fi
-}
-
-privileged_user ()
-{
-       ! normal_user
-}
-
 _jj_chpwd()
 {
-       if ( cmd_exists git && test -d .git ); then
+       if ( is-callable git && test -d .git ); then
                # Shows tracked branches and modified files
                git checkout HEAD 2>&1 | sed 's/^/   /'
        fi
@@ -75,7 +55,7 @@ else
     }
 fi
 
-# Taken from oh-my-zsh
+# Idea taken from oh-my-zsh, but code is different
 function dirpersistrestore () {
     if [ -f ${DIRSTACKFILE} ]; then
         dirstack=( ${(f)"$(< ${DIRSTACKFILE} )"} )
index 391f7ab..331d602 100644 (file)
@@ -1,6 +1,6 @@
 # -*- mode: sh;-*-
 
-export SHELL=`which zsh`
+export SHELL=$(which zsh)
 
 if [ -w $ZDOTDIR ]; then
     mkdir -p ${ZDOTDIR}/var
@@ -24,6 +24,8 @@ export GPG_TTY=$(tty)
 
 setvar PAGER "$(which less)"
 setvar LESS '-X -R -f -j 3'
+READNULLCMD=${PAGER}
+NULLCMD=${PAGER}
 
 if [[ ${COLORS} == "true" ]]; then
     # grep with colors
@@ -38,17 +40,20 @@ if [[ ${COLORS} == "true" ]]; then
     fi
 fi
 
-READNULLCMD=${PAGER}
-NULLCMD=${PAGER}
-
 (( ${+DEBFULLNAME} )) || export DEBFULLNAME='Joerg Jaspert'
 (( ${+DEBNAME} )) || export DEBNAME='Joerg Jaspert'
 (( ${+DEBEMAIL} )) || export DEBEMAIL='joerg@debian.org'
 (( ${+TMPDIR} )) || export TMPDIR="$HOME/tmp"
 [[ -f "$HOME/.local/share/mc/skins/solarized.ini" ]] && export MC_SKIN="solarized"
 
-# If its installed - use lesspipe
-[ -x /bin/lesspipe ] && eval $(lesspipe)
+# If its installed - use lesspipe (or maybe lessfile)
+if is-callable lesspipe; then
+    if zstyle -t ':ganneff:config' lesstool lessfile; then
+        eval $(lessfile)
+    else
+        eval $(lesspipe)
+    fi
+fi
 
 ## Use a default width of 80 for manpages for more convenient reading
 if zstyle -t ':ganneff:config' MANWIDTH 0; then
index c2fd02c..dc5dce9 100644 (file)
@@ -1,6 +1,6 @@
 # -*- mode: sh;-*-
 
-(( $+commands[locale] )) && __() {
+is-command locale && __() {
     local locales
     local locale
 
index 4fa1a9d..8e1acb6 100644 (file)
@@ -267,6 +267,7 @@ UnsetOPT HUP
 # Run all background jobs at a lower priority.
 UnsetOPT BG_NICE
 
+
 unfunction -m SetOPT
 unfunction -m UnsetOPT
 unfunction -m SetOPTifExists
index 3ca4202..fe0144d 100644 (file)
@@ -1,6 +1,6 @@
 # -*- mode: sh;-*-
 
-if cmd_exists fortune && zstyle -T ':ganneff:config' fortune; then
+if is-callable fortune && zstyle -T ':ganneff:config' fortune; then
        preprint "Fortune" && echo
        fortune | fmt -s -w 74
        preprint && echo
index abc6c16..5de736f 100644 (file)
@@ -100,3 +100,7 @@ The prompt i use is based on various others.
 
 - The winch function as seen in the prompt theme "bart", delivered
   with zsh
+
+- The is-{alias,builtin,callable,command,function} and zpgrep function
+  have been taken from "zoppo", see [[https://github.com/zoppo][zoppo]] for more of it, which is
+  licensed "under WTFPL unless otherwise noted".
diff --git a/.zsh/functions/is-alias b/.zsh/functions/is-alias
new file mode 100644 (file)
index 0000000..f7a8072
--- /dev/null
@@ -0,0 +1,8 @@
+(( $+1 )) || {
+  warn 'is-alias: not enough arguments'
+  return 1
+}
+
+(( $+aliass[$1] ))
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/is-builtin b/.zsh/functions/is-builtin
new file mode 100644 (file)
index 0000000..4a758db
--- /dev/null
@@ -0,0 +1,8 @@
+(( $+1 )) || {
+  warn 'is-builtin: not enough arguments'
+  return 1
+}
+
+(( $+builtins[$1] ))
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/is-callable b/.zsh/functions/is-callable
new file mode 100644 (file)
index 0000000..f9f1a7c
--- /dev/null
@@ -0,0 +1,8 @@
+(( $+1 )) || {
+  warn 'is-callable: not enough arguments'
+  return 1
+}
+
+(( $+builtins[$1] )) || (( $+functions[$1] )) || (( $+aliases[$1] )) || (( $+commands[$1] ))
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/is-command b/.zsh/functions/is-command
new file mode 100644 (file)
index 0000000..01aafae
--- /dev/null
@@ -0,0 +1,8 @@
+(( $+1 )) || {
+  warn 'is-command: not enough arguments'
+  return 1
+}
+
+(( $+commands[$1] ))
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/is-function b/.zsh/functions/is-function
new file mode 100644 (file)
index 0000000..310f633
--- /dev/null
@@ -0,0 +1,8 @@
+(( $+1 )) || {
+  warn 'is-function: not enough arguments'
+  return 1
+}
+
+(( $+functions[$1] ))
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/warn b/.zsh/functions/warn
new file mode 100644 (file)
index 0000000..e55aa93
--- /dev/null
@@ -0,0 +1,3 @@
+print -- "$@" 1>&2
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/functions/zman b/.zsh/functions/zman
new file mode 100644 (file)
index 0000000..d542a6d
--- /dev/null
@@ -0,0 +1,5 @@
+# -*- mode:sh -*-
+
+zman() {
+  PAGER="less -g -s '+/^       "$1"'" man zshall
+}
diff --git a/.zsh/functions/zpgrep b/.zsh/functions/zpgrep
new file mode 100644 (file)
index 0000000..37b4fa0
--- /dev/null
@@ -0,0 +1,58 @@
+# -*- mode:sh -*-
+
+local _USER REGEXP
+
+local usage="USAGE: $0 [-u USER] REGEXP"
+
+if (( $# == 1 )); then
+  REGEXP="$1"
+elif (( $# == 3 )); then
+  if [[ "$1" == "-u" ]]; then
+    _USER="$2"
+    REGEXP="$3"
+  elif [[ "$2" == "-u" ]]; then
+    _USER="$3"
+    REGEXP="$1"
+  else
+    warn "$usage"
+    return 1
+  fi
+else
+  warn "$usage"
+  return 1
+fi
+
+if is-callable pgrep; then
+  if [[ -n "$_USER" ]]; then
+    pgrep -u "$_USER" -f "$REGEXP"
+  else
+    pgrep -f "$REGEXP"
+  fi
+elif is-callable ps; then
+  zmodload zsh/pcre
+
+  local PID __USER COMMAND ret=1
+
+  ps -Ao pid,user,command | (read COMMAND; <&0) | \
+    if [[ -n "$_USER" ]]; then
+      while read PID __USER COMMAND; do
+        if [[ "$__USER" == "$_USER" && "$COMMAND" -pcre-match "$REGEXP" ]]; then
+          ret=0
+          print "$PID"
+        fi
+      done
+    else
+      while read PID __USER COMMAND; do
+        if [[ "$COMMAND" -pcre-match "$REGEXP" ]]; then
+          ret=0
+          print "$PID"
+        fi
+      done
+    fi
+    return $ret
+else
+  warn "There are no pgrep or ps."
+  return 1
+fi
+
+# vim: ft=zsh sts=2 ts=2 sw=2 et fdm=marker fmr={{{,}}}
diff --git a/.zsh/zshenv.local b/.zsh/zshenv.local
new file mode 120000 (symlink)
index 0000000..a8ed0aa
--- /dev/null
@@ -0,0 +1 @@
+zshenv.local.sample
\ No newline at end of file
index b7e597c..28d1fd2 100644 (file)
@@ -116,6 +116,16 @@ zstyle ':ganneff:config' dirstackhandling dirpersist
 ## Want to see how long it (roughly) took to load?
 # zstyle ':ganneff:config' starttime false
 
+## Should we use lessfile or lesspipe (if installed)?
+## Difference is in the handling, see the manpages for details, but
+## one of them uses pipes and one files to hand their output to less.
+## Which results in one of them having you waiting until they are finished,
+## while the other shows you results fast - but then doesn't let less show
+## you how far (in %) you are in the output.
+## Defaults to lesspipe
+# zstyle ':ganneff:config' lesstool lesspipe
+
+
 ########################################################################
 ### Prompt setup                                                     ###
 ## use vcs_info in prompt