Function: majutsu-diff--color-words-refine-hunk
majutsu-diff--color-words-refine-hunk is a natively compiled function
defined in majutsu-diff.el.
Signature
(majutsu-diff--color-words-refine-hunk SECTION)
Documentation
Apply word-level refinement to a color-words SECTION.
Walk the hunk body to find colored word spans (identified by debug
labels when available, otherwise ANSI-derived font-lock-face) and
create three kinds of overlays:
1. smerge--refine-region overlays covering the full extent of each
removed/added block. These carry cursor-sensor-functions with
majutsu-diff--color-words-shadow-cursor (NOT the smerge version,
which assumes separated geometry).
2. diff-mode fine overlays on non-token spans, cross-linked via
smerge--refine-other as anchors for precise shadow-cursor mapping.
3. Token overlays on underlined spans with diff-refine-removed/
diff-refine-added faces. When available, token spans come from
jj --color=debug labels (exactly matching jj's inline tokenization);
otherwise fall back to ANSI face spans.
This trusts jj's own word-level diff: underlined = unique to one side, non-underlined colored = shared context within a change.
Source Code
;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-diff.el
(defun majutsu-diff--color-words-refine-hunk (section)
"Apply word-level refinement to a color-words SECTION.
Walk the hunk body to find colored word spans (identified by debug
labels when available, otherwise ANSI-derived `font-lock-face') and
create three kinds of overlays:
1. `smerge--refine-region' overlays covering the full extent of each
removed/added block. These carry `cursor-sensor-functions' with
`majutsu-diff--color-words-shadow-cursor' (NOT the smerge version,
which assumes separated geometry).
2. `diff-mode fine' overlays on non-token spans, cross-linked via
`smerge--refine-other' as anchors for precise shadow-cursor mapping.
3. Token overlays on underlined spans with `diff-refine-removed'/
`diff-refine-added' faces. When available, token spans come from
jj `--color=debug' labels (exactly matching jj's inline tokenization);
otherwise fall back to ANSI face spans.
This trusts jj's own word-level diff: underlined = unique to one
side, non-underlined colored = shared context within a change."
(require 'majutsu-color-words)
(require 'smerge-mode)
(let* ((beg (oref section content))
(end (oref section end))
;; Prefer debug-labeled spans when available; otherwise use ANSI faces.
(debug-spans (majutsu-color-words--collect-debug-change-spans beg end))
(ansi-spans (majutsu-color-words--collect-change-spans beg end))
(change-spans (or debug-spans ansi-spans))
(region-pairs (majutsu-color-words--group-change-pairs change-spans))
;; For token overlays, prefer explicit debug token labels because
;; they mirror jj's rendered token stream exactly.
(debug-token-spans (majutsu-color-words--collect-debug-token-spans beg end))
(token-pairs (if debug-token-spans
(majutsu-color-words--group-change-pairs debug-token-spans)
region-pairs)))
(dolist (pair region-pairs)
(pcase-let ((`(,rbeg ,rend ,abeg ,aend ,r-ul ,a-ul ,r-non ,a-non) pair))
;; 1. Region overlays for shadow cursor activation.
(let (r-region a-region)
(when rbeg
(setq r-region (make-overlay rbeg rend nil 'front-advance))
(overlay-put r-region 'evaporate t)
(overlay-put r-region 'diff-mode 'fine)
(overlay-put r-region 'smerge--refine-region t)
(overlay-put r-region 'majutsu-color-words-non-token r-non)
(overlay-put r-region 'majutsu-color-words-token-anchors
(majutsu-diff--color-words--token-anchors r-ul r-non))
(overlay-put r-region 'cursor-sensor-functions
'(majutsu-diff--color-words-shadow-cursor)))
(when abeg
(setq a-region (make-overlay abeg aend nil 'front-advance))
(overlay-put a-region 'evaporate t)
(overlay-put a-region 'diff-mode 'fine)
(overlay-put a-region 'smerge--refine-region t)
(overlay-put a-region 'majutsu-color-words-non-token a-non)
(overlay-put a-region 'majutsu-color-words-token-anchors
(majutsu-diff--color-words--token-anchors a-ul a-non))
(overlay-put a-region 'cursor-sensor-functions
'(majutsu-diff--color-words-shadow-cursor)))
(when (and r-region a-region)
(overlay-put r-region 'majutsu-color-words-region-other a-region)
(overlay-put a-region 'majutsu-color-words-region-other r-region)))))
(dolist (pair token-pairs)
(pcase-let ((`(,_rbeg ,_rend ,_abeg ,_aend ,r-ul ,a-ul ,_r-non ,_a-non) pair))
;; 2. Token overlays on underlined spans — visual refinement only.
(dolist (span r-ul)
(let ((ol (make-overlay (car span) (cdr span))))
(overlay-put ol 'diff-mode 'fine)
(overlay-put ol 'evaporate t)
(overlay-put ol 'face 'diff-refine-removed)
(overlay-put ol 'majutsu-color-words-token t)))
(dolist (span a-ul)
(let ((ol (make-overlay (car span) (cdr span))))
(overlay-put ol 'diff-mode 'fine)
(overlay-put ol 'evaporate t)
(overlay-put ol 'face 'diff-refine-added)
(overlay-put ol 'majutsu-color-words-token t)))))
;; Enable cursor-sensor-mode for shadow cursor.
(when (bound-and-true-p smerge-refine-shadow-cursor)
(cursor-sensor-mode 1))))