Function: sort-reorder-buffer

sort-reorder-buffer is a byte-compiled function defined in sort.el.gz.

Signature

(sort-reorder-buffer SORT-LISTS OLD)

Source Code

;; Defined in /usr/src/emacs/lisp/sort.el.gz
(defun sort-reorder-buffer (sort-lists old)
  (let ((last (point-min))
	(min (point-min)) (max (point-max))
	(old-buffer (current-buffer))
        (mb enable-multibyte-characters)
	temp-buffer)
    (with-temp-buffer
      (set-buffer-multibyte mb)
      ;; Record the temporary buffer.
      (setq temp-buffer (current-buffer))

      ;; Copy the sorted text into the temporary buffer.
      (while sort-lists
	(goto-char (point-max))
	(insert-buffer-substring old-buffer
				 last
				 (nth 1 (car old)))
	(goto-char (point-max))
	(insert-buffer-substring old-buffer
				 (nth 1 (car sort-lists))
				 (cdr (cdr (car sort-lists))))
	(setq last (cdr (cdr (car old)))
	      sort-lists (cdr sort-lists)
	      old (cdr old)))
      (goto-char (point-max))
      (insert-buffer-substring old-buffer last max)

      ;; Copy the reordered text from the temporary buffer
      ;; to the buffer we sorted (OLD-BUFFER).
      (set-buffer old-buffer)
      (let ((inhibit-quit t))
	;; Make sure insertions done for reordering
	;; saves any markers at the end of the sorted region,
	;; by leaving the last character of the region.
	(delete-region min (1- max))
        ;; Now replace the one remaining old character with the sorted text.
	(goto-char (point-min))
	(insert-buffer-substring temp-buffer)
	(delete-region max (1+ max))))))