emacs-diffs
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]