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