Mercurial > evolve-talk
annotate sh-replay @ 25:756d0a23f1a5
Change the evolve logo
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Sun, 09 Mar 2014 20:31:29 -0400 |
parents | 82176b2a61da |
children |
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 |
11
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
54 sys.stdout.write(yellow("jordi@evolve", style="bold") + ":" |
9
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
55 + blue(cwd, style="bold") + " " |
11
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
56 + magenta(hg_id, style="bold") + "\n$ ") |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
57 |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
58 def waitforenter(): |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
59 while True: |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
60 key = getch() |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
61 if ord(key) == 13: |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
62 sys.stdout.write("\n") |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
63 sys.stdout.flush() |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
64 break |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
65 |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
66 def backtoslides(): |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
67 print |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
68 print " <---- Back to slides " |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
69 print |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
70 waitforenter() |
9
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
71 |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
72 def main(): |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
73 subprocess.call("reset") |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
74 with open(sys.argv[1]) as f: |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
75 cmds = [cmd.strip() for cmd in f.readlines() |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
76 if cmd.strip() and not cmd.strip().startswith("#")] |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
77 |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
78 global curr_cmd |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
79 for cmd in cmds: |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
80 print_prompt() |
11
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
81 |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
82 # Control commands... |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
83 if cmd[0] == "!": |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
84 cmd = cmd[1:] |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
85 if cmd == "RET": |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
86 backtoslides() |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
87 continue |
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
88 |
9
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
89 curr_cmd = "" |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
90 for c in cmd: |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
91 key = getch() |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
92 sys.stdout.write(c) |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
93 sys.stdout.flush() |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
94 curr_cmd += c |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
95 |
11
82176b2a61da
Various tweaks to sh-replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
9
diff
changeset
|
96 waitforenter() |
9
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 if cmd.startswith("cd "): |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
99 cd(cmd[3:]) |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
100 else: |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
101 with open("/tmp/cmd", "w") as f: |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
102 f.write("shopt -s expand_aliases\n") |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
103 f.write(cmd + "\n") |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
104 f.flush() |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
105 |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
106 subprocess.call(["/bin/bash", "-l", "/tmp/cmd"]) |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
107 |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
108 |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
109 if __name__ == "__main__": |
39800c8f0532
Add initial session replay
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
110 main() |