view 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
line wrap: on
line source

#!/usr/bin/env python

import optparse
import os
import subprocess
import sys

def choose_file(directory, dmenu='dmenu',
                args=('-i', '-nb', 'black', '-nf', 'white')):
    """choose a file in the directory with dmenu"""
    directory = os.path.abspath(directory)
    files = os.listdir(directory)
    string = '\n'.join(files)

    if isinstance(dmenu, basestring):
        dmenu = [dmenu]
    dmenu = list(dmenu)
    dmenu.extend(args)

    process = subprocess.Popen(dmenu, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    stdout, _ = process.communicate(input=string)
    if process.returncode:
        return
    chosen = os.path.join(directory, stdout)
    if os.path.isdir(chosen):
        return choose_file(chosen)
    return chosen

def main(args=sys.argv[1:]):
    parser = optparse.OptionParser()
    parser.add_option('-d', '--directory', dest='directory',
                      default=os.getcwd(),
                      help="call on this directory [Default: current directory]")
    parser.add_option('-e', '--exec', dest='executable',
                      help="call this proram with the result")
    options, args = parser.parse_args(args)
    chosen =  choose_file(options.directory)
    if chosen:
        if options.executable:
            pass
        print chosen
    else:
        sys.exit(1)

if __name__ == '__main__':
    main()