# PathPicker
**Repository Path**: mirrors_supasate/PathPicker
## Basic Information
- **Project Name**: PathPicker
- **Description**: PathPicker accepts a wide range of input -- output from git commands, grep results, searches -- pretty much anything.After parsing the input, PathPicker presents you with a nice UI to select which files you're interested in. After that you can open them in your favorite editor or execute arbitrary commands.
- **Primary Language**: Unknown
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-18
- **Last Updated**: 2026-05-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# PathPicker
[](https://travis-ci.org/facebook/PathPicker)
Facebook PathPicker is a simple command line tool that solves the perpetual
problem of selecting files out of bash output. PathPicker will:
* Parse all incoming lines for entries that look like files
* Present the piped input in a convenient selector UI
* Allow you to either:
* Edit the selected files in your favorite `$EDITOR`
* Execute an arbitrary command with them
It is easiest to understand by watching a simple demo:
## Examples
After installing PathPicker, using it is as easy as piping into `fpp`. It takes
a wide variety of input -- try it with all the options below:
* `git status | fpp`
* `hg status | fpp`
* `git grep "FooBar" | fpp`
* `grep -r "FooBar" . | fpp`
* `git diff HEAD~1 --stat | fpp`
* `find . -iname "*.js" | fpp`
* `arc inlines | fpp`
and anything else you can dream up!
## Requirements
PathPicker requires Python >2.6 or >3.0.
### Supported Shells:
* Bash is fully supported and works the best.
* ZSH is supported as well but won't have a few features like alias expansion in command line mode.
* fish/csh are supported in the latest version, but might have quirks or issues in older versions of PathPicker.
## Installing PathPicker
### Homebrew
Installing PathPicker is easiest with [Homebrew for mac](http://brew.sh/):
* `brew update` (to pull down the recipe since it is new)
* `brew install fpp`
### Linux
On debian systems, installation can be done by installing the debian package from [here](https://github.com/facebook/PathPicker/releases/latest)
On Arch Linux, PathPicker can be installed from Arch User Repository (AUR).
[the AUR fpp-git package](https://aur.archlinux.org/packages/fpp-git/).
If you are on another system, or prefer manual installation, please
follow the instructions given below.
### Manual Installation
However if you're on a system without Homebrew, it's still quite easy to install
PathPicker since it's essentially just a bash script that calls some Python. These
steps more-or-less outline the process:
* `cd /usr/local/ # or wherever you install apps`
* `git clone git@github.com:facebook/PathPicker.git`
* `cd PathPicker/`
Here we make a symbolic link from the bash script in the repo
to `/usr/local/bin/` which is assumed to be in the current
`$PATH`
* `ln -s "$(pwd)/fpp" /usr/local/bin/fpp`
* `fpp --help # should work!`
### Add-ons
For tmux users, you can additionally install `tmux-fpp` which adds a key combination to run PathPicker on the last received `stdout`. It makes jumping into file selection mode even easier -- [check it out here](https://github.com/tmux-plugins/tmux-fpp).
## Advanced Functionality
As mentioned above, PathPicker allows you to also execute arbitrary commands with the specified files.
Here is an example showing a `git checkout` command executed against the selected files:
The selected files are appended to the command prefix to form the final command. If you need the files
in the middle of your command, you can use the `$F` token instead, like:
`cat $F | wc -l`
Another important note is that PathPicker by default only selects files that exist on the filesystem. If you
want to skip this (perhaps to selected deleted files in `git status`), just run PathPicker with the `--no-file-checks` flag.
## How PathPicker works
PathPicker is a combination of a bash script and some small Python modules.
It essentially has three steps:
* First in the bash script, it redirects all standard out in to a python module that
parses and extracts out filename candidates. Each candidate is then checked against
the actual filesystem to ensure it exists; after that, we save the data
in a temporary file and the python script exits.
* Next, the bash script switches to terminal input mode and
another python module reads out the saved entries and presents them in a
selector UI built with `curses`. The user either selects a few files to edit or inputs a command
to execute.
* Lastly, the python script outputs a command to a bash file that is later
executed by the original bash script.
It's not the most elegant architecture in the world but (in our opinion) provides a lot of utility.
## Documentation & Configuration
For all documentation and configuration options, see the output of `fpp --help`.
## Join the PathPicker community
See the CONTRIBUTING file for how to help out.
## License
PathPicker is BSD-licensed. We also provide an additional patent grant.