Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/library/pippy/console.py
diff options
context:
space:
mode:
Diffstat (limited to 'library/pippy/console.py')
-rw-r--r--library/pippy/console.py65
1 files changed, 47 insertions, 18 deletions
diff --git a/library/pippy/console.py b/library/pippy/console.py
index 7dbd73f..e36725f 100644
--- a/library/pippy/console.py
+++ b/library/pippy/console.py
@@ -1,5 +1,5 @@
"""Console helpers for pippy."""
-# Copyright (C) 2007,2008 One Laptop per Child Association, Inc.
+# Copyright (C) 2007,2008,2010 One Laptop per Child Association, Inc.
# Written by C. Scott Ananian <cscott@laptop.org>
#
# This program is free software; you can redistribute it and/or modify
@@ -16,27 +16,34 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import sys
+import os
+import tty
+import termios
+
+
def clear():
"""Clear screen on console."""
# magic escape sequence
sys.stdout.write('\x1B[H\x1B[J')
+
def size():
"""Return the number of rows/columns in the current terminal widget."""
# xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html
- import os, tty, termios
- fd = os.open('/dev/tty', os.O_RDWR|os.O_APPEND)
+ fd = os.open('/dev/tty', os.O_RDWR | os.O_APPEND)
+
def read_to_delimit(delimit):
buf = []
while True:
c = os.read(fd, 1)
- if c==delimit: break
+ if c == delimit:
+ break
buf.append(c)
return ''.join(buf)
- oldattr = termios.tcgetattr(fd) # make sure we can restore tty state
- tty.setraw(fd, termios.TCSANOW) # set to raw mode.
- os.write(fd, '\x1B[18t') # write the 'query screen size' command
- read_to_delimit('\x1b') # parse response.
+ oldattr = termios.tcgetattr(fd) # make sure we can restore tty state
+ tty.setraw(fd, termios.TCSANOW) # set to raw mode.
+ os.write(fd, '\x1B[18t') # write the 'query screen size' command
+ read_to_delimit('\x1b') # parse response.
read_to_delimit('[')
size = read_to_delimit('t')
# Output can be '8;rows;cols' or 'rows;cols' depending on vte version.
@@ -48,34 +55,37 @@ def size():
else:
rows = int(values[0])
cols = int(values[1])
- termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty
+ termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty
return cols, rows
+
def getpos():
"""Return the current x, y position of the cursor on the screen.
The top-left corner is 1,1."""
# xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html
- sys.stdout.flush() # ensure that writes to the terminal have finished
- import os, tty, termios
- fd = os.open('/dev/tty', os.O_RDWR|os.O_APPEND)
+ sys.stdout.flush() # ensure that writes to the terminal have finished
+ fd = os.open('/dev/tty', os.O_RDWR | os.O_APPEND)
+
def read_to_delimit(delimit):
buf = []
while True:
c = os.read(fd, 1)
- if c==delimit: break
+ if c == delimit:
+ break
buf.append(c)
return ''.join(buf)
- oldattr = termios.tcgetattr(fd) # make sure we can restore tty state
- tty.setraw(fd, termios.TCSANOW) # set to raw mode.
- os.write(fd, '\x1B[6n') # Report Cursor Position
- read_to_delimit('\x1b') # parse response.
+ oldattr = termios.tcgetattr(fd) # make sure we can restore tty state
+ tty.setraw(fd, termios.TCSANOW) # set to raw mode.
+ os.write(fd, '\x1B[6n') # Report Cursor Position
+ read_to_delimit('\x1b') # parse response.
read_to_delimit('[')
row = int(read_to_delimit(';'))
col = int(read_to_delimit('R'))
- termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty
+ termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty
return col, row
+
def setpos(column, row):
"""Move to the given position on the screen.
@@ -83,86 +93,105 @@ def setpos(column, row):
# xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html
sys.stdout.write('\x1B[%d;%dH' % (row, column))
+
def up(count=1):
"""Move the cursor up the given number of rows."""
sys.stdout.write('\x1B[%dA' % count)
+
def down(count=1):
"""Move the cursor down the given number of rows."""
sys.stdout.write('\x1B[%dB' % count)
+
def forward(count=1):
"""Move the cursor forward the given number of columns."""
sys.stdout.write('\x1B[%dC' % count)
+
def backward(count=1):
"""Move the cursor backward the given number of columns."""
sys.stdout.write('\x1B[%dD' % count)
+
def normal():
"""Switch to normal text."""
sys.stdout.write('\x1B[0m')
+
def bold():
"""Switch to bold text."""
sys.stdout.write('\x1B[1m')
+
def underlined():
"""Switch to underlined text."""
sys.stdout.write('\x1B[4m')
+
def inverse():
"""Switch to inverse text."""
sys.stdout.write('\x1B[7m')
+
def black():
"""Change text color to black."""
# magic escape sequence.
sys.stdout.write('\x1B[30m')
+
def red():
"""Change text color to red."""
# magic escape sequence.
sys.stdout.write('\x1B[31m')
+
def green():
"""Change text color to green."""
# magic escape sequence.
sys.stdout.write('\x1B[32m')
+
def yellow():
"""Change text color to yellow."""
# magic escape sequence.
sys.stdout.write('\x1B[33m')
+
def blue():
"""Change text color to blue."""
# magic escape sequence.
sys.stdout.write('\x1B[34m')
+
def magenta():
"""Change text color to magenta."""
# magic escape sequence.
sys.stdout.write('\x1B[35m')
+
def cyan():
"""Change text color to cyan."""
# magic escape sequence.
sys.stdout.write('\x1B[36m')
+
def white():
"""Change text color to white."""
# magic escape sequence.
sys.stdout.write('\x1B[37m')
+
def hide_cursor():
"""Hide the cursor."""
sys.stdout.write('\x1B[?25l')
+
def show_cursor():
"""Show the cursor."""
sys.stdout.write('\x1B[?25h')
+
def reset():
"""Clear screen and reset text color."""
clear()