;;; sort.el --- commands to sort text in an Emacs buffer
-;; Copyright (C) 1986, 1987, 1994, 1995, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1986-1987, 1994-1995, 2001-2012
+;; Free Software Foundation, Inc.
;; Author: Howie Kaye
;; Maintainer: FSF
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
:group 'data)
(defcustom sort-fold-case nil
- "*Non-nil if the buffer sort functions should ignore case."
+ "Non-nil if the buffer sort functions should ignore case."
:group 'sort
:type 'boolean)
;;;###autoload(put 'sort-fold-case 'safe-local-variable 'booleanp)
(let ((last (point-min))
(min (point-min)) (max (point-max))
(old-buffer (current-buffer))
+ (mb enable-multibyte-characters)
temp-buffer)
(with-temp-buffer
+ (set-buffer-multibyte mb)
;; Record the temporary buffer.
(setq temp-buffer (current-buffer))
(setq sort-fields-syntax-table table)))
(defcustom sort-numeric-base 10
- "*The default base used by `sort-numeric-fields'."
+ "The default base used by `sort-numeric-fields'."
:group 'sort
:type 'integer)
;;;###autoload(put 'sort-numeric-base 'safe-local-variable 'integerp)
(if (eolp)
(error "Line has too few fields: %s"
(buffer-substring
- (save-excursion (beginning-of-line) (point))
- (save-excursion (end-of-line) (point))))))
+ (line-beginning-position)
+ (line-end-position)))))
(end-of-line)
;; Skip back across - N - 1 fields.
(let ((i (1- (- n))))
(if (bolp)
(error "Line has too few fields: %s"
(buffer-substring
- (save-excursion (beginning-of-line) (point))
- (save-excursion (end-of-line) (point)))))
+ (line-beginning-position)
+ (line-end-position))))
;; Position at the front of the field
;; even if moving backwards.
(skip-chars-backward "^ \t\n")))
;;;###autoload
(defun sort-regexp-fields (reverse record-regexp key-regexp beg end)
- "Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
-RECORD-REGEXP specifies the textual units which should be sorted.
- For example, to sort lines RECORD-REGEXP would be \"^.*$\"
-KEY specifies the part of each record (ie each match for RECORD-REGEXP)
- is to be used for sorting.
- If it is \"\\\\digit\" then the digit'th \"\\\\(...\\\\)\" match field from
- RECORD-REGEXP is used.
- If it is \"\\\\&\" then the whole record is used.
- Otherwise, it is a regular-expression for which to search within the record.
-If a match for KEY is not found within a record then that record is ignored.
-
-With a negative prefix arg sorts in reverse order.
+ "Sort the text in the region region lexicographically.
+If called interactively, prompt for two regular expressions,
+RECORD-REGEXP and KEY-REGEXP.
+
+RECORD-REGEXP specifies the textual units to be sorted.
+ For example, to sort lines, RECORD-REGEXP would be \"^.*$\".
+
+KEY-REGEXP specifies the part of each record (i.e. each match for
+ RECORD-REGEXP) to be used for sorting.
+ If it is \"\\\\digit\", use the digit'th \"\\\\(...\\\\)\"
+ match field specified by RECORD-REGEXP.
+ If it is \"\\\\&\", use the whole record.
+ Otherwise, KEY-REGEXP should be a regular expression with which
+ to search within the record. If a match for KEY-REGEXP is not
+ found within a record, that record is ignored.
+
+With a negative prefix arg, sort in reverse order.
The variable `sort-fold-case' determines whether alphabetic case affects
the sort order.
;; using negative prefix arg to mean "reverse" is now inconsistent with
;; other sort-.*fields functions but then again this was before, since it
;; didn't use the magnitude of the arg to specify anything.
- (interactive "P\nsRegexp specifying records to sort:
+ (interactive "P\nsRegexp specifying records to sort: \n\
sRegexp specifying key within record: \nr")
(cond ((or (equal key-regexp "") (equal key-regexp "\\&"))
(setq key-regexp 0))
(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 (memq system-type '(vax-vms windows-nt))
+ (if (not (or (memq system-type '(windows-nt))
(let ((pos beg1) plist fontified)
(catch 'found
(while (< pos end1)
(when sort-fold-case
(push "-f" sort-args))
(apply #'call-process-region beg1 end1 "sort" t t nil sort-args))
- ;; On VMS and ms-windows, use Emacs's own facilities.
+ ;; On ms-windows, use Emacs's own facilities.
(save-excursion
(save-restriction
(narrow-to-region beg1 end1)
(provide 'sort)
-;;; arch-tag: fbac12be-2a7b-4c8a-9665-264d61f70bd9
;;; sort.el ends here