chiark / gitweb /
xscsize.c, etc.: Report geometry of individual monitors.
[xtoys] / xmsg.in
1 #! @PYTHON@
2 ### -*-python-*-
3 ###
4 ### Report a message to the user
5 ###
6 ### (c) 2008 Straylight/Edgeware
7 ###
8
9 ###----- Licensing notice ---------------------------------------------------
10 ###
11 ### This file is part of the Edgeware X tools collection.
12 ###
13 ### X tools is free software; you can redistribute it and/or modify
14 ### it under the terms of the GNU General Public License as published by
15 ### the Free Software Foundation; either version 2 of the License, or
16 ### (at your option) any later version.
17 ###
18 ### X tools is distributed in the hope that it will be useful,
19 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ### GNU General Public License for more details.
22 ###
23 ### You should have received a copy of the GNU General Public License
24 ### along with X tools; if not, write to the Free Software Foundation,
25 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
27 VERSION = '@VERSION@'
28
29 ###--------------------------------------------------------------------------
30 ### External dependencies.
31
32 import optparse as O
33 from sys import stdin, stdout, stderr, exit
34 import os as OS
35 import errno as E
36
37 import xtoys as XT
38 GTK = XT.GTK
39
40 ###--------------------------------------------------------------------------
41 ### Option parsing.
42
43 def parse_args():
44   """
45   Parse the command line, returning a triple (PARSER, OPTS, ARGS).
46   """
47
48   op = XT.make_optparse \
49        ([('E', 'error',
50           {'action': 'store_const', 'dest': 'type', 'const': 'error',
51            'help': "Mark the window as reporting an error."}),
52          ('I', 'informational',
53           {'action': 'store_const', 'dest': 'type', 'const': 'info',
54            'help': "Mark the window as providing information."}),
55          ('Q', 'question',
56           {'action': 'store_const', 'dest': 'type', 'const': 'question',
57            'help': "Mark the window as asking a question."}),
58          ('W', 'warning',
59           {'action': 'store_const', 'dest': 'type', 'const': 'warning',
60            'help': "Mark the window as giving a warning."}),
61          ('d', 'headline',
62           {'dest': 'headline',
63            'help': "Set the window's headline message."}),
64          ('m', 'markup',
65           {'action': 'store_true', 'dest': 'markupp',
66            'help': "Parse message strings for Pango markup."}),
67          ('t', 'title',
68           {'dest': 'title',
69            'help': "Set the window's title string."})],
70         version = VERSION,
71         usage = '%prog [-EIQWm] [-t TITLE] [-d HEADLINE] '
72                 'MESSAGE [BUTTONS...]')
73
74   op.set_defaults(title = 'xmsg',
75                   type = 'info',
76                   headline = None,
77                   markupp = False)
78
79   opts, args = op.parse_args()
80   return op, opts, args
81
82 ###--------------------------------------------------------------------------
83 ### Main program.
84
85 def main():
86   op, opts, args = parse_args()
87   if len(args) == 0:
88     op.print_usage(stderr)
89     exit(1)
90
91   ## Sort out the message.
92   message = args[0]
93   buttons = args[1:]
94   if message.startswith('!'):
95     message = message[1:]
96   elif message == '-':
97     message = stdin.read()
98
99   ## Display it and retrieve and answer.
100   try:
101     msg = XT.Message(title = opts.title,
102                      type = opts.type,
103                      message = message,
104                      headline = opts.headline,
105                      buttons = buttons,
106                      markupp = opts.markupp)
107   except ValueError, err:
108     op.error(err[0])
109   result = msg.ask()
110
111   ## Done.
112   if result != True:
113     print result
114   exit(0)
115
116 if __name__ == '__main__':
117   main()
118
119 ###----- That's all, folks --------------------------------------------------