# HG changeset patch # User devi # Date 1139850079 -7200 # Node ID 0da83215839aa2af522045fef0b993c76f32b10e # Parent 58ea78973bbb19acec563ad85d02f27c8f9b62e2 Существенная переработка l3bashrc * Код полностью структурирован * Выполняется подмена редакторов с помощью функций * Выполняется подмена команд. Сейчас только tty * Устанавливаются переменные окружения L3_* с информацией о сессии * Добавлена функция l3_fix_prompt восстанавливающая приглашение LiLaLo со служебной информацией, в том случае, если оно было модифицировано. Приглашение остаётся внешне таким же как и до вызова функции, но в нём теперь скрыта служебная информация LiLaLo * Приглашение стало цветным. Теперь оно зелёного цвета diff -r 58ea78973bbb -r 0da83215839a l3bashrc --- a/l3bashrc Fri Feb 10 23:35:24 2006 +0200 +++ b/l3bashrc Mon Feb 13 19:01:19 2006 +0200 @@ -1,39 +1,48 @@ #!/bin/sh +# Environment variables set by the script: +# +# L3_SESSION_ID - uniq id of the LiLaLo-session +# L3_PARENT_TTY - name of tty on which script is running +# L3_TTY - current tty +# PS1 - intercative shell prompt in which LiLaLo hides +# various information about the command +# L3_TAMPERED_EDITORS - list of editors which are tampered with functions + + +# Functions with the names starting _l3_ are internal. +# Such functions are unset before this rc script exits + +_l3_editors_to_tamper='/bin/vi /usr/bin/vi /usr/bin/vim /bin/ee /usr/bin/ee /usr/bin/pico /usr/bin/nano /usr/local/bin/vim' + _l3_start() { - L3_TTY=`tty` + if _l3_is_not_running_here + then + _l3_start_session + _l3_run_script + else + _l3_env + _l3_init_prompt + l3_fix_prompt + _l3_tamper_editors + _l3_tamper_commands + _l3_unset_internal + fi +} + +# ===================== STAGE 1 ============================ + +_l3_is_not_running_here() +{ + export L3_TTY=`/usr/bin/tty` proc_on_the_term=`w | grep "${L3_TTY##/dev/}" | awk '{print $8;}'` # freeBSD: [ -n "$bsd" ] && \ proc_on_the_term=`w | grep "${L3_TTY##/dev/tty}" | awk '{print $6;}'` - if [ -n "$proc_on_the_term" ] && echo $proc_on_the_term | grep -qv script - then - _l3_start_session - _l3_run_script - else - _l3_env - _l3_prompt - fi -} - -_l3_env() -{ - trap _l3_close_session 2 - trap _l3_close_session EXIT - true -} - -_l3_prompt() -{ - export PS1='\[v2#\!#$?#$UID#$$#$(date +%s)#$PWD#\033[1024D\033[K\][\u@\h:\W]\$ ' -# export PS1='\[` -# a="$?"; -# HIDDEN=$([ "$a" = 0 ] || echo -n ^"$a")$(echo -n _${UID}_)$(echo -n _$$_)$(date\ -# +"%j$(cat ${LMHOME}/lab 2>/dev/null) %H:%M:%S"); -# echo $HIDDEN`\033[50D\033[K\][\u@\h:\W]\$ ' + [ -n "$proc_on_the_term" ] && echo $proc_on_the_term | grep -qv script } _l3_start_session() @@ -45,7 +54,7 @@ uname -a | grep -qi bsd && bsd=yes parent=`cat /proc/$PPID/cmdline 2> /dev/null` system=`uname -rs` - login_from=`who | grep "${tty##/dev/}" | awk '{print $6;}' | tr -d '()'` + login_from=`who | grep "${L3_TTY##/dev/}" | awk '{print $6;}' | tr -d '()'` #[ -n "$bsd" ] && login_from="" #FIXME! start_time=`date +%s` hostname=`hostname -f 2> /dev/null` @@ -58,12 +67,13 @@ $USER $UID $login_from - $tty + $L3_TTY $system $parent $PPID $$ $start_time + $LANG INFO @@ -75,10 +85,20 @@ uname -a | grep -qi bsd && bsd=yes flush="-f" #linux [ -n "$bsd" ] && flush="-t 0" #freebsd + export L3_PARENT_TTY=`/usr/bin/tty` exec script $flush -q $L3_HOME/${L3_SESSION_ID}.script } -_l3_close_session() +# ===================== STAGE 2 ============================ + +_l3_env() +{ + trap l3_close_session 2 + trap l3_close_session EXIT + true +} + +l3_close_session() { ( echo '' @@ -87,3 +107,60 @@ ) >> $L3_HOME/$L3_SESSION_ID.info } +_l3_init_prompt() +{ + PS1='[\u@\h:\W]\$ ' + PS1='\[\033[0;32m\]'$PS1'\[\033[0m\]' + export PS1 +} + +l3_fix_prompt() +{ + export PS1='\[v2#\!#$?#$UID#$$#$(/bin/date +%s)#$PWD#\033[1024D\033[K\]'$PS1 +} + +_l3_tamper_editors() +{ + for editor_file in $_l3_editors_to_tamper + do + [ -x $editor_file ] || continue + editor_name=${editor_file##*/} + eval " + $editor_name() { + if [ -d \"\$1\" ] + then + $editor_file \"\$1\" + return \$? + else + TIME=\"\`date +%s\`\" + DIR=\"\" + [ \"\${1#/}\" = \"\$1\" ] && DIR=\"\$PWD/\" + DIFFNAME=\"\$PPID_\${TIME}_\`echo \$DIR\$1| /bin/sed s@_@__@ | /bin/sed 's@/@_@g'\`.diff\" + old_file=\"/tmp/l3-saved-\$\$.\$RANDOM.\$RANDOM\" + /bin/cp -- \"\$1\" \"\$old_file\" 2> /dev/null + $editor_file \"\$@\" || ERR=\$? + [ -e \"\$old_file\" ] && diff \"\$old_file\" \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null \ + || diff /dev/null \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null + /bin/rm \"\$old_file\" 2> /dev/null + return \$ERR + fi + } + " + L3_TAMPERED_EDITORS="$L3_TAMPERED_EDITORS $editor_name" + done + [ -n "$L3_TAMPERED_EDITORS" ] && export L3_TAMPERED_EDITORS +} + +_l3_tamper_commands() +{ + tty() + { + [ -n "$L3_PARENT_TTY" ] && echo $L3_PARENT_TTY || /usr/bin/tty + } +} + +_l3_unset_internal() +{ + unset `set | grep '^_l3_.*()' | sed 's/()//'` + unset `set | grep '^_l3_.*=' | sed 's/=.*//'` +}