Subject: bug#55387: 28.1.50; csv-mode: header does not align when line numbers are displayed

From: Joost Kremers <[email-masked]>
Date: Thu, 12 May 2022 17:33:37 +0200

`csv-mode` has the option to display a header line so you can make column names 
permanently visible, which is a very nice option. However, when 
`display-line-numbers-mode` is active, the column names do not line up with the 
actual columns, because the header line does not take into account the space 
taken up by the line numbers.

I posted this on emacs-devel:
<https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg01308.html>

Eli Zaretskii suggested this can be fixed by doing something similar to what
tabulated-list-mode does. I'm not sure I'll find time to dive into that any time
soon, so I'm posting here to make sure the issue isn't forgotten.

Joost

In GNU Emacs 28.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, cairo version 1.16.0)
 of 2022-04-04 built on Lenovo
Repository revision: dd3863d8bcc77c43363bbd041da1c1eb37a3ee32
Repository branch: emacs-28
Windowing system distributor 'The X.Org Foundation', version 11.0.12013000
System Description: elementary OS 6.1 Jólnir

Configured using:
 'configure --with-harfbuzz --with-cairo --with-json --with-libgmp
 --with-native-compilation'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE
XIM XPM GTK3 ZLIB
Important settings:
  value of $LC_MONETARY: en_IE.UTF-8
  value of $LC_NUMERIC: en_IE.UTF-8
  value of $LC_TIME: en_IE.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: VTerm

Minor modes in effect:
  flycheck-indicator-mode: t
  minions-mode: t
  doom-modeline-mode: t
  which-key-mode: t
  global-atomic-chrome-edit-mode: t
  marginalia-mode: t
  all-the-icons-completion-mode: t
  company-prescient-mode: t
  selectrum-prescient-mode: t
  prescient-persist-mode: t
  projectile-mode: t
  global-diff-hl-mode: t
  global-git-commit-mode: t
  csv-field-index-mode: t
  shell-dirtrack-mode: t
  company-quickhelp-mode: t
  company-quickhelp-local-mode: t
  global-company-mode: t
  company-mode: t
  electric-pair-mode: t
  recentf-mode: t
  delete-selection-mode: t
  override-global-mode: t
  ctrlf-mode: t
  ctrlf-local-mode: t
  selectrum-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-save-visited-mode: t

Load-path shadows:
~/.emacs.d/lisp/custom hides /usr/local/share/emacs/28.1.50/lisp/custom
/home/joost/.emacs.d/elpa/transient-20220509.1943/transient hides /usr/local/share/emacs/28.1.50/lisp/transient

Features:
(shadow emacsbug gnus-fun shr-color calc-misc calc-arith calc-alg calc-ext
calc-menu calc calc-loaddefs calc-macs vc-mtn vc-hg vc-git vc-bzr vc-src vc-sccs
vc-cvs vc-rcs consult-selectrum consult compat-28 mc-edit-lines wdired dired-aux
pcmpl-unix em-unix em-term em-script em-prompt em-ls em-hist em-pred em-glob
em-cmpl em-dirs esh-var em-basic em-banner em-alias esh-mode char-fold
display-fill-column-indicator flycheck-indicator org-autolist org-indent ol-eww
eww xdg mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-search
eieio-opt speedbar ezimage dframe ol-docview ol-bibtex ol-bbdb ol-w3m ol-doi
org-link-doi avy gnus-icalendar org-capture org-refile icalendar diary-lib
diary-loaddefs qp smiley gnus-cite mail-extr visual-fill-column
display-line-numbers mu4e-settings gnus-dired mu4e mu4e-org mu4e-main mu4e-view
mu4e-view-gnus gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum
gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source
utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader
mu4e-view-common mu4e-headers mu4e-compose mu4e-context mu4e-draft mu4e-actions
rfc2368 smtpmail sendmail mu4e-mark mu4e-proc mu4e-utils doc-view jka-compr
image-mode exif mu4e-lists mu4e-message flow-fill mu4e-vars mu4e-meta async
mm-archive mule-util gnutls url-cache finder-inf jk-input-methods quail wgrep-ag
wgrep flycheck-ledger vterm bookmark term disp-table ehelp vterm-module
term/xterm xterm ielm minions doom-modeline doom-modeline-segments
doom-modeline-env doom-modeline-core shrink-path which-key atomic-chrome iimage
image+ image-file image-converter ctrlf marginalia all-the-icons-completion
company-prescient selectrum-prescient selectrum minibuf-eldef prescient
dockerfile-mode sh-script smie executable impatient-mode htmlize tide tide-lv
typescript-mode indium indium-list-sources indium-scratch indium-interaction
indium-chrome indium-nodejs indium-repl indium-debugger indium-debugger-litable
js2-refactor js2r-paredit js2r-conveniences js2r-conditionals js2r-wrapping
js2r-functions js2r-vars mc-hide-unmatched-lines-mode mc-mark-more
mc-cycle-cursors multiple-cursors-core rect js2r-iife js2r-formatting
js2r-helpers indium-debugger-locals indium-breakpoint indium-inspector
indium-render indium-faces indium-seq-fix indium-client indium-structs
json-process-client js2-mode js cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs jupyter python-pytest lsp-pyright
dap-python paredit flycheck-clj-kondo sesman clojure-mode align dap-mode
dap-launch dap-overlays eldoc-box jsonrpc ert debug backtrace lsp-ui
lsp-ui-flycheck lsp-ui-doc goto-addr lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
flycheck-posframe flycheck lsp-mode network-stream markdown-mode inline imenu f
lsp-ui-util face-remap lsp-protocol ht ag vc-svn find-dired s projectile
lisp-mnt grep compile ibuf-ext ibuffer ibuffer-loaddefs thingatpt diff-hl
log-view vc-dir ewoc vc vc-dispatcher diff-mode git-commit magit-git magit-base
magit-section crm compat-27 compat-26 with-editor transient compat log-edit
message rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mailabbrev mail-utils gmm-utils
mailheader pcvs-util add-log autorevert filenotify aggressive-indent nswbuff
yaml-mode yaml guess-language flyspell ispell dired dired-loaddefs reftex
reftex-loaddefs reftex-vars csv-mode sort tab-jump-out yasnippet-snippets
yasnippet company-org-block org-element avl-tree org-settings org-clock
ob-jupyter jupyter-tramp jupyter-server jupyter-server-ioloop
jupyter-ioloop-comm jupyter-ioloop zmq zmq-core jupyter-rest-api url-http
url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
nsm rmc jupyter-org-extensions jupyter-org-client jupyter-repl
jupyter-kernel-manager jupyter-channel jupyter-widget-client websocket bindat
simple-httpd jupyter-client jupyter-comm-layer jupyter-messages hmac-def
jupyter-mime shr kinsoku text-property-search puny svg dom jupyter-kernelspec
jupyter-env jupyter-base eieio-base ob-shell ob-scheme ob-clojure ob-python
python tramp-sh org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-footnote org-src ob-comint org-pcomplete org-list org-faces org-entities
noutline outline org-version ob-emacs-lisp ob-core ob-eval org-table oc-basic ol
org-keys oc org-compat org-macs org-loaddefs find-func cal-menu calendar
cal-loaddefs docker-tramp tramp-cache tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat shell pcomplete comint ansi-color
parse-time ls-lisp format-spec biblio biblio-download biblio-dissemin
biblio-ieee biblio-hal biblio-dblp biblio-crossref biblio-arxiv timezone
biblio-doi biblio-core let-alist url-queue ido hl-line bibtex iso8601 time-date
adaptive-wrap goggles comp comp-cstr warnings pulse posframe bm
company-quickhelp pos-tip all-the-icons all-the-icons-faces data-material
data-weathericons data-octicons data-fileicons data-faicons data-alltheicons
company-keywords company-etags etags fileloop generator xref project
company-gtags company-dabbrev-code company-dabbrev company-ipa company-files
company-clang company-cmake company-semantic company-template company-css
company-capf company pcase solarized-light-theme solarized-theme solarized
solarized-faces color paradox paradox-menu paradox-commit-list hydra ring lv
cus-edit pp cus-load paradox-execute paradox-github paradox-core spinner dash
cl-extra help-mode jk-functions advice eshell esh-cmd esh-ext esh-opt esh-proc
esh-io esh-arg esh-module esh-groups esh-util notifications dbus xml edmacro
kmacro server elec-pair recentf tree-widget wid-edit delsel use-package
use-package-ensure use-package-delight use-package-diminish use-package-bind-key
bind-key use-package-core tex-site rx realgud-recursive-autoloads easy-mmode
info package browse-url url url-proxy url-privacy url-expand url-methods
url-history url-cookie url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json
subr-x map url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs
cl-lib iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese composite
emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help simple
abbrev obarray cl-preloaded nadvice button loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk
x-toolkit x multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 2507671 210461)
 (symbols 48 75183 82)
 (strings 32 389951 32176)
 (string-bytes 1 15471027)
 (vectors 16 134357)
 (vector-slots 8 2471944 157675)
 (floats 8 1840 1637)
 (intervals 56 237674 14841)
 (buffers 992 29))

-- 
Joost Kremers
Life has its moments