diff --git a/README.md b/README.md index 5e7fed8..a2d4452 100644 --- a/README.md +++ b/README.md @@ -243,8 +243,9 @@ Customizing fzf options for each command individually is also supported: | `gss` | `FORGIT_STASH_FZF_OPTS` | | `gclean` | `FORGIT_CLEAN_FZF_OPTS` | | `grb` | `FORGIT_REBASE_FZF_OPTS` | -| `gbl` | `FORGIT_BLAME_FZF_OPTS` | +| `gbl` | `FORGIT_BLAME_FZF_OPTS` | | `gfu` | `FORGIT_FIXUP_FZF_OPTS` | +| `gcp` | `FORGIT_CHERRY_PICK_FZF_OPTS` | Complete loading order of fzf options is: diff --git a/conf.d/forgit.plugin.fish b/conf.d/forgit.plugin.fish index 3ddde42..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" @@ -339,12 +344,13 @@ function forgit::cherry::pick -d "git cherry-picking" --argument-names 'target' set opts " --preview=\"$preview\" $FORGIT_FZF_DEFAULT_OPTS - -m -0 + -m -0 --tiebreak=index + $FORGIT_CHERRY_PICK_FZF_OPTS " echo $base echo $target - git cherry "$base" "$target" --abbrev -v | cut -d ' ' -f2- | - env FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f1 | + 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 694c0bd..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' @@ -156,10 +158,11 @@ forgit::cherry::pick() { opts=" $FORGIT_FZF_DEFAULT_OPTS --preview=\"$preview\" - -m -0 + -m -0 --tiebreak=index + $FORGIT_CHERRY_PICK_FZF_OPTS " - git cherry "$base" "$target" --abbrev -v | cut -d ' ' -f2- | - FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f1 | + 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 % }