GNU bug report logs -
#20343
csv-mode fails if mode line is customized
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#20343: csv-mode fails if mode line is customized
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 20343 <at> debbugs.gnu.org.
--
20343: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20343
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
> The reason is that in the definition of csv-mode-line-format, the
> arguments of the `last' function are flipped:
> (defconst csv-mode-line-format
> ;; See bindings.el for details of `mode-line-format' construction.
> (let* ((ml (copy-sequence (default-value 'mode-line-format)))
> (x (or (memq 'mode-line-position ml) (last 3 ml)))) ;; wrong
Oops, indeed.
> (I doubt that messing around with the mode line like that is current
> practice, but that might be a separate discussion.)
I've changed the code to make fewer assumptions. See patch below,
Stefan
diff --git a/packages/csv-mode/csv-mode.el b/packages/csv-mode/csv-mode.el
index a8ae4e4..e727027 100644
--- a/packages/csv-mode/csv-mode.el
+++ b/packages/csv-mode/csv-mode.el
@@ -249,16 +249,7 @@ Number of spaces used by `csv-align-fields' after separators."
(defconst csv-mode-line-format
- ;; See bindings.el for details of `mode-line-format' construction.
- (let* ((ml (copy-sequence (default-value 'mode-line-format)))
- (x (or (memq 'mode-line-position ml) (last 3 ml))))
- (when x
- (setcdr x (cons
- `(csv-field-index-string
- ("" csv-field-index-string
- ))
- (cdr x))))
- ml)
+ '(csv-field-index-string ("" csv-field-index-string))
"Mode line format string for CSV mode.")
(defvar csv-mode-map
@@ -322,9 +313,13 @@ CSV mode provides the following specific keyboard key bindings:
(setq
;; Font locking -- separator plus syntactic:
font-lock-defaults '(csv-font-lock-keywords)
- buffer-invisibility-spec csv-invisibility-default
- ;; Mode line to support `csv-field-index-mode':
- mode-line-format csv-mode-line-format)
+ buffer-invisibility-spec csv-invisibility-default)
+ ;; Mode line to support `csv-field-index-mode':
+ (set (make-local-variable 'mode-line-position)
+ (pcase mode-line-position
+ (`(,(or (pred consp) (pred stringp)) . ,_)
+ `(,@mode-line-position ,csv-mode-line-format))
+ (_ `("" ,mode-line-position ,csv-mode-line-format))))
(set (make-local-variable 'truncate-lines) t)
;; Enable or disable `csv-field-index-mode' (could probably do this
;; a bit more efficiently):
[Message part 3 (message/rfc822, inline)]
This is about csv-mode.el version 1.2 from elpa.gnu.org.
If the mode line has been customized in a certain way, calling csv-mode
will fail.
Example:
in ~/emacs.d/init.el
(setq-default mode-line-format '("%e"))
Install csv-mode.el.
Then run
emacs test.csv
This will produce a message like
(wrong-type-argument number-or-marker-p ("%e"))
The reason is that in the definition of csv-mode-line-format, the
arguments of the `last' function are flipped:
(defconst csv-mode-line-format
;; See bindings.el for details of `mode-line-format' construction.
(let* ((ml (copy-sequence (default-value 'mode-line-format)))
(x (or (memq 'mode-line-position ml) (last 3 ml)))) ;; wrong
(I doubt that messing around with the mode line like that is current
practice, but that might be a separate discussion.)
This bug report was last modified 10 years and 43 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.