define-command gitui -params .. %{ connect terminal env "EDITOR=kak -c %val{session}" "VISUAL=kak -c %val{session}" gitu %arg{@} } declare-user-mode git map global user g ': enter-user-mode git' -docstring 'Git mode' map global git s ': gitui' -docstring 'Git tui' map global git A ': git add %val{buffile}' -docstring 'Add file' map global git c ': git add commit' -docstring 'Commit' map global git C ': git add commit --amend' -docstring 'Amend commit' # Hunk map global git n ': git next-hunk' -docstring 'Next hunk' map global git p ': git prev-hunk' -docstring 'Previous hunk' map global git h ': git-toggle-diff' -docstring 'Toggle hunk indicators' set-option global git_diff_add_char "+" set-option global git_diff_del_char "-" set-option global git_diff_mod_char "~" set-option global git_diff_top_char "^" define-command git-toggle-diff %{ try %{ remove-highlighter window/git-diff } catch %{ git show-diff } } # TODO: Toggle this hook global -group git-diff-if-repo EnterDirectory .* %{ remove-hooks global git-diff evaluate-commands %sh{ if (git rev-parse --is-inside-work-tree >/dev/null 2>&1); then echo " hook global -group git-diff ModeChange .*:.*:normal %{ try %{git update-diff} } hook global -group git-diff WinCreate .* %{ try %{git update-diff} } hook global -group git-diff BufReload .* %{ try %{git update-diff} } " fi } } # Git window actions # declare-option -hidden str git_file # define-command -hidden git-eval-status-line %{ # evaluate-commands %sh{ # file=$(echo "$kak_selection" | sed 's/^\s*[A-Z?]\+\s\+//') # echo "set-option window git_file '$file'" # } # } # declare-user-mode git-status-commit # declare-user-mode git-status-log # map global git s ':git status -bs' -docstring 'Git status UI' # hook -group git-status global WinSetOption filetype=git-status %{ # set-option buffer readonly true # map window normal R ':git status -bs' # map window normal q ': delete-buffer %val{buffile}' # map window user l ': enter-user-mode git-status-log' # map window git-status-log l ': git log --oneline' # map window normal d 'x: git-eval-status-line: git diff -- %opt{git_file}' # map window normal c ': enter-user-mode git-status-commit' # map window git-status-commit c ': git commit' # map window git-status-commit a ': git commit --amend' # } # hook -group git-log global WinSetOption filetype=git-log %{ # set-option buffer readonly true # map window normal q ': git status -bs' # } # hook -group git-diff global WinSetOption filetype=git-diff %{ # set-option buffer readonly true # map window normal q ': git status -bs' # }