summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <ivi@vinkies.net>2025-07-20 21:50:45 +0200
committerMike Vink <ivi@vinkies.net>2025-07-20 21:50:45 +0200
commitace76ed6ff7c70d1251839f090dd286212b4f10e (patch)
treec33293384f7e2c266351d262faab0faf443e0cee
parent5c127cfc333392b5a274082b9ac6ee24f058b80d (diff)
diff and tigrc
-rw-r--r--.config/kak/autoload/diff.kak100
-rw-r--r--.tigrc70
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'
diff --git a/.tigrc b/.tigrc
new file mode 100644
index 0000000..252689d
--- /dev/null
+++ b/.tigrc
@@ -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