Function: smerge--refine-other-pos
smerge--refine-other-pos is a byte-compiled function defined in
smerge-mode.el.gz.
Signature
(smerge--refine-other-pos POS)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/smerge-mode.el.gz
(defun smerge--refine-other-pos (pos)
(let* ((covering-ol
(let ((ols (overlays-at pos)))
(while (and ols (not (overlay-get (car ols)
'smerge--refine-region)))
(pop ols))
(or (car ols)
(user-error "Not inside a refined region"))))
(ref-pos
(if (or (get-char-property pos 'smerge--refine-other)
(get-char-property (1- pos) 'smerge--refine-other))
pos
(let ((next (next-single-char-property-change
pos 'smerge--refine-other nil
(overlay-end covering-ol)))
(prev (previous-single-char-property-change
pos 'smerge--refine-other nil
(overlay-start covering-ol))))
(cond
((and (> prev (overlay-start covering-ol))
(or (>= next (overlay-end covering-ol))
(> (- next pos) (- pos prev))))
prev)
((< next (overlay-end covering-ol)) next)
(t (user-error "No \"other\" position info found"))))))
(boundary
(cond
((< ref-pos pos)
(let ((adjust (get-char-property (1- ref-pos)
'smerge--refine-adjust)))
(min pos (+ ref-pos (or (cdr adjust) 0)))))
((> ref-pos pos)
(let ((adjust (get-char-property ref-pos 'smerge--refine-adjust)))
(max pos (- ref-pos (or (car adjust) 0)))))
(t ref-pos)))
(other-forw (get-char-property ref-pos 'smerge--refine-other))
(other-back (get-char-property (1- ref-pos) 'smerge--refine-other))
(other (or other-forw other-back))
(dist (- boundary pos)))
(if (not (overlay-start other))
(user-error "The \"other\" position has vanished")
(- (if other-forw
(- (overlay-start other)
(or (car (overlay-get other 'smerge--refine-adjust)) 0))
(+ (overlay-end other)
(or (cdr (overlay-get other 'smerge--refine-adjust)) 0)))
dist))))