# Campimeter.py # # I needed the facility to have a maximised Terminal window on OSX 10.7.5 and this was the result... # A DEMO to show how to increase the size of a Terminal window and obtain the maximum usable size on a _desktop_. # The Terminal window must be initially set manually at the uppermost left hand corner and Python started inside # this window. The colours for this DEMO inside OSX 10.7.5, are grey background, red square and yellow asterisk/characters... # # Written in such a way as anyone can understand how it works, youngsters too. # # To run type from the Python prompt:- # # >>> exec(open("/full/path/to/Campimeter.py).read()) # # Where "/full/path/to/" is where you have saved this code; then have a little fun... # # This code generates a crude Campimeter... http://en.wikipedia.org/wiki/Campimeter ...and is used to check # visual field. Just focus on the red square in the centre of the window after pressing from the initial # window and then press Ctrl-C immediately after you see an asterisk flash. It is possible to get the Ctrl-C to # _crash_ out and stop the DEMO if Ctrl-C is pressed at any other time than just after seeing the asterisk flash. # The cursor has not been turned off and will be seen on the left hand side of the window, so try to ignore it. # # $VER: Campimeter.py_Version_0.00.10_(C)2012_B.Walker_G0LCU. # This code is issued as Public Domain and you may do with it as you please. # # I have not reset the Terminal back to its original state although all of the information how to do it is in # this code. Colours are easily reset in Python and I have shown this many times on this site... # # Designed and tested on a Macbook Pro, OSX 10.7.5 using Python Versions 2.6.7 and 2.7.1. Also tested on Debian # Linux 6.0.x using Python versions 2.6.6, 2.7.2 and 3.1.3... # It would be interesting to see which other platform variants this idea works on; just add a comment... # All imports required. import os import sys import random import time # Ensure Python Version 3.x.x is included... if sys.version[0]=="3": raw_input=input # Set some values as global, my choice! ;o) global row global column global attempts # Allocate initial Terminal window values to be much greater than the allowed Terminal size on the desktop... row=200 column=300 attempts=0 # Set the Terminal window size larger than its default! sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=row,cols=column)) # Set up a basic user window starting with a grey, cleared window... print("\033[1;93;100m") n=os.system("clear") # Add a delay to allow settings to settle... time.sleep(1) print("\n$VER: Campimeter.py_Version_0.00.10_(C)2012_B.Walker_G0LCU.\n") print("Press the key to start. After this window is exited focus on") print("the centred, coloured square. Position yourself until you are both") print("comfortable and the screen presents a wide field of view. Use the two") print("keys Ctrl-C if and when you see a randomly positioned _*_ displayed.\n") print("The larger the display used the better, have fun...\n") # time.sleep(1) raw_input("Press the key to continue...") # Now get the _new_ real size of the Terminal window... rows,columns=os.popen("stty size","r").read().split() row=int(rows) column=int(columns) def locate(user_string="$VER: Campimeter.py_Version_0.00.10_(C)2012-2013_B.Walker_G0LCU.",x=0,y=0): # Don't allow any user errors. Python's own error detection will check for # syntax and concatination, etc, etc, errors. x=int(x) y=int(y) if x>=255: x=255 if y>=255: y=255 if x<=0: x=0 if y<=0: y=0 HORIZ=str(x) VERT=str(y) # Plot the user_string at the starting position HORIZ, VERT... print("\033["+VERT+";"+HORIZ+"f"+user_string) def main(): # Ensure certain _variables_ remain global, my choice... ;o) global row global column global attempts # Note:- row and colour are already set. attempts=0 # Clear the window for the test. n=os.system("clear") # Set the centred red square for the start... locate("\033[0;41;41m \033[1;93;100m ",int(column/2),int(row/2)) # This is set for 5 possible attempts only. Just change the number 5 to your number of attempts. for n in range(0,5,1): try: # Have a random start waiting time... waiting_time=int(random.random()*6) time.sleep(waiting_time) coloured_spot_column=int(random.random()*int(columns)) coloured_spot_row=int(random.random()*int(rows)) # Display a coloured asterisk randomly on screen for a brief period... locate("\033[1;93;100m*\033[1;93;100m ",coloured_spot_column,coloured_spot_row) # This is the timer to display the asterisk and is made relatively easy... time.sleep(0.2) # Clear this displayed asterisk... locate("\033[1;93;100m \033[1;93;100m ",coloured_spot_column,coloured_spot_row) # Because this code does not detect whether the red square might be overwritten, # ensure that it is redrawn at the centre of the Terminal window. locate("\033[0;41;41m \033[1;93;100m ",int(column/2),int(row/2)) # Hold long enough to react to Ctrl-C... time.sleep(1) except KeyboardInterrupt: # After pressing Ctrl-C ensure ^c or ^C is not seen on the screen and update. print("\b\b\b\b ") attempts=attempts+1 time.sleep(1) # Give the results for this fun project and re-run if required... print("You had "+str(attempts)+" successes out of "+str((n+1))+" possible attempts...\n") again=raw_input("Do you want to try again? (Y/N):- ") if again=="y" or again=="Y": main() main() # It is easy to reset the Terminal back to the default sze AND colours using the methods already shown. # I have not bothered, as the intent of this DEMO is to show how to increase the size of the Terminal # window and obtain the real, new size too. # End of Campimeter.py DEMO. # Enjoy finding simple solutuions to often very difficult problems...