diff lisp/sort.el @ 54284:78ded7186c4e

(sort-columns): Don't use external 'sort' on ms-windows. Otherwise, do use it if the region only contains font-lock text properties.
author Richard M. Stallman <rms@gnu.org>
date Fri, 05 Mar 2004 11:31:28 +0000
parents 695cf19ef79e
children 53aea6ea5ce9
line wrap: on
line diff
--- a/lisp/sort.el	Fri Mar 05 04:42:46 2004 +0000
+++ b/lisp/sort.el	Fri Mar 05 11:31:28 2004 +0000
@@ -480,19 +480,30 @@
       (setq col-end (max col-beg1 col-end1))
       (if (search-backward "\t" beg1 t)
 	  (error "sort-columns does not work with tabs -- use M-x untabify"))
-      (if (not (or (eq system-type 'vax-vms)
-		   (text-properties-at beg1)
-		   (< (next-property-change beg1 nil end1) end1)))
+      (if (not (or (memq system-type '(vax-vms windows-nt ms-dos))
+		   (let ((pos beg1) plist fontified)
+		     (catch 'found
+		       (while (< pos end1)
+			 (setq plist (text-properties-at pos))
+			 (setq fontified (plist-get plist 'fontified))
+			 (while (consp plist)
+			   (unless (or (eq (car plist) 'fontified)
+				       (and (eq (car plist) 'face)
+					    fontified))
+			     (throw 'found t))
+			   (setq plist (cddr plist)))
+			 (setq pos (next-property-change pos nil end1)))))))
 	  ;; Use the sort utility if we can; it is 4 times as fast.
-	  ;; Do not use it if there are any properties in the region,
-	  ;; since the sort utility would lose the properties.
+	  ;; Do not use it if there are any non-font-lock properties
+	  ;; in the region, since the sort utility would lose the
+	  ;; properties.
 	  (let ((sort-args (list (if reverse "-rt\n" "-t\n")
 				 (concat "+0." (int-to-string col-start))
 				 (concat "-0." (int-to-string col-end)))))
 	    (when sort-fold-case
 	      (push "-f" sort-args))
 	    (apply #'call-process-region beg1 end1 "sort" t t nil sort-args))
-	;; On VMS, use Emacs's own facilities.
+	;; On VMS and ms-windows, use Emacs's own facilities.
 	(save-excursion
 	  (save-restriction
 	    (narrow-to-region beg1 end1)