Skip to main content

pick an option in the terminal with a simple GUI

Project description

pick [![Build Status](https://travis-ci.org/wong2/pick.svg?branch=master)](https://travis-ci.org/wong2/pick) [![PyPI](https://img.shields.io/pypi/v/pick.svg)](https://pypi-hypernode.com/pypi/pick)
====

**pick** is a small python library to help you create curses based interactive selection
list in the terminal. See it in action:

![Demo](example/basic.gif?raw=true)


### Installation

$ pip install pick

Note for Windows: curses wheels can be obtained from http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses, then install it with pip, for example: `pip install curses-2.2-cp27-none-win_amd64.whl`

### Usage

**pick** comes with a simple api:

>>> from pick import pick

>>> title = 'Please choose your favorite programming language: '
>>> options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
>>> option, index = pick(options, title)
>>> print option
>>> print index

**outputs**

>>> C++
>>> 4

**pick** multiselect example:

>>> from pick import pick

>>> title = 'Please choose your favorite programming language (press SPACE to mark, ENTER to continue): '
>>> options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
>>> selected = pick(options, title, multi_select=True, min_selection_count=1)
>>> print selected

**outputs**

>>> [('Java', 0), ('C++', 4)]


#### Options

* `options`: a list of options to choose from
* `title`: (optional) a title above options list
* `indicator`: (optional) custom the selection indicator, defaults to *
* `default_index`: (optional) set this if the default selected option is not the first one
* `multi_select`: (optional), if set to True its possible to select multiple items by hitting SPACE
* `min_selection_count`: (optional) for multi select feature to dictate a minimum of selected items before continuing
* `options_map_func`: (optional) a mapping function to pass each option through before displaying

#### Register custom handlers

sometimes you may need to register custom handlers for specific keyboard keys, you can use the `register_custom_handler` API:

>>> from pick import Picker
>>> title, options = 'Title', ['Option1', 'Option2']
>>> picker = Picker(options, title)
>>> def go_back(picker):
... return None, -1
>>> picker.register_custom_handler(ord('h'), go_back)
>>> option, index = picker.start()

* the custom handler will be called with the `picker` instance as it's parameter.
* the custom handler should either return a two element tuple, or None.
* if None is returned, the picker would continue to run, otherwise the picker will stop and return the tuple.

#### Options Map Function

If your options are not in a format that you want displayed (such as a dictionary), you can pass in a mapping function which each option will be run through. The return value of the function will be displayed.

* the selected option returned will be the original value and not the displayed return result from the `options_map_func` function.

**pick** options map function example:

>>> from pick import pick

>>> title = 'Please choose an option: '
>>> options = [{'label': 'option1'}, {'label': 'option2'}, {'label': 'option3'}]

>>> def get_label(option): return option.get('label')

>>> selected = pick(options, title, indicator='*', options_map_func=get_label)
>>> print selected

**displays**

Please choose an option:

* option1
option2
option3

**outputs**

>>> ({ 'label': 'option1' }, 0)


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pick-0.6.4.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

pick-0.6.4-py2.py3-none-any.whl (6.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pick-0.6.4.tar.gz.

File metadata

  • Download URL: pick-0.6.4.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pick-0.6.4.tar.gz
Algorithm Hash digest
SHA256 7e14aca88c256160a37d98ce987b74545eccb5ab97710aa1f5bb215f650e4c43
MD5 70c4e43961988c7bb4fb77b940bcd38a
BLAKE2b-256 278896d1eb32de7bdc680b1dd4024dddd6aea2ec0ab7af3a477f434a463f5ba7

See more details on using hashes here.

File details

Details for the file pick-0.6.4-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pick-0.6.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 dd72cf851cc8918d288fbfb8ae933d9063b2841d882acc52b2f3bd74fded4ff1
MD5 ff307ae3b0cdcfb57d74be25792bda5f
BLAKE2b-256 89645a96597ea238d5af113fdeb380f2e83f70b1163e4b67eb577abf20874b35

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page