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)
====
**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
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e14aca88c256160a37d98ce987b74545eccb5ab97710aa1f5bb215f650e4c43 |
|
MD5 | 70c4e43961988c7bb4fb77b940bcd38a |
|
BLAKE2b-256 | 278896d1eb32de7bdc680b1dd4024dddd6aea2ec0ab7af3a477f434a463f5ba7 |
File details
Details for the file pick-0.6.4-py2.py3-none-any.whl
.
File metadata
- Download URL: pick-0.6.4-py2.py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd72cf851cc8918d288fbfb8ae933d9063b2841d882acc52b2f3bd74fded4ff1 |
|
MD5 | ff307ae3b0cdcfb57d74be25792bda5f |
|
BLAKE2b-256 | 89645a96597ea238d5af113fdeb380f2e83f70b1163e4b67eb577abf20874b35 |