summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin Morrison <mutantturkey@gmail.com>2013-07-22 18:31:31 -0400
committerCalvin Morrison <mutantturkey@gmail.com>2013-07-22 18:31:31 -0400
commit6bb50e1ce5972fb71bbe5c3e6cf3bc897547cc37 (patch)
treea6bad66b950af6976bb7783f2c01820f72d8154c
initial version
-rw-r--r--rtsed.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/rtsed.py b/rtsed.py
new file mode 100644
index 0000000..af17b2b
--- /dev/null
+++ b/rtsed.py
@@ -0,0 +1,76 @@
+import curses
+import os
+import sys
+import StringIO
+
+from subprocess import *
+import subprocess
+
+# our screen
+screen = curses.initscr()
+curses.noecho()
+curses.cbreak()
+curses.curs_set(0)
+curses.start_color()
+
+curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_CYAN)
+curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_RED)
+
+# our stdin input
+input_buffer = ""
+
+# rows and columns of our screen
+cols = int(subprocess.check_output(["tput", "cols"]))
+rows = int(subprocess.check_output(["tput", "lines"]))
+
+def call_sed(string):
+ process = Popen(["sed", "-e", string], stdout=PIPE, stdin=PIPE, stderr=PIPE)
+ ret = process.communicate(input_buffer)
+ if(process.returncode is not 0):
+ screen.addstr(ret[1][:-1].ljust(cols), curses.color_pair(2));
+ else:
+ screen.addstr(ret[0]);
+ return
+
+
+def main():
+
+ input_string = ""
+ global input_buffer
+
+ for line in open(sys.argv[1], "r"):
+ input_buffer = input_buffer + line
+
+ # init our screen
+ screen.addstr("".ljust(cols), curses.color_pair(1));
+ screen.addstr(input_buffer)
+ screen.addstr("EOF")
+
+ try:
+ while 1:
+ key = screen.getch()
+ screen.clear()
+ if(key > 256):
+ continue;
+ if(key == 127):
+ input_string = input_string[:-1]
+ screen.addstr(input_string.ljust(cols), curses.color_pair(1));
+ screen.addstr(input_buffer)
+ screen.addstr("EOF")
+ continue;
+ elif(key == 13 or key == 10):
+ screen.addstr(input_string.ljust(cols), curses.color_pair(1));
+ call_sed(input_string)
+ screen.addstr("EOF")
+ continue;
+ else:
+ input_string+=chr(key)
+ screen.addstr(input_string.ljust(cols), curses.color_pair(1));
+ screen.addstr(input_buffer)
+ screen.addstr("EOF")
+ finally:
+ curses.endwin()
+
+if __name__ == "__main__":
+ sys.exit(main())
+