home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Shells / zsh-3.0.5-MIHS / src / Misc / c2z next >
Encoding:
Text File  |  1997-09-25  |  3.5 KB  |  129 lines

  1. #! /bin/sh
  2. #
  3. # c2z - environment conversion tool
  4. # Contributed by Bart Schaefer
  5. # (Tweaked a bit by Paul Falstad)
  6. #
  7. # This is a quick script to convert csh aliases to zsh aliases/functions.
  8. # It also converts the csh environment and local variables to zsh.  c2z
  9. # uses the csh to parse its own dot-files, then processes csh output to
  10. # convert the csh settings to zsh.
  11. #
  12. # When run as a zsh fuction, c2z runs csh as if it were an interactive
  13. # shell whenever the parent zsh is interactive.  When run as a shell
  14. # script, the -i switch can be used to force this behavior.
  15. #
  16. # The -l (login) switch causes csh to run as if it were a login shell.
  17. # This is done "properly" if c2z is used as a zsh function, otherwise
  18. # it's faked by explicitly sourcing .login.  Use with caution if your
  19. # .login initializes an X server or does other one-time-only startup
  20. # procedures.
  21. #
  22. # usage:
  23. #    c2z [-i | -l | filename]
  24. #
  25. # You can use this script in your .zshrc or .zlogin files to load your
  26. # regular csh environment into zsh; for example, in .zlogin:
  27. #
  28. #    . =(c2z -l)
  29. #
  30. # This is not perfect, but it gets most common aliases and variables.
  31. # It's also rather time-consuming to do this every time you log in.
  32. # However, if you're moving from csh to zsh for the first time, this
  33. # can get you started with a familiar environment right away.
  34. #
  35. # In case your mailer eats tabs, $T is set to expand to a tab.
  36. #
  37. T="`echo x | tr x '\011'`"
  38.  
  39. # If we're zsh, we can run "- csh" to get the complete environment.
  40. #
  41. MINUS=""
  42. LOADFILE=""
  43. INTERACT=""
  44. CSH=csh
  45. case "$ZSH_NAME$ZSH_VERSION$VERSION" in
  46. zsh*)
  47.     case $1 in
  48.     -l*) MINUS="-" ;;
  49.     -i*) INTERACT="-i" ;;
  50.     *) LOADFILE="source $1" CSH="csh -f";;
  51.     esac
  52.     if [[ -o INTERACTIVE ]]; then INTERACT="-i"; fi
  53.     setopt nobanghist
  54.     ;;
  55. *)
  56.     case $1 in
  57.     -l*) LOADFILE="source ~/.login" ;;
  58.     -i*) INTERACT="-i" ;;
  59.     *) LOADFILE="source $1" CSH="csh -f";;
  60.     esac
  61.     ;;
  62. esac
  63.  
  64. ( eval $MINUS $CSH $INTERACT ) <<EOF 2>&1 >/dev/null
  65. $LOADFILE
  66. alias >! /tmp/cz$$.a
  67. setenv >! /tmp/cz$$.e
  68. set >! /tmp/cz$$.v
  69. EOF
  70.  
  71. # save stdin
  72. exec 9<&0
  73.  
  74. # First convert aliases
  75. exec < /tmp/cz$$.a
  76.  
  77. # Taken straight from ctoz except for $T and "alias --"
  78. sed -e 's/'"$T"'(\(.*\))/'"$T"'\1/' >/tmp/cz$$.1
  79. grep ! /tmp/cz$$.1 >/tmp/cz$$.2
  80. grep -v ! /tmp/cz$$.1 >/tmp/cz$$.3
  81. sed -e "s/'/'"\\\\"''"/g \
  82.     -e 's/^\([^'"$T"']*\)'"$T"'\(.*\)$/alias -- \1='"'\2'/" \
  83.     /tmp/cz$$.3
  84. sed -e 's/![:#]*/$/g' \
  85.     -e 's/\$cwd/$PWD/' \
  86.     -e 's/^\([^'"$T"']*\)'"$T"'\(.*\)$/\1 () { \2 }/' \
  87.     /tmp/cz$$.2
  88.  
  89. # Next, convert environment variables
  90. exec < /tmp/cz$$.e
  91.  
  92. # Would be nice to deal with embedded newlines, e.g. in TERMCAP, but ...
  93. sed -e '/^SHLVL/d' \
  94.     -e '/^PWD/d' \
  95.     -e "s/'/'"\\\\"''"/g \
  96.     -e "s/^\([A-Za-z0-9_]*=\)/export \1'/" \
  97.     -e "s/$/'/"
  98.  
  99. # Finally, convert local variables
  100. exec < /tmp/cz$$.v
  101.  
  102. sed -e 's/'"$T"'/=/' \
  103.     -e "s/'/'"\\\\"''"/g \
  104.     -e '/^[A-Za-z0-9_]*=[^(]/{
  105.     s/=/='"'/"'
  106.     s/$/'"'/"'
  107.     }' |
  108. sed -e '/^argv=/d' -e '/^cwd=/d' -e '/^filec=/d' -e '/^status=/d' \
  109.      -e '/^autolist=/s/.*/setopt autolist/' \
  110.      -e '/^correct=all/s//setopt correctall/' \
  111.      -e '/^correct=/s//setopt correct/' \
  112.      -e '/^histchars=/s//HISTCHARS=/' \
  113.      -e '/^history=/s//HISTSIZE=/' \
  114.      -e '/^home=/s//HOME=/' \
  115.      -e '/^ignoreeof=/s/.*/setopt ignoreeof/' \
  116.      -e '/^noclobber=/s/.*/setopt noclobber/' \
  117.      -e '/^notify=/d' \
  118.      -e '/^prompt=/s/!/%h/' \
  119.      -e 's/^prompt/PROMPT/' \
  120.      -e '/^showdots=/s/.*/setopt globdots/' \
  121.      -e '/^savehist=/s//HISTFILE=\~\/.zhistory SAVEHIST=/' \
  122.      -e '/^who=/s//WATCHFMT=/'
  123.  
  124.  
  125. exec 0<&9
  126.  
  127. rm /tmp/cz$$.?
  128. exit
  129.