[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/csv-mode e83c5c5 19/34: Speed up 'csv-align-fields'
From: |
Stefan Monnier |
Subject: |
[elpa] externals/csv-mode e83c5c5 19/34: Speed up 'csv-align-fields' |
Date: |
Sun, 29 Nov 2020 18:46:15 -0500 (EST) |
branch: externals/csv-mode
commit e83c5c578f0d20655de05f3f4409d4801a8538cf
Author: Simen Heggestøyl <simenheg@gmail.com>
Commit: Simen Heggestøyl <simenheg@gmail.com>
Speed up 'csv-align-fields'
* packages/csv-mode/csv-mode.el: Bump version number and make the
dependency on Emacs 24.1 or higher explicit.
(csv--column-widths): Return the field widths as well.
(csv-align-fields): Speed up by using the field widths already computed
by 'csv--column-widths' (bug#37393).
---
csv-mode.el | 34 ++++++++++++++++++++--------------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/csv-mode.el b/csv-mode.el
index 40f7033..d15222d 100644
--- a/csv-mode.el
+++ b/csv-mode.el
@@ -4,7 +4,8 @@
;; Author: "Francis J. Wright" <F.J.Wright@qmul.ac.uk>
;; Time-stamp: <23 August 2004>
-;; Version: 1.7
+;; Version: 1.8
+;; Package-Requires: ((emacs "24.1"))
;; Keywords: convenience
;; This package is free software; you can redistribute it and/or modify
@@ -969,24 +970,30 @@ The fields yanked are those last killed by
`csv-kill-fields'."
(and (overlay-get o 'csv) (delete-overlay o)))
(defun csv--column-widths ()
- (let ((widths '()))
+ "Return a list of two lists (COLUMN-WIDTHS FIELD-WIDTHS).
+COLUMN-WIDTHS contains the widths of the columns after point.
+FIELD-WIDTHS contains the widths of each individual field after
+point."
+ (let ((column-widths '())
+ (field-widths '()))
;; Construct list of column widths:
(while (not (eobp)) ; for each record...
(or (csv-not-looking-at-record)
- (let ((w widths)
+ (let ((w column-widths)
(col (current-column))
- x)
+ field-width)
(while (not (eolp))
(csv-end-of-field)
- (setq x (- (current-column) col)) ; Field width.
+ (setq field-width (- (current-column) col))
+ (push field-width field-widths)
(if w
- (if (> x (car w)) (setcar w x))
- (setq w (list x)
- widths (nconc widths w)))
+ (if (> field-width (car w)) (setcar w field-width))
+ (setq w (list field-width)
+ column-widths (nconc column-widths w)))
(or (eolp) (forward-char)) ; Skip separator.
(setq w (cdr w) col (current-column)))))
(forward-line))
- widths))
+ (list column-widths (nreverse field-widths))))
(defun csv-align-fields (hard beg end)
"Align all the fields in the region to form columns.
@@ -1017,23 +1024,22 @@ If there is no selected region, default to the whole
buffer."
(narrow-to-region beg end)
(set-marker end nil)
(goto-char (point-min))
- (let ((widths (csv--column-widths)))
+ (pcase-let ((`(,column-widths ,field-widths) (csv--column-widths)))
;; Align fields:
(goto-char (point-min))
(while (not (eobp)) ; for each record...
(unless (csv-not-looking-at-record)
- (let ((w widths)
+ (let ((w column-widths)
(column 0)) ;Desired position of left-side of this column.
(while (and w (not (eolp)))
(let* ((beg (point))
(align-padding (if (bolp) 0 csv-align-padding))
(left-padding 0) (right-padding 0)
- (field-width
- (- (- (current-column)
- (progn (csv-end-of-field) (current-column)))))
+ (field-width (pop field-widths))
(column-width (pop w))
(x (- column-width field-width))) ; Required padding.
+ (csv-end-of-field)
(set-marker end (point)) ; End of current field.
;; beg = beginning of current field
;; end = (point) = end of current field
- [elpa] externals/csv-mode 08ee1af 09/34: * csv-mode.el (csv-kill-one-field): Check for presence before deleting trailing, (continued)
- [elpa] externals/csv-mode 08ee1af 09/34: * csv-mode.el (csv-kill-one-field): Check for presence before deleting trailing, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 7e5e6bd 29/34: * packages/csv-mode/csv-mode.el (csv-align--cursor-truncated): Fix C-e case, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode f5de789 27/34: * packages/csv-mode/csv-mode.el: More cvs-align-mode improvements, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 0207304 33/34: * packages/csv-mode/csv-mode.el: Bump version number, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode c5e179b 20/34: * packages/csv-mode/csv-mode.el: Add tsv-mode and csv-align-fields-mode, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode de4d1e6 24/34: packages/csv-mode/csv-mode.el: Fix csv-align-fields doc, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode ac35a9f 23/34: * packages/csv-mode/csv-mode.el: Remove Francis as maintainer, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode b585892 22/34: * packages/csv-mode/csv-mode.el (csv-align-field-max-width): New var, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode bfe6321 15/34: * csv-mode/csv-mode.el: Remove out-of-date "URL:" header., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 8824a58 30/34: * packages/csv-mode/csv-mode.el: New TAB/backtab commands, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode e83c5c5 19/34: Speed up 'csv-align-fields',
Stefan Monnier <=
- [elpa] externals/csv-mode 49eb4d1 21/34: * packages/csv-mode/csv-mode.el: Fix for customize-mode, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 8eedc80 25/34: * packages/csv-mode/csv-mode.el: Fix header-line's alignment, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode cbc9682 34/34: * .gitignore: New file, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 0a1ff7a 28/34: * packages/csv-mode/csv-mode.el: Auto-shorten columns as well, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode f13ff11 18/34: * csv-mode/csv-mode.el (csv-header-line): New command, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 5fb7759 17/34: Fix some quoting problems in doc strings, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 797c859 31/34: * packages/csv-mode/csv-mode.el: Revert part of last change., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 3fe170f 32/34: Add tests for CSV mode, Stefan Monnier, 2020/11/29