~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/win32console.py

  • Committer: Martin Pool
  • Date: 2005-05-11 08:12:23 UTC
  • Revision ID: mbp@sourcefrog.net-20050511081223-7c935881e8145274
todo

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
"""
3
 
Set of functions to work with console on Windows.
4
 
Author: Alexander Belchenko (e-mail: bialix AT ukr.net)
5
 
License: Public domain
6
 
"""
7
 
 
8
 
import struct
9
 
 
10
 
# We can cope without it; use a separate variable to help pyflakes
11
 
try:
12
 
   import ctypes
13
 
   has_ctypes = True
14
 
except ImportError:
15
 
    has_ctypes = False
16
 
 
17
 
 
18
 
WIN32_STDIN_HANDLE = -10
19
 
WIN32_STDOUT_HANDLE = -11
20
 
WIN32_STDERR_HANDLE = -12
21
 
 
22
 
 
23
 
def get_console_size(defaultx=80, defaulty=25):
24
 
   """ Return size of current console.
25
 
 
26
 
   This function try to determine actual size of current working
27
 
   console window and return tuple (sizex, sizey) if success,
28
 
   or default size (defaultx, defaulty) otherwise.
29
 
 
30
 
   Dependencies: ctypes should be installed.
31
 
   """
32
 
   if not has_ctypes:
33
 
       # no ctypes is found
34
 
       return (defaultx, defaulty)
35
 
 
36
 
   # To avoid problem with redirecting output via pipe
37
 
   # need to use stderr instead of stdout
38
 
   h = ctypes.windll.kernel32.GetStdHandle(WIN32_STDERR_HANDLE)
39
 
   csbi = ctypes.create_string_buffer(22)
40
 
   res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(h, csbi)
41
 
 
42
 
   if res:
43
 
       (bufx, bufy, curx, cury, wattr,
44
 
        left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
45
 
       sizex = right - left + 1
46
 
       sizey = bottom - top + 1
47
 
       return (sizex, sizey)
48
 
   else:
49
 
       return (defaultx, defaulty)