Function: array-reconfigure-rows
array-reconfigure-rows is an interactive and byte-compiled function
defined in array.el.gz.
Signature
(array-reconfigure-rows NEW-COLUMNS-PER-LINE NEW-ROWS-NUMBERED)
Documentation
Reconfigure the state of array-rows-numbered and array-columns-per-line.
NEW-COLUMNS-PER-LINE is the desired value of array-columns-per-line and
NEW-ROWS-NUMBERED (a character, either ?y or ?n) is the desired value
of array-rows-numbered.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/array.el.gz
(defun array-reconfigure-rows (new-columns-per-line new-rows-numbered)
"Reconfigure the state of `array-rows-numbered' and `array-columns-per-line'.
NEW-COLUMNS-PER-LINE is the desired value of `array-columns-per-line' and
NEW-ROWS-NUMBERED (a character, either ?y or ?n) is the desired value
of `array-rows-numbered'."
(interactive "nColumns per line: \ncRows numbered? (y or n) ")
;; Check on new-columns-per-line
(let ((check t))
(while check
(if (and (>= new-columns-per-line 1)
(<= new-columns-per-line array-max-column))
(setq check nil)
(setq new-columns-per-line
(string-to-number
(read-string
(format "Columns per line (1 - %d): " array-max-column)))))))
;; Check on new-rows-numbered. It has to be done this way
;; because interactive does not have y-or-n-p.
(cond
((eq new-rows-numbered ?y)
(setq new-rows-numbered t))
((eq new-rows-numbered ?n)
(setq new-rows-numbered nil))
(t
(setq new-rows-numbered (y-or-n-p "Rows numbered? "))))
(message "Working...")
(array-update-buffer-position)
(let* ((main-buffer (buffer-name (current-buffer)))
(temp-buffer (generate-new-buffer " *Array*"))
(temp-max-row array-max-row)
(temp-max-column array-max-column)
(old-rows-numbered array-rows-numbered)
(old-columns-per-line array-columns-per-line)
(old-lines-per-row array-lines-per-row)
(old-field-width array-field-width)
(old-line-length array-line-length)
(this-row 1))
(array-update-array-position)
;; Do the cutting in a temporary buffer.
(copy-to-buffer temp-buffer (point-min) (point-max))
(set-buffer temp-buffer)
(goto-char (point-min))
(while (<= this-row temp-max-row)
;; Deal with row number.
(cond
((or (and old-rows-numbered new-rows-numbered)
(and (not old-rows-numbered) (not new-rows-numbered)))
;; Nothing is changed.
())
((and old-rows-numbered (not new-rows-numbered))
;; Delete the row number.
(kill-line 1))
(t
;; Add the row number.
(insert (format "%d:\n" this-row))))
;; Deal with the array columns in this row.
(cond
((= old-columns-per-line new-columns-per-line)
;; Nothing is changed. Go to the next row.
(forward-line (- old-lines-per-row (if old-rows-numbered 1 0))))
(t
;; First expand the row. Then cut it up into new pieces.
(let ((newlines-to-be-removed
(floor (1- temp-max-column) old-columns-per-line))
(newlines-removed 0)
(newlines-to-be-added
(floor (1- temp-max-column) new-columns-per-line))
(newlines-added 0))
(while (< newlines-removed newlines-to-be-removed)
(array-move-to-column-untabify
(* (1+ newlines-removed) old-line-length))
(kill-line 1)
(setq newlines-removed (1+ newlines-removed)))
(beginning-of-line)
(while (< newlines-added newlines-to-be-added)
(array-move-to-column-untabify (* old-field-width new-columns-per-line))
(newline)
(setq newlines-added (1+ newlines-added)))
(forward-line 1))))
(setq this-row (1+ this-row)))
(let ((inhibit-quit t))
(set-buffer main-buffer)
(erase-buffer)
(insert-buffer-substring temp-buffer)
;; Update local variables.
(setq array-columns-per-line new-columns-per-line)
(setq array-rows-numbered new-rows-numbered)
(setq array-line-length (* old-field-width new-columns-per-line))
(setq array-lines-per-row
(+ (floor (1- temp-max-column) new-columns-per-line)
(if new-rows-numbered 2 1)))
(array-goto-cell (or array-row 1) (or array-column 1)))
(kill-buffer temp-buffer))
(message "Working...done"))