Newbie: raw_input and other input methods

Carel Fellinger cfelling at iae.nl
Sat Nov 27 22:56:06 CET 1999


M.-A. Lemburg <mal at lemburg.com> wrote:

> It even does the Right Thing for the Python prompt. Try this:
...
> The above adds a little color to your average Python prompt.

Well, I was to save this for a rainy day, but now that you generalized it
I can't help. Besides it isn't nice to use terminal specific codes.


--------------------------------------------------------------------------
import readline, os


class PromptFunc:
    '''bucket for function to be evaluated during prompting'''
    def __init__(self, func, *args, **keys):
	self.func, self.args, self.keys  = func, args, keys

    def __str__(self):
	return apply(self.func, self.args, self.keys)


class Tput:
    '''terminfo capability string to be evaluated during prompting
    embedded with readline specials so it won\'t take up any space'''
    def __init__(self, attribute):
	self.attribute = attribute

    def __str__(self):
	return '\001' + os.popen('tput ' + self.attribute).read() + '\002'


class Var:
    '''(environment) variable to be evaluated during prompting'''
    def __init__(self, var, dict=os.environ):
	self.var, self.dict = var, dict

    def __str__(self):
	return self.dict[self.var]


class Prompt:
    def __init__(self, prompt='>>>', **state):
	self.prompt = prompt
	#colors; unfortunately xterm doesn't seem to obey terminfo names
	self.black, self.red = Tput('setf 0'), Tput('setf 1')
	self.green, self.yellow = Tput('setf 2'), Tput('setf 3')
	self.blue, self.magenta = Tput('setf 4'), Tput('setf 5')
	self.cyan, self.white = Tput('setf 6'), Tput('setf 7')
	#background colors
	self.Back, self.Red = Tput('setb 0'), Tput('setb 1')
	self.Green, self.Yellow = Tput('setb 2'), Tput('setb 3')
	self.Blue, self.Magenta = Tput('setb 4'), Tput('setb 5')
	self.Cyan, self.White = Tput('setb 6'), Tput('setb 7')
	#video attributes
	self.bold, self.blink = Tput('bold'), Tput('blink')
	self.dim, self.reverse = Tput('dim'), Tput('rev')
	self.flash, self.normal = Tput('flash'), Tput('sgr0')
	#emphesize
	self.begin_standout, self.end_standout = Tput('smso'), Tput('rmso')
	self.begin_underline, self.end_underline = Tput('smul'), Tput('rmul')
	#alternate charset
	self.begin_alternate, self.end_alternate = Tput('smacs'), Tput('rmacs')
	#override whatever
	self.__dict__.update(state)

    def __str__(self):
	return self.prompt % self.__dict__



if __name__ == '__main__':
    prompt = Prompt('%(red)s%(cwd)s(%(nr)d) %(green)shallo daar:%(normal)s ')
    prompt.cwd = PromptFunc(os.getcwd)
    prompt.nr = 0
    while 1:
	prompt.nr = prompt.nr + 1
	print raw_input(prompt)

-- 
groetjes, carel




More information about the Python-list mailing list