lilalo
view l3bashrc @ 150:822b36252d7f
Вывод больших фрагментов текста не теряется.
Большие фрагменты текста теперь не вырезаются бесследно.
Там, откуда они вырезаются, вставляются ссылки,
по которым можно посмотреть полную версию вывода.
Испытано на больших фрагментах текста,
содержащих до 5000 строк (фрагменты более 5000 строк по умолчанию
обрезаются административно; допустимые размеры задаются в l3config.pm).
Исправлены ошибки, из-за которых большие фрагменты
обрабатывались некорректно.
Большие фрагменты текста теперь не вырезаются бесследно.
Там, откуда они вырезаются, вставляются ссылки,
по которым можно посмотреть полную версию вывода.
Испытано на больших фрагментах текста,
содержащих до 5000 строк (фрагменты более 5000 строк по умолчанию
обрезаются административно; допустимые размеры задаются в l3config.pm).
Исправлены ошибки, из-за которых большие фрагменты
обрабатывались некорректно.
| author | igor@chub.in | 
|---|---|
| date | Tue Jun 23 01:15:02 2009 +0300 (2009-06-23) | 
| parents | 1cbdfdde1274 | 
| children | 8ee5e59f1bd3 137cf5a580be | 
 line source
     1 #!/bin/sh
     3 # (c) Igor Chubin, igor@chub.in, 2004-2006
     5 # Environment variables set by the script:
     6 #
     7 #       L3_SESSION_ID   - uniq id of the LiLaLo-session
     8 #       L3_PARENT_TTY   - name of tty on which script is running
     9 #       PS1             - intercative shell prompt in which LiLaLo hides
    10 #                         various information about the command
    11 #       L3_TAMPERED_EDITORS - list of editors which are tampered with functions
    14 # Functions with the names starting _l3_ are internal.
    15 # Such functions are unset before this rc script exits
    17 _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'
    19 _l3_start()
    20 {
    21     echo $- | grep -q i || return 0
    22     if _l3_is_running_here
    23     then
    24         _l3_env
    25         _l3_init_prompt
    26          l3_fix_prompt
    27         _l3_tamper_editors
    28         _l3_tamper_commands
    29         _l3_unset_internal
    30     else
    31         _l3_start_session
    32         _l3_run_script
    33     fi
    34 }
    36 # ===================== STAGE 1 ============================
    38 _l3_is_running_here()
    39 {
    40 	ps waux | awk '{print $2" "$11 }' | grep -q ^$PPID" "script 
    41 	return $?
    43 # Check if ^^^^ run on Linux
    44 # and del  vvvv this if it does
    46     export L3_TTY=`/usr/bin/tty` 
    47     uname -a | grep -qi bsd && bsd=yes
    48     proc_on_the_term=`w | grep "${L3_TTY##/dev/}" | awk '{print $8;}'`
    49     # freeBSD: 
    50     [ -n "$bsd" ] && \
    51     proc_on_the_term=`w | grep "${L3_TTY##/dev/tty}" | awk '{print $6;}'`
    53     [ -n "$proc_on_the_term" ] && echo $proc_on_the_term | grep -q script
    54 }
    56 _l3_start_session()
    57 {
    58     export L3_SESSION_ID=${RANDOM}${RANDOM}${RANDOM}${RANDOM}-`date +%s`
    59     export L3_HOME=~/.lilalo/
    60     mkdir -p $L3_HOME
    62     tty=`/usr/bin/tty`
    63     uname -a | grep -qi bsd && bsd=yes
    64     parent=`cat /proc/$PPID/cmdline 2> /dev/null`
    65     [ -z "$parent" ] && parent="`ps waux | awk '{if ($2 == '$PPID') print $11; }'`"
    66     system=`uname -rs`
    67     login_from=`who | grep "${tty##/dev/}" | awk '{print $6;}' | tr -d '()'`
    68     #[ -n "$bsd" ] && login_from="" #FIXME!
    69     start_time=`date +%s`
    70     hostname=`hostname -f 2> /dev/null`
    71     [ -n "$bsd" ] && hostname=`hostname`
    73     cat <<INFO > $L3_HOME/$L3_SESSION_ID.info
    74 <session>
    75     <local_session_id>$L3_SESSION_ID</local_session_id>
    76     <hostname>$hostname</hostname>
    77     <user>$USER</user>
    78     <uid>$UID</uid>
    79     <login_from>$login_from</login_from>
    80     <tty>$tty</tty>
    81     <system>$system</system>
    82     <parent>$parent</parent>
    83     <ppid>$PPID</ppid>
    84     <pid>$$</pid>
    85     <start_time>$start_time</start_time>
    86     <lang>$LANG</lang>
    87 </session>
    88 INFO
    90     unset parent system login_from start_time hostname tty
    91 }
    93 _l3_run_script()
    94 {
    95     uname -a | grep -qi bsd && bsd=yes
    96     flush="-f"                          #linux
    97     [ -n "$bsd" ] && flush="-t 0"       #freebsd
    98     export L3_PARENT_TTY=`/usr/bin/tty`
    99     exec script $flush -c ${0#-} -q $L3_HOME/${L3_SESSION_ID}.script
   100 }
   102 # ===================== STAGE 2 ============================
   104 _l3_env()
   105 {
   106     trap l3_close_session 2
   107     trap l3_close_session EXIT
   108     true
   109 }
   111 l3_close_session()
   112 {
   113     ( 
   114         echo '<history>'
   115         history | sed 's/&/\&/; s/</\</g; s/>/\>/g'
   116         echo '</history>'
   117     ) >> $L3_HOME/$L3_SESSION_ID.info
   118 }
   120 _l3_init_prompt()
   121 {
   122     PS1='[\u@\h:\W]\$ '
   123     [ $UID = 0 ] \
   124         && PS1='\[\033[0;31m\]'$PS1'\[\033[0m\]' \
   125         || PS1='\[\033[0;32m\]'$PS1'\[\033[0m\]' \
   126     export PS1
   127 }
   129 l3_fix_prompt()
   130 {
   131     export PS1='\[$($L3_HOME/l3prompt "v3#\!#$?#$UID#$$#$(/bin/date +%s)#$PWD#$RANDOM#")$(l3_save_last_line >& /dev/null)\]'$PS1
   132 }
   134 _l3_tamper_editors()
   135 {
   136     for editor_file in $_l3_editors_to_tamper
   137     do
   138         [ -x $editor_file ] || continue
   139         editor_name=${editor_file##*/}
   140         eval "
   141         $editor_name() { 
   142             if [ -d \"\$1\" ] 
   143             then
   144                 $editor_file \"\$1\"
   145                 return \$?
   146             else
   147                 TIME=\"\`date +%s\`\"
   148                 DIR=\"\"
   149                 [ \"\${1#/}\" = \"\$1\" ] && DIR=\"\$PWD/\"
   150                 DIFFNAME=\"\${L3_SESSION_ID}_\${TIME}\`echo \$DIR\$1| sed s@_@__@ | sed 's@/@_@g'\`.diff\"
   151                 old_file=\"/tmp/l3-saved-\$\$.\$RANDOM.\$RANDOM\"
   152                 /bin/cp -- \"\$1\" \"\$old_file\" 2> /dev/null
   153                 $editor_file \"\$@\" || ERR=\$?
   154                 if [ -e \"\$old_file\" ]
   155                 then
   156                 diff -u \"\$old_file\" \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null
   157                 else
   158                 diff -u /dev/null \"\$1\"  > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null
   159                 fi
   160                 /bin/rm \"\$old_file\" 2> /dev/null
   161                 return \$ERR
   162             fi
   163         }
   164         "
   165         L3_TAMPERED_EDITORS="$L3_TAMPERED_EDITORS $editor_name"
   166     done
   167     [ -n "$L3_TAMPERED_EDITORS" ] && export L3_TAMPERED_EDITORS
   168 }
   170 _l3_tamper_commands()
   171 {
   172     tty()
   173     {
   174         [ -n "$L3_PARENT_TTY" ] && echo $L3_PARENT_TTY || /usr/bin/tty
   175     }
   176 }
   178 _l3_unset_internal()
   179 {
   180     unset `set | grep '^_l3_.*()' | sed 's/()//'`
   181     unset `set | grep '^_l3_.*=' | sed 's/=.*//'`
   182 }
   184 l3shot()
   185 {
   186     if [ -x "`which xwd`" ]
   187     then
   188         _l3_home=${L3_HOME:-~/.lilalo}
   189         shot_name="${L3_SESSION_ID}_`date +%s`".xwd
   190         echo -n Choose window to be shoot ... >&2
   191         [ -d ${_l3_home} ] || mkdir -p ${_l3_home}
   192         xwd -out "$_l3_home/$shot_name" \
   193         && echo Screenshot is written to ${_l3_home}/${shot_name} \
   194         && curl -s -F photo=@$_l3_home/$shot_name http://`l3-config backend_address`/l3-upload
   195     else
   196         {
   197             echo
   198             echo "Can't make screenshot :("
   199             echo 
   200             echo I must use program xwd to make screenshot, 
   201             echo but it seems not to be installed
   202             echo Try to find the program in the \"xbase-clients\" package
   203             echo
   204         }   >&2 
   205     fi
   206 }
   208 l3upload()
   209 {
   210     if [ $# -lt 1 ]
   211     then
   212         echo Usage:
   213         echo 
   214         echo    l3upload "<filename> [<time>]"
   215         echo
   216         echo "<filename>" - name of the file to upload
   217         return 1
   218     else
   219         source=$1 
   220         time=`date +%s`
   221         [ -n "$2" ] && time="$2"
   222         target="${L3_SESSION_ID}_$time"_"$(echo $source|sed s@.*/@@)"
   223         if echo $source | grep -q http://
   224         then
   225             curl -s "$source" > /tmp/$target 
   226         else 
   227             [ -r "$source" ] || { echo "l3upload: Can't open $source for reading" > /dev/stderr; return 1; }
   228             cp $source /tmp/$target
   229         fi
   230         echo Uploaded file name is ${target}
   231         curl -s -F photo=@/tmp/$target http://`l3-config backend_address`/l3-upload && rm -f /tmp/$target
   232     fi
   233 }
   235 l3mass_upload()
   236 {
   237     for i in "$@"
   238     do
   239       l3upload $i `perl -e 'print (((stat("$i"))[9])."\n")'`
   240     done
   241 }
   243 # Append lines from "$@" files to the end of the shell history
   244 hist_append ()
   245 {
   246     eval $(cat "$@" | sed 's/"/\\\\"/g' | while read line; do echo history -s \"$line\"\;; done);
   247 }
   249 l3_save_last_line ()
   250 {
   251     (
   252     echo '<cline>'
   253     history 1 | sed 's/&/&/; s/</\</g; s/>/\>/g'
   254     echo '</cline>'
   255     ) >> $L3_HOME/$L3_SESSION_ID.info
   256 }
   258 l3 ()
   259 {
   260     case "$1" in
   261         on)
   262             echo switching on
   263         ;;
   264         off)
   265             echo switcing off
   266         ;;
   267         cd)
   268             echo l3cd="$2" > ~/.l3rc
   269         ;;
   270         pwd)
   271             grep ^l3cd= ~/.l3rc | sed s/[^=]*=//
   272         ;;
   273         *) 
   274             cat <<EOF
   275 l3 [command]:
   277     cd new_context   - change current lilalo context
   278     pwd              - show current lilalo context
   279     on               - switch writing on (NOT IMPLEMENTED YET)
   280     off              - switch writing off (NOT IMPLEMENTED YET)
   282 EOF
   283         ;;
   284     esac
   285 }
   287 l3cd()
   288 {
   289     l3 cd "$@"
   290 }
   292 l3pwd()
   293 {
   294     l3 pwd
   295 }
