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))))