annotate python/dmenu.py @ 294:a0d830fd8a42

refactor this bad boy
author Jeff Hammel <jhammel@mozilla.com>
date Sat, 11 May 2013 03:49:06 -0700
parents 8f92aa15406f
children 618db1b1f34b
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',
291
8f92aa15406f pick a font
Jeff Hammel <jhammel@mozilla.com>
parents: 290
diff changeset
9 args=('-i', '-nb', 'black', '-nf', 'white',
8f92aa15406f pick a font
Jeff Hammel <jhammel@mozilla.com>
parents: 290
diff changeset
10 '-fn', '-*-lucidatypewriter-medium-r-*-*-*-120-*-*-*-*-*-*')):
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 """choose a file in the directory with dmenu"""
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12 directory = os.path.abspath(directory)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13 files = os.listdir(directory)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14 string = '\n'.join(files)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
15
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
16 if isinstance(dmenu, basestring):
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
17 dmenu = [dmenu]
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
18 dmenu = list(dmenu)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
19 dmenu.extend(args)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
21 process = subprocess.Popen(dmenu, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 stdout, _ = process.communicate(input=string)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23 if process.returncode:
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24 return
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25 chosen = os.path.join(directory, stdout)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 if os.path.isdir(chosen):
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
27 return choose_file(chosen)
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28 return chosen
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
30 def main(args=sys.argv[1:]):
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
31 parser = optparse.OptionParser()
290
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
32 parser.add_option('-d', '--directory', dest='directory',
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
33 default=os.getcwd(),
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
34 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
35 parser.add_option('-e', '--exec', dest='executable',
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
36 help="call this proram with the result")
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
37 options, args = parser.parse_args(args)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
38 chosen = choose_file(options.directory)
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
39 if chosen:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
40 if options.executable:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
41 pass
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
42 print chosen
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
43 else:
03d62a2cbe62 update demnu to almost a real program
Jeff Hammel <jhammel@mozilla.com>
parents: 289
diff changeset
44 sys.exit(1)
289
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
45
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
46 if __name__ == '__main__':
e1a861bbb559 sample file picker
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
47 main()