]> code.delx.au - gnu-emacs/commitdiff
(sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
authorRichard M. Stallman <rms@gnu.org>
Fri, 5 Mar 2004 11:31:58 +0000 (11:31 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 5 Mar 2004 11:31:58 +0000 (11:31 +0000)
do use it if the region only contains font-lock text properties.

lisp/ChangeLog
lisp/sort.el

index e8353eeea21499c899f92dec6c003fc20854fbb2..57a01d9f081391c113dd78aedd248818b50c572f 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * sort.el (sort-columns): Don't use external 'sort' on ms-windows.
+       Otherwise, do use it if the region only contains font-lock text
+       properties.
+
 2004-03-04  Masatake YAMATO  <jet@gyve.org>
 
        * hexl.el (hexl-mode): Set `hexl-print-current-point-info'
index 541f598e7a57cb06eac6d594c4c1056d1fccbd9f..76559f17288884deb427ba8f4aa0a6768f02fe7e 100644 (file)
@@ -480,19 +480,30 @@ Use \\[untabify] to convert tabs to spaces before sorting."
       (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)