[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/csv-mode 4b9b587 26/34: * packages/csv-mode/csv-mode.el
From: |
Stefan Monnier |
Subject: |
[elpa] externals/csv-mode 4b9b587 26/34: * packages/csv-mode/csv-mode.el: Fix incorrect truncation |
Date: |
Sun, 29 Nov 2020 18:46:17 -0500 (EST) |
branch: externals/csv-mode
commit 4b9b5871a049457ff5e43f3b0e4182e9d74791ad
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* packages/csv-mode/csv-mode.el: Fix incorrect truncation
(csv--field-index): New function, extracted from csv-field-index.
(csv--jit-align): Don't apply csv-align-fields-max-width to the
last column. Fix move-to-column call.
---
csv-mode.el | 54 ++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 38 insertions(+), 16 deletions(-)
diff --git a/csv-mode.el b/csv-mode.el
index cb0f701..92cd2c3 100644
--- a/csv-mode.el
+++ b/csv-mode.el
@@ -796,21 +796,24 @@ the mode line after `csv-field-index-delay' seconds of
Emacs idle time."
(force-mode-line-update))))
(buffer-list))))
+(defun csv--field-index ()
+ (save-excursion
+ (let ((lbp (line-beginning-position)) (field 1))
+ (while (re-search-backward csv-separator-regexp lbp 'move)
+ ;; Move as far as possible, i.e. to beginning of line.
+ (setq field (1+ field)))
+ (unless (csv-not-looking-at-record) field))))
+
(defun csv-field-index ()
"Construct `csv-field-index-string' to display in mode line.
Called by `csv-field-index-idle-timer'."
(if (derived-mode-p 'csv-mode)
- (save-excursion
- (let ((lbp (line-beginning-position)) (field 1))
- (while (re-search-backward csv-separator-regexp lbp 1)
- ;; Move as far as possible, i.e. to beginning of line.
- (setq field (1+ field)))
- (if (csv-not-looking-at-record) (setq field nil))
- (when (not (eq field csv-field-index-old))
- (setq csv-field-index-old field
- csv-field-index-string
- (and field (format "F%d" field)))
- (force-mode-line-update))))))
+ (let ((field (csv--field-index)))
+ (when (not (eq field csv-field-index-old))
+ (setq csv-field-index-old field
+ csv-field-index-string
+ (and field (format "F%d" field)))
+ (force-mode-line-update)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Killing and yanking fields
@@ -1373,7 +1376,9 @@ If there is already a header line, then unset the header
line."
;;; Auto-alignment
(defcustom csv-align-fields-max-width 40
- "Maximum width of a column in `csv-align-fields-mode'."
+ "Maximum width of a column in `csv-align-fields-mode'.
+This does not apply to the last column (for which the usual `truncate-lines'
+setting works better)."
:type 'integer)
(defvar-local csv--jit-columns nil)
@@ -1464,7 +1469,12 @@ 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 (min (pop w) csv-align-fields-max-width))
+ (column-width
+ (min (pop w)
+ ;; Don't apply csv-align-fields-max-width
+ ;; to the last field!
+ (if w csv-align-fields-max-width
+ most-positive-fixnum)))
(x (- column-width field-width)) ; Required padding.
(truncate nil))
(csv-end-of-field)
@@ -1546,9 +1556,21 @@ If there is already a header line, then unset the header
line."
;; 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))))
+ (let ((trunc-pos
+ (save-excursion
+ ;; ¡¡ BIG UGLY HACK !!
+ ;; `current-column' and `move-to-column' count
+ ;; text hidden with an ellipsis "as if" it were
+ ;; fully visible, which is completely wrong here,
+ ;; so circumvent this by temporarily pretending
+ ;; that `csv-truncate' is fully invisible (which
+ ;; isn't quite right either, but should work
+ ;; just well enough for us here).
+ (let ((buffer-invisibility-spec
+ buffer-invisibility-spec))
+ (add-to-invisibility-spec 'csv-truncate)
+ (move-to-column truncate))
+ (point))))
(put-text-property trunc-pos (point)
'invisible 'csv-truncate)))
(unless (eolp) (forward-char)) ; Skip separator.
- [elpa] externals/csv-mode 0192416 05/34: Commentary fix for quarter-plane.el., (continued)
- [elpa] externals/csv-mode 0192416 05/34: Commentary fix for quarter-plane.el., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode b678d22 06/34: * csv-mode.el: Use lexical-binding. Remove redundant :group args., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 5b659a0 04/34: Commentary tweaks for csv-mode, ioccur, and nhexl-mode packages., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 3af03bd 07/34: * csv-mode.el: Bump version number., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode c1989f3 01/34: Add csv-mode.el., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode a3131af 03/34: csv-mode.el: Improve commentary., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 797c322 13/34: Fix column width calculation in cvs-mode.el, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 1aaa593 16/34: Fix csv-mode to delete its own overlays only, Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 935deaf 10/34: * csv-mode (csv-mode-line-help-echo): Remove., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode f9df7cc 12/34: * csv-mode/cvs-mode.el (csv-set-comment-start): Handle nil., Stefan Monnier, 2020/11/29
- [elpa] externals/csv-mode 4b9b587 26/34: * packages/csv-mode/csv-mode.el: Fix incorrect truncation,
Stefan Monnier <=
- [elpa] externals/csv-mode 60e3253 02/34: * packages/csv-mode/csv-mode.el: Minor installation cleanups., Stefan Monnier, 2020/11/29
- [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