[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/csv-mode f13ff11 18/34: * csv-mode/csv-mode.el (csv-hea
From: |
Stefan Monnier |
Subject: |
[elpa] externals/csv-mode f13ff11 18/34: * csv-mode/csv-mode.el (csv-header-line): New command |
Date: |
Sun, 29 Nov 2020 18:46:15 -0500 (EST) |
branch: externals/csv-mode
commit f13ff11870ab406b9fc871a980290df2747e3d32
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* csv-mode/csv-mode.el (csv-header-line): New command
(csv-menu): Add an entry for it.
(csv--header-line, csv--header-hscroll, csv--header-string): New vars.
(csv--compute-header-string): New function.
---
csv-mode.el | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 58 insertions(+), 6 deletions(-)
diff --git a/csv-mode.el b/csv-mode.el
index 5a78995..40f7033 100644
--- a/csv-mode.el
+++ b/csv-mode.el
@@ -1,10 +1,10 @@
;;; csv-mode.el --- Major mode for editing comma/char separated values -*-
lexical-binding: t -*-
-;; Copyright (C) 2003, 2004, 2012-2016 Free Software Foundation, Inc
+;; Copyright (C) 2003, 2004, 2012-2017 Free Software Foundation, Inc
;; Author: "Francis J. Wright" <F.J.Wright@qmul.ac.uk>
;; Time-stamp: <23 August 2004>
-;; Version: 1.6
+;; Version: 1.7
;; Keywords: convenience
;; This package is free software; you can redistribute it and/or modify
@@ -402,13 +402,13 @@ Usually they sort in order of ascending sort key.")
:help "Rewrite rows (which may have different lengths) as columns"]
"--"
["Forward Field" forward-sexp :active t
- :help "Move forward across one field\; with ARG, do it that many times"]
+ :help "Move forward across one field; with ARG, do it that many times"]
["Backward Field" backward-sexp :active t
- :help "Move backward across one field\; with ARG, do it that many times"]
+ :help "Move backward across one field; with ARG, do it that many times"]
["Kill Field Forward" kill-sexp :active t
- :help "Kill field following cursor\; with ARG, do it that many times"]
+ :help "Kill field following cursor; with ARG, do it that many times"]
["Kill Field Backward" backward-kill-sexp :active t
- :help "Kill field preceding cursor\; with ARG, do it that many times"]
+ :help "Kill field preceding cursor; with ARG, do it that many times"]
"--"
("Alignment Style"
["Left" (setq csv-align-style 'left) :active t
@@ -425,6 +425,7 @@ Usually they sort in order of ascending sort key.")
:help "\
If selected, `csv-align-fields' left aligns text and right aligns numbers"]
)
+ ["Set header line" csv-header-line :active t]
["Show Current Field Index" csv-field-index-mode :active t
:style toggle :selected csv-field-index-mode
:help "If selected, display current field index in mode line"]
@@ -1277,6 +1278,57 @@ Modifies the match data; use `save-match-data' if
necessary."
(push (substring string start) list))
(nreverse list)))
+(defvar-local csv--header-line nil)
+(defvar-local csv--header-hscroll nil)
+(defvar-local csv--header-string nil)
+
+(defun csv-header-line (&optional use-current-line)
+ "Set/unset the header line.
+If the optional prefix arg USE-CURRENT-LINE is nil, use the first line
+as the header line.
+If there is already a header line, then unset the header line."
+ (interactive "P")
+ (if csv--header-line
+ (progn
+ (setq csv--header-line nil)
+ (kill-local-variable 'header-line-format))
+ (setq csv--header-line (copy-marker
+ (if use-current-line
+ (line-beginning-position)
+ (point-min))))
+ (setq csv--header-hscroll nil)
+ (setq header-line-format
+ '(:eval (progn
+ ;; FIXME: Won't work with multiple windows showing that
+ ;; same buffer.
+ (if (eq (window-hscroll) csv--header-hscroll)
+ csv--header-string
+ (setq csv--header-hscroll (window-hscroll))
+ (setq csv--header-string
+ (csv--compute-header-string))))))))
+
+(defun csv--compute-header-string ()
+ (save-excursion
+ (goto-char csv--header-line)
+ (move-to-column csv--header-hscroll)
+ (let ((str (buffer-substring (point) (line-end-position)))
+ (i 0))
+ (while (and i (< i (length str)))
+ (let ((prop (get-text-property i 'display str)))
+ (and (eq (car-safe prop) 'space)
+ (eq (car-safe (cdr prop)) :align-to)
+ (let* ((x (nth 2 prop))
+ (nexti (next-single-property-change i 'display str))
+ (newprop
+ `(space :align-to
+ ,(if (numberp x) (- x csv--header-hscroll)
+ `(- ,x csv--header-hscroll)))))
+ (put-text-property i (or nexti (length str))
+ 'display newprop str)
+ (setq i nexti))))
+ (setq i (next-single-property-change i 'display str)))
+ (concat (propertize " " 'display '((space :align-to 0))) str))))
+
(provide 'csv-mode)
;;; csv-mode.el ends here
- [elpa] externals/csv-mode de4d1e6 24/34: packages/csv-mode/csv-mode.el: Fix csv-align-fields doc, (continued)
- [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, 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 <=
- [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