diff --git a/navi b/navi index 688ea95..d367d76 100755 --- a/navi +++ b/navi @@ -35,7 +35,7 @@ source "${SCRIPT_DIR}/src/main.sh" ##? full docs ##? Please refer to the README at https://github.com/denisidoro/navi -VERSION="0.11.0" +VERSION="0.11.1" NAVI_ENV="${NAVI_ENV:-prod}" opts::eval "$@" diff --git a/scripts/lint b/scripts/lint index ca87537..601c3ed 100755 --- a/scripts/lint +++ b/scripts/lint @@ -8,7 +8,6 @@ export SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" files_to_lint() { find . -iname '*.sh' find scripts/* - find shell/* echo "${SCRIPT_DIR}/test/run" echo "${SCRIPT_DIR}/navi" } diff --git a/src/arg.sh b/src/arg.sh index 466ae79..d422dca 100644 --- a/src/arg.sh +++ b/src/arg.sh @@ -36,8 +36,12 @@ arg::next() { arg::deserialize() { local arg="$1" + arg="${arg:1:${#arg}-2}" - echo "$arg" | tr "${ARG_DELIMITER}" " " | tr "${ARG_DELIMITER_2}" "'" | tr "${ARG_DELIMITER_3}" '"' + echo "$arg" \ + | tr "${ARG_DELIMITER}" " " \ + | tr "${ARG_DELIMITER_2}" "'" \ + | tr "${ARG_DELIMITER_3}" '"' } # TODO: separation of concerns diff --git a/src/cheat.sh b/src/cheat.sh index 6409435..53fb17c 100755 --- a/src/cheat.sh +++ b/src/cheat.sh @@ -51,15 +51,15 @@ cheat::pretty() { /^%/ { tags=" ["substr($0, 3)"]"; next } /^#/ { print color(4, $0) color(60, tags); next } /^\$/ { next } - NF { print color(7, $0) color(60, tags); next }' + NF { print color(7, $0) color(60, tags); next }' } cheat::_until_percentage() { awk 'BEGIN { count=0; } - /^%/ { if (count >= 1) exit; - else { count++; print $0; next; } } - { print $0 }' + /^%/ { if (count >= 1) exit; + else { count++; print $0; next; } } + { print $0 }' } cheat::from_selection() { diff --git a/src/coll.sh b/src/coll.sh index 24b4473..2240e17 100644 --- a/src/coll.sh +++ b/src/coll.sh @@ -46,7 +46,7 @@ coll::add() { } coll::reverse() { - tac + str::reverse_lines "$@" } coll::set() { diff --git a/src/selection.sh b/src/selection.sh index 1179637..86b5e9d 100644 --- a/src/selection.sh +++ b/src/selection.sh @@ -29,7 +29,7 @@ selection::cmd_or_comment() { else echo "$cheat" \ | grep "^${core}$" -B999 \ - | tac \ + | str::reverse_lines \ | str::last_paragraph_line fi } diff --git a/src/str.sh b/src/str.sh index 65e67d2..3d79273 100644 --- a/src/str.sh +++ b/src/str.sh @@ -35,3 +35,13 @@ str::index_last_occurrence() { awk 'BEGIN{FS=""}{ for(i=1;i<=NF;i++){ if($i=="'"$char"'"){ p=i } }}END{ print p }' } + +str::reverse_lines() { + if command_exists tac; then + tac + elif command_exists perl; then + perl -e 'print reverse <>' + else + awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' + fi +} diff --git a/test/arg_test.sh b/test/arg_test.sh index 6998cc0..21bf857 100644 --- a/test/arg_test.sh +++ b/test/arg_test.sh @@ -2,15 +2,15 @@ interpolation_one_word() { echo "curl http://mysite.com//profile" \ - | arg::interpolate "user" "john" \ - | test::equals "curl http://mysite.com/john/profile" + | arg::interpolate "user" "john" \ + | test::equals "curl http://mysite.com/john/profile" } interpolation_multiple_words() { echo "cp " \ - | arg::interpolate "file" "C:/Program Files/app/foo.exe" \ - | arg::interpolate "new_file" "/mnt/c/Users/john/foo.exe" \ - | test::equals 'cp "C:/Program Files/app/foo.exe" /mnt/c/Users/john/foo.exe' + | arg::interpolate "file" "C:/Program Files/app/foo.exe" \ + | arg::interpolate "new_file" "/mnt/c/Users/john/foo.exe" \ + | test::equals 'cp "C:/Program Files/app/foo.exe" /mnt/c/Users/john/foo.exe' } test::set_suite "arg" diff --git a/test/platform_test.sh b/test/platform_test.sh index 6443d8b..3b06650 100644 --- a/test/platform_test.sh +++ b/test/platform_test.sh @@ -2,7 +2,7 @@ existing() { platform::existing_command oasida fngo ni awk aoisdn oafm \ - | test::equals awk + | test::equals awk } test::set_suite "platform"