diff --git a/conf.d/forgit.plugin.fish b/conf.d/forgit.plugin.fish index ba167c8..1845d54 100644 --- a/conf.d/forgit.plugin.fish +++ b/conf.d/forgit.plugin.fish @@ -12,6 +12,11 @@ function forgit::inside_work_tree git rev-parse --is-inside-work-tree >/dev/null; end +function forgit::reverse_lines + # tac is not available on OSX, tail -r is not available on Linux, so we use either of them + tac 2> /dev/null || tail -r +end + set -g forgit_pager "$FORGIT_PAGER" set -g forgit_show_pager "$FORGIT_SHOW_PAGER" set -g forgit_diff_pager "$FORGIT_DIFF_PAGER" @@ -344,8 +349,8 @@ function forgit::cherry::pick -d "git cherry-picking" --argument-names 'target' " echo $base echo $target - git cherry "$base" "$target" --abbrev -v | - env FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | + git cherry "$base" "$target" --abbrev -v | forgit::reverse_lines | + env FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | forgit::reverse_lines | xargs -I% git cherry-pick % end diff --git a/forgit.plugin.zsh b/forgit.plugin.zsh index 3e6210c..5c11806 100755 --- a/forgit.plugin.zsh +++ b/forgit.plugin.zsh @@ -3,6 +3,8 @@ forgit::warn() { printf "%b[Warn]%b %s\n" '\e[0;33m' '\e[0m' "$@" >&2; } forgit::info() { printf "%b[Info]%b %s\n" '\e[0;32m' '\e[0m' "$@" >&2; } forgit::inside_work_tree() { git rev-parse --is-inside-work-tree >/dev/null; } +# tac is not available on OSX, tail -r is not available on Linux, so we use either of them +forgit::reverse_lines() { (tac 2> /dev/null || tail -r) } # optional render emoji characters (https://github.com/wfxr/emoji-cli) hash emojify &>/dev/null && forgit_emojify='|emojify' @@ -159,8 +161,8 @@ forgit::cherry::pick() { -m -0 --tiebreak=index $FORGIT_CHERRY_PICK_FZF_OPTS " - git cherry "$base" "$target" --abbrev -v | - FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | + git cherry "$base" "$target" --abbrev -v | forgit::reverse_lines | + FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | forgit::reverse_lines | xargs -I% git cherry-pick % }