comparison textshaper/main.py @ 18:df52326aa08d

start filling out options
author Jeff Hammel <k0scist@gmail.com>
date Sat, 22 Feb 2014 22:49:18 -0800
parents c3df7dccb02b
children 70dde00a4df0
comparison
equal deleted inserted replaced
17:30c534d3db66 18:df52326aa08d
3 3
4 """ 4 """
5 package to shape text blocks 5 package to shape text blocks
6 """ 6 """
7 7
8 import optparse 8 import argparse
9 import os 9 import os
10 import subprocess 10 import subprocess
11 import sys 11 import sys
12 import time 12 import time
13 from which import which
13 14
14 def info(content): 15 def info(content):
15 """gathers info about the content and returns a dict""" 16 """gathers info about the content and returns a dict"""
17
16 lines = content.splitlines() 18 lines = content.splitlines()
17 return {'lines': len(lines), 19 return {'lines': len(lines),
18 'chars': len(content), 20 'chars': len(content),
19 'columns': max([len(line) for line in lines]) 21 'columns': max([len(line) for line in lines])}
20 } 22
21 23
22 def display(content, keys=('lines', 'chars', 'columns'), hr='--'): 24 def display(content, keys=('lines', 'chars', 'columns'), hr='--'):
23 print content 25 """displays the content"""
26 print (content)
24 if keys: 27 if keys:
25 _info = info(content) 28 _info = info(content)
26 print (hr) 29 print (hr)
27 print ('; '.join(['{}: {}'.format(key, _info[key]) 30 print ('; '.join(['{}: {}'.format(key, _info[key])
28 for key in keys])) 31 for key in keys]))
29 32
30 def add_options(parser): 33 def add_options(parser):
31 """add options to the OptionParser instance""" 34 """add options to the OptionParser instance"""
32 35
33 # TODO 36 if which('xclip'): # TODO: support e.g. xsel or python native
34 # parser.add_option('-c', '--clip', '--copy', dest='copy_to_clipboard', 37 parser.add_option('-c', '--clip', '--copy', dest='copy_to_clipboard',
35 # help="copy to given program on exit") 38 action='store_true', default=False,
39 help="copy to clipboard")
40
41
36 42
37 def main(args=sys.argv[1:]): 43 def main(args=sys.argv[1:]):
38 44
39 # parse command line options 45 # parse command line options
40 usage = '%prog [options] ...' 46 parser = argparse.ArgumentParser(description=__doc__, formatter=PlainDescriptionFormatter())
41 class PlainDescriptionFormatter(optparse.IndentedHelpFormatter): 47 options = parser.parse_args(args)
42 """description formatter for console script entry point"""
43 def format_description(self, description):
44 if description:
45 return description.strip() + '\n'
46 else:
47 return ''
48 parser = optparse.OptionParser(usage=usage, description=__doc__, formatter=PlainDescriptionFormatter())
49 options, args = parser.parse_args(args)
50 48
51 # read from stdin 49 # read from stdin
52 content = sys.stdin.read() 50 content = sys.stdin.read()
53 51
54 # print formatted content 52 # print formatted content
55 display(content) 53 display(content)
56 54
55 # main display loop
56 # TODO: read input + commands
57 while True: 57 while True:
58 time.sleep(1) # XXX 58 time.sleep(1) # XXX
59
60 if options.copy_to_clipboard:
61 # copy content to X clipboard
62 process = subprocess.Popen(['xclip', '-i'], stdin=subprocess.PIPE)
63 _, _ = process.communicate(content)
59 64
60 if __name__ == '__main__': 65 if __name__ == '__main__':
61 main() 66 main()
62 67