9

I couldn't find anything with a quick Google search, nor anything on here, saving for this. However, it doesn't do the trick. So how exactly do you resize the terminal using Python?

Community
  • 1
  • 1
Elliot Bonneville
  • 51,872
  • 23
  • 96
  • 123
  • Oh, right. I'm using a Linux (Ubuntu 10.10, if it matters). And now to display my ignorance: '*nix'? – Elliot Bonneville Jun 20 '11 at 23:38
  • 1
    hehe no problem http://en.wikipedia.org/wiki/Unix#Branding – Trufa Jun 20 '11 at 23:41
  • What exactly do you mean by resize? Do you mean the pty/tty knowledge of the terminal size, or an actual terminal application (e.g. xterm) size (geometry)? – Keith Jun 21 '11 at 03:12

2 Answers2

26

To change the tty/pty setting you have to use an ioctl on the stdin file descriptor.

import termios
import struct
import fcntl

def set_winsize(fd, row, col, xpix=0, ypix=0):
    winsize = struct.pack("HHHH", row, col, xpix, ypix)
    fcntl.ioctl(fd, termios.TIOCSWINSZ, winsize)

But to change the actual window size you can use terminal escape sequences, but not all terminals support or enable that feature. If you're using urxvt you can do this:

import sys
sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=32, cols=100))

But that may not work on all terminals.

Keith
  • 42,110
  • 11
  • 57
  • 76
1

If you install xdotool, you can change the size of the terminal window with something like this:

import subprocess
import shlex

id_cmd='xdotool getactivewindow'
resize_cmd='xdotool windowsize --usehints {id} 100 30'

proc=subprocess.Popen(shlex.split(id_cmd),stdout=subprocess.PIPE)
windowid,err=proc.communicate()
proc=subprocess.Popen(shlex.split(resize_cmd.format(id=windowid)))
proc.communicate()

PS. On Ubuntu xdotool is provided by a package of the same name.

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677