diff --git a/.config/fish/completions/_git-forgit b/.config/fish/completions/_git-forgit index 00218f2c..434c1611 100644 --- a/.config/fish/completions/_git-forgit +++ b/.config/fish/completions/_git-forgit @@ -75,6 +75,8 @@ _git-forgit() { 'rebase:git rebase' 'reset_head:git reset HEAD (unstage) selector' 'revert_commit:git revert commit selector' + 'reword:git fixup=reword' + 'squash:git squash' 'stash_show:git stash viewer' 'stash_push:git stash push selector' ) @@ -96,6 +98,8 @@ _git-forgit() { rebase) _git-rebase ;; reset_head) _git-staged ;; revert_commit) __git_recent_commits ;; + reword) __git_branch_names ;; + squash) __git_branch_names ;; stash_show) _git-stash-show ;; show) _git-show ;; esac @@ -122,6 +126,8 @@ compdef _git-reflog forgit::reflog compdef _git-rebase forgit::rebase compdef _git-staged forgit::reset::head compdef __git_recent_commits forgit::revert::commit +compdef __git_branch_names forgit::reword +compdef __git_branch_names forgit::squash compdef _git-stash-show forgit::stash::show compdef _git-show forgit::show diff --git a/.config/fish/completions/git-forgit.bash b/.config/fish/completions/git-forgit.bash index 380fc4b0..0d186006 100755 --- a/.config/fish/completions/git-forgit.bash +++ b/.config/fish/completions/git-forgit.bash @@ -75,7 +75,9 @@ _git_forgit() rebase reset_head revert_commit + reword show + squash stash_show stash_push " @@ -102,7 +104,9 @@ _git_forgit() rebase) _git_rebase ;; reset_head) _git_reset ;; revert_commit) _git_revert ;; + reword) _git_branch ;; show) _git_show ;; + squash) _git_branch ;; stash_show) _git_stash_show ;; esac ;; @@ -137,7 +141,9 @@ then __git_complete forgit::rebase _git_rebase __git_complete forgit::reset::head _git_reset __git_complete forgit::revert::commit _git_revert + __git_complete forgit::reword _git_branch __git_complete forgit::show _git_show + __git_complete forgit::squash _git_branch __git_complete forgit::stash::show _git_stash_show # Completion for forgit plugin shell aliases @@ -157,7 +163,9 @@ then __git_complete "${forgit_rebase}" _git_rebase __git_complete "${forgit_reset_head}" _git_reset __git_complete "${forgit_revert_commit}" _git_revert + __git_complete "${forgit_reword_commit}" _git_branch __git_complete "${forgit_show}" _git_show + __git_complete "${forgit_squash}" _git_branch __git_complete "${forgit_stash_show}" _git_stash_show fi fi diff --git a/.config/fish/completions/git-forgit.fish b/.config/fish/completions/git-forgit.fish index 14dc7a7d..7876e888 100644 --- a/.config/fish/completions/git-forgit.fish +++ b/.config/fish/completions/git-forgit.fish @@ -8,7 +8,7 @@ function __fish_forgit_needs_subcommand for subcmd in add blame branch_delete checkout_branch checkout_commit checkout_file checkout_tag \ cherry_pick cherry_pick_from_branch clean diff fixup ignore log reflog rebase reset_head \ - revert_commit stash_show stash_push + revert_commit reword squash stash_show stash_push if contains -- $subcmd (commandline -opc) return 1 end @@ -40,7 +40,9 @@ complete -c git-forgit -n __fish_forgit_needs_subcommand -a reflog -d 'git reflo complete -c git-forgit -n __fish_forgit_needs_subcommand -a rebase -d 'git rebase' complete -c git-forgit -n __fish_forgit_needs_subcommand -a reset_head -d 'git reset HEAD (unstage) selector' complete -c git-forgit -n __fish_forgit_needs_subcommand -a revert_commit -d 'git revert commit selector' +complete -c git-forgit -n __fish_forgit_needs_subcommand -a reword -d 'git fixup=reword' complete -c git-forgit -n __fish_forgit_needs_subcommand -a show -d 'git show viewer' +complete -c git-forgit -n __fish_forgit_needs_subcommand -a squash -d 'git squash' complete -c git-forgit -n __fish_forgit_needs_subcommand -a stash_show -d 'git stash viewer' complete -c git-forgit -n __fish_forgit_needs_subcommand -a stash_push -d 'git stash push selector' @@ -59,6 +61,8 @@ complete -c git-forgit -n '__fish_seen_subcommand_from reflog' -a "(complete -C complete -c git-forgit -n '__fish_seen_subcommand_from rebase' -a "(complete -C 'git rebase ')" complete -c git-forgit -n '__fish_seen_subcommand_from reset_head' -a "(__fish_git_files all-staged)" complete -c git-forgit -n '__fish_seen_subcommand_from revert_commit' -a "(__fish_git_commits)" +complete -c git-forgit -n '__fish_seen_subcommand_from reword' -a "(__fish_git_local_branches)" complete -c git-forgit -n '__fish_seen_subcommand_from show' -a "(complete -C 'git show ')" +complete -c git-forgit -n '__fish_seen_subcommand_from squash' -a "(__fish_git_local_branches)" complete -c git-forgit -n '__fish_seen_subcommand_from stash_show' -a "(__fish_git_complete_stashes)" complete -c git-forgit -n '__fish_seen_subcommand_from stash_push' -a "(__fish_git_files modified deleted modified-staged-deleted)" diff --git a/.config/fish/conf.d/bin/git-forgit b/.config/fish/conf.d/bin/git-forgit index 8c3a61db..48c59b33 100755 --- a/.config/fish/conf.d/bin/git-forgit +++ b/.config/fish/conf.d/bin/git-forgit @@ -28,10 +28,6 @@ if [[ "$higher_fzf_version" != "$installed_fzf_version" ]]; then fi # Set shell for fzf preview commands -# Disable shellcheck for "which", because it suggests "command -v xxx" instead, -# which is not a working replacement. -# See https://github.com/koalaman/shellcheck/issues/1162 -# shellcheck disable=2230 SHELL="$(which bash)" export SHELL @@ -759,25 +755,64 @@ _forgit_file_preview() { _forgit_fixup() { _forgit_inside_work_tree || return 1 git diff --cached --quiet && echo 'Nothing to fixup: there are no staged changes.' && return 1 - local opts graph quoted_files target_commit prev_commit + _forgit_edit_commit --fixup "$FORGIT_FIXUP_FZF_OPTS" "$FORGIT_FIXUP_GIT_OPTS" +} + +_forgit_squash() { + _forgit_inside_work_tree || return 1 + git diff --cached --quiet && echo 'Nothing to squash: there are no staged changes.' && return 1 + _forgit_edit_commit --squash "$FORGIT_SQUASH_FZF_OPTS" "$FORGIT_SQUASH_GIT_OPTS" +} + +_forgit_edit_commit() { + local action fzf_opts opts graph target_commit prev_commit + action=$1 + fzf_opts=$2 graph=() [[ $_forgit_log_graph_enable == true ]] && graph=(--graph) - _forgit_fixup_git_opts=() - _forgit_parse_array _forgit_fixup_git_opts "$FORGIT_FIXUP_GIT_OPTS" - quoted_files=$(_forgit_quote_files "$@") + git_opts=() + _forgit_parse_array git_opts "$3" opts=" $FORGIT_FZF_DEFAULT_OPTS +s +m --tiebreak=index --bind=\"ctrl-y:execute-silent($FORGIT yank_sha {})\" - --preview=\"$FORGIT file_preview {} $quoted_files\" - $FORGIT_FIXUP_FZF_OPTS + --preview=\"$FORGIT file_preview {}\" + $fzf_opts " target_commit=$( - git log "${graph[@]}" --color=always --format="$_forgit_log_format" "$@" | + git log "${graph[@]}" --color=always --format="$_forgit_log_format" | _forgit_emojify | FZF_DEFAULT_OPTS="$opts" fzf | _forgit_extract_sha) - if [[ -n "$target_commit" ]] && git commit "${_forgit_fixup_git_opts[@]}" --fixup "$target_commit"; then + # GIT_EDITOR=: is needed to skip the editor + if [[ -n "$target_commit" ]] && GIT_EDITOR=: git commit "${git_opts[@]}" "$action" "$target_commit"; then + prev_commit=$(_forgit_previous_commit "$target_commit") + # rebase will fail if there are unstaged changes so --autostash is needed to temporarily stash them + # GIT_SEQUENCE_EDITOR=: is needed to skip the editor + GIT_SEQUENCE_EDITOR=: git rebase --autostash -i --autosquash "$prev_commit" + fi +} + +_forgit_reword() { + _forgit_inside_work_tree || return 1 + local opts graph quoted_files target_commit prev_commit + graph=() + [[ $_forgit_log_graph_enable == true ]] && graph=(--graph) + git_opts=() + _forgit_parse_array _forgit_reword_git_opts "$FORGIT_REWORD_GIT_OPTS" + opts=" + $FORGIT_FZF_DEFAULT_OPTS + +s +m --tiebreak=index + --bind=\"ctrl-y:execute-silent($FORGIT yank_sha {})\" + --preview=\"$FORGIT file_preview {}\" + $FORGIT_REWORD_FZF_OPTS + " + target_commit=$( + git log "${graph[@]}" --color=always --format="$_forgit_log_format" | + _forgit_emojify | + FZF_DEFAULT_OPTS="$opts" fzf | + _forgit_extract_sha) + if [[ -n "$target_commit" ]] && git commit "${git_opts[@]}" --fixup=reword:"$target_commit"; then prev_commit=$(_forgit_previous_commit "$target_commit") # rebase will fail if there are unstaged changes so --autostash is needed to temporarily stash them # GIT_SEQUENCE_EDITOR=: is needed to skip the editor @@ -1152,6 +1187,8 @@ public_commands=( "clean" "diff" "fixup" + "squash" + "reword" "ignore" "log" "reflog" diff --git a/.config/fish/conf.d/forgit.plugin.fish b/.config/fish/conf.d/forgit.plugin.fish index ab1ab9a9..58bb18af 100644 --- a/.config/fish/conf.d/forgit.plugin.fish +++ b/.config/fish/conf.d/forgit.plugin.fish @@ -49,6 +49,8 @@ if test -z "$FORGIT_NO_ALIASES" abbr -a -- (string collect $forgit_cherry_pick; or string collect "gcp") git-forgit cherry_pick_from_branch abbr -a -- (string collect $forgit_rebase; or string collect "grb") git-forgit rebase abbr -a -- (string collect $forgit_fixup; or string collect "gfu") git-forgit fixup + abbr -a -- (string collect $forgit_squash; or string collect "gsq") git-forgit squash + abbr -a -- (string collect $forgit_reword; or string collect "grw") git-forgit reword abbr -a -- (string collect $forgit_checkout_commit; or string collect "gco") git-forgit checkout_commit abbr -a -- (string collect $forgit_revert_commit; or string collect "grc") git-forgit revert_commit abbr -a -- (string collect $forgit_blame; or string collect "gbl") git-forgit blame diff --git a/.config/kak/kakrc b/.config/kak/kakrc index ea934ed2..68dcb779 100644 --- a/.config/kak/kakrc +++ b/.config/kak/kakrc @@ -166,3 +166,6 @@ define-command -docstring %{ map -docstring 'jump forward' global normal map -docstring 'save to jumplist' global normal + +# selection saving +map -docstring 'add selection' global normal Y a diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py index 41a6a54b..0771ed53 100644 --- a/.config/qutebrowser/config.py +++ b/.config/qutebrowser/config.py @@ -22,9 +22,9 @@ c.completion.open_categories = [ "filesystem", ] -c.hints.chars = "tnserigm" +# c.hints.chars = "tnserigm" # c.hints.chars = "tnseripldh" -# c.hints.chars = "tnserigmao" +c.hints.chars = "tnserigmao" # dark mode c.colors.webpage.darkmode.enabled = True