Skip to content

Commit

Permalink
Add support for multiple choice (#175)
Browse files Browse the repository at this point in the history
Fixes #173
  • Loading branch information
denisidoro authored Jan 17, 2020
1 parent 8f2bc5f commit a70c6df
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 10 deletions.
23 changes: 20 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ Table of contents
* [Cheatsheet syntax](#cheatsheet-syntax)
* [Syntax overview](#syntax-overview)
* [Variables](#variables)
* [Table formatting](#table-formatting)
* [Variable options](#variable-options)
* [Table formatting](#table-formatting)
* [Multiple choice](#multiple-choice)
* [List customization](#list-customization)
* [Related projects](#related-projects)
* [Etymology](#etymology)
Expand Down Expand Up @@ -233,9 +235,13 @@ $ x: echo -e '1\n2\n3'
$ y: echo -e "$((x+10))\n$((x+20))"
```

### Table formatting
### Variable options

You can pick a specific column of a selection and set the number of lines considered as headers:
For lines starting with `$` you can add extra options using `---`.

#### Table formatting

You can pick a specific column of a selection and set the number of lines considered as headers via `--column` and `--headers`:

```sh
# This will pick the 3rd column and use the first line as header
Expand All @@ -244,6 +250,17 @@ docker rmi <image_id>
$ image_id: docker images --- --column 3 --headers 1
```

#### Multiple choice

You can select multiple values via `--multi` and hitting `<TAB>`:

```sh
# The resulting command will be something like: cat "a.txt" "b.txt"
cat <files>

$ files: ls --- --multi true
```

List customization
------------------

Expand Down
2 changes: 1 addition & 1 deletion navi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -euo pipefail
export NAVI_HOME="$(cd "$(dirname "$0")" && pwd)"
source "${NAVI_HOME}/src/main.sh"

VERSION="0.17.1"
VERSION="0.18.0"
NAVI_ENV="${NAVI_ENV:-prod}"

opts::eval "$@"
Expand Down
37 changes: 31 additions & 6 deletions src/arg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,28 @@ arg::escape() {

arg::interpolate() {
local -r arg="$1"
local -r value="$2"
local -r value="$(echo "$2" | tr "$ESCAPE_CHAR_3" '\n')"

local -r words="$(echo "$value" | wc -w | xargs)"
local -r lines="$(echo "$value" | wc -l)"

if [ $lines -lt 2 ]; then

local -r words="$(echo "$value" | wc -w | xargs)"

if [[ $words > 1 ]]; then
sed "s|<${arg}>|\"${value}\"|g"
else
sed "s|<${arg}>|${value}|g"
fi

if [[ $words > 1 ]]; then
sed "s|<${arg}>|\"${value}\"|g"
else
sed "s|<${arg}>|${value}|g"

local -r newvalue="$(echo "$value" \
| xargs -I% echo '"%"' \
| tr '\n' ' ')"

sed "s|<${arg}>|${newvalue}|g"

fi
}

Expand Down Expand Up @@ -78,8 +92,19 @@ arg::pick() {

if [ -n "$fn" ]; then
local suggestions="$(eval "$fn" 2>/dev/null)"

local args
args+=("--prompt"); args+=("${arg}: ")
args+=("--header-lines"); args+=("${headers:-0}")
if ${multi:-false}; then
args+=("-m")
fi

if [ -n "$suggestions" ]; then
echo "$suggestions" | ui::fzf --prompt "$arg: " --header-lines "${headers:-0}" | str::column "${column:-}" "${separator:-}"
echo "$suggestions" \
| ui::fzf ${args[@]:-} \
| str::column "${column:-}" "${separator:-}" \
| tr '\n' "$ESCAPE_CHAR_3"
fi
elif ${NAVI_USE_FZF_ALL_INPUTS:-false}; then
echo "" | ui::fzf --prompt "$arg: " --print-query --no-select-1 --height 1
Expand Down

0 comments on commit a70c6df

Please sign in to comment.