view python/dmenu.py @ 694:ebca6d85213a

File "/usr/lib/python3/dist-packages/IPython/config/__init__.py", line 16, in <module> from .application import * File "/usr/lib/python3/dist-packages/IPython/config/application.py", line 31, in <module> from IPython.config.configurable import SingletonConfigurable File "/usr/lib/python3/dist-packages/IPython/config/configurable.py", line 33, in <module> from IPython.utils.text import indent, wrap_paragraphs File "/usr/lib/python3/dist-packages/IPython/utils/text.py", line 28, in <module> from IPython.external.path import path File "/usr/lib/python3/dist-packages/IPython/external/path/__init__.py", line 2, in <module> from path import * File "/home/jhammel/python/path.py", line 25 print root(path) ^
author Jeff Hammel <k0scist@gmail.com>
date Wed, 09 Jul 2014 16:26:49 -0700
parents 618db1b1f34b
children
line wrap: on
line source

#!/usr/bin/env python

import optparse
import os
import shlex
import subprocess
import sys

def choose_file(directory, dmenu='dmenu',
                args=('-i', '-nb', 'black', '-nf', 'white',
                      '-fn', '-*-lucidatypewriter-medium-r-*-*-*-120-*-*-*-*-*-*')):
    """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:
            # TODO: extract this pattern (see ims journal.txt)
            command = shlex.split(options.executable)
            executable = command[0]
            command.append(chosen)
            os.execlp(executable, *command)
        else:
            print chosen
    else:
        sys.exit(1)

if __name__ == '__main__':
    main()