Correctly escape backslashes (#177)

Fixes #131
This commit is contained in:
Denis Isidoro 2020-01-20 16:44:21 -03:00 committed by GitHub
parent a70c6dfadd
commit e9dc75555b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 11 additions and 8 deletions

2
navi
View file

@ -4,7 +4,7 @@ set -euo pipefail
export NAVI_HOME="$(cd "$(dirname "$0")" && pwd)"
source "${NAVI_HOME}/src/main.sh"
VERSION="0.18.0"
VERSION="0.18.1"
NAVI_ENV="${NAVI_ENV:-prod}"
opts::eval "$@"

View file

@ -67,6 +67,8 @@ arg::serialize_code() {
printf "tr \"'\" '${ESCAPE_CHAR_2}'"
printf " | "
printf "tr '\"' '${ESCAPE_CHAR_3}'"
printf " | "
printf "tr '\\\\' '${ESCAPE_CHAR_4}'"
}
arg::pick() {

0
src/cheat.sh Executable file → Normal file
View file

View file

@ -1,11 +1,11 @@
#!/usr/bin/env bash
cmd::escape() {
tr '\\' "$ESCAPE_CHAR_3"
tr '\\' "$ESCAPE_CHAR_4"
}
cmd::unescape() {
tr "$ESCAPE_CHAR_3" '\\'
tr "$ESCAPE_CHAR_4" '\\'
}
cmd::loop() {
@ -50,4 +50,4 @@ cmd::finish() {
else
eval "$cmd"
fi
}
}

View file

@ -15,7 +15,7 @@ selection_str::comment() {
}
selection_str::snippet() {
echo "$*" | awk -F "${SELECTION_ESCAPE_STR}" '{print $2}' | selection_str::without_ellipsis
echo "$*" | awk -F "${SELECTION_ESCAPE_STR}" '{print $2}' | selection_str::without_ellipsis | cmd::escape
}
selection_str::tags() {
@ -72,4 +72,4 @@ selection::tags() {
selection::key() {
local -r selection="$1"
dict::get "$selection" key
}
}

View file

@ -3,6 +3,7 @@
ESCAPE_CHAR="\034"
ESCAPE_CHAR_2="\035"
ESCAPE_CHAR_3="\036"
ESCAPE_CHAR_4="\037"
str::length() {
awk '{print length}'
@ -82,4 +83,4 @@ str::as_column() {
str::with_line_numbers() {
awk '{printf("%d %s\n", NR,$0)}'
}
}

View file

@ -23,7 +23,7 @@ ui::select() {
[[ "${SHELL:-}" =~ 'fish' ]] || local -r sub='$'
local -r script_path="${NAVI_HOME}/navi"
local -r preview_cmd="\"${script_path}\" preview ${sub:-}(echo \'{}\' | $(arg::serialize_code))"
local -r preview_cmd="\"${script_path}\" preview ${sub:-}(echo \'{}\' | $(arg::serialize_code) 2> /dev/null)"
local -r query="$(dict::get "$OPTIONS" query)"
local -r entry_point="$(dict::get "$OPTIONS" entry_point)"