annotate sh-replay @ 9:39800c8f0532

Add initial session replay
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Sat, 08 Mar 2014 19:35:00 -0500
parents
children 82176b2a61da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 #!/usr/bin/env python
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
2
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
3 import os,sys,subprocess
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4 from colors import yellow, blue, magenta
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5 from sh import hg, cd
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 import sh
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8 curr_cmd = ""
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10 def getch():
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11 import sys, tty, termios
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12 fd = sys.stdin.fileno()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 old_settings = termios.tcgetattr(fd)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 try:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 tty.setraw(sys.stdin.fileno())
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 ch = sys.stdin.read(1)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17 finally:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18 termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19 if ord(ch) == 3:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 sys.exit(0)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 if ord(ch) == 12:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22 subprocess.call("reset")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 print_prompt()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24 sys.stdout.write(curr_cmd)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25 sys.stdout.flush()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27 return ch
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29 def get_hg_id():
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30 try:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31 book = hg.id(B=True).strip()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 except:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 book = False
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35 if book:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 return book
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38 try:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39 branch = hg.branch().strip()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 except:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41 return ""
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 return branch
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 def print_prompt():
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 cwd = os.getcwd()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 if cwd == "/home/jordi":
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48 cwd = "~"
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49 else:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 cwd = os.path.split(cwd)[-1]
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 hg_id = get_hg_id()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54 sys.stdout.write(yellow("jordi@REVSETS", style="bold") + ":"
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 + blue(cwd, style="bold") + " "
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56 + magenta(hg_id, style="bold") + "$ ")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58 def main():
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59 subprocess.call("reset")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60 with open(sys.argv[1]) as f:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61 cmds = [cmd.strip() for cmd in f.readlines()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62 if cmd.strip() and not cmd.strip().startswith("#")]
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64 global curr_cmd
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 for cmd in cmds:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66 print_prompt()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 curr_cmd = ""
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68 for c in cmd:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69 key = getch()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70 sys.stdout.write(c)
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 sys.stdout.flush()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 curr_cmd += c
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 while True:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 key = getch()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76 if ord(key) == 13:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77 sys.stdout.write("\n")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78 sys.stdout.flush()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 break
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 if cmd.startswith("cd "):
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 cd(cmd[3:])
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83 else:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 with open("/tmp/cmd", "w") as f:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 f.write("shopt -s expand_aliases\n")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86 f.write(cmd + "\n")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87 f.flush()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89 subprocess.call(["/bin/bash", "-l", "/tmp/cmd"])
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 while True:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 key = getch()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 if ord(key) == 13:
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94 sys.stdout.write("\n")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95 sys.stdout.flush()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 break
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106 print yellow(" TTTTTT HH HH A NN NN KK KK SSS ", style="bold")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 print yellow(" TT HH HH A A NNNN NN KK KK SS ", style="bold")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108 print yellow(" TT HHHHH AAAAA NN NNNN KKKKK SS ", style="bold")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 print yellow(" TT HH HH AA AA NN NNN KK KK SS ", style="bold")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 print yellow(" TT HH HH AA AA NN NN KK KK SSS ", style="bold")
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118 print
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121 if __name__ == "__main__":
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 main()
39800c8f0532 Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123