annotate lisp/array.el @ 85682:919974c09488

(struct frame): Move all bit fields after the first bit field to take advantage of the available space. Group all the chars together to reduce wasted space due to padding.
author Dan Nicolaescu <dann@ics.uci.edu>
date Fri, 26 Oct 2007 18:09:36 +0000
parents 9355f9b7bbff
children 73661ddc7ac7 f55f9811f5d7
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: 27286
diff changeset
1 ;;; array.el --- array editing commands for GNU Emacs
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 180
diff changeset
2
74439
ddcbd2c1b70d Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68249
diff changeset
3 ;; Copyright (C) 1987, 2000, 2001, 2002, 2003, 2004,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74439
diff changeset
4 ;; 2005, 2006, 2007 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
6 ;; Author David M. Brown
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
7 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
8 ;; Keywords: extensions
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
78236
9355f9b7bbff Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75347
diff changeset
14 ;; the Free Software Foundation; either version 3, or (at your option)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; any later version.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13603
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62715
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62715
diff changeset
25 ;; Boston, MA 02110-1301, USA.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
27 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
28
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
29 ;; Commands for editing a buffer interpreted as a rectangular array
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
30 ;; or matrix of whitespace-separated strings. You specify the array
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
31 ;; dimensions and some other parameters at startup time.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
32
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
33 ;; Written by dmb%morgoth@harvard.harvard.edu (address is old)
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
34 ;; (David M. Brown at Goldberg-Zoino & Associates, Inc.)
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
35 ;; Thanks to cph@kleph.ai.mit.edu for assistance
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
36
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
37 ;; To do:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
38 ;; Smooth initialization process by grokking local variables list
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
39 ;; at end of buffer or parsing buffer using whitespace as delimiters.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
40 ;; Make 'array-copy-column-right faster.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
43 ;;; Code:
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
45 (defvar array-max-column nil "Number of columns in the array.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
46 (defvar array-columns-per-line nil "Number of array columns per line.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
47 (defvar array-buffer-column nil "Current column number of point in the buffer.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
48 (defvar array-line-length nil "Length of a line in the array.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
49 (defvar array-buffer-line nil "Current line number of point in the buffer.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
50 (defvar array-lines-per-row nil "Number of lines per array row.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
51 (defvar array-max-row nil "Number of rows in the array.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
52 (defvar array-field-width nil "Width of a field in the array.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
53 (defvar array-row nil "Current array row location of point.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
54 (defvar array-column nil "Current array column location of point.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
55 (defvar array-rows-numbered nil "Are rows numbered in the buffer?")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
56 (defvar array-copy-string nil "Current field string being copied.")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
57 (defvar array-respect-tabs nil "Should TAB conversion be prevented?")
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
58
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 ;;; Internal information functions.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42704
diff changeset
60
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 (defun array-cursor-in-array-range ()
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
62 "Return t if the cursor is in a valid array cell.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 Its ok to be on a row number line."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
64 (let ((columns-last-line (% array-max-column array-columns-per-line)))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
65 ;; Requires array-buffer-line and array-buffer-column to be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 (not (or
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 ;; The cursor is too far to the right.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
68 (>= array-buffer-column array-line-length)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 ;; The cursor is below the last row.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
70 (>= array-buffer-line (* array-lines-per-row array-max-row))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 ;; The cursor is on the last line of the row, the line is smaller
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 ;; than the others, and the cursor is after the last array column
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 ;; on the line.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
74 (and (zerop (% (1+ array-buffer-line) array-lines-per-row))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 (not (zerop columns-last-line))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
76 (>= array-buffer-column (* columns-last-line array-field-width)))))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 (defun array-current-row ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 "Return the array row of the field in which the cursor is located."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
80 ;; Requires array-buffer-line and array-buffer-column to be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 (and (array-cursor-in-array-range)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
82 (1+ (floor array-buffer-line array-lines-per-row))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 (defun array-current-column ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 "Return the array column of the field in which the cursor is located."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
86 ;; Requires array-buffer-line and array-buffer-column to be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 (and (array-cursor-in-array-range)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 ;; It's not okay to be on a row number line.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
89 (not (and array-rows-numbered
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
90 (zerop (% array-buffer-line array-lines-per-row))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 (+
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 ;; Array columns due to line differences.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
93 (* array-columns-per-line
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
94 (if array-rows-numbered
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
95 (1- (% array-buffer-line array-lines-per-row))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
96 (% array-buffer-line array-lines-per-row)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 ;; Array columns on the current line.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
98 (1+ (floor array-buffer-column array-field-width)))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 (defun array-update-array-position (&optional a-row a-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
101 "Set `array-row' and `array-column' to their current values.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
102 Set them to the optional arguments A-ROW and A-COLUMN if those are supplied."
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
103 ;; Requires that array-buffer-line and array-buffer-column be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 (setq array-row (or a-row (array-current-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 array-column (or a-column (array-current-column))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 (defun array-update-buffer-position ()
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
108 "Set `array-buffer-line' and `array-buffer-column' to their current values."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
109 (setq array-buffer-line (current-line)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
110 array-buffer-column (current-column)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 ;;; Information commands.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 (defun array-what-position ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 "Display the row and column in which the cursor is positioned."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 (interactive)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
119 (let ((array-buffer-line (current-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
120 (array-buffer-column (current-column)))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
121 (message "Array row: %s Array column: %s"
14338
0f8f00733165 (array-what-position): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
122 (prin1-to-string (array-current-row))
0f8f00733165 (array-what-position): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
123 (prin1-to-string (array-current-column)))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (defun array-display-local-variables ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 "Display the current state of the local variables in the minibuffer."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (interactive)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 (let ((buf (buffer-name (current-buffer))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (with-output-to-temp-buffer "*Local Variables*"
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (buffer-disable-undo standard-output)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 (terpri)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (princ (format " Buffer: %s\n\n" buf))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (princ (format " max-row: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
134 (prin1-to-string array-max-row)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (princ (format " max-column: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
136 (prin1-to-string array-max-column)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (princ (format " columns-per-line: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
138 (prin1-to-string array-columns-per-line)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 (princ (format " field-width: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
140 (prin1-to-string array-field-width)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 (princ (format " rows-numbered: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
142 (prin1-to-string array-rows-numbered)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 (princ (format " lines-per-row: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
144 (prin1-to-string array-lines-per-row)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 (princ (format " line-length: %s\n"
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
146 (prin1-to-string array-line-length))))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 ;;; Internal movement functions.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 (defun array-beginning-of-field (&optional go-there)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 "Return the column of the beginning of the current field.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 Optional argument GO-THERE, if non-nil, means go there too."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
155 ;; Requires that array-buffer-column be current.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
156 (let ((goal-column (- array-buffer-column (% array-buffer-column array-field-width))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 (if go-there
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 (move-to-column-untabify goal-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 goal-column)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 (defun array-end-of-field (&optional go-there)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 "Return the column of the end of the current array field.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 If optional argument GO-THERE is non-nil, go there too."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
164 ;; Requires that array-buffer-column be current.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
165 (let ((goal-column (+ (- array-buffer-column (% array-buffer-column array-field-width))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
166 array-field-width)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 (if go-there
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 (move-to-column-untabify goal-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 goal-column)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 (defun array-move-to-cell (a-row a-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
172 "Move to array row A-ROW and array column A-COLUMN.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 Leave point at the beginning of the field and return the new buffer column."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
174 (let ((goal-line (+ (* array-lines-per-row (1- a-row))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
175 (if array-rows-numbered 1 0)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
176 (floor (1- a-column) array-columns-per-line)))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
177 (goal-column (* array-field-width (% (1- a-column) array-columns-per-line))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 (goto-char (point-min))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 (forward-line goal-line)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 (move-to-column-untabify goal-column)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 (defun array-move-to-row (a-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 "Move to array row A-ROW preserving the current array column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 Leave point at the beginning of the field and return the new array row."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
185 ;; Requires that array-buffer-line and array-buffer-column be current.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
186 (let ((goal-line (+ (* array-lines-per-row (1- a-row))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
187 (% array-buffer-line array-lines-per-row)))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
188 (goal-column (- array-buffer-column (% array-buffer-column array-field-width))))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
189 (forward-line (- goal-line array-buffer-line))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 (move-to-column-untabify goal-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 a-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 (defun array-move-to-column (a-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 "Move to array column A-COLUMN preserving the current array row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 Leave point at the beginning of the field and return the new array column."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
196 ;; Requires that array-buffer-line and array-buffer-column be current.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
197 (let ((goal-line (+ (- array-buffer-line (% array-buffer-line array-lines-per-row))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
198 (if array-rows-numbered 1 0)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
199 (floor (1- a-column) array-columns-per-line)))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
200 (goal-column (* array-field-width (% (1- a-column) array-columns-per-line))))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
201 (forward-line (- goal-line array-buffer-line))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 (move-to-column-untabify goal-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 a-column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (defun array-move-one-row (sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 "Move one array row in direction SIGN (1 or -1).
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 Leave point at the beginning of the field and return the new array row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 If requested to move beyond the array bounds, signal an error."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
209 ;; Requires that array-buffer-line and array-buffer-column be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (let ((goal-column (array-beginning-of-field))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 (array-row (or (array-current-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
212 (error "Cursor is not in a valid array cell"))))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
213 (cond ((and (= array-row array-max-row) (= sign 1))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
214 (error "End of array"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 ((and (= array-row 1) (= sign -1))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
216 (error "Beginning of array"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 (progn
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
219 (forward-line (* sign array-lines-per-row))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 (move-to-column-untabify goal-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 (+ array-row sign))))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 (defun array-move-one-column (sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 "Move one array column in direction SIGN (1 or -1).
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 Leave point at the beginning of the field and return the new array column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 If requested to move beyond the array bounds, signal an error."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
227 ;; Requires that array-buffer-line and array-buffer-column be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 (let ((array-column (or (array-current-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
229 (error "Cursor is not in a valid array cell"))))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
230 (cond ((and (= array-column array-max-column) (= sign 1))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
231 (error "End of array"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 ((and (= array-column 1) (= sign -1))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
233 (error "Beginning of array"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (t
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
235 (cond
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 ;; Going backward from first column on the line.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
237 ((and (= sign -1) (= 1 (% array-column array-columns-per-line)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 (forward-line -1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (move-to-column-untabify
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
240 (* array-field-width (1- array-columns-per-line))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 ;; Going forward from last column on the line.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
242 ((and (= sign 1) (zerop (% array-column array-columns-per-line)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 (forward-line 1))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 ;; Somewhere in the middle of the line.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (move-to-column-untabify (+ (array-beginning-of-field)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
247 (* array-field-width sign)))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (+ array-column sign)))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (defun array-normalize-cursor ()
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
251 "Move the cursor to the first non-whitespace character in the field.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
252 If necessary, scroll horizontally to keep the cursor in view."
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 ;; Assumes point is at the beginning of the field.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
254 (let ((array-buffer-column (current-column)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 (skip-chars-forward " \t"
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (1- (save-excursion (array-end-of-field t) (point))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 (array-maybe-scroll-horizontally)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 (defun array-maybe-scroll-horizontally ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 "If necessary, scroll horizontally to keep the cursor in view."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 ;; This is only called from array-normalize-cursor so
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
262 ;; array-buffer-column will always be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (let ((w-hscroll (window-hscroll))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 (w-width (window-width)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 (cond
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
266 ((and (>= array-buffer-column w-hscroll)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
267 (<= array-buffer-column (+ w-hscroll w-width)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 ;; It's already visible. Do nothing.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 nil)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
270 ((> array-buffer-column (+ w-hscroll w-width))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 ;; It's to the right. Scroll left.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
272 (scroll-left (- (- array-buffer-column w-hscroll)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 (/ w-width 2))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 ;; It's to the left. Scroll right.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
276 (scroll-right (+ (- w-hscroll array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 (/ w-width 2)))))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 ;;; Movement commands.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (defun array-next-row (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 "Move down one array row, staying in the current array column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 If optional ARG is given, move down ARG array rows."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (interactive "p")
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
287 (let ((array-buffer-line (current-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
288 (array-buffer-column (current-column)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (if (= (abs arg) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (array-move-one-row arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 (array-move-to-row
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 (limit-index (+ (or (array-current-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
293 (error "Cursor is not in an array cell"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 arg)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
295 array-max-row))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (defun array-previous-row (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 "Move up one array row, staying in the current array column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 If optional ARG is given, move up ARG array rows."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 (array-next-row (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (defun array-forward-column (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 "Move forward one field, staying in the current array row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 If optional ARG is given, move forward ARG array columns.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 If necessary, keep the cursor in the window by scrolling right or left."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (interactive "p")
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
309 (let ((array-buffer-line (current-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
310 (array-buffer-column (current-column)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 (if (= (abs arg) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 (array-move-one-column arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (array-move-to-column
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 (limit-index (+ (or (array-current-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
315 (error "Cursor is not in an array cell"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 arg)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
317 array-max-column))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (defun array-backward-column (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 "Move backward one field, staying in the current array row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 If optional ARG is given, move backward ARG array columns.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 If necessary, keep the cursor in the window by scrolling right or left."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 (array-forward-column (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (defun array-goto-cell (a-row a-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 "Go to array row A-ROW and array column A-COLUMN."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 (interactive "nArray row: \nnArray column: ")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 (array-move-to-cell
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
331 (limit-index a-row array-max-row)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
332 (limit-index a-column array-max-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 ;;; Internal copying functions.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 (defun array-field-string ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 "Return the field string at the current cursor location."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
341 ;; Requires that array-buffer-column be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 (buffer-substring
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 (save-excursion (array-beginning-of-field t) (point))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 (save-excursion (array-end-of-field t) (point))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 (defun array-copy-once-vertically (sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 "Copy the current field into one array row in direction SIGN (1 or -1).
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 Leave point at the beginning of the field and return the new array row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 If requested to move beyond the array bounds, signal an error."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
350 ;; Requires that array-buffer-line, array-buffer-column, and array-copy-string be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 (let ((a-row (array-move-one-row sign)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 (delete-region (point) (save-excursion (array-end-of-field t) (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
354 (insert array-copy-string))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
355 (move-to-column array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 a-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 (defun array-copy-once-horizontally (sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 "Copy the current field into one array column in direction SIGN (1 or -1).
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 Leave point at the beginning of the field and return the new array column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 If requested to move beyond the array bounds, signal an error."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
362 ;; Requires that array-buffer-line, array-buffer-column, and array-copy-string be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 (let ((a-column (array-move-one-column sign)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 (delete-region (point) (save-excursion (array-end-of-field t) (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
367 (insert array-copy-string))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
368 (move-to-column array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 a-column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 (defun array-copy-to-row (a-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 "Copy the current field vertically into every cell up to and including A-ROW.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 Leave point at the beginning of the field."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
374 ;; Requires that array-buffer-line, array-buffer-column, array-row, and
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
375 ;; array-copy-string be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 (let* ((num (- a-row array-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 (count (abs num))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 (sign (if (zerop count) () (/ num count))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 (while (> count 0)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 (array-move-one-row sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 (delete-region (point) (save-excursion (array-end-of-field t) (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
384 (insert array-copy-string))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
385 (move-to-column array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 (setq count (1- count)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42704
diff changeset
387
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 (defun array-copy-to-column (a-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
389 "Copy current field horizontally into every cell up to and including A-COLUMN.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
390 Leave point at the beginning of the field."
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
391 ;; Requires that array-buffer-line, array-buffer-column, array-column, and
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
392 ;; array-copy-string be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 (let* ((num (- a-column array-column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 (count (abs num))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 (sign (if (zerop count) () (/ num count))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 (while (> count 0)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 (array-move-one-column sign)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 (delete-region (point) (save-excursion (array-end-of-field t) (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
401 (insert array-copy-string))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
402 (move-to-column array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 (setq count (1- count)))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 (defun array-copy-to-cell (a-row a-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 "Copy the current field into the cell at A-ROW, A-COLUMN.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 Leave point at the beginning of the field."
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
408 ;; Requires that array-copy-string be current.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 (array-move-to-cell a-row a-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 (delete-region (point) (save-excursion (array-end-of-field t) (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
412 (insert array-copy-string)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
413 (move-to-column array-buffer-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 ;;; Commands for copying.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 (defun array-copy-down (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 "Copy the current field one array row down.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 If optional ARG is given, copy down through ARG array rows."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 (interactive "p")
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
423 (let* ((array-buffer-line (current-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
424 (array-buffer-column (current-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 (array-row (or (array-current-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
426 (error "Cursor is not in a valid array cell")))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
427 (array-copy-string (array-field-string)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 (if (= (abs arg) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 (array-copy-once-vertically arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 (array-copy-to-row
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
431 (limit-index (+ array-row arg) array-max-row))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 (defun array-copy-up (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 "Copy the current field one array row up.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 If optional ARG is given, copy up through ARG array rows."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 (array-copy-down (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 (defun array-copy-forward (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 "Copy the current field one array column to the right.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 If optional ARG is given, copy through ARG array columns to the right."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 (interactive "p")
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
444 (let* ((array-buffer-line (current-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
445 (array-buffer-column (current-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 (array-column (or (array-current-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
447 (error "Cursor is not in a valid array cell")))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
448 (array-copy-string (array-field-string)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 (if (= (abs arg) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 (array-copy-once-horizontally arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 (array-copy-to-column
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
452 (limit-index (+ array-column arg) array-max-column))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 (defun array-copy-backward (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 "Copy the current field one array column to the left.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 If optional ARG is given, copy through ARG array columns to the left."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 (array-copy-forward (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 (defun array-copy-column-forward (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 "Copy the entire current column in to the column to the right.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 If optional ARG is given, copy through ARG array columns to the right."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 (array-update-array-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 (if (not array-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
468 (error "Cursor is not in a valid array cell"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 (message "Working...")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 (let ((this-row 0))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
471 (while (< this-row array-max-row)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 (setq this-row (1+ this-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 (array-move-to-cell this-row array-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 (array-update-buffer-position)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
475 (let ((array-copy-string (array-field-string)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 (if (= (abs arg) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 (array-copy-once-horizontally arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 (array-copy-to-column
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
479 (limit-index (+ array-column arg) array-max-column))))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 (message "Working...done")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 (array-move-to-row array-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 (defun array-copy-column-backward (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 "Copy the entire current column one column to the left.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 If optional ARG is given, copy through ARG columns to the left."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 (array-copy-column-forward (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 (defun array-copy-row-down (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 "Copy the entire current row one row down.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 If optional ARG is given, copy through ARG rows down."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 (array-update-array-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 (if (not array-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
497 (error "Cursor is not in a valid array cell"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 (cond
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 ((and (= array-row 1) (= arg -1))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
500 (error "Beginning of array"))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
501 ((and (= array-row array-max-row) (= arg 1))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
502 (error "End of array"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 (t
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
504 (let* ((array-copy-string
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 (buffer-substring
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 (save-excursion (array-move-to-cell array-row 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 (point))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
508 (save-excursion (array-move-to-cell array-row array-max-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 (forward-line 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 (point))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 (this-row array-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
512 (goal-row (limit-index (+ this-row arg) array-max-row))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 (num (- goal-row this-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 (count (abs num))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 (sign (if (not (zerop count)) (/ num count))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 (while (> count 0)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 (setq this-row (+ this-row sign))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 (array-move-to-cell this-row 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 (delete-region (point)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 (save-excursion
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
522 (array-move-to-cell this-row array-max-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 (forward-line 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
525 (insert array-copy-string))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 (setq count (1- count)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 (array-move-to-cell goal-row (or array-column 1)))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 (array-normalize-cursor))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 (defun array-copy-row-up (&optional arg)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 "Copy the entire current array row into the row above.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 If optional ARG is given, copy through ARG rows up."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 (interactive "p")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 (array-copy-row-down (- arg)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 (defun array-fill-rectangle ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 "Copy the field at mark into every cell between mark and point."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 (interactive)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 ;; Bind arguments.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 (let ((p-row (or (array-current-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
542 (error "Cursor is not in a valid array cell")))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 (p-column (or (array-current-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
544 (error "Cursor is not in a valid array cell")))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 (m-row
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 (exchange-point-and-mark)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (or (array-current-row)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
550 (error "Mark is not in a valid array cell"))))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
551 (m-column
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (exchange-point-and-mark)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 (or (array-current-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
556 (error "Mark is not in a valid array cell")))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (message "Working...")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 (let ((top-row (min m-row p-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 (bottom-row (max m-row p-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (left-column (min m-column p-column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 (right-column (max m-column p-column)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 ;; Do the first row.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
563 (let ((array-copy-string
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 (array-move-to-cell m-row m-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 (array-field-string))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 (array-copy-to-cell top-row left-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 (array-update-array-position top-row left-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 (array-copy-to-column right-column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 ;; Do the rest of the rows.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 (array-move-to-cell top-row left-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
574 (let ((array-copy-string
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 (buffer-substring
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 (point)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 (array-move-to-cell top-row right-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
579 (setq array-buffer-column (current-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 (array-end-of-field t)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 (point))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 (this-row top-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 (while (/= this-row bottom-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 (setq this-row (1+ this-row))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 (array-move-to-cell this-row left-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 (delete-region
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 (point)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 (array-move-to-cell this-row right-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
591 (setq array-buffer-column (current-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 (array-end-of-field t)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 (point)))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
594 (insert array-copy-string)))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 (message "Working...done")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 (array-goto-cell p-row p-column)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 ;;; Reconfiguration of the array.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 (defun array-make-template ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 "Create the template of an array."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 (interactive)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
605 ;; If there is a conflict between array-field-width and init-string, resolve it.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 (let ((check t)
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
607 (len)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
608 init-field)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 (while check
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
610 (setq init-field (read-string "Initial field value: "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
611 (setq len (length init-field))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
612 (if (/= len array-field-width)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 (if (y-or-n-p (format "Change field width to %d? " len))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
614 (progn (setq array-field-width len)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 (setq check nil)))
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
616 (setq check nil)))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
617 (goto-char (point-min))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
618 (message "Working...")
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
619 (let ((this-row 1))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
620 ;; Loop through the rows.
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
621 (while (<= this-row array-max-row)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
622 (if array-rows-numbered
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
623 (insert (format "%d:\n" this-row)))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
624 (let ((this-column 1))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
625 ;; Loop through the columns.
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
626 (while (<= this-column array-max-column)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
627 (insert init-field)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
628 (if (and (zerop (% this-column array-columns-per-line))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
629 (/= this-column array-max-column))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
630 (newline))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
631 (setq this-column (1+ this-column))))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
632 (setq this-row (1+ this-row))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
633 (newline)))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
634 (message "Working...done"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 (array-goto-cell 1 1))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 (defun array-reconfigure-rows (new-columns-per-line new-rows-numbered)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
638 "Reconfigure the state of `array-rows-numbered' and `array-columns-per-line'.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
639 NEW-COLUMNS-PER-LINE is the desired value of `array-columns-per-line' and
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 NEW-ROWS-NUMBERED (a character, either ?y or ?n) is the desired value
64429
dd1d759e63db (array-mode, array-reconfigure-rows, untabify-backward): Fix typos in
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
641 of `array-rows-numbered'."
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 (interactive "nColumns per line: \ncRows numbered? (y or n) ")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 ;; Check on new-columns-per-line
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 (let ((check t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 (while check
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 (if (and (>= new-columns-per-line 1)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
647 (<= new-columns-per-line array-max-column))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 (setq check nil)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 (setq new-columns-per-line
62402
a7e02ef1e3d6 Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
650 (string-to-number
62458
2c228409c44d Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents: 62402
diff changeset
651 (read-string
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
652 (format "Columns per line (1 - %d): " array-max-column)))))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 ;; Check on new-rows-numbered. It has to be done this way
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 ;; because interactive does not have y-or-n-p.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 (cond
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 ((eq new-rows-numbered ?y)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 (setq new-rows-numbered t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 ((eq new-rows-numbered ?n)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 (setq new-rows-numbered nil))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 (setq new-rows-numbered (y-or-n-p "Rows numbered? "))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 (message "Working...")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 (array-update-buffer-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 (let* ((main-buffer (buffer-name (current-buffer)))
25428
4caa1d53d0e4 (array-reconfigure-rows): Use generate-new-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 25226
diff changeset
665 (temp-buffer (generate-new-buffer " *Array*"))
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
666 (temp-max-row array-max-row)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
667 (temp-max-column array-max-column)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
668 (old-rows-numbered array-rows-numbered)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
669 (old-columns-per-line array-columns-per-line)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
670 (old-lines-per-row array-lines-per-row)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
671 (old-field-width array-field-width)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
672 (old-line-length array-line-length)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 (this-row 1))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 (array-update-array-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 ;; Do the cutting in a temporary buffer.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 (copy-to-buffer temp-buffer (point-min) (point-max))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 (set-buffer temp-buffer)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 (goto-char (point-min))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 (while (<= this-row temp-max-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 ;; Deal with row number.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 (cond
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 ((or (and old-rows-numbered new-rows-numbered)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 (and (not old-rows-numbered) (not new-rows-numbered)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 ;; Nothing is changed.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 ())
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 ((and old-rows-numbered (not new-rows-numbered))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 ;; Delete the row number.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 (kill-line 1))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 ;; Add the row number.
41567
37ca208c68f0 (array-reconfigure-rows): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents: 38412
diff changeset
691 (insert (format "%d:\n" this-row))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 ;; Deal with the array columns in this row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 (cond
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 ((= old-columns-per-line new-columns-per-line)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 ;; Nothing is changed. Go to the next row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 (forward-line (- old-lines-per-row (if old-rows-numbered 1 0))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 (t
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 ;; First expand the row. Then cut it up into new pieces.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 (let ((newlines-to-be-removed
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 (floor (1- temp-max-column) old-columns-per-line))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 (newlines-removed 0)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 (newlines-to-be-added
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 (floor (1- temp-max-column) new-columns-per-line))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 (newlines-added 0))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 (while (< newlines-removed newlines-to-be-removed)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 (move-to-column-untabify
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 (* (1+ newlines-removed) old-line-length))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 (kill-line 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 (setq newlines-removed (1+ newlines-removed)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 (beginning-of-line)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 (while (< newlines-added newlines-to-be-added)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 (move-to-column-untabify (* old-field-width new-columns-per-line))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 (newline)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 (setq newlines-added (1+ newlines-added)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 (forward-line 1))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 (setq this-row (1+ this-row)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 (let ((inhibit-quit t))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 (set-buffer main-buffer)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 (erase-buffer)
64429
dd1d759e63db (array-mode, array-reconfigure-rows, untabify-backward): Fix typos in
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
720 (insert-buffer-substring temp-buffer)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 ;; Update local variables.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
722 (setq array-columns-per-line new-columns-per-line)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
723 (setq array-rows-numbered new-rows-numbered)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
724 (setq array-line-length (* old-field-width new-columns-per-line))
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
725 (setq array-lines-per-row
4514
e64f012944e0 (abs, ceiling, floor): Remove, since they now redefine
Paul Eggert <eggert@twinsun.com>
parents: 2307
diff changeset
726 (+ (floor (1- temp-max-column) new-columns-per-line)
e64f012944e0 (abs, ceiling, floor): Remove, since they now redefine
Paul Eggert <eggert@twinsun.com>
parents: 2307
diff changeset
727 (if new-rows-numbered 2 1)))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 (array-goto-cell (or array-row 1) (or array-column 1)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 (kill-buffer temp-buffer))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 (message "Working...done"))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 (defun array-expand-rows ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 "Expand the rows so each fits on one line and remove row numbers."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 (interactive)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
735 (array-reconfigure-rows array-max-column ?n))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 ;;; Utilities.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 (defun limit-index (index limit)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 (cond ((< index 1) 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 ((> index limit) limit)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 (t index)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 (defun xor (pred1 pred2)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
747 "Return the logical exclusive or of predicates PRED1 and PRED2."
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 (and (or pred1 pred2)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 (not (and pred1 pred2))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 (defun current-line ()
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
752 "Return the current buffer line at point. The first line is 0."
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 (beginning-of-line)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 (count-lines (point-min) (point))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 (defun move-to-column-untabify (column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 "Move to COLUMN on the current line, untabifying if necessary.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 Return COLUMN."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 (or (and (= column (move-to-column column))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 ;; There is a tab in the way.
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
763 (if array-respect-tabs
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
764 (error "There is a TAB character in the way")
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 (progn
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 (untabify-backward)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 (move-to-column column)))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 (defun untabify-backward ()
64429
dd1d759e63db (array-mode, array-reconfigure-rows, untabify-backward): Fix typos in
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
770 "Untabify the preceding TAB."
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 (save-excursion
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 (let ((start (point)))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 (backward-char 1)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 (untabify (point) start))))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 ;;; Array mode.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
780 (defvar array-mode-map nil
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 "Keymap used in array mode.")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 (if array-mode-map
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 (setq array-mode-map (make-keymap))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 ;; Bind keys.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 (define-key array-mode-map "\M-ad" 'array-display-local-variables)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 (define-key array-mode-map "\M-am" 'array-make-template)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 (define-key array-mode-map "\M-ae" 'array-expand-rows)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 (define-key array-mode-map "\M-ar" 'array-reconfigure-rows)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 (define-key array-mode-map "\M-a=" 'array-what-position)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 (define-key array-mode-map "\M-ag" 'array-goto-cell)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 (define-key array-mode-map "\M-af" 'array-fill-rectangle)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 (define-key array-mode-map "\C-n" 'array-next-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 (define-key array-mode-map "\C-p" 'array-previous-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 (define-key array-mode-map "\C-f" 'array-forward-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 (define-key array-mode-map "\C-b" 'array-backward-column)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 (define-key array-mode-map "\M-n" 'array-copy-down)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 (define-key array-mode-map "\M-p" 'array-copy-up)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 (define-key array-mode-map "\M-f" 'array-copy-forward)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 (define-key array-mode-map "\M-b" 'array-copy-backward)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 (define-key array-mode-map "\M-\C-n" 'array-copy-row-down)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 (define-key array-mode-map "\M-\C-p" 'array-copy-row-up)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 (define-key array-mode-map "\M-\C-f" 'array-copy-column-forward)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 (define-key array-mode-map "\M-\C-b" 'array-copy-column-backward))
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 (put 'array-mode 'mode-class 'special)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808
21631
e9650ae37732 (array-mode): Add autoload cookie.
Dave Love <fx@gnu.org>
parents: 14338
diff changeset
809 ;;;###autoload
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 (defun array-mode ()
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 "Major mode for editing arrays.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 Array mode is a specialized mode for editing arrays. An array is
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 considered to be a two-dimensional set of strings. The strings are
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 NOT recognized as integers or real numbers.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
817 The array MUST reside at the top of the buffer.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 TABs are not respected, and may be converted into spaces at any time.
64429
dd1d759e63db (array-mode, array-reconfigure-rows, untabify-backward): Fix typos in
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
820 Setting the variable `array-respect-tabs' to non-nil will prevent TAB conversion,
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 but will cause many functions to give errors if they encounter one.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 Upon entering array mode, you will be prompted for the values of
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 several variables. Others will be calculated based on the values you
42704
6d7f6edfdb45 Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 41567
diff changeset
825 supply. These variables are all local to the buffer. Other buffer
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 in array mode may have different values assigned to the variables.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 The variables are:
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 Variables you assign:
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
830 array-max-row: The number of rows in the array.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
831 array-max-column: The number of columns in the array.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
832 array-columns-per-line: The number of columns in the array per line of buffer.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
833 array-field-width: The width of each field, in characters.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
834 array-rows-numbered: A logical variable describing whether to ignore
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 row numbers in the buffer.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 Variables which are calculated:
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
838 array-line-length: The number of characters in a buffer line.
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
839 array-lines-per-row: The number of buffer lines used to display each row.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 The following commands are available (an asterisk indicates it may
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 take a numeric prefix argument):
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 * \\<array-mode-map>\\[array-forward-column] Move forward one column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 * \\[array-backward-column] Move backward one column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 * \\[array-next-row] Move down one row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 * \\[array-previous-row] Move up one row.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 * \\[array-copy-forward] Copy the current field into the column to the right.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 * \\[array-copy-backward] Copy the current field into the column to the left.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 * \\[array-copy-down] Copy the current field into the row below.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 * \\[array-copy-up] Copy the current field into the row above.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 * \\[array-copy-column-forward] Copy the current column into the column to the right.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 * \\[array-copy-column-backward] Copy the current column into the column to the left.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 * \\[array-copy-row-down] Copy the current row into the row below.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 * \\[array-copy-row-up] Copy the current row into the row above.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 \\[array-fill-rectangle] Copy the field at mark into every cell with row and column
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 between that of point and mark.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 \\[array-what-position] Display the current array row and column.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 \\[array-goto-cell] Go to a particular array cell.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 \\[array-make-template] Make a template for a new array.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 \\[array-reconfigure-rows] Reconfigure the array.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 \\[array-expand-rows] Expand the array (remove row numbers and
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 newlines inside rows)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 \\[array-display-local-variables] Display the current values of local variables.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 Entering array mode calls the function `array-mode-hook'."
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 (interactive)
62715
d07ea6e0706b (array-mode): Use kill-all-local-variables and run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents: 62458
diff changeset
875 (kill-all-local-variables)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
876 (make-local-variable 'array-buffer-line)
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
877 (make-local-variable 'array-buffer-column)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 (make-local-variable 'array-row)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 (make-local-variable 'array-column)
27227
10ee0084db53 Assorted cleanups for compiler warnings, doc strings, `array-' prefix
Dave Love <fx@gnu.org>
parents: 25428
diff changeset
880 (make-local-variable 'array-copy-string)
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
881 (set (make-local-variable 'array-respect-tabs) nil)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
882 (set (make-local-variable 'array-max-row)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
883 (read-number "Number of array rows: "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
884 (set (make-local-variable 'array-max-column)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
885 (read-number "Number of array columns: "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
886 (set (make-local-variable 'array-columns-per-line)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
887 (read-number "Array columns per line: "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
888 (set (make-local-variable 'array-field-width)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
889 (read-number "Field width: "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
890 (set (make-local-variable 'array-rows-numbered)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
891 (y-or-n-p "Rows numbered? "))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
892 (set (make-local-variable 'array-line-length)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
893 (* array-field-width array-columns-per-line))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
894 (set (make-local-variable 'array-lines-per-row)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
895 (+ (floor (1- array-max-column) array-columns-per-line)
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
896 (if array-rows-numbered 2 1)))
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
897 (message "")
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 (setq major-mode 'array-mode)
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 (setq mode-name "Array")
11591
5f3aa9df448e (array-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 4514
diff changeset
900 (force-mode-line-update)
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
901 (set (make-local-variable 'truncate-lines) t)
13603
cb0d1b1782f4 (array-mode): Set overwrite-mode to overwrite-mode-textual.
Richard M. Stallman <rms@gnu.org>
parents: 11591
diff changeset
902 (setq overwrite-mode 'overwrite-mode-textual)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 (use-local-map array-mode-map)
62715
d07ea6e0706b (array-mode): Use kill-all-local-variables and run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents: 62458
diff changeset
904 (run-mode-hooks 'array-mode-hook))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907
25226
0ff7a16ab8f9 Provide `array'.
Karl Heuer <kwzh@gnu.org>
parents: 21631
diff changeset
908 (provide 'array)
0ff7a16ab8f9 Provide `array'.
Karl Heuer <kwzh@gnu.org>
parents: 21631
diff changeset
909
68249
de87ce42a058 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
910 ;; arch-tag: 0086605d-79fe-4a1a-992a-456417261f80
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 180
diff changeset
911 ;;; array.el ends here