1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
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"
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 -U10000 -w "$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 -i.bak 's/^@@.*@@/'"$diff_lines"'/g' "${result}" >/dev/null
sed -i.bak 's,^--- .*/a,--- '"$file_name_a"',g' "${result}" >/dev/null
sed -i.bak 's,^+++ .*/b,+++ '"$file_name_b"',g' "${result}" >/dev/null
}
diff_dance "$selection_content" "$1" put_original_files
fi
}
}
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'
|