Mercurial > evolve-talk
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 |
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 |