[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/csv-mode b585892 22/34: * packages/csv-mode/csv-mode.el
From: |
Stefan Monnier |
Subject: |
[elpa] externals/csv-mode b585892 22/34: * packages/csv-mode/csv-mode.el (csv-align-field-max-width): New var |
Date: |
Sun, 29 Nov 2020 18:46:16 -0500 (EST) |
branch: externals/csv-mode
commit b5858925696f2ae94f782e12838194942ede17dc
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* packages/csv-mode/csv-mode.el (csv-align-field-max-width): New var
(csv--jit-unalign): Erase invisible property as well.
(csv--jit-align): Truncate field to fit within csv-align-field-max-width
when needed.
(csv-align-fields-mode): Add/remove `csv-truncate` to invisibility spec.
---
csv-mode.el | 77 ++++++++++++++++++++++++++++++++++++-------------------------
1 file changed, 46 insertions(+), 31 deletions(-)
diff --git a/csv-mode.el b/csv-mode.el
index 90010fc..21b660d 100644
--- a/csv-mode.el
+++ b/csv-mode.el
@@ -1356,6 +1356,10 @@ If there is already a header line, then unset the header
line."
;;; Auto-alignment
+(defcustom csv-align-field-max-width 40
+ "Maximum width of a column in `csv-align-fields-mode'."
+ :type 'integer)
+
(defvar-local csv--jit-columns nil)
(defun csv--jit-merge-columns (column-widths)
@@ -1377,7 +1381,7 @@ If there is already a header line, then unset the header
line."
changed))
(defun csv--jit-unalign (beg end)
- (remove-text-properties beg end '(display nil csv--jit nil))
+ (remove-text-properties beg end '(display nil csv--jit nil invisible nil))
(remove-overlays beg end 'csv--jit t))
(defun csv--jit-flush (beg end)
@@ -1429,35 +1433,38 @@ If there is already a header line, then unset the
header line."
(align-padding (if (bolp) 0 csv-align-padding))
(left-padding 0) (right-padding 0)
(field-width (pop field-widths))
- (column-width (pop w))
- (x (- column-width field-width))) ; Required padding.
+ (column-width (min (pop w) csv-align-field-max-width))
+ (x (- column-width field-width)) ; Required padding.
+ (truncate nil))
(csv-end-of-field)
;; beg = beginning of current field
;; end = (point) = end of current field
-
+ (when (< x 0)
+ (setq truncate (+ column column-width))
+ (setq x 0))
;; Compute required padding:
(pcase csv-align-style
- ('left
- ;; Left align -- pad on the right:
- (setq left-padding align-padding
- right-padding x))
- ('right
- ;; Right align -- pad on the left:
- (setq left-padding (+ align-padding x)))
- ('auto
- ;; Auto align -- left align text, right align numbers:
- (if (string-match "\\`[-+.[:digit:]]+\\'"
- (buffer-substring field-beg (point)))
- ;; Right align -- pad on the left:
- (setq left-padding (+ align-padding x))
- ;; Left align -- pad on the right:
- (setq left-padding align-padding
- right-padding x)))
- ('centre
- ;; Centre -- pad on both left and right:
- (let ((y (/ x 2))) ; truncated integer quotient
- (setq left-padding (+ align-padding y)
- right-padding (- x y)))))
+ ('left
+ ;; Left align -- pad on the right:
+ (setq left-padding align-padding
+ right-padding x))
+ ('right
+ ;; Right align -- pad on the left:
+ (setq left-padding (+ align-padding x)))
+ ('auto
+ ;; Auto align -- left align text, right align numbers:
+ (if (string-match "\\`[-+.[:digit:]]+\\'"
+ (buffer-substring field-beg (point)))
+ ;; Right align -- pad on the left:
+ (setq left-padding (+ align-padding x))
+ ;; Left align -- pad on the right:
+ (setq left-padding align-padding
+ right-padding x)))
+ ('centre
+ ;; Centre -- pad on both left and right:
+ (let ((y (/ x 2))) ; truncated integer quotient
+ (setq left-padding (+ align-padding y)
+ right-padding (- x y)))))
(cond
@@ -1478,14 +1485,13 @@ If there is already a header line, then unset the
header line."
(csv--make-overlay
field-beg (1+ field-beg) nil nil nil
`(before-string ,(make-string left-padding ?\ )
- csv--jit t)))
+ csv--jit t)))
;; Display separator as spaces:
(with-silent-modifications
(put-text-property
(1- field-beg) field-beg
'display `(space :align-to
,(+ left-padding column)))))
- (unless (eolp) (forward-char)) ; Skip separator.
(setq column (+ column column-width align-padding)))
(t ;; Do not hide separators...
@@ -1501,10 +1507,17 @@ If there is already a header line, then unset the
header line."
;; Display spaces after field:
(overlay-put
overlay
- 'after-string (make-string right-padding ?\ )))
- (forward-char)))) ; Skip separator.
-
- )))))
+ 'after-string (make-string right-padding ?\ )))))))
+ ;; Do it after applying the property, so `move-to-column' can
+ ;; take it into account.
+ (when truncate
+ (let ((trunc-pos (save-excursion
+ (move-to-column truncate)
+ (point))))
+ (put-text-property trunc-pos (point)
+ 'invisible 'csv-truncate)))
+ (unless (eolp) (forward-char)) ; Skip separator.
+ ))))
(forward-line)))
`(jit-lock-bounds ,beg . end)))
@@ -1514,10 +1527,12 @@ If there is already a header line, then unset the
header line."
(csv-unalign-fields nil (point-min) (point-max)) ;Just in case.
(cond
(csv-align-fields-mode
+ (add-to-invisibility-spec '(csv-truncate . t))
(kill-local-variable 'csv--jit-columns)
(jit-lock-register #'csv--jit-align)
(jit-lock-refontify))
(t
+ (remove-from-invisibility-spec '(csv-truncate . t))
(jit-lock-unregister #'csv--jit-align)
(csv--jit-unalign (point-min) (point-max)))))
- [elpa] externals/csv-mode 046da98 11/34: (csv-mode): Set mode-line-position rather than mode-line-format., (continued)
- [elpa] externals/csv-mode 046da98 11/34: (csv-mode): Set mode-line-position rather than mode-line-format., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 96f331b 08/34: * packages/csv-mode/csv-mode.el (csv-end-of-field): Don't skip TABs., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 8c5ea6a 14/34: * csv-mode, landmark: Fix maintainer's email, Stefan Monnier, 2020/11/29
- [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 <=
- [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, 2020/11/29
- [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