added shelr script and first screencast script (setting up a new provider)
[scripts.git] / shelr / shelr-screencast.sh
1 #!/bin/bash
2 # by varacanero@zeromail.org
3 # under gpl licence v3
4
5 # Usage: 
6
7 # * check if wait_for_prompt() is working correctly by running shelr-screencast.sh ~/coding/xdotool/script
8 # * in order to get this working, you need sth like this in your .bashrc: 
9 #   PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
10 # * open another terminal, not bigger than 132x43
11 # * gain temp. sudo priviledges with "sudo /bin/true" 
12 # * start "shelr record"
13 # * start this script in another terminal i.e. "./shelr-screencast.sh /home/varac/coding/xdotool/script" 
14 # * move mouse focus to shelr window !
15
16 # Limitations
17 # to query if a window is processing some cmd of is waiting with a shell prompt, 
18 # you can't su to another users, cause xprop would not recognize running cmds.
19 # you need to run this as the xsession user
20
21
22 # for tty backend ~350
23 DELAY_MAX=350
24
25 fake_input() {
26   line="$@"
27   for (( i=0; i<${#line}; i++ )); do
28     delay=`shuf -i 12-$DELAY_MAX -n 1`
29     xdotool type --delay $delay  "${line:$i:1}"
30   done
31   xdotool key Return
32 }
33
34 wait_for_prompt() {
35   no_prompt=true
36   while $no_prompt 
37   do
38     sleep 1
39     name=`win_name`
40     echo "$name"|grep -q "$prompt_regexp" && no_prompt=false
41   done
42   sleep 0.3 
43 }
44
45 win_name () {
46   local name
47   name="`xprop -id $win_id WM_NAME | cut -d'"' -f 2`"
48   echo $name
49 }
50
51
52 # main
53
54
55 # begin
56
57 echo
58 echo "Move mouse over to the recording terminal !"
59 sleep 3 
60
61
62 file=$1
63 win_id=`xprop -root | grep '_NET_ACTIVE_WINDOW(WINDOW)' | cut -d' '  -f5`
64
65 # for zsh:
66 #prompt_regexp="^$USER@`hostname`:"
67 prompt_regexp="demo@rocinante:"
68
69 # bash:
70 #prompt_regexp="^$USER:.*\$"
71
72 while read line           
73 do           
74   fake_input "$line" 
75   wait_for_prompt
76 done < $file
77
78