lilalo
annotate l3bashrc @ 100:2c00c61f2d7b
Коммичу изменения, но сам не знаю зачем.
Нужно l3-cgi переписать вообще с нуля.
Он мерзкий.
И продумать нужно, как он вообще должен работать.
Понятно, приблизительно, как он должен показывать журнал,
когда до него уже дошли,
но вот если не дошли, то что делать не понятно.
Короче, продумать систему навигации.
Нужно l3-cgi переписать вообще с нуля.
Он мерзкий.
И продумать нужно, как он вообще должен работать.
Понятно, приблизительно, как он должен показывать журнал,
когда до него уже дошли,
но вот если не дошли, то что делать не понятно.
Короче, продумать систему навигации.
author | devi |
---|---|
date | Wed Jun 14 21:37:22 2006 +0300 (2006-06-14) |
parents | d28dda8ea18f |
children | 77f033a04361 |
rev | line source |
---|---|
devi@70 | 1 #!/bin/sh |
devi@70 | 2 |
devi@70 | 3 |
devi@76 | 4 # Environment variables set by the script: |
devi@76 | 5 # |
devi@76 | 6 # L3_SESSION_ID - uniq id of the LiLaLo-session |
devi@76 | 7 # L3_PARENT_TTY - name of tty on which script is running |
devi@76 | 8 # PS1 - intercative shell prompt in which LiLaLo hides |
devi@76 | 9 # various information about the command |
devi@76 | 10 # L3_TAMPERED_EDITORS - list of editors which are tampered with functions |
devi@76 | 11 |
devi@76 | 12 |
devi@76 | 13 # Functions with the names starting _l3_ are internal. |
devi@76 | 14 # Such functions are unset before this rc script exits |
devi@76 | 15 |
devi@76 | 16 _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' |
devi@76 | 17 |
devi@70 | 18 _l3_start() |
devi@70 | 19 { |
devi@80 | 20 echo $- | grep -q i || return 0 |
devi@79 | 21 if _l3_is_running_here |
devi@76 | 22 then |
devi@76 | 23 _l3_env |
devi@76 | 24 _l3_init_prompt |
devi@76 | 25 l3_fix_prompt |
devi@76 | 26 _l3_tamper_editors |
devi@76 | 27 _l3_tamper_commands |
devi@76 | 28 _l3_unset_internal |
devi@79 | 29 else |
devi@79 | 30 _l3_start_session |
devi@79 | 31 _l3_run_script |
devi@76 | 32 fi |
devi@76 | 33 } |
devi@76 | 34 |
devi@76 | 35 # ===================== STAGE 1 ============================ |
devi@76 | 36 |
devi@79 | 37 _l3_is_running_here() |
devi@76 | 38 { |
devi@79 | 39 ps waux | awk '{print $2" "$11 }' | grep -q ^$PPID" "script |
devi@79 | 40 return $? |
devi@79 | 41 |
devi@79 | 42 # Check if ^^^^ run on Linux |
devi@79 | 43 # and del vvvv this if it does |
devi@79 | 44 |
devi@76 | 45 export L3_TTY=`/usr/bin/tty` |
devi@79 | 46 uname -a | grep -qi bsd && bsd=yes |
devi@70 | 47 proc_on_the_term=`w | grep "${L3_TTY##/dev/}" | awk '{print $8;}'` |
devi@70 | 48 # freeBSD: |
devi@70 | 49 [ -n "$bsd" ] && \ |
devi@70 | 50 proc_on_the_term=`w | grep "${L3_TTY##/dev/tty}" | awk '{print $6;}'` |
devi@70 | 51 |
devi@79 | 52 [ -n "$proc_on_the_term" ] && echo $proc_on_the_term | grep -q script |
devi@70 | 53 } |
devi@70 | 54 |
devi@70 | 55 _l3_start_session() |
devi@70 | 56 { |
devi@79 | 57 export L3_SESSION_ID=${RANDOM}${RANDOM}${RANDOM}${RANDOM}-`date +%s` |
devi@71 | 58 export L3_HOME=~/.lilalo/ |
devi@70 | 59 mkdir -p $L3_HOME |
devi@70 | 60 |
devi@79 | 61 tty=`/usr/bin/tty` |
devi@70 | 62 uname -a | grep -qi bsd && bsd=yes |
devi@70 | 63 parent=`cat /proc/$PPID/cmdline 2> /dev/null` |
devi@79 | 64 [ -z "$parent" ] && parent="`ps waux | awk '{if ($2 == '$PPID') print $11; }'`" |
devi@70 | 65 system=`uname -rs` |
devi@79 | 66 login_from=`who | grep "${tty##/dev/}" | awk '{print $6;}' | tr -d '()'` |
devi@70 | 67 #[ -n "$bsd" ] && login_from="" #FIXME! |
devi@70 | 68 start_time=`date +%s` |
devi@70 | 69 hostname=`hostname -f 2> /dev/null` |
devi@70 | 70 [ -n "$bsd" ] && hostname=`hostname` |
devi@70 | 71 |
devi@70 | 72 cat <<INFO > $L3_HOME/$L3_SESSION_ID.info |
devi@70 | 73 <session> |
devi@70 | 74 <local_session_id>$L3_SESSION_ID</local_session_id> |
devi@70 | 75 <hostname>$hostname</hostname> |
devi@70 | 76 <user>$USER</user> |
devi@70 | 77 <uid>$UID</uid> |
devi@70 | 78 <login_from>$login_from</login_from> |
devi@79 | 79 <tty>$tty</tty> |
devi@70 | 80 <system>$system</system> |
devi@70 | 81 <parent>$parent</parent> |
devi@70 | 82 <ppid>$PPID</ppid> |
devi@70 | 83 <pid>$$</pid> |
devi@70 | 84 <start_time>$start_time</start_time> |
devi@76 | 85 <lang>$LANG</lang> |
devi@70 | 86 </session> |
devi@70 | 87 INFO |
devi@70 | 88 |
devi@79 | 89 unset parent system login_from start_time hostname tty |
devi@70 | 90 } |
devi@70 | 91 |
devi@70 | 92 _l3_run_script() |
devi@70 | 93 { |
devi@70 | 94 uname -a | grep -qi bsd && bsd=yes |
devi@70 | 95 flush="-f" #linux |
devi@70 | 96 [ -n "$bsd" ] && flush="-t 0" #freebsd |
devi@76 | 97 export L3_PARENT_TTY=`/usr/bin/tty` |
devi@70 | 98 exec script $flush -q $L3_HOME/${L3_SESSION_ID}.script |
devi@70 | 99 } |
devi@70 | 100 |
devi@76 | 101 # ===================== STAGE 2 ============================ |
devi@76 | 102 |
devi@76 | 103 _l3_env() |
devi@76 | 104 { |
devi@76 | 105 trap l3_close_session 2 |
devi@76 | 106 trap l3_close_session EXIT |
devi@76 | 107 true |
devi@76 | 108 } |
devi@76 | 109 |
devi@76 | 110 l3_close_session() |
devi@70 | 111 { |
devi@71 | 112 ( |
devi@71 | 113 echo '<history>' |
devi@71 | 114 history | sed 's/&/\&/; s/</\</g; s/>/\>/g' |
devi@71 | 115 echo '</history>' |
devi@71 | 116 ) >> $L3_HOME/$L3_SESSION_ID.info |
devi@70 | 117 } |
devi@70 | 118 |
devi@76 | 119 _l3_init_prompt() |
devi@76 | 120 { |
devi@76 | 121 PS1='[\u@\h:\W]\$ ' |
devi@77 | 122 [ $UID = 0 ] \ |
devi@77 | 123 && PS1='\[\033[0;31m\]'$PS1'\[\033[0m\]' \ |
devi@77 | 124 || PS1='\[\033[0;32m\]'$PS1'\[\033[0m\]' \ |
devi@76 | 125 export PS1 |
devi@76 | 126 } |
devi@76 | 127 |
devi@76 | 128 l3_fix_prompt() |
devi@76 | 129 { |
devi@97 | 130 export PS1='\[$(l3_save_last_line)v2#\!#$?#$UID#$$#$(/bin/date +%s)#$PWD#\033[1024D\033[K\]'$PS1 |
devi@76 | 131 } |
devi@76 | 132 |
devi@76 | 133 _l3_tamper_editors() |
devi@76 | 134 { |
devi@76 | 135 for editor_file in $_l3_editors_to_tamper |
devi@76 | 136 do |
devi@76 | 137 [ -x $editor_file ] || continue |
devi@76 | 138 editor_name=${editor_file##*/} |
devi@76 | 139 eval " |
devi@76 | 140 $editor_name() { |
devi@76 | 141 if [ -d \"\$1\" ] |
devi@76 | 142 then |
devi@76 | 143 $editor_file \"\$1\" |
devi@76 | 144 return \$? |
devi@76 | 145 else |
devi@76 | 146 TIME=\"\`date +%s\`\" |
devi@76 | 147 DIR=\"\" |
devi@76 | 148 [ \"\${1#/}\" = \"\$1\" ] && DIR=\"\$PWD/\" |
devi@80 | 149 DIFFNAME=\"\${L3_SESSION_ID}_\${TIME}\`echo \$DIR\$1| sed s@_@__@ | sed 's@/@_@g'\`.diff\" |
devi@76 | 150 old_file=\"/tmp/l3-saved-\$\$.\$RANDOM.\$RANDOM\" |
devi@76 | 151 /bin/cp -- \"\$1\" \"\$old_file\" 2> /dev/null |
devi@76 | 152 $editor_file \"\$@\" || ERR=\$? |
devi@80 | 153 [ -e \"\$old_file\" ] && diff \"\$old_file\" \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null |
devi@80 | 154 if [ "$?" == 2 ] |
devi@80 | 155 then |
devi@80 | 156 diff /dev/null \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null |
devi@80 | 157 fi |
devi@76 | 158 /bin/rm \"\$old_file\" 2> /dev/null |
devi@76 | 159 return \$ERR |
devi@76 | 160 fi |
devi@76 | 161 } |
devi@76 | 162 " |
devi@76 | 163 L3_TAMPERED_EDITORS="$L3_TAMPERED_EDITORS $editor_name" |
devi@76 | 164 done |
devi@76 | 165 [ -n "$L3_TAMPERED_EDITORS" ] && export L3_TAMPERED_EDITORS |
devi@76 | 166 } |
devi@76 | 167 |
devi@76 | 168 _l3_tamper_commands() |
devi@76 | 169 { |
devi@76 | 170 tty() |
devi@76 | 171 { |
devi@76 | 172 [ -n "$L3_PARENT_TTY" ] && echo $L3_PARENT_TTY || /usr/bin/tty |
devi@76 | 173 } |
devi@76 | 174 } |
devi@76 | 175 |
devi@76 | 176 _l3_unset_internal() |
devi@76 | 177 { |
devi@76 | 178 unset `set | grep '^_l3_.*()' | sed 's/()//'` |
devi@76 | 179 unset `set | grep '^_l3_.*=' | sed 's/=.*//'` |
devi@76 | 180 } |
devi@78 | 181 |
devi@78 | 182 |
devi@78 | 183 l3shot() |
devi@78 | 184 { |
devi@78 | 185 if [ -x "`which xwd`" ] |
devi@78 | 186 then |
devi@78 | 187 _l3_home=${L3_HOME:-~/.lilalo} |
devi@78 | 188 shot_name="${L3_SESSION_ID}_`date +%s`".xwd |
devi@78 | 189 echo -n Choose window to be shoot ... >&2 |
devi@78 | 190 [ -d ${_l3_home} ] || mkdir -p ${_l3_home} |
devi@78 | 191 xwd -out "$_l3_home/$shot_name" \ |
devi@78 | 192 && echo Ok\ |
devi@78 | 193 && echo Shot was successful. \ |
devi@78 | 194 && echo Screenshot is written to ${_l3_home}/${shot_name} \ |
devi@78 | 195 && echo Screenshot will appears in the lablog. |
devi@78 | 196 else |
devi@78 | 197 { |
devi@78 | 198 echo |
devi@78 | 199 echo "Can't make screenshot :(" |
devi@78 | 200 echo |
devi@78 | 201 echo I must use program xwd to make screenshot, |
devi@78 | 202 echo but it seems not to be installed |
devi@78 | 203 echo Try to find the program in the \"xbase-clients\" package |
devi@78 | 204 echo |
devi@78 | 205 } >&2 |
devi@78 | 206 fi |
devi@78 | 207 } |
devi@97 | 208 |
devi@97 | 209 # Append lines from "$@" files to the end of the shell history |
devi@97 | 210 hist_append () |
devi@97 | 211 { |
devi@97 | 212 eval $(cat "$@" | sed 's/"/\\\\"/g' | while read line; do echo history -s \"$line\"\;; done); |
devi@97 | 213 } |
devi@97 | 214 |
devi@97 | 215 l3_save_last_line () |
devi@97 | 216 { |
devi@97 | 217 ( |
devi@97 | 218 echo '<cline>' |
devi@97 | 219 history 1 | sed 's/&/&/; s/</\</g; s/>/\>/g' |
devi@97 | 220 echo '</cline>' |
devi@97 | 221 ) >> $L3_HOME/$L3_SESSION_ID.info |
devi@97 | 222 } |
devi@97 | 223 |
devi@97 | 224 |