changeset 69786:734f4a4c96e2

(sort-build-lists): Don't bind inhibit-field-text-motion here. (sort-lines, sort-numeric-fields, sort-fields, sort-columns): Temporarily bind inhibit-field-text-motion to t.
author Kenichi Handa <handa@m17n.org>
date Tue, 04 Apr 2006 01:21:26 +0000
parents d30038c6c061
children b594b04b71fb
files lisp/sort.el
diffstat 1 files changed, 34 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/sort.el	Mon Apr 03 22:16:05 2006 +0000
+++ b/lisp/sort.el	Tue Apr 04 01:21:26 2006 +0000
@@ -121,9 +121,6 @@
 (defun sort-build-lists (nextrecfun endrecfun startkeyfun endkeyfun)
   (let ((sort-lists ())
 	(start-rec nil)
-	;; To avoid such functins as `end-of-line' being affected by
-	;; fields.
-	(inhibit-field-text-motion t)
 	done key)
     ;; Loop over sort records.
     ;(goto-char (point-min)) -- it is the caller's responsibility to
@@ -205,7 +202,9 @@
     (save-restriction
       (narrow-to-region beg end)
       (goto-char (point-min))
-      (sort-subr reverse 'forward-line 'end-of-line))))
+      (let ;; To make `end-of-line' and etc. to ignore fields.
+	  ((inhibit-field-text-motion t))
+	(sort-subr reverse 'forward-line 'end-of-line)))))
 
 ;;;###autoload
 (defun sort-paragraphs (reverse beg end)
@@ -271,25 +270,27 @@
 Called from a program, there are three arguments:
 FIELD, BEG and END.  BEG and END specify region to sort."
   (interactive "p\nr")
-  (sort-fields-1 field beg end
-		 (lambda ()
-		   (sort-skip-fields field)
-		   (let* ((case-fold-search t)
-			  (base
-			   (if (looking-at "\\(0x\\)[0-9a-f]\\|\\(0\\)[0-7]")
-			       (cond ((match-beginning 1)
-				      (goto-char (match-end 1))
-				      16)
-				     ((match-beginning 2)
-				      (goto-char (match-end 2))
-				      8)
-				     (t nil)))))
-		     (string-to-number (buffer-substring (point)
-							 (save-excursion
-							   (forward-sexp 1)
-							   (point)))
-				       (or base sort-numeric-base))))
-		 nil))
+  (let ;; To make `end-of-line' and etc. to ignore fields.
+      ((inhibit-field-text-motion t))
+    (sort-fields-1 field beg end
+		   (lambda ()
+		     (sort-skip-fields field)
+		     (let* ((case-fold-search t)
+			    (base
+			     (if (looking-at "\\(0x\\)[0-9a-f]\\|\\(0\\)[0-7]")
+				 (cond ((match-beginning 1)
+					(goto-char (match-end 1))
+					16)
+				       ((match-beginning 2)
+					(goto-char (match-end 2))
+					8)
+				       (t nil)))))
+		       (string-to-number (buffer-substring (point)
+							   (save-excursion
+							     (forward-sexp 1)
+							     (point)))
+					 (or base sort-numeric-base))))
+		   nil)))
 
 ;;;;;###autoload
 ;;(defun sort-float-fields (field beg end)
@@ -322,11 +323,13 @@
 The variable `sort-fold-case' determines whether alphabetic case affects
 the sort order."
   (interactive "p\nr")
-  (sort-fields-1 field beg end
-		 (function (lambda ()
-			     (sort-skip-fields field)
-			     nil))
-		 (function (lambda () (skip-chars-forward "^ \t\n")))))
+  (let ;; To make `end-of-line' and etc. to ignore fields.
+      ((inhibit-field-text-motion t))
+    (sort-fields-1 field beg end
+		   (function (lambda ()
+			       (sort-skip-fields field)
+			       nil))
+		   (function (lambda () (skip-chars-forward "^ \t\n"))))))
 
 (defun sort-fields-1 (field beg end startkeyfun endkeyfun)
   (let ((tbl (syntax-table)))
@@ -471,7 +474,9 @@
 Use \\[untabify] to convert tabs to spaces before sorting."
   (interactive "P\nr")
   (save-excursion
-    (let (beg1 end1 col-beg1 col-end1 col-start col-end)
+    (let ;; To make `end-of-line' and etc. to ignore fields.
+	((inhibit-field-text-motion t)
+	 beg1 end1 col-beg1 col-end1 col-start col-end)
       (goto-char (min beg end))
       (setq col-beg1 (current-column))
       (beginning-of-line)