branch : pmacs2
This commit is contained in:
moculus 2008-11-03 16:50:05 +00:00
parent 7576ee83e3
commit 4b36c23942
2 changed files with 30 additions and 7 deletions

View File

@ -8,6 +8,8 @@ from point import Point
class XTermBuffer(Buffer, XTerm):
btype = 'term'
modename = 'pipe'
termtype = 'xterm'
#termtype = 'vt100'
def __init__(self, cmd, args, name=None):
XTerm.__init__(self)
Buffer.__init__(self)
@ -15,7 +17,7 @@ class XTermBuffer(Buffer, XTerm):
self._pid, self._pty = pty.fork()
if self._pid == 0:
# child process
os.execve(cmd, [cmd] + args, {'TERM': 'xterm'})
os.execve(cmd, [cmd] + args, {'TERM': self.termtype})
self._lock = threading.Lock()
self._towrite = ''

33
term.py
View File

@ -1,8 +1,11 @@
import os, re, string
from point import Point
# NOTE: i should write a python module to build a statemachine from a terminfo
# entry. otherwise this project is probably hopeless.
def show(c):
if c in string.printable:
if c in string.letters + string.digits + string.punctuation:
return c
else:
return '\\%03o' % ord(c)
@ -79,7 +82,8 @@ class Dumb:
return self.outs + ''.join(self.outc)
class XTerm(Dumb):
name = 'xterm'
name = 'xterm'
termtype = 'xterm'
comment_re = re.compile('^ *#')
header_re = re.compile('^[a-zA-Z0-9]+\|')
@ -88,16 +92,27 @@ class XTerm(Dumb):
num_re = re.compile('^([a-zA-Z0-9]+)#(.+)$')
str_re = re.compile('^([a-zA-Z0-9]+)=(.+)$')
style_re = re.compile('^\033[[0-9;]+m')
style_re = re.compile('^\033[[0-9;]+m')
text_signal_re = re.compile('^\033][0-9]+;.+\007')
cup_re = re.compile('^\033\[[0-9]+;[0-9]+H')
callbacks = {
'clear': 'term_do_clear',
'home': 'term_do_creturn',
'rmm': 'term_nop',
'smm': 'term_nop',
'op': 'term_nop', #original color-pair
'smacs': 'term_nop', #orig charset
'rmacs': 'term_nop',
'smso': 'term_nop', #enter standout mode
'rmso': 'term_nop',
'cup': 'term_nop',
}
def __init__(self):
self._meta = []
f = os.popen('infocmp xterm', 'r')
#f = open('xterm.terminfo')
f = os.popen('infocmp %s' % self.termtype, 'r')
#f = open('%s.terminfo' % self.termtype)
self.sequences = {}
for line in f:
if self.comment_re.match(line) or self.header_re.match(line):
@ -114,6 +129,8 @@ class XTerm(Dumb):
self.sequences[val.replace('\\E', '\033')] = name
f.close()
def term_nop(self, *args):
pass
def term_filter(self, s):
self._meta = []
return Dumb.term_filter(self, s)
@ -139,7 +156,11 @@ class XTerm(Dumb):
self._meta = []
elif self.style_re.match(s):
self._meta = []
elif len(s) > 20:
elif self.text_signal_re.match(s):
self._meta = []
elif self.cup_re.match(s):
self._meta = []
elif s.endswith('\n'):
self._term_insert(''.join([show(c) for c in self._meta]))
self._meta = []
else: