annotate lisp/sort.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 1d1d5d9bd884
children 249a1455856a 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 34601
diff changeset
1 ;;; sort.el --- commands to sort text in an Emacs buffer
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74241
diff changeset
3 ;; Copyright (C) 1986, 1987, 1994, 1995, 2001, 2002, 2003,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
840
113281b361ec *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
6 ;; Author: Howie Kaye
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
7 ;; Maintainer: FSF
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
8 ;; Keywords: unix
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
9
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; (at your option) any later version.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2185
diff changeset
25 ;;; Commentary:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2185
diff changeset
26
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13643
diff changeset
27 ;; This package provides the sorting facilities documented in the Emacs
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13643
diff changeset
28 ;; user's manual.
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2185
diff changeset
29
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
30 ;;; Code:
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
19418
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
32 (defgroup sort nil
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
33 "Commands to sort text in an Emacs buffer."
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
34 :group 'data)
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
35
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
36 (defcustom sort-fold-case nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 97142
diff changeset
37 "Non-nil if the buffer sort functions should ignore case."
19418
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
38 :group 'sort
142900099257 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 16765
diff changeset
39 :type 'boolean)
78621
1dbe2728aae4 (sort-fold-case, sort-numeric-base): Mark as safe-local-variable.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78236
diff changeset
40 ;;;###autoload(put 'sort-fold-case 'safe-local-variable 'booleanp)
3409
09bba81c038f (sort-fold-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
41
6474
79765ff7bfa1 (sort-subr): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 5747
diff changeset
42 ;;;###autoload
51414
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
43 (defun sort-subr (reverse nextrecfun endrecfun
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
44 &optional startkeyfun endkeyfun predicate)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 "General text sorting routine to divide buffer into records and sort them.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
996
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
47 We divide the accessible portion of the buffer into disjoint pieces
998
61c6983219ff entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 996
diff changeset
48 called sort records. A portion of each sort record (perhaps all of
61c6983219ff entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 996
diff changeset
49 it) is designated as the sort key. The records are rearranged in the
61c6983219ff entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 996
diff changeset
50 buffer in order by their sort keys. The records may or may not be
61c6983219ff entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 996
diff changeset
51 contiguous.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 Usually the records are rearranged in order of ascending sort key.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 If REVERSE is non-nil, they are rearranged in order of descending sort key.
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
55 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
56 the sort order.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 The next four arguments are functions to be called to move point
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 across a sort record. They will be called many times from within sort-subr.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 NEXTRECFUN is called with point at the end of the previous record.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 It moves point to the start of the next record.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 It should move point to the end of the buffer if there are no more records.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 The first record is assumed to start at the position of point when sort-subr
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 is called.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66
1836
fe4f7650a94b (sort-subr): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
67 ENDRECFUN is called with point within the record.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 It should move point to the end of the record.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
1836
fe4f7650a94b (sort-subr): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
70 STARTKEYFUN moves from the start of the record to the start of the key.
fe4f7650a94b (sort-subr): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
71 It may return either a non-nil value to be used as the key, or
996
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
72 else the key is the substring between the values of point after
135
e1b5a59d0f91 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 86
diff changeset
73 STARTKEYFUN and ENDKEYFUN are called. If STARTKEYFUN is nil, the key
e1b5a59d0f91 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 86
diff changeset
74 starts at the beginning of the record.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ENDKEYFUN moves from the start of the sort key to the end of the sort key.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
51414
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
78 same as ENDRECFUN.
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
79
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
80 PREDICATE is the function to use to compare keys. If keys are numbers,
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
81 it defaults to `<', otherwise it defaults to `string<'."
996
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
82 ;; Heuristically try to avoid messages if sorting a small amt of text.
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
83 (let ((messages (> (- (point-max) (point-min)) 50000)))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
84 (save-excursion
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
85 (if messages (message "Finding sort keys..."))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
86 (let* ((sort-lists (sort-build-lists nextrecfun endrecfun
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
87 startkeyfun endkeyfun))
3409
09bba81c038f (sort-fold-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
88 (old (reverse sort-lists))
09bba81c038f (sort-fold-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
89 (case-fold-search sort-fold-case))
996
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
90 (if (null sort-lists)
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
91 ()
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
92 (or reverse (setq sort-lists (nreverse sort-lists)))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
93 (if messages (message "Sorting records..."))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
94 (setq sort-lists
51414
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
95 (sort sort-lists
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
96 (cond (predicate
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
97 `(lambda (a b) (,predicate (car a) (car b))))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
98 ((numberp (car (car sort-lists)))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
99 'car-less-than-car)
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
100 ((consp (car (car sort-lists)))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
101 (lambda (a b)
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
102 (> 0 (compare-buffer-substrings
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
103 nil (car (car a)) (cdr (car a))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
104 nil (car (car b)) (cdr (car b))))))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
105 (t
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
106 (lambda (a b) (string< (car a) (car b)))))))
996
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
107 (if reverse (setq sort-lists (nreverse sort-lists)))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
108 (if messages (message "Reordering buffer..."))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
109 (sort-reorder-buffer sort-lists old)))
0e8ace07a231 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 840
diff changeset
110 (if messages (message "Reordering buffer... Done"))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 nil)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; Parse buffer into records using the arguments as Lisp expressions;
136
4d8caa5e2cba *** empty log message ***
root <root>
parents: 135
diff changeset
114 ;; return a list of records. Each record looks like (KEY STARTPOS . ENDPOS)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; where KEY is the sort key (a number or string),
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; and STARTPOS and ENDPOS are the bounds of this record in the buffer.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; The records appear in the list lastmost first!
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (defun sort-build-lists (nextrecfun endrecfun startkeyfun endkeyfun)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (let ((sort-lists ())
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (start-rec nil)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 done key)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; Loop over sort records.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;(goto-char (point-min)) -- it is the caller's responsibility to
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;arrange this if necessary
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (while (not (eobp))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (setq start-rec (point)) ;save record start
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (setq done nil)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; Get key value, or move to start of key.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (setq key (catch 'key
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (or (and startkeyfun (funcall startkeyfun))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; If key was not returned as value,
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; move to end of key and get key from the buffer.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 (let ((start (point)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (funcall (or endkeyfun
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (prog1 endrecfun (setq done t))))
1844
d48f094be56e (sort-build-lists): Record the key as pair of positions;
Richard M. Stallman <rms@gnu.org>
parents: 1836
diff changeset
138 (cons start (point))))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; Move to end of this record (start of next one, or end of buffer).
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (cond ((prog1 done (setq done nil)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (endrecfun (funcall endrecfun))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (nextrecfun (funcall nextrecfun) (setq done t)))
51414
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
143 (if key (push
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
144 ;; consing optimization in case in which key is same as record.
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
145 (if (and (consp key)
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
146 (equal (car key) start-rec)
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
147 (equal (cdr key) (point)))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
148 (cons key key)
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
149 (cons key (cons start-rec (point))))
bcc01b458b48 (sort-subr): Add `predicate' arg. Remove `sortcar' code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50406
diff changeset
150 sort-lists))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (and (not done) nextrecfun (funcall nextrecfun)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 sort-lists))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (defun sort-reorder-buffer (sort-lists old)
42284
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
155 (let ((last (point-min))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
156 (min (point-min)) (max (point-max))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
157 (old-buffer (current-buffer))
93104
cd165893f5bb (sort-reorder-buffer): Preserve the buffer's multibyteness.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
158 (mb enable-multibyte-characters)
42284
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
159 temp-buffer)
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
160 (with-temp-buffer
93104
cd165893f5bb (sort-reorder-buffer): Preserve the buffer's multibyteness.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
161 (set-buffer-multibyte mb)
42284
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
162 ;; Record the temporary buffer.
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
163 (setq temp-buffer (current-buffer))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
164
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
165 ;; Copy the sorted text into the temporary buffer.
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
166 (while sort-lists
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
167 (goto-char (point-max))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
168 (insert-buffer-substring old-buffer
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
169 last
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
170 (nth 1 (car old)))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
171 (goto-char (point-max))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
172 (insert-buffer-substring old-buffer
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
173 (nth 1 (car sort-lists))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
174 (cdr (cdr (car sort-lists))))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
175 (setq last (cdr (cdr (car old)))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
176 sort-lists (cdr sort-lists)
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
177 old (cdr old)))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (goto-char (point-max))
44521
d0c94b4f58f6 (sort-reorder-buffer): Don't assume point-min == 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42284
diff changeset
179 (insert-buffer-substring old-buffer last max)
42284
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
180
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
181 ;; Copy the reordered text from the temporary buffer
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
182 ;; to the buffer we sorted (OLD-BUFFER).
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
183 (set-buffer old-buffer)
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
184 (let ((inhibit-quit t))
b8c51fd416a8 (sort-reorder-buffer): Copy all to a temp buffer first.
Richard M. Stallman <rms@gnu.org>
parents: 38412
diff changeset
185 ;; Make sure insertions done for reordering
50406
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
186 ;; saves any markers at the end of the sorted region,
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
187 ;; by leaving the last character of the region.
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
188 (delete-region min (1- max))
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
189 ;; Now replace the one remaining old character with the sorted text.
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
190 (goto-char (point-min))
44521
d0c94b4f58f6 (sort-reorder-buffer): Don't assume point-min == 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42284
diff changeset
191 (insert-buffer-substring temp-buffer)
50406
180066f315b2 (sort-reorder-buffer): Fix saving of markers at the end of the sorted region.
Juanma Barranquero <lekktu@gmail.com>
parents: 49685
diff changeset
192 (delete-region max (1+ max))))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
194 ;;;###autoload
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49128
diff changeset
195 (defun sort-lines (reverse beg end)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 "Sort lines in region alphabetically; argument means descending order.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 Called from a program, there are three arguments:
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
198 REVERSE (non-nil means reverse order), BEG and END (region to sort).
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
199 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
200 the sort order."
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (interactive "P\nr")
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (narrow-to-region beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (goto-char (point-min))
69786
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
206 (let ;; To make `end-of-line' and etc. to ignore fields.
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
207 ((inhibit-field-text-motion t))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
208 (sort-subr reverse 'forward-line 'end-of-line)))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
210 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (defun sort-paragraphs (reverse beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 "Sort paragraphs in region alphabetically; argument means descending order.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 Called from a program, there are three arguments:
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
214 REVERSE (non-nil means reverse order), BEG and END (region to sort).
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
215 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
216 the sort order."
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (interactive "P\nr")
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (narrow-to-region beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (goto-char (point-min))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (sort-subr reverse
5747
cbd0de32e997 (sort-paragraphs): Use proper paragraph definition instead of just checking
Karl Heuer <kwzh@gnu.org>
parents: 5418
diff changeset
223 (function
cbd0de32e997 (sort-paragraphs): Use proper paragraph definition instead of just checking
Karl Heuer <kwzh@gnu.org>
parents: 5418
diff changeset
224 (lambda ()
cbd0de32e997 (sort-paragraphs): Use proper paragraph definition instead of just checking
Karl Heuer <kwzh@gnu.org>
parents: 5418
diff changeset
225 (while (and (not (eobp)) (looking-at paragraph-separate))
cbd0de32e997 (sort-paragraphs): Use proper paragraph definition instead of just checking
Karl Heuer <kwzh@gnu.org>
parents: 5418
diff changeset
226 (forward-line 1))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 'forward-paragraph))))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
229 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (defun sort-pages (reverse beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 "Sort pages in region alphabetically; argument means descending order.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 Called from a program, there are three arguments:
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
233 REVERSE (non-nil means reverse order), BEG and END (region to sort).
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
234 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
235 the sort order."
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (interactive "P\nr")
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (narrow-to-region beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (goto-char (point-min))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (sort-subr reverse
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (function (lambda () (skip-chars-forward "\n")))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 'forward-page))))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (defvar sort-fields-syntax-table nil)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (if sort-fields-syntax-table nil
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (let ((table (make-syntax-table))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (i 0))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (while (< i 256)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (modify-syntax-entry i "w" table)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (setq i (1+ i)))
74241
6a192e66ade3 (sort-fields-syntax-table): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73655
diff changeset
252 (modify-syntax-entry ?\s " " table)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (modify-syntax-entry ?\t " " table)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (modify-syntax-entry ?\n " " table)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (modify-syntax-entry ?\. "_" table) ; for floating pt. numbers. -wsr
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (setq sort-fields-syntax-table table)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
27468
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
258 (defcustom sort-numeric-base 10
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 97142
diff changeset
259 "The default base used by `sort-numeric-fields'."
27468
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
260 :group 'sort
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
261 :type 'integer)
78621
1dbe2728aae4 (sort-fold-case, sort-numeric-base): Mark as safe-local-variable.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78236
diff changeset
262 ;;;###autoload(put 'sort-numeric-base 'safe-local-variable 'integerp)
27468
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
263
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
264 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (defun sort-numeric-fields (field beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 "Sort lines in region numerically by the ARGth field of each line.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 Fields are separated by whitespace and numbered from 1 up.
27468
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
268 Specified field must contain a number in each line of the region,
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
269 which may begin with \"0x\" or \"0\" for hexadecimal and octal values.
8a6ee5b485d2 (sort-numeric-base): New option.
Gerd Moellmann <gerd@gnu.org>
parents: 19418
diff changeset
270 Otherwise, the number is interpreted according to sort-numeric-base.
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
271 With a negative arg, sorts by the ARGth field counted from the right.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 Called from a program, there are three arguments:
5418
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
273 FIELD, BEG and END. BEG and END specify region to sort."
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (interactive "p\nr")
69786
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
275 (let ;; To make `end-of-line' and etc. to ignore fields.
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
276 ((inhibit-field-text-motion t))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
277 (sort-fields-1 field beg end
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
278 (lambda ()
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
279 (sort-skip-fields field)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
280 (let* ((case-fold-search t)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
281 (base
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
282 (if (looking-at "\\(0x\\)[0-9a-f]\\|\\(0\\)[0-7]")
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
283 (cond ((match-beginning 1)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
284 (goto-char (match-end 1))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
285 16)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
286 ((match-beginning 2)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
287 (goto-char (match-end 2))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
288 8)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
289 (t nil)))))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
290 (string-to-number (buffer-substring (point)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
291 (save-excursion
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
292 (forward-sexp 1)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
293 (point)))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
294 (or base sort-numeric-base))))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
295 nil)))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
5418
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
297 ;;;;;###autoload
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
298 ;;(defun sort-float-fields (field beg end)
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
299 ;; "Sort lines in region numerically by the ARGth field of each line.
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
300 ;;Fields are separated by whitespace and numbered from 1 up. Specified field
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
301 ;;must contain a floating point number in each line of the region. With a
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
302 ;;negative arg, sorts by the ARGth field counted from the right. Called from a
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
303 ;;program, there are three arguments: FIELD, BEG and END. BEG and END specify
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
304 ;;region to sort."
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
305 ;; (interactive "p\nr")
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
306 ;; (sort-fields-1 field beg end
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
307 ;; (function (lambda ()
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
308 ;; (sort-skip-fields field)
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
309 ;; (string-to-number
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
310 ;; (buffer-substring
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
311 ;; (point)
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
312 ;; (save-excursion
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
313 ;; (re-search-forward
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
314 ;; "[+-]?[0-9]*\.?[0-9]*\\([eE][+-]?[0-9]+\\)?")
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
315 ;; (point))))))
6eb86cda3856 (sort-float-fields): Commented out.
Richard M. Stallman <rms@gnu.org>
parents: 4247
diff changeset
316 ;; nil))
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
317
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
318 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (defun sort-fields (field beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 "Sort lines in region lexicographically by the ARGth field of each line.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 Fields are separated by whitespace and numbered from 1 up.
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
322 With a negative arg, sorts by the ARGth field counted from the right.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 Called from a program, there are three arguments:
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
324 FIELD, BEG and END. BEG and END specify region to sort.
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
325 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
326 the sort order."
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 (interactive "p\nr")
69786
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
328 (let ;; To make `end-of-line' and etc. to ignore fields.
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
329 ((inhibit-field-text-motion t))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
330 (sort-fields-1 field beg end
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
331 (function (lambda ()
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
332 (sort-skip-fields field)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
333 nil))
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
334 (function (lambda () (skip-chars-forward "^ \t\n"))))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defun sort-fields-1 (field beg end startkeyfun endkeyfun)
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
337 (let ((tbl (syntax-table)))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
338 (if (zerop field) (setq field 1))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (unwind-protect
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (narrow-to-region beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (goto-char (point-min))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (set-syntax-table sort-fields-syntax-table)
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
345 (sort-subr nil
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 'forward-line 'end-of-line
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 startkeyfun endkeyfun)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (set-syntax-table tbl))))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
4238
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
350 ;; Position at the beginning of field N on the current line,
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
351 ;; assuming point is initially at the beginning of the line.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (defun sort-skip-fields (n)
4238
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
353 (if (> n 0)
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
354 ;; Skip across N - 1 fields.
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
355 (let ((i (1- n)))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
356 (while (> i 0)
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
357 (skip-chars-forward " \t")
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
358 (skip-chars-forward "^ \t\n")
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
359 (setq i (1- i)))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
360 (skip-chars-forward " \t")
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
361 (if (eolp)
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
362 (error "Line has too few fields: %s"
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
363 (buffer-substring
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
364 (save-excursion (beginning-of-line) (point))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
365 (save-excursion (end-of-line) (point))))))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
366 (end-of-line)
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
367 ;; Skip back across - N - 1 fields.
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
368 (let ((i (1- (- n))))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
369 (while (> i 0)
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
370 (skip-chars-backward " \t")
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
371 (skip-chars-backward "^ \t\n")
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
372 (setq i (1- i)))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
373 (skip-chars-backward " \t"))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
374 (if (bolp)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (error "Line has too few fields: %s"
4238
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
376 (buffer-substring
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
377 (save-excursion (beginning-of-line) (point))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
378 (save-excursion (end-of-line) (point)))))
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
379 ;; Position at the front of the field
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
380 ;; even if moving backwards.
6a22eb586080 (sort-skip-fields): Really implement fields as runs
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
381 (skip-chars-backward "^ \t\n")))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
10763
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
383 (defvar sort-regexp-fields-regexp)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
384 (defvar sort-regexp-record-end)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
385
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
386 ;; Move to the beginning of the next match for record-regexp,
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
387 ;; and set sort-regexp-record-end to the end of that match.
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
388 ;; If the next match is empty and does not advance point,
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
389 ;; skip one character and try again.
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
390 (defun sort-regexp-fields-next-record ()
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
391 (let ((oldpos (point)))
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
392 (and (re-search-forward sort-regexp-fields-regexp nil 'move)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
393 (setq sort-regexp-record-end (match-end 0))
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
394 (if (= sort-regexp-record-end oldpos)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
395 (progn
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
396 (forward-char 1)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
397 (re-search-forward sort-regexp-fields-regexp nil 'move)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
398 (setq sort-regexp-record-end (match-end 0)))
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
399 t)
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
400 (goto-char (match-beginning 0)))))
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
401
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
402 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (defun sort-regexp-fields (reverse record-regexp key-regexp beg end)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3409
diff changeset
404 "Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 RECORD-REGEXP specifies the textual units which should be sorted.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 For example, to sort lines RECORD-REGEXP would be \"^.*$\"
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 KEY specifies the part of each record (ie each match for RECORD-REGEXP)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 is to be used for sorting.
13643
146c5daf3019 (sort-regexp-fields): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
409 If it is \"\\\\digit\" then the digit'th \"\\\\(...\\\\)\" match field from
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 RECORD-REGEXP is used.
13643
146c5daf3019 (sort-regexp-fields): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
411 If it is \"\\\\&\" then the whole record is used.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 Otherwise, it is a regular-expression for which to search within the record.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 If a match for KEY is not found within a record then that record is ignored.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 With a negative prefix arg sorts in reverse order.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
417 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
418 the sort order.
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
419
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 For example: to sort lines in the region by the first word on each line
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 starting with the letter \"f\",
13643
146c5daf3019 (sort-regexp-fields): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
422 RECORD-REGEXP would be \"^.*$\" and KEY would be \"\\\\=\\<f\\\\w*\\\\>\""
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
423 ;; using negative prefix arg to mean "reverse" is now inconsistent with
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
424 ;; other sort-.*fields functions but then again this was before, since it
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
425 ;; didn't use the magnitude of the arg to specify anything.
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49128
diff changeset
426 (interactive "P\nsRegexp specifying records to sort:
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 sRegexp specifying key within record: \nr")
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (cond ((or (equal key-regexp "") (equal key-regexp "\\&"))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (setq key-regexp 0))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 ((string-match "\\`\\\\[1-9]\\'" key-regexp)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (setq key-regexp (- (aref key-regexp 1) ?0))))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (narrow-to-region beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (goto-char (point-min))
10763
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
436 (let (sort-regexp-record-end
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
437 (sort-regexp-fields-regexp record-regexp))
49128
93b43f689e56 (sort-regexp-fields): pass noerror to
Karl Berry <karl@gnu.org>
parents: 44521
diff changeset
438 (re-search-forward sort-regexp-fields-regexp nil t)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (setq sort-regexp-record-end (point))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (goto-char (match-beginning 0))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (sort-subr reverse
10763
d5a22f90865d (sort-regexp-fields-next-record): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
442 'sort-regexp-fields-next-record
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (function (lambda ()
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (goto-char sort-regexp-record-end)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (function (lambda ()
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 (let ((n 0))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (cond ((numberp key-regexp)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (setq n key-regexp))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ((re-search-forward
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 key-regexp sort-regexp-record-end t)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (setq n 0))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (t (throw 'key nil)))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (condition-case ()
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
454 (cons (match-beginning n)
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
455 (match-end n))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; if there was no such register
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (error (throw 'key nil)))))))))))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (defvar sort-columns-subprocess t)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
462 ;;;###autoload
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (defun sort-columns (reverse &optional beg end)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 "Sort lines in region alphabetically by a certain range of columns.
33993
d38d6c74805d (sort-columns): Don't concat strings with numbers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33555
diff changeset
465 For the purpose of this command, the region BEG...END includes
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 the entire line that point is in and the entire line the mark is in.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 The column positions of point and mark bound the range of columns to sort on.
33993
d38d6c74805d (sort-columns): Don't concat strings with numbers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33555
diff changeset
468 A prefix argument means sort into REVERSE order.
16765
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
469 The variable `sort-fold-case' determines whether alphabetic case affects
b06dea50c67a Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16655
diff changeset
470 the sort order.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 Note that `sort-columns' rejects text that contains tabs,
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 because tabs could be split across the specified columns
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 and it doesn't know how to handle that. Also, when possible,
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 it uses the `sort' utility program, which doesn't understand tabs.
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 Use \\[untabify] to convert tabs to spaces before sorting."
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (interactive "P\nr")
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (save-excursion
69786
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
479 (let ;; To make `end-of-line' and etc. to ignore fields.
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
480 ((inhibit-field-text-motion t)
734f4a4c96e2 (sort-build-lists): Don't bind inhibit-field-text-motion
Kenichi Handa <handa@m17n.org>
parents: 69528
diff changeset
481 beg1 end1 col-beg1 col-end1 col-start col-end)
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (goto-char (min beg end))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (setq col-beg1 (current-column))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (beginning-of-line)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (setq beg1 (point))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (goto-char (max beg end))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (setq col-end1 (current-column))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (forward-line)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (setq end1 (point))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 (setq col-start (min col-beg1 col-end1))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 (setq col-end (max col-beg1 col-end1))
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 (if (search-backward "\t" beg1 t)
34601
5ca359ff87e6 (sort-columns): Fix error message.
Gerd Moellmann <gerd@gnu.org>
parents: 33993
diff changeset
493 (error "sort-columns does not work with tabs -- use M-x untabify"))
97142
c3512b2085a0 * bitmaps/README:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
494 (if (not (or (memq system-type '(windows-nt))
54284
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
495 (let ((pos beg1) plist fontified)
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
496 (catch 'found
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
497 (while (< pos end1)
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
498 (setq plist (text-properties-at pos))
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
499 (setq fontified (plist-get plist 'fontified))
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
500 (while (consp plist)
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
501 (unless (or (eq (car plist) 'fontified)
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
502 (and (eq (car plist) 'face)
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
503 fontified))
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
504 (throw 'found t))
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
505 (setq plist (cddr plist)))
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
506 (setq pos (next-property-change pos nil end1)))))))
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 ;; Use the sort utility if we can; it is 4 times as fast.
54284
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
508 ;; Do not use it if there are any non-font-lock properties
78ded7186c4e (sort-columns): Don't use external 'sort' on ms-windows. Otherwise,
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
509 ;; in the region, since the sort utility would lose the
73655
b63188c3288d Reword comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 73638
diff changeset
510 ;; properties. Tabs are used as field separator; on NetBSD,
b63188c3288d Reword comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 73638
diff changeset
511 ;; sort complains if "\n" is used as field separator.
73638
d758e535681e Installed [mark@mcs.vuw.ac.nz: sort-columns fails on NetBSD] patch
Ramprasad B <ramprasad_i82@yahoo.com>
parents: 69786
diff changeset
512 (let ((sort-args (list (if reverse "-rt\t" "-t\t")
69079
68ba98572eb9 (sort-columns): Use Posix arg syntax for `sort'.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
513 (format "-k1.%d,1.%d"
68ba98572eb9 (sort-columns): Use Posix arg syntax for `sort'.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
514 (1+ col-start)
68ba98572eb9 (sort-columns): Use Posix arg syntax for `sort'.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
515 (1+ col-end)))))
33555
a77843a1f4e4 (sort-columns): If sort-fold-case it non-nil, invoke
Gerd Moellmann <gerd@gnu.org>
parents: 27468
diff changeset
516 (when sort-fold-case
a77843a1f4e4 (sort-columns): If sort-fold-case it non-nil, invoke
Gerd Moellmann <gerd@gnu.org>
parents: 27468
diff changeset
517 (push "-f" sort-args))
a77843a1f4e4 (sort-columns): If sort-fold-case it non-nil, invoke
Gerd Moellmann <gerd@gnu.org>
parents: 27468
diff changeset
518 (apply #'call-process-region beg1 end1 "sort" t t nil sort-args))
97142
c3512b2085a0 * bitmaps/README:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
519 ;; On ms-windows, use Emacs's own facilities.
70
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (save-excursion
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (save-restriction
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 (narrow-to-region beg1 end1)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (goto-char beg1)
28fb18d48c35 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 (sort-subr reverse 'forward-line 'end-of-line
33555
a77843a1f4e4 (sort-columns): If sort-fold-case it non-nil, invoke
Gerd Moellmann <gerd@gnu.org>
parents: 27468
diff changeset
525 #'(lambda () (move-to-column col-start) nil)
a77843a1f4e4 (sort-columns): If sort-fold-case it non-nil, invoke
Gerd Moellmann <gerd@gnu.org>
parents: 27468
diff changeset
526 #'(lambda () (move-to-column col-end) nil))))))))
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
527
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 136
diff changeset
528 ;;;###autoload
86
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
529 (defun reverse-region (beg end)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
530 "Reverse the order of lines in a region.
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
531 From a program takes two point or marker arguments, BEG and END."
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
532 (interactive "r")
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
533 (if (> beg end)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
534 (let (mid) (setq mid end end beg beg mid)))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
535 (save-excursion
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
536 ;; put beg at the start of a line and end and the end of one --
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
537 ;; the largest possible region which fits this criteria
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
538 (goto-char beg)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
539 (or (bolp) (forward-line 1))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
540 (setq beg (point))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
541 (goto-char end)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
542 ;; the test for bolp is for those times when end is on an empty line;
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
543 ;; it is probably not the case that the line should be included in the
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
544 ;; reversal; it isn't difficult to add it afterward.
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
545 (or (and (eolp) (not (bolp))) (progn (forward-line -1) (end-of-line)))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
546 (setq end (point-marker))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
547 ;; the real work. this thing cranks through memory on large regions.
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
548 (let (ll (do t))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
549 (while do
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
550 (goto-char beg)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
551 (setq ll (cons (buffer-substring (point) (progn (end-of-line) (point)))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
552 ll))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
553 (setq do (/= (point) end))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
554 (delete-region beg (if do (1+ (point)) (point))))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
555 (while (cdr ll)
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
556 (insert (car ll) "\n")
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
557 (setq ll (cdr ll)))
278f3b6206cc *** empty log message ***
root <root>
parents: 70
diff changeset
558 (insert (car ll)))))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 258
diff changeset
559
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 258
diff changeset
560 (provide 'sort)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 258
diff changeset
561
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93104
diff changeset
562 ;; arch-tag: fbac12be-2a7b-4c8a-9665-264d61f70bd9
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
563 ;;; sort.el ends here