From 5f4ebf1d06b159bfa6612720d247b767eeff8b7d Mon Sep 17 00:00:00 2001 From: James Fraser Date: Wed, 13 Sep 2023 10:07:47 +1000 Subject: [PATCH] Use perl instead of non-GNU sed Fixes: #22 --- history-sync.plugin.zsh | 14 ++++++++++---- test/test.zsh | 12 ++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/history-sync.plugin.zsh b/history-sync.plugin.zsh index 2e105dd..bae6acb 100644 --- a/history-sync.plugin.zsh +++ b/history-sync.plugin.zsh @@ -11,7 +11,6 @@ # * James Fraser # https://www.wulfgar.pro # ---------------------------------------------------------------- -# autoload -U colors && colors alias zhpl=history_sync_pull @@ -20,6 +19,7 @@ alias zhsync="history_sync_pull && history_sync_push" GIT=$(which git) GPG=$(which gpg) +SED_VERSION=$(sed --version 2>&1) ZSH_HISTORY_PROJ="${ZSH_HISTORY_PROJ:-${HOME}/.zsh_history_proj}" ZSH_HISTORY_FILE_NAME="${ZSH_HISTORY_FILE_NAME:-.zsh_history}" @@ -92,9 +92,15 @@ function _squash_multiline_commands_in_files() { && mv "${TMP_FILE_2}" "${TMP_FILE_1}" # Replace all \n with a sequence of symbols - SED ':a;N;$!ba;s/\n/'" ${NL_REPLACEMENT} "'/g' \ - "${TMP_FILE_1}" > "${TMP_FILE_2}" \ - && mv "${TMP_FILE_2}" "${TMP_FILE_1}" + if [[ "$SED_VERSION" == *"GNU"* ]]; then + SED ':a;N;$!ba;s/\n/'" ${NL_REPLACEMENT} "'/g' \ + "${TMP_FILE_1}" > "${TMP_FILE_2}" + else + # Assume BSD `sed` + perl -0777 -pe 's/\n/'" ${NL_REPLACEMENT} "'/g' \ + "${TMP_FILE_1}" > "${TMP_FILE_2}" + fi + mv "${TMP_FILE_2}" "${TMP_FILE_1}" # Replace first line anchor by \n SED "s/${FIRST_LINE_ANCHOR} \(: [0-9]\{1,10\}:[0-9]\+;\)/\n\1/g" \ diff --git a/test/test.zsh b/test/test.zsh index d9f51df..6be6127 100755 --- a/test/test.zsh +++ b/test/test.zsh @@ -38,6 +38,7 @@ function check_env_exists() { } function check_history() { + cat ~/.zsh_history rg -U "$1" ~/.zsh_history >/dev/null [[ $? -eq 0 ]] || {failure "FAILURE: History did not match '$1'"} } @@ -111,3 +112,14 @@ done" >> ~/.zsh_history zhps -y -r $UID && zhpl -y check_history "^1 for i in \{1..3\}; do\necho \\\$i\ndone$" success "SUCCESS" + +info "TEST SYNC HISTORY MULTI-LINE PERL" +setup +alias sed="echo" +echo "1 for i in {1..3}; do +echo \$i +done" >> ~/.zsh_history +zhps -y -r $UID && zhpl -y +check_history "^1 for i in \{1..3\}; do\necho \\\$i\ndone$" +unalias sed +success "SUCCESS"