{"id":37065851,"url":"https://github.com/grimandgreedy/listpick","last_synced_at":"2026-01-14T07:43:25.307Z","repository":{"id":300242223,"uuid":"999216050","full_name":"grimandgreedy/listpick","owner":"grimandgreedy","description":"listpick is a powerful TUI data tool for viewing, editing and operating upon tabulated data; can be used to build TUI applications, generate data columns, or function as a command-line utility.","archived":false,"fork":false,"pushed_at":"2025-11-03T14:01:09.000Z","size":3610,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-03T14:16:38.759Z","etag":null,"topics":["curses","library","python","tui"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grimandgreedy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-09T23:24:44.000Z","updated_at":"2025-11-03T14:01:22.000Z","dependencies_parsed_at":"2025-06-20T16:28:45.809Z","dependency_job_id":"12a9adb4-fa4c-40df-9fd2-6b2290f831cf","html_url":"https://github.com/grimandgreedy/listpick","commit_stats":null,"previous_names":["grimandgreedy/list_picker","grimandgreedy/listpick"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grimandgreedy/listpick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimandgreedy%2Flistpick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimandgreedy%2Flistpick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimandgreedy%2Flistpick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimandgreedy%2Flistpick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grimandgreedy","download_url":"https://codeload.github.com/grimandgreedy/listpick/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimandgreedy%2Flistpick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curses","library","python","tui"],"created_at":"2026-01-14T07:43:24.732Z","updated_at":"2026-01-14T07:43:25.299Z","avatar_url":"https://github.com/grimandgreedy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# listpick\n\nlistpick is a powerful TUI data tool for viewing, editing and operating upon tabulated data; can be used to build TUI applications, generate data columns, or function as a command-line utility.\n\n**NOTE**: listpick is still in development.\n\n# Quickstart\n\nInstall listpick:\n\n```\npython -m pip installl \"listpick[full]\"\n```\n\nCreate a Picker:\n\n```\nfrom listpick.listpick_app import Picker, start_curses, close_curses\n\nif __name__ == \"__main__\":\n    stdscr = start_curses()\n\n    x = Picker(\n        stdscr,\n        items=[\n            [\"row zero column zero\", \"row zero column one\"],\n            [\"row one column zero\", \"row one column one\"]\n        ],\n        header=[\"H0\", \"H1\"],\n        cell_cursor=True,\n    )\n    x.run()\n\n    close_curses(stdscr)\n\n```\n\n## Overview\n\nThe application allows you to:\n- Select multiple items from different file types and input streams\n- Delete individual items\n- Highlight specific items for quick selection\n- Filtering: supports regular expressions for row- and column-based filtering.\n- Searching: supports regular expressions for row- and column-based searching.\n- Sort data based on specified columns and sort-type\n- Save and load data.\n- Copy/paste selections to clipboard\n- Generate rows from a list of commands in an input.toml file.\n\n## Examples\n\n\n### listpick as a command-line tool\n\nlistpick can be used as a command-line tool for tabulating command outputs:\n```bash\ndf -h | listpick --stdin\n```\n\n\u003cdiv align=\"center\"\u003e \u003cimg src=\"assets/listpick_df_example.png\" alt=\"lpfman\" width=\"90%\"\u003e \u003c/div\u003e\n\n### Applications\n\n#### Aria2TUI\n\n[Aria2TUI](https://github.com/grimandgreedy/Aria2TUI): TUI client for the aria2c download utility.\n\n\u003cdiv align=\"center\"\u003e \u003cimg src=\"assets/aria2tui_graph_screenshot.png\" alt=\"Aria2TUI\" width=\"90%\"\u003e \u003c/div\u003e\n\n#### lpfman\n[lpfman](https://github.com/grimandgreedy/lpfman): Terminal file manager with extensive column support.\n\n\u003cdiv align=\"center\"\u003e \u003cimg src=\"https://github.com/grimandgreedy/lpfman/blob/master/assets/lpfman_02.png?raw=true\" alt=\"lpfman\" width=\"90%\"\u003e \u003c/div\u003e\n\n\n### Data generation from toml file\n\n```python \nlistpick -g ./listpick/examples/data_generation/video_duplicates.toml\n```\n  - From the list of commands in the toml file we generate the properties we will use to identify the duplicates. \n\n  - In the example file we set the directory and get the files with a simle `eza` (`ls`) command. We could also use `find` or `cat` from a list of files.\n\n\n  - We get the SHA1 hash to identify identical files; we also get the size, duration, resolution, and bitrate so that we can identify a video duplicate that may have the same duration but a lower resolution.\n\n\u003cdiv align=\"center\"\u003e \u003cimg src=\"assets/file_compare.png\" alt=\"Video Compare\" width=\"90%\"\u003e \u003c/div\u003e\n\n\n## Description\n\n### Key Features:\n1. **File Input Support:**\n```python \nlistpick -i ~/items.csv\n```\n   - Text files (TSV, CSV)\n   - JSON\n   - XLSX\n   - ODS\n   - Pickle\n\n2. **Pipe data to listpick:**\n\n```bash\ndf -h | listpick --stdin\n```\n\n3. **Generate data based on an toml file with relevant commands to generate the rows.**\n```python \nlistpick -g ./examples/data_generation/video_duplicates.toml\n```\n\n  - See `./examples/data_generation/`\n\n4. **Highlighting:**\n  - Highlight specific strings for display purposes.\n  - E.g., when we search for a string we will highlight strings in the rows that match the search.\n\n5. **Filtering and Sorting:**\n  - Apply custom filters and sort criteria on the fly\n\n6. **Modes:**\n  - Default modes are supported so that a certain filter/search/sort can structure the data in a way that is easy to move between.\n\n\n7. **Options:**\n  - Along with returning the selected rows, the user can also return options.\n  - Input field with readline support\n  - Options select box\n\n8. **Colour themes:**\n  - Several colour themes are available\n\n9. **Copy rows:**\n  - 'y' to copy rows in various formats: CSV, TSV, python list\n10. **Save data:**\n  - Data can be saved so that it can be loaded with the -i flag.\n  - This is very helpful if your data generation takes a long time.\n11. **Customisable keybinds:**\n   - The Picker object takes a keys_dict variable which allows all keys to be customised. Default keys can be seen in src/listpick/ui/keys.py.\n   - Also allows the restriction of certain functions by not assigning a key.\n12. **Dynamic or manual refresh of data**:\n   - If a refresh_function is passed with auto_refresh=True then listpick will automatically refresh the data.\n    - If a refresh_function is passed then one can also manually refresh by pressing f5.\n13. Notifications.\n   - Supports notifications upon certain events\n14. Visual options\n   - Display/hide title. \n   - Display/hide footer with selection information\n   - Display/hide columns\n   - Display/hide highlights\n   - Option to centre in cells, centre in terminal and centre rows vertically.\n\n15. Change settings on the fly.\n   - Press '~' to see list of display settings or press '`' to enter a command to change display settings.\n   - Change visual options\n       - Cycle through themes\n       - Centre data in cells or centre rows vertically\n       - Show/hide the footer\n       - Show/hide a specific column.\n       - Select a column\n   - Toggle auto-refresh\n   - Toggle highlights\n\n16. Pipe the data from the selected rows in the focussed column to a bash command ('|')\n   - By default when you press '|' it will fill the input field with `xargs `. You can remove this if you like (^U).\n   - For example, if you run `xargs -d '\\n' -I {} notify-send {}` to this it will display notifications containing the data from the current column \n   - Useful for:\n       - Opening files with a specific application `xargs -d \\n -I{} mpv {}` will open the files in mpv\n       - Dumping data. `xargs -d \\n -I{} echo {} \u003e ~/stuff.txt`\n\n## Support and Feedback\n\nFeel free to request features. Please report any errors you encounter with appropriate context.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimandgreedy%2Flistpick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrimandgreedy%2Flistpick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimandgreedy%2Flistpick/lists"}