about summary refs log tree commit diff
path: root/saneterm/terminal.py
diff options
context:
space:
mode:
Diffstat (limited to 'saneterm/terminal.py')
-rw-r--r--saneterm/terminal.py47
1 files changed, 6 insertions, 41 deletions
diff --git a/saneterm/terminal.py b/saneterm/terminal.py
index 70f538c..f0c5e4d 100644
--- a/saneterm/terminal.py
+++ b/saneterm/terminal.py
@@ -1,5 +1,4 @@
 import sys
-import pty
 import os
 import codecs
 import termios
@@ -8,10 +7,10 @@ import struct
 
 from . import keys
 from . import proc
+from . import pty
 from .search import SearchBar
 from .history import History
 from .termview import *
-from .ptyparser import PtyParser, PtyEventType
 
 from gi.repository import Gtk
 from gi.repository import Gdk
@@ -19,40 +18,6 @@ from gi.repository import GLib
 from gi.repository import Pango
 
 NAME = "saneterm"
-TERM = "dumb"
-
-class PtySource(GLib.Source):
-    master = -1
-
-    def __init__(self, cmd):
-        GLib.Source.__init__(self)
-        self.cmd = cmd
-        self.tag = None
-
-    def prepare(self):
-        if self.master != -1:
-            return False, -1
-
-        pid, self.master = pty.fork()
-        if pid == pty.CHILD:
-            # Terminal options enforced by saneterm.
-            # Most importantly, local echo is disabled. Instead we show
-            # characters on input directly in the GTK termview/TextBuffer.
-            os.system("stty -onlcr -echo")
-
-            os.environ["TERM"] = TERM
-            os.execvp(self.cmd[0], self.cmd)
-
-        events = GLib.IOCondition.IN|GLib.IOCondition.HUP
-        self.tag = self.add_unix_fd(self.master, events)
-
-        return False, -1
-
-    def check(self):
-        return False
-
-    def dispatch(self, callback, args):
-        return callback(self, self.tag, self.master)
 
 class Terminal(Gtk.Window):
     config = {
@@ -67,12 +32,12 @@ class Terminal(Gtk.Window):
         self.hist = History()
         self.reset_history_index()
 
-        self.pty = PtySource(cmd)
+        self.pty = pty.Source(cmd)
         self.pty.set_priority(GLib.PRIORITY_LOW)
         self.pty.set_callback(self.handle_pty)
         self.pty.attach(None)
 
-        self.pty_parser = PtyParser()
+        self.pty_parser = pty.Parser()
 
         self.termview = TermView(self.complete, limit)
 
@@ -201,13 +166,13 @@ class Terminal(Gtk.Window):
         decoded = self.decoder.decode(data)
 
         for (ev, data) in self.pty_parser.parse(decoded):
-            if ev is PtyEventType.TEXT:
+            if ev is pty.EventType.TEXT:
                 self.termview.insert_data(data)
-            elif ev is PtyEventType.BELL:
+            elif ev is pty.EventType.BELL:
                 self.termview.error_bell()
                 self.set_urgency_hint(True)
             else:
-                raise AssertionError("unknown PtyEventType")
+                raise AssertionError("unknown pty.EventType")
 
         return GLib.SOURCE_CONTINUE