[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/sort.el [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/sort.el [lexbind] |
Date: |
Tue, 14 Oct 2003 19:52:23 -0400 |
Index: emacs/lisp/sort.el
diff -c emacs/lisp/sort.el:1.41.2.1 emacs/lisp/sort.el:1.41.2.2
*** emacs/lisp/sort.el:1.41.2.1 Fri Apr 4 01:20:11 2003
--- emacs/lisp/sort.el Tue Oct 14 19:51:24 2003
***************
*** 40,46 ****
:type 'boolean)
;;;###autoload
! (defun sort-subr (reverse nextrecfun endrecfun &optional startkeyfun
endkeyfun)
"General text sorting routine to divide buffer into records and sort them.
We divide the accessible portion of the buffer into disjoint pieces
--- 40,47 ----
:type 'boolean)
;;;###autoload
! (defun sort-subr (reverse nextrecfun endrecfun
! &optional startkeyfun endkeyfun predicate)
"General text sorting routine to divide buffer into records and sort them.
We divide the accessible portion of the buffer into disjoint pieces
***************
*** 74,80 ****
ENDKEYFUN moves from the start of the sort key to the end of the sort key.
ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
! same as ENDRECFUN."
;; Heuristically try to avoid messages if sorting a small amt of text.
(let ((messages (> (- (point-max) (point-min)) 50000)))
(save-excursion
--- 75,84 ----
ENDKEYFUN moves from the start of the sort key to the end of the sort key.
ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
! same as ENDRECFUN.
!
! PREDICATE is the function to use to compare keys. If keys are numbers,
! it defaults to `<', otherwise it defaults to `string<'."
;; Heuristically try to avoid messages if sorting a small amt of text.
(let ((messages (> (- (point-max) (point-min)) 50000)))
(save-excursion
***************
*** 88,119 ****
(or reverse (setq sort-lists (nreverse sort-lists)))
(if messages (message "Sorting records..."))
(setq sort-lists
! (if (fboundp 'sortcar)
! (sortcar sort-lists
! (cond ((numberp (car (car sort-lists)))
! ;; This handles both ints and floats.
! '<)
! ((consp (car (car sort-lists)))
! (function
! (lambda (a b)
! (> 0 (compare-buffer-substrings
! nil (car a) (cdr a)
! nil (car b) (cdr b))))))
! (t
! 'string<)))
! (sort sort-lists
! (cond ((numberp (car (car sort-lists)))
! 'car-less-than-car)
! ((consp (car (car sort-lists)))
! (function
! (lambda (a b)
! (> 0 (compare-buffer-substrings
! nil (car (car a)) (cdr (car a))
! nil (car (car b)) (cdr (car b)))))))
! (t
! (function
! (lambda (a b)
! (string< (car a) (car b)))))))))
(if reverse (setq sort-lists (nreverse sort-lists)))
(if messages (message "Reordering buffer..."))
(sort-reorder-buffer sort-lists old)))
--- 92,109 ----
(or reverse (setq sort-lists (nreverse sort-lists)))
(if messages (message "Sorting records..."))
(setq sort-lists
! (sort sort-lists
! (cond (predicate
! `(lambda (a b) (,predicate (car a) (car b))))
! ((numberp (car (car sort-lists)))
! 'car-less-than-car)
! ((consp (car (car sort-lists)))
! (lambda (a b)
! (> 0 (compare-buffer-substrings
! nil (car (car a)) (cdr (car a))
! nil (car (car b)) (cdr (car b))))))
! (t
! (lambda (a b) (string< (car a) (car b)))))))
(if reverse (setq sort-lists (nreverse sort-lists)))
(if messages (message "Reordering buffer..."))
(sort-reorder-buffer sort-lists old)))
***************
*** 150,164 ****
(cond ((prog1 done (setq done nil)))
(endrecfun (funcall endrecfun))
(nextrecfun (funcall nextrecfun) (setq done t)))
! (if key (setq sort-lists (cons
! ;; consing optimization in case in which key
! ;; is same as record.
! (if (and (consp key)
! (equal (car key) start-rec)
! (equal (cdr key) (point)))
! (cons key key)
! (cons key (cons start-rec (point))))
! sort-lists)))
(and (not done) nextrecfun (funcall nextrecfun)))
sort-lists))
--- 140,153 ----
(cond ((prog1 done (setq done nil)))
(endrecfun (funcall endrecfun))
(nextrecfun (funcall nextrecfun) (setq done t)))
! (if key (push
! ;; consing optimization in case in which key is same as record.
! (if (and (consp key)
! (equal (car key) start-rec)
! (equal (cdr key) (point)))
! (cons key key)
! (cons key (cons start-rec (point))))
! sort-lists))
(and (not done) nextrecfun (funcall nextrecfun)))
sort-lists))
***************
*** 546,549 ****
--- 535,539 ----
(provide 'sort)
+ ;;; arch-tag: fbac12be-2a7b-4c8a-9665-264d61f70bd9
;;; sort.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/sort.el [lexbind],
Miles Bader <=