summaryrefslogtreecommitdiff
path: root/Util/reporter
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-04-15 18:05:38 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-04-15 18:05:38 +0000
commite74702b467171dbdafb56dfe354794a212e020d9 (patch)
treec295b3e9b2e93e2de10331877442615b0f37e779 /Util/reporter
parentc175751b501a3a4cb40ad4787340a597ea769be4 (diff)
downloadzsh-e74702b467171dbdafb56dfe354794a212e020d9.tar.gz
zsh-e74702b467171dbdafb56dfe354794a212e020d9.zip
Initial revision
Diffstat (limited to 'Util/reporter')
-rw-r--r--Util/reporter444
1 files changed, 444 insertions, 0 deletions
diff --git a/Util/reporter b/Util/reporter
new file mode 100644
index 000000000..8f8f530ae
--- /dev/null
+++ b/Util/reporter
@@ -0,0 +1,444 @@
+#!/usr/local/bin/zsh
+#
+# NAME:
+# reporter
+#
+# SYNOPSIS:
+# reporter [all | aliases | bindings | completion | functions |
+# limits | options | variables]
+#
+# DESCRIPTION:
+# "reporter" prints your current environment variables, shell
+# variables, limits, completion settings, and option settings to
+# stdout in the form of a script.
+#
+# If you run into a zsh bug, someone can source the output script to
+# recreate most of the environment under which you were working.
+#
+# IMPORTANT: "source" this script, don't try to run it directly.
+# Otherwise it won't report the settings for your
+# current shell session.
+#
+# OPTIONS:
+# All command-line options can be abbreviated.
+#
+# "aliases" prints only aliases.
+# "bindings" prints only "bindkey" commands.
+# "completion" prints only "compctl" commands.
+# "functions" prints "autoload" commands or actual functions.
+# "limits" prints "limit" commands for things like cputime, etc.
+# "modules" prints "zmodload" commands.
+# "options" prints "setopt" commands.
+# "variables" prints both shell and environment variables.
+#
+# "all" tries to find every useful setting under your shell.
+# This is the default, and it's the same as typing all
+# of the above options on the command line.
+#
+# CAVEATS:
+# Assumes that you have the following programs in your search path:
+# awk, cut, echo, grep, sed, sort
+# Assumes that your C preprocessor lives in /lib/cpp or /usr/ccs/lib/cpp.
+# Uses (and unsets) variables beginning with "reporter_".
+#
+# RESTRICTIONS:
+# DON'T: pretend you wrote it, sell it, or blame me if it breaks.
+# DO: as ye will an' ye harm none.
+# --Wiccan saying, I think
+#
+# BUGS:
+# I'm sure there are more than a few. To be safe, run "zsh -f" before
+# sourcing the output from this script. If you have "screen", you may
+# want to use that, too; I hammered my terminal settings beyond repair
+# when using an early version, and "screen" saved me from having to
+# login on another terminal.
+#
+# HISTORY:
+# The name was ripped off from the Emacs "reporter.el" function.
+# The idea came from a mail message to the ZSH mailing list:
+#
+# Begin Configuration Section
+#
+
+reporter_OSVersion="`uname -s`_`uname -r`"
+
+#
+# Solaris 2.x
+#
+case ${reporter_OSVersion} in
+ SunOS_5.*)
+ CPP=${CPP:-/usr/ccs/lib/cpp}
+ AWK=${AWK:-nawk} # GNU AWK doesn't come standard :-(
+ ;;
+esac
+
+#
+# Default Values
+#
+
+CPP=${CPP:-/lib/cpp}
+AWK=${AWK:-awk}
+
+#
+# End Configuration Section
+#
+
+reporter_do_all=yes
+
+for each in $*
+do
+ case "$each"
+ in
+ ali*) reporter_do_aliases=yes; reporter_do_all=no ;;
+ b*) reporter_do_bindings=yes; reporter_do_all=no ;;
+ c*) reporter_do_compctl=yes; reporter_do_all=no ;;
+ f*) reporter_do_fun=yes; reporter_do_all=no ;;
+ l*) reporter_do_lim=yes; reporter_do_all=no ;;
+ m*) reporter_do_mod=yes; reporter_do_all=no ;;
+ o*) reporter_do_setopt=yes; reporter_do_all=no ;;
+ v*) reporter_do_vars=yes; reporter_do_all=no ;;
+ *) ;;
+ esac
+done
+
+#
+# The "cshjunkiequotes" option can break some of the commands
+# used in the remainder of this script, so we check for that first
+# and disable it. We'll re-enable it later.
+#
+
+reporter_junkiequotes="no"
+
+if setopt | grep "cshjunkiequotes" > /dev/null
+then
+ reporter_junkiequotes="yes"
+ unsetopt cshjunkiequotes
+fi
+
+#
+# UNAME
+#
+# This shows your system name. It's extremely system-dependent, so
+# we need a way to find out what system you're on. The easiest
+# way to do this is by using "uname", but not everyone has that,
+# so first we go through the search path.
+#
+# If we don't find it, then the only thing I can think of is to
+# check what's defined in your C compiler, and code in some exceptions
+# for the location of "uname" or an equivalent. For example, Pyramid
+# has "uname" only in the ATT universe. This code assumes that
+# the "-a" switch is valid for "uname".
+#
+# This section of code sees what is defined by "cpp". It was
+# originally written by brandy@tramp.Colorado.EDU (Carl Brandauer).
+# Additional error checking and sed hacking added by Ken Phelps.
+#
+
+reporter_cppdef=`strings -3 ${CPP} |
+ sed -n '
+ /^[a-zA-Z_][a-zA-Z0-9_]*$/{
+ s/.*/#ifdef &/p
+ s/.* \(.*\)/"\1";/p
+ s/.*/#endif/p
+ }
+ ' | ${CPP} |sed '
+ /^[ ]*$/d
+ /^#/d
+ s/.*"\(.*\)".*/\1/'`
+
+reporter_uname=""
+
+for each in `echo $PATH | sed -e 's/:/ /g'`
+do
+ if [ -x $each/uname ]
+ then
+ reporter_uname="$each/uname"
+ break
+ fi
+done
+
+case "$reporter_uname"
+in
+ "") reporter_uname="echo not found on this system" ;;
+ *) ;;
+esac
+
+for each in $reporter_cppdef
+do
+ case "$each"
+ in
+ pyr) reporter_uname="/bin/att uname" ;;
+ *) ;;
+ esac
+done
+
+str=`eval $reporter_uname -a`
+
+echo '# START zsh saveset'
+echo '# uname: ' $str
+echo
+
+unset reporter_cppdef
+unset reporter_uname
+
+#
+# ALIASES
+#
+# Use "alias -L" to get a listing of the aliases in the form we want.
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_aliases" = "yes"
+then
+ echo '# Aliases.'
+ echo
+
+ alias -L
+fi
+
+#
+# KEY BINDINGS
+#
+# The -L option does most of the work. The subshell is used to
+# avoid modifying things that will be recorded later.
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_bindings" = "yes"
+then
+ echo
+ echo "# Key bindings."
+ echo
+ bindkey -lL
+ (
+ alias bindkey=bindkey
+ bindkey () {
+ [[ "$1" == "-N" ]] || return
+ [[ "$2" == "--" ]] && shift
+ echo
+ builtin bindkey -L -M -- "$2"
+ }
+ eval "`builtin bindkey -lL`"
+ )
+fi
+
+#
+# COMPLETION COMMANDS
+# Warning: this won't work for zsh-2.5.03.
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_compctl" = "yes"
+then
+ echo
+ echo "# Completions."
+ echo
+
+ compctl -L
+fi
+
+#
+# FUNCTIONS
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_fun" = "yes"
+then
+ echo
+ echo "# Undefined functions."
+ echo
+
+ functions | grep "undefined" | ${AWK} '{print "autoload " $2}'
+
+ echo
+ echo "# Defined functions."
+ echo
+
+ functions | grep -v "undefined"
+fi
+
+#
+# LIMITS
+#
+# "cputime" has to be handled specially, because you can specify
+# the time as just hours, or "minutes:seconds".
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_lim" = "yes"
+then
+ echo
+ echo '# Limits.'
+ echo
+
+ (
+ set X `limit | grep "cputime" | grep -v "unlimited" |
+ sed -e 's/:/ /g'`
+
+ if test "$#" -gt 1
+ then
+ hr=$3
+ min=$4
+ sec=$5
+
+ if test "$hr" -gt 0
+ then
+ echo "limit cputime ${hr}h"
+ else
+ echo "limit cputime $min:$sec"
+ fi
+ fi
+ )
+
+ limit | grep -v "cputime" | grep -v "unlimited" |
+ sed -e 's/Mb/m/' -e 's/Kb/k/' |
+ ${AWK} 'NF > 1 {print "limit " $0}'
+fi
+
+#
+# MODULE LOADING COMMANDS
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_mod" = "yes"
+then
+ echo
+ if ( zmodload ) >& /dev/null; then
+ echo "# Modules."
+ echo
+ zmodload -d -L
+ echo
+ zmodload -a -L
+ echo
+ zmodload -L
+ else
+ echo "# Modules: zmodload not available."
+ fi
+fi
+
+#
+# NON-ARRAY VARIABLES
+#
+# We run this in a subshell to preserve the TERMCAP and TERM settings
+# in the current shell. Also, reset the prompt to show you're now
+# in a test shell. I can't find an easy way to do IFS, so I ignore it.
+#
+# Most of the sed nonsense is to make sure that variables are quoted
+# when being set. We also have to make sure that single-quotes and
+# back-quotes are escaped. This is why variable settings are
+# surrounded by double quotes; some variables like SPROMPT have single
+# quotes and back-quotes, and it's just too hard to escape those
+# properly when setting them.
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_vars" = "yes"
+then
+ echo
+ echo "# Non-array variables."
+ echo
+
+ (
+ echo "TERMCAP='$TERMCAP'"
+ echo "TERM='$TERM'"
+ unset TERMCAP
+
+ set | grep '=' | grep -v 'prompt=' |
+ grep -v 'reporter_do' |
+ grep -v '^[!#$*0?@_-]=' |
+ grep -v '=(' | sed -e "s/'/\\\'/g" |
+ sed -e 's/`/\\`/g' |
+ sed -e 's/=/="/' -e 's/$/"/' |
+ grep -v '^IFS=' |
+ grep -v '^TERMCAP=' |
+ grep -v '^TERM='
+
+ echo "prompt='test%'"
+ )
+
+#
+# ARRAY VARIABLES
+#
+# The "grep -v" nonsense is to keep from setting shell variables
+# that caused me some trouble from a script.
+#
+
+ echo
+ echo "# Array variables."
+ echo
+
+ echo "argv=()"
+ set | grep '=' | grep -v 'argv=' |
+ grep -v 'reporter_do' | grep -v '^[!#$*0?@_-]=' |
+ grep '=('
+
+#
+# EXPORTED VARIABLES
+#
+# Run this in a subshell to preserve the TERM and TERMCAP setting in
+# the current shell.
+#
+
+ echo
+ echo "# Exported variables."
+ echo
+
+ (
+ echo "export TERMCAP"
+ echo "export TERM"
+ unset TERMCAP
+
+ export | grep -v '^[!#$*0?@_-]=' |
+ ${AWK} -F='=' '{print "export " $1}' |
+ grep -v '^TERM=' | grep -v '^TERMCAP='
+ )
+fi
+
+#
+# SETOPT
+#
+# We exclude interactive because "setopt interactive" has no effect.
+# The cshjunkiequotes option is dealt with separately; see the
+# comments near the start of the script.
+#
+
+if test "$reporter_do_all" = "yes" -o "$reporter_do_setopt" = "yes"
+then
+ echo
+ echo '# Setopt.'
+ echo
+
+ (
+ setopt | grep -v 'interactive' | ${AWK} '{print "setopt " $0}'
+
+ case "$reporter_junkiequotes"
+ in
+ yes) echo "setopt cshjunkiequotes" ;;
+ *) ;;
+ esac
+ ) | sort
+fi
+
+echo
+echo '# END zsh saveset'
+
+#
+# Don't put an exit here, or you'll get a nasty surprise when you
+# source this thing. Get rid of variables created when processing
+# command line.
+#
+
+unset reporter_do_all
+unset reporter_do_aliases
+unset reporter_do_bindings
+unset reporter_do_compctl
+unset reporter_do_fun
+unset reporter_do_lim
+unset reporter_do_setopt
+unset reporter_do_vars
+
+#
+# Turn cshjunkiequotes back on if necessary.
+#
+
+case "$reporter_junkiequotes"
+in
+ yes) setopt cshjunkiequotes ;;
+ *) ;;
+esac
+
+unset reporter_junkiequotes
+