def readline(self,acceptable=ac.is_safe_char,finish=ac.ks_finish,buf_size=20, prompt='', prefix=u''): if prompt : self.write(prompt) if prefix : buf = list(prefix) self.write(prefix) else: buf = [] while len(buf) < buf_size: ds = self.read_secret(2) if len(ds) == 1 and ac.is_gbk_zh(ds): ## fix_bug for sterm ds += self.read_secret() if ds == ac.k_backspace : if buf : data = buf.pop() self.write(ac.backspace * ac.srcwidth(data)) continue elif ds in finish : return ''.join(buf) elif ds == ac.k_ctrl_c: return False elif acceptable(ds): buf.append(ds) self.write(ds) return ''.join(buf)
def safe_readline(self, prompt=u'', acceptable=ac.is_safe_char, finish=ac.ks_finish,buf_size=20, prefix=u''): ''' Return the string when `finish` key recv, return False while recv a k_ctrl_c ''' if prompt : self.write(prompt) if prefix : buf = list(prefix) self.write(prefix) else: buf = [] while True: char = self.read_secret() if char in ac.ks_delete : if buf : data = buf.pop() self.write(ac.backspace * ac.srcwidth(data)) continue elif char in finish : return u''.join(buf) elif char == ac.k_ctrl_c: return False elif acceptable(char): if len(buf) < buf_size: buf.append(char) self.write(char) return u''.join(buf)
def safe_readline(self, prompt=u'', acceptable=ac.is_safe_char, finish=ac.ks_finish, buf_size=20, prefix=u''): ''' Return the string when `finish` key recv, return False while recv a k_ctrl_c ''' if prompt: self.write(prompt) if prefix: buf = list(prefix) self.write(prefix) else: buf = [] while True: char = self.read_secret() if char in ac.ks_delete: if buf: data = buf.pop() self.write(ac.backspace * ac.srcwidth(data)) continue elif char in finish: return u''.join(buf) elif char == ac.k_ctrl_c: return False elif acceptable(char): if len(buf) < buf_size: buf.append(char) self.write(char) return u''.join(buf)
def readline(self, prefix, acceptable=ac.is_safe_char, finish=ac.ks_finish, buf_size=78): ''' Return the string when `finish` key recv, return False while recv a k_ctrl_c ''' if prefix is None: buf = [] else: buf = list(prefix) self.frame.push(prefix) while True: char = self.frame.read_secret() if char in ac.ks_delete : if buf : data = buf.pop() self.frame.push(ac.backspace * ac.srcwidth(data)) continue elif char in finish : return u''.join(buf) elif char == ac.k_ctrl_c: return False elif acceptable(char): if len(buf) < buf_size: buf.append(char) self.frame.push(char) return u''.join(buf)
def readline(self,acceptable=ac.is_safe_char,finish=ac.ks_finish,buf_size=20): buf = [] while len(buf) < buf_size: ds = self.read_secret() if len(ds) == 1 and self.is_gbk_zh(ds): ## fix_bug for sterm ds += self.read_secret() for d in self.u(ds): if d == ac.k_backspace : if buf : data = buf.pop() self.write(ac.backspace * ac.srcwidth(data)) continue elif d in finish : return ''.join(buf) elif d == ac.k_ctrl_c: return False else: if acceptable(d): buf.append(d) self.write(d) return ''.join(buf)
def char_width(self, char): if char == self.esc: return 1 return ac.srcwidth(char)
def delete(self): data = super(VisableInput, self).delete() # !!! ugly but important if data : self.frame.write(ac.srcwidth(data) * ac.backspace) return data