annotate python/dmenu.py @ 290:03d62a2cbe62

update demnu to almost a real program
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 10 May 2013 19:43:47 -0700
parents e1a861bbb559
children 8f92aa15406f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 #!/usr/bin/env python
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 import optparse
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4 import os
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 import subprocess
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6 import sys
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
8 def choose_file(directory, dmenu='dmenu',
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
9 args=('-i', '-nb', 'black', '-nf', 'white')):
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
10 """choose a file in the directory with dmenu"""
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 directory = os.path.abspath(directory)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12 files = os.listdir(directory)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13 string = '\n'.join(files)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
15 if isinstance(dmenu, basestring):
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
16 dmenu = [dmenu]
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
17 dmenu = list(dmenu)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
18 dmenu.extend(args)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
20 process = subprocess.Popen(dmenu, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21 stdout, _ = process.communicate(input=string)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 if process.returncode:
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23 return
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24 chosen = os.path.join(directory, stdout)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25 if os.path.isdir(chosen):
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 return choose_file(chosen)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
27 return chosen
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29 def main(args=sys.argv[1:]):
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
30 parser = optparse.OptionParser()
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
31 parser.add_option('-d', '--directory', dest='directory',
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
32 default=os.getcwd(),
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
33 help="call on this directory [Default: current directory]")
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
34 parser.add_option('-e', '--exec', dest='executable',
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
35 help="call this proram with the result")
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
36 options, args = parser.parse_args(args)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
37 chosen = choose_file(options.directory)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
38 if chosen:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
39 if options.executable:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
40 pass
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
41 print chosen
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
42 else:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
43 sys.exit(1)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
44
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
45 if __name__ == '__main__':
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
46 main()