diff options
| author | Mike Vink <ivi@vinkies.net> | 2025-07-20 21:50:45 +0200 |
|---|---|---|
| committer | Mike Vink <ivi@vinkies.net> | 2025-07-20 21:50:45 +0200 |
| commit | ace76ed6ff7c70d1251839f090dd286212b4f10e (patch) | |
| tree | c33293384f7e2c266351d262faab0faf443e0cee | |
| parent | 5c127cfc333392b5a274082b9ac6ee24f058b80d (diff) | |
diff and tigrc
| -rw-r--r-- | .config/kak/autoload/diff.kak | 100 | ||||
| -rw-r--r-- | .tigrc | 70 |
2 files changed, 154 insertions, 16 deletions
diff --git a/.config/kak/autoload/diff.kak b/.config/kak/autoload/diff.kak index 299b403..8f916f0 100644 --- a/.config/kak/autoload/diff.kak +++ b/.config/kak/autoload/diff.kak @@ -1,23 +1,91 @@ -define-command -docstring 'Diff the current selections and display result in a new buffer.' \ +define-command -override -docstring 'Diff the current selections and display result in a new buffer.' \ diff-selections %{ evaluate-commands %sh{ eval set -- "$kak_quoted_selections" - if [ $# -ge 1 ]; then - dir=$(mktemp -d -t "kak_diff_XXXXXXX") - a="$dir/a" - b="$dir/b" - result="$dir/result" - printf "%s" "$1" > "$a" - printf "%s" "${2:-$kak_reg_d}" > "$b" - diff -uw "$a" "$b" > "$result" - printf %s\\n "evaluate-commands -try-client '$kak_opt_toolsclient' %{ - edit -readonly ${result} - hook -always -once buffer BufClose .* %{ nop %sh{ rm -r ${dir} } } - }" - else - printf "echo -debug 'You must have at least 2 selections to compare.'" + diff_dance() + { + dir=$(mktemp -d -t "kak_diff_XXXXXXX") + a="$dir/a" + b="$dir/b" + result="$dir/result.diff" + printf "%s" "$1" > "$a" + printf "%s" "$2" > "$b" + diff -uw "$a" "$b" > "$result" + [ "$3" ] && $3 "$result" + printf %s\\n "evaluate-commands -try-client '$kak_opt_toolsclient' %{ + edit -readonly ${result} + hook -always -once buffer BufClose .* %{ nop %sh{ rm -r ${dir} } } + }" + } + + + if [ $# -gt 1 ] + then + diff_dance "$@" + exit 0 + fi + + # /home/ivi/.local/src/vial-qmk/keyboards/42keebs/cantor_pro/keymaps/my/keymap.c:98.1,120.3 + if [ "$kak_reg_D" ] && [ "${1}" ] + then + selection_content="${kak_reg_D#* +}" + info="${kak_reg_D%% +*}" + file_name_a="${info%:*}" + selection_a="${info#*:}" + range_start_a="${selection_a%,*}" + range_end_a="${selection_a#*,}" + line_start_a="${range_start_a%%.*}" + line_end_a="${range_end_a%.*}" + if [ "$line_start_a" -gt "$line_end_a" ] + then swapme="$line_start_a" + line_start_a="$line_end_a" + line_end_a="$swapme" + fi + delta_a="$(( line_end_a - line_start_a ))" + diff_lines="@@ -${line_start_a},${delta_a} " + + file_name_b="${kak_buffile}" + range_start_b="${kak_selection_desc%,*}" + range_end_b="${kak_selection_desc#*,}" + line_start_b="${range_start_b%%.*}" + line_end_b="${range_end_b%.*}" + if [ "$line_start_b" -gt "$line_end_b" ] + then swapme="$line_start_b" + line_start_b="$line_end_b" + line_end_b="$swapme" + fi + delta_b="$(( line_end_b - line_start_b ))" + diff_lines="${diff_lines}+${line_start_b},${delta_b} @@" + + put_original_files() { + result="${1:?require result file}" + sed --in-place 's/^@@.*@@/'"$diff_lines"'/g' "${result}" >/dev/null + sed --in-place 's,^--- .*/a\s,--- '"$file_name_a"' ,g' "${result}" >/dev/null + sed --in-place 's,^+++ .*/b\s,+++ '"$file_name_b"' ,g' "${result}" >/dev/null + } + diff_dance "$selection_content" "$1" put_original_files fi } } -map global user d ':diff-selections<ret>' -docstring 'diff on selections or selection and reg_d' + +declare-user-mode diff + +define-command -override -docstring 'Diff this.' \ +diff-this %{ + set-register D "%val{buffile}:%val{selection_desc} +%val{selection}" +} + + +define-command -override -hidden -docstring 'Enter diff mode!' \ +enter-diff-mode %{ + evaluate-commands %sh{ + printf 'enter-user-mode diff' + } +} +map global user d ':enter-diff-mode<ret>' -docstring 'Mappings for interacting with diffs!' +map global diff s ':diff-selections<ret>' -docstring 'diff on selections or selection and reg_d' +map global diff t ':diff-this<ret>' -docstring 'diff on selections or selection and reg_d' @@ -0,0 +1,70 @@ +bind generic E >sh -c 'if [ -n "$KAKOUNE_SESSION" ]; then EDITOR=:a; else EDITOR=kak; fi; git show %(commit):%(file) | $EDITOR -e "try %{db! *tig*}; rename-buffer *tig*"' + +bind generic h scroll-left +bind generic j move-down +bind generic k move-up +bind generic l scroll-right + +bind generic g none +bind generic gg move-first-line +bind generic gj next +bind generic gk previous +bind generic gp parent +bind generic gP back +bind generic gn view-next + +bind main G move-last-line +bind generic G move-last-line + +bind generic <C-f> move-page-down +bind generic <C-b> move-page-up + +bind generic v none +bind generic vm view-main +bind generic vd view-diff +bind generic vl view-log +bind generic vt view-tree +bind generic vb view-blob +bind generic vx view-blame +bind generic vr view-refs +bind generic vs view-status +bind generic vu view-stage +bind generic vy view-stash +bind generic vg view-grep +bind generic vp view-pager +bind generic vh view-help + +bind generic o none +bind generic oo :toggle sort-order +bind generic os :toggle sort-field +bind generic on :toggle line-number +bind generic od :toggle date +bind generic oa :toggle author +bind generic og :toggle line-graphics +bind generic of :toggle file-name +bind generic op :toggle ignore-space +bind generic oi :toggle id +bind generic ot :toggle commit-title-overflow +bind generic oF :toggle file-filter +bind generic or :toggle commit-title-refs + +bind generic @ none +bind generic @j :/^@@ +bind generic @k :?^@@ +bind generic @- :toggle diff-context -1 +bind generic @+ :toggle diff-context +1 + +bind generic u none +bind generic uu status-update +bind generic ur status-revert +bind generic um status-merge +bind generic ul stage-update-line +bind generic up stage-update-part +bind generic us stage-split-chunk + +bind generic c none +bind generic cc !git commit +bind generic ca !?@git commit --amend --no-edit + +bind generic K view-help +bind generic <C-w><C-w> view-next |
