annotate sh-replay @ 11:82176b2a61da

Various tweaks to sh-replay
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Sat, 08 Mar 2014 21:31:00 -0500
parents 39800c8f0532
children
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
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()