unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#74701: 31.0.50; vtable: cannot drag to resize columns when :use-header-line is nil
@ 2024-12-05 14:31 Visuwesh
  2024-12-21  9:10 ` Eli Zaretskii
  0 siblings, 1 reply; 2+ messages in thread
From: Visuwesh @ 2024-12-05 14:31 UTC (permalink / raw)
  To: 74701; +Cc: Adam Porter

When creating a vtable with :use-header-line nil (see below), dragging
the column or the divider to resize the column is impossible because

  1. the function vtable--insert-header-line does not create the keymap
     so that non-header-line mouse bindings actually resize the column
  2. after inserting the header-line, vtable-insert completely
     overwrites the keymap text-property which wipes out the keymap
     setup by vtable--insert-header-line

To reproduce,

  1. emacs -Q
  2. Evaluate the following sexp

      (with-current-buffer (get-buffer-create "asd")
        (erase-buffer)
        (require 'vtable)
        (make-vtable
         :use-header-line nil
         :columns '("One" "Two")
         :objects '((1 2) (3 4) (5 6)))
        (pop-to-buffer (current-buffer)))    
  3. Try to resize the column "Two" ("T" is shown here) by clicking on
     "T" and dragging the pointer.
  4. Witness no column resize.
  5. Now, change :use-header-line to t and try to resize again.
  6. Witness column resize.

The patch below fixes the issue on my end


diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index c4f14d7b4b2..6f04eca3da8 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -544,7 +544,7 @@ vtable-insert
         ;; them).
         (vtable--insert-header-line table widths spacer)
         (add-text-properties start (point)
-                             (list 'keymap vtable-header-line-map
+                             (list ;;'keymap vtable-header-line-map
                                    'rear-nonsticky t
                                    'vtable table))
         (setq start (point))))
@@ -706,24 +706,34 @@ vtable--indicator
 
 (defun vtable--insert-header-line (table widths spacer)
   ;; Insert the header directly into the buffer.
-  (let ((start (point))
-        (divider (vtable-divider table))
-        (cmap (define-keymap
-                "<header-line> <drag-mouse-1>" #'vtable--drag-resize-column
-                "<header-line> <down-mouse-1>" #'ignore))
-        (dmap (define-keymap
-                "<header-line> <drag-mouse-1>"
-                (lambda (e)
-                  (interactive "e")
-                  (vtable--drag-resize-column e t))
-                "<header-line> <down-mouse-1>" #'ignore)))
+  (let* ((start (point))
+         (divider (vtable-divider table))
+         (rev-resize-fun (lambda (e)
+                           (interactive "e")
+                           (vtable--drag-resize-column e t)))
+         (cmap (define-keymap
+                 :parent vtable-header-line-map
+                 "<header-line> <drag-mouse-1>" #'vtable--drag-resize-column
+                 "<header-line> <down-mouse-1>" #'ignore
+                 "<drag-mouse-1>" #'vtable--drag-resize-column
+                 "<down-mouse-1>" #'ignore))
+         (dmap (define-keymap
+                 :parent vtable-header-line-map
+                 "<header-line> <drag-mouse-1>" rev-resize-fun
+                 "<header-line> <down-mouse-1>" #'ignore
+                 "<drag-mouse-1>" rev-resize-fun
+                 "<down-mouse-1>" #'ignore)))
     (seq-do-indexed
      (lambda (column index)
        (let* ((name (propertize
                      (vtable-column-name column)
                      'face (list 'header-line (vtable-face table))
                      'mouse-face 'header-line-highlight
-                     'keymap cmap))
+                     ;; Reverse resizing is more intuitive for the first
+                     ;; column.
+                     'keymap (if (= index 0)
+                                 dmap
+                               cmap)))
               (start (point))
               (indicator (vtable--indicator table index))
               (indicator-width (string-pixel-width indicator))


I also took the liberty to make one other change:

    I use DMAP instead of CMAP for the first column.  Without this
    change, dragging the first column does nothing.  With this change,
    dragging the first column to the left will increase its size.  I
    think this behaviour is more intuitive than doing nothing.

In GNU Emacs 31.0.50 (build 25, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.18.2, Xaw scroll bars) of 2024-11-10 built on astatine
Repository revision: 1704fa4fb4164a15c7e258b922dbba190811d92d
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101014
System Description: Debian GNU/Linux trixie/sid

Configured using:
 'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d
 --without-gconf --without-libsystemd --with-cairo CFLAGS=-g3'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM
XINPUT2 XPM LUCID ZLIB
Important settings:
  value of $LC_MONETARY: ta_IN.UTF-8
  value of $LC_NUMERIC: ta_IN.UTF-8
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
  csv-field-index-mode: t
  hi-lock-mode: t
  gpm-mouse-mode: t
  TeX-PDF-mode: t
  recentf-mode: t
  bug-reference-prog-mode: t
  server-mode: t
  paredit-mode: t
  eros-mode: t
  flymake-mode: t
  pdf-occur-global-minor-mode: t
  minibuffer-depth-indicate-mode: t
  repeat-mode: t
  display-time-mode: t
  display-battery-mode: t
  delete-selection-mode: t
  xterm-mouse-mode: t
  vz/winkey-minor-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  use-hard-newlines: t
  tab-bar-history-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  undelete-frame-mode: t
  minibuffer-regexp-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  abbrev-mode: t

Load-path shadows:
/home/viz/lib/emacs/straight/build/transient/transient hides /home/viz/lib/ports/emacs/lisp/transient
/home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/ports/emacs/lisp/org/ob-awk
/home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/ports/emacs/lisp/org/org-capture
/home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/ports/emacs/lisp/org/ob-sql
/home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/ports/emacs/lisp/org/ol-doi
/home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/ports/emacs/lisp/org/org-plot
/home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/ports/emacs/lisp/org/ob-dot
/home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/ports/emacs/lisp/org/ol-eshell
/home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/ports/emacs/lisp/org/ob-C
/home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/ports/emacs/lisp/org/ob-ref
/home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/ports/emacs/lisp/org/org-list
/home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/ports/emacs/lisp/org/org-mouse
/home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/ports/emacs/lisp/org/ob-haskell
/home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/ports/emacs/lisp/org/ob-plantuml
/home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/ports/emacs/lisp/org/org-keys
/home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/ports/emacs/lisp/org/org-clock
/home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/ports/emacs/lisp/org/ox-html
/home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/ports/emacs/lisp/org/oc-biblatex
/home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/ports/emacs/lisp/org/ob-table
/home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/ports/emacs/lisp/org/ob
/home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/ports/emacs/lisp/org/ol-w3m
/home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/ports/emacs/lisp/org/ob-groovy
/home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/ports/emacs/lisp/org/org-footnote
/home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/ports/emacs/lisp/org/org-entities
/home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/ports/emacs/lisp/org/ob-org
/home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/ports/emacs/lisp/org/org-macs
/home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/ports/emacs/lisp/org/ob-shell
/home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/ports/emacs/lisp/org/ob-R
/home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-lisp
/home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/ports/emacs/lisp/org/ob-js
/home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/ports/emacs/lisp/org/ob-maxima
/home/viz/lib/emacs/straight/build/org/org-element-ast hides /home/viz/lib/ports/emacs/lisp/org/org-element-ast
/home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/ports/emacs/lisp/org/ox-ascii
/home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/ports/emacs/lisp/org/org-persist
/home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/ports/emacs/lisp/org/ox-md
/home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/ports/emacs/lisp/org/org-duration
/home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/ports/emacs/lisp/org/ob-lilypond
/home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/ports/emacs/lisp/org/ob-ruby
/home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/ports/emacs/lisp/org/ob-core
/home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/ports/emacs/lisp/org/ol-mhe
/home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/ports/emacs/lisp/org/ob-ditaa
/home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/ports/emacs/lisp/org/ol-irc
/home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/ports/emacs/lisp/org/ob-fortran
/home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/ports/emacs/lisp/org/org-feed
/home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/ports/emacs/lisp/org/ob-java
/home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/ports/emacs/lisp/org/ox
/home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/ports/emacs/lisp/org/oc-csl
/home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/ports/emacs/lisp/org/ob-exp
/home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/ports/emacs/lisp/org/org-loaddefs
/home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/ports/emacs/lisp/org/ob-scheme
/home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/ports/emacs/lisp/org/ob-tangle
/home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/ports/emacs/lisp/org/ox-koma-letter
/home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/ports/emacs/lisp/org/ob-gnuplot
/home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/ports/emacs/lisp/org/org-crypt
/home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/ports/emacs/lisp/org/org-datetree
/home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/ports/emacs/lisp/org/org-attach
/home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/ports/emacs/lisp/org/ob-julia
/home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/ports/emacs/lisp/org/ob-sqlite
/home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/ports/emacs/lisp/org/org-cycle
/home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/ports/emacs/lisp/org/org-faces
/home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/ports/emacs/lisp/org/org-mobile
/home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/ports/emacs/lisp/org/org-ctags
/home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/ports/emacs/lisp/org/ob-latex
/home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/ports/emacs/lisp/org/ob-matlab
/home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/ports/emacs/lisp/org/ob-sed
/home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/ports/emacs/lisp/org/org-attach-git
/home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/ports/emacs/lisp/org/ob-python
/home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/ports/emacs/lisp/org/ox-icalendar
/home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/ports/emacs/lisp/org/org-tempo
/home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/ports/emacs/lisp/org/ob-screen
/home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/ports/emacs/lisp/org/org-num
/home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/ports/emacs/lisp/org/ob-forth
/home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/ports/emacs/lisp/org/ox-odt
/home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/ports/emacs/lisp/org/ol-bbdb
/home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/ports/emacs/lisp/org/org-table
/home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/ports/emacs/lisp/org/ox-man
/home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/ports/emacs/lisp/org/ox-org
/home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/ports/emacs/lisp/org/ob-comint
/home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/ports/emacs/lisp/org/ob-clojure
/home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/ports/emacs/lisp/org/org-id
/home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/ports/emacs/lisp/org/oc-natbib
/home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/ports/emacs/lisp/org/ox-texinfo
/home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/ports/emacs/lisp/org/org-agenda
/home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/ports/emacs/lisp/org/org-src
/home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-emacs-lisp
/home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/ports/emacs/lisp/org/ob-css
/home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/ports/emacs/lisp/org/ox-latex
/home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/ports/emacs/lisp/org/oc
/home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/ports/emacs/lisp/org/ol
/home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/ports/emacs/lisp/org/org-element
/home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/ports/emacs/lisp/org/org
/home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/ports/emacs/lisp/org/org-goto
/home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/ports/emacs/lisp/org/ob-eval
/home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/ports/emacs/lisp/org/org-habit
/home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/ports/emacs/lisp/org/org-pcomplete
/home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/ports/emacs/lisp/org/ol-eww
/home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/ports/emacs/lisp/org/ob-processing
/home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/ports/emacs/lisp/org/org-timer
/home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/ports/emacs/lisp/org/org-inlinetask
/home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/ports/emacs/lisp/org/ol-bibtex
/home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/ports/emacs/lisp/org/org-fold-core
/home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/ports/emacs/lisp/org/oc-basic
/home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/ports/emacs/lisp/org/ox-publish
/home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/ports/emacs/lisp/org/oc-bibtex
/home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/ports/emacs/lisp/org/org-macro
/home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/ports/emacs/lisp/org/ol-docview
/home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/ports/emacs/lisp/org/org-fold
/home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/ports/emacs/lisp/org/org-lint
/home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/ports/emacs/lisp/org/org-version
/home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/ports/emacs/lisp/org/ob-ocaml
/home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/ports/emacs/lisp/org/ob-sass
/home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/ports/emacs/lisp/org/ob-perl
/home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/ports/emacs/lisp/org/ol-rmail
/home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/ports/emacs/lisp/org/org-protocol
/home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/ports/emacs/lisp/org/ol-info
/home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/ports/emacs/lisp/org/ob-eshell
/home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/ports/emacs/lisp/org/org-refile
/home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/ports/emacs/lisp/org/ob-octave
/home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/ports/emacs/lisp/org/ob-lua
/home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/ports/emacs/lisp/org/ol-gnus
/home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/ports/emacs/lisp/org/ob-makefile
/home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/ports/emacs/lisp/org/org-archive
/home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/ports/emacs/lisp/org/ob-lob
/home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/ports/emacs/lisp/org/ol-man
/home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/ports/emacs/lisp/org/org-compat
/home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/ports/emacs/lisp/org/org-colview
/home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/ports/emacs/lisp/org/org-indent
/home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/ports/emacs/lisp/org/ox-beamer
/home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/ports/emacs/lisp/org/ob-calc

Features:
(shadow emacsbug descr-text csv-mode hi-lock mouse-copy mouse-drag
strokes pixel-scroll cua-base goto-addr artist picture reporter avoid
t-mouse apropos edebug wdired misc string-edit view help-at-pt
math-delimiters tabify org-capture doct gnus-topic msb pcmpl-unix
tramp-cmds latex-mode-expansions latex latex-flymake tex-ispell
tex-style tex face-remap org-pdftools pdf-annot facemenu org-noter
latexenc oc-bibtex image-file image-converter oc-basic org-ql-find
org-ql-completing-read org-ql-search org-ql-view transient ov crm
org-super-agenda ht f s org-ql peg ts dash org-habit org-duration
the-org-mode-expansions embark-org ob-gnuplot ox-odt rng-loc rng-uri
rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-icalendar org-agenda ox-html ox-mathml
org-latex-preview ox-latex table ox-ascii ox-publish ox org-element
org-persist avl-tree ob-fortran ob-python python-el-fgallina-expansions
python ob-calc calc-store calc-trail calc-ext calc calc-loaddefs rect
calc-macs ob-C ob-shell ob-racket cdlatex texmathp org-attach ol-eww eww
vtable url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect
ol-docview doc-view ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi
org-tempo org-id org-refile org-element-ast inline ol-man org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint
org-pcomplete org-list org-footnote org-faces org-entities ob-emacs-lisp
ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys
oc org-loaddefs org-version org-compat org-macs flow-fill avy whitespace
dabbrev cc-mode-expansions cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs etags fileloop generator
dired-aux cl-print shortdoc comp-common help-fns radix-tree gnus-dired
find-dired expand-region text-mode-expansions er-basic-expansions
expand-region-core expand-region-custom mm-archive smerge-mode reveal
display-line-numbers qp f90 cus-start external-completion locate
info-look sh-script smie treesit tramp-cache time-stamp tramp-sh tramp
trampver tramp-integration tramp-message tramp-compat xdg tramp-loaddefs
recentf tree-widget pulse color imenu-xref xref typo misearch
multi-isearch mule-util noutline outline bug-reference flyspell ispell
ecomplete sort gnus-cite mail-extr textsec uni-scripts idna-mapping
ucs-normalize uni-confusable textsec-check gnus-async gnus-bcklg gnus-ml
shell-command+ shell pcomplete network-stream nsm nndraft nnmh nndoc
nnmaildir nnagent nnml cursor-sensor executable vc-backup log-view
log-edit add-log pcvs-util vc diff vc-git diff-mode track-changes
vc-dispatcher nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual
gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig nntp
gnus-cache gnus-sum shr pixel-fill kinsoku url-file svg gnus-group
gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7
nnoo parse-time gnus-spec gnus-int gnus-range message sendmail
yank-media puny rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util
mail-utils range mm-util mail-prsvr server paredit edmacro kmacro eros
checkdoc lisp-mnt flymake project wordel-autoloads mines-autoloads
sokoban-autoloads ement-autoloads svg-lib-autoloads
taxy-magit-section-autoloads magit-section-autoloads taxy-autoloads
persist-autoloads nov-autoloads esxml-autoloads kv-autoloads
transmission-autoloads csv-mode-autoloads lua-mode-autoloads
gnuplot-autoloads go-mode-autoloads racket-mode-autoloads eros-autoloads
comint-mime-autoloads writegood-mode-autoloads embark ffap thingatpt
compat embark-autoloads xeft-autoloads siege-mode-autoloads
paredit-autoloads puni-autoloads expand-region-autoloads
filladapt-autoloads compose org-ql-autoloads transient-autoloads
ov-autoloads org-super-agenda-autoloads ts-autoloads ht-autoloads
f-autoloads s-autoloads dash-autoloads org-pdftools-autoloads
org-noter-autoloads change-env-autoloads math-delimiters-autoloads
doct-autoloads emacs-ob-racket-autoloads valign-autoloads
cdlatex-autoloads tempo bibtex iso8601 time-date auctex-autoloads
tex-site pdf-occur ibuf-ext ibuffer ibuffer-loaddefs tablist advice
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local cedet pdf-isearch
let-alist pdf-misc imenu pdf-tools package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source eieio eieio-core json url-vars compile comint ansi-osc
ansi-color ring cus-edit wid-edit pdf-view password-cache jka-compr
pdf-cache pdf-info tq pdf-util pdf-macs image-mode dired-x dired
dired-loaddefs exif pdf-tools-autoloads tablist-autoloads typo-autoloads
mb-depth repeat visual-fill-autoloads olivetti-autoloads time
format-spec battery filenotify dom tamil99 quail disp-table
lacarte-autoloads shell-command-plus-autoloads delsel xt-mouse cus-load
avy-autoloads icalendar diary-lib diary-loaddefs cal-menu calendar
cal-loaddefs plz warnings icons easy-mmode dired-du-autoloads finder-inf
filecache imenu-xref-autoloads ert map byte-opt ewoc debug backtrace
find-func qrencode-autoloads derived tochemfig-autoloads
chemtable-autoloads molar-mass-autoloads files-x vc-backup-autoloads
skeleton saveplace-pdf-view saveplace bookmark text-property-search pp
saveplace-pdf-view-autoloads dbus xml rx plz-autoloads
inspector-autoloads xr-autoloads info straight-autoloads cl-seq cl-extra
help-mode straight subr-x cl-macs gv cl-loaddefs cl-lib bytecomp
byte-compile pcase vz-nh-theme vz-options-theme rmc iso-transl tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen
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 nadvice seq
simple cl-generic indonesian philippine 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 abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo x-toolkit xinput2 x multi-tty move-toolbar make-network-process
emacs)

Memory information:
((conses 16 2447648 418322) (symbols 48 74965 393)
 (strings 32 486528 39294) (string-bytes 1 19622573)
 (vectors 16 190937) (vector-slots 8 2826291 349707)
 (floats 8 11237 16396) (intervals 56 172480 4407) (buffers 984 108))





^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#74701: 31.0.50; vtable: cannot drag to resize columns when :use-header-line is nil
  2024-12-05 14:31 bug#74701: 31.0.50; vtable: cannot drag to resize columns when :use-header-line is nil Visuwesh
@ 2024-12-21  9:10 ` Eli Zaretskii
  0 siblings, 0 replies; 2+ messages in thread
From: Eli Zaretskii @ 2024-12-21  9:10 UTC (permalink / raw)
  To: Visuwesh, adam; +Cc: 74701

Adam, any comments?

> Cc: Adam Porter <adam@alphapapa.net>
> From: Visuwesh <visuweshm@gmail.com>
> Date: Thu, 05 Dec 2024 20:01:41 +0530
> 
> When creating a vtable with :use-header-line nil (see below), dragging
> the column or the divider to resize the column is impossible because
> 
>   1. the function vtable--insert-header-line does not create the keymap
>      so that non-header-line mouse bindings actually resize the column
>   2. after inserting the header-line, vtable-insert completely
>      overwrites the keymap text-property which wipes out the keymap
>      setup by vtable--insert-header-line
> 
> To reproduce,
> 
>   1. emacs -Q
>   2. Evaluate the following sexp
> 
>       (with-current-buffer (get-buffer-create "asd")
>         (erase-buffer)
>         (require 'vtable)
>         (make-vtable
>          :use-header-line nil
>          :columns '("One" "Two")
>          :objects '((1 2) (3 4) (5 6)))
>         (pop-to-buffer (current-buffer)))    
>   3. Try to resize the column "Two" ("T" is shown here) by clicking on
>      "T" and dragging the pointer.
>   4. Witness no column resize.
>   5. Now, change :use-header-line to t and try to resize again.
>   6. Witness column resize.
> 
> The patch below fixes the issue on my end
> 
> 
> diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
> index c4f14d7b4b2..6f04eca3da8 100644
> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -544,7 +544,7 @@ vtable-insert
>          ;; them).
>          (vtable--insert-header-line table widths spacer)
>          (add-text-properties start (point)
> -                             (list 'keymap vtable-header-line-map
> +                             (list ;;'keymap vtable-header-line-map
>                                     'rear-nonsticky t
>                                     'vtable table))
>          (setq start (point))))
> @@ -706,24 +706,34 @@ vtable--indicator
>  
>  (defun vtable--insert-header-line (table widths spacer)
>    ;; Insert the header directly into the buffer.
> -  (let ((start (point))
> -        (divider (vtable-divider table))
> -        (cmap (define-keymap
> -                "<header-line> <drag-mouse-1>" #'vtable--drag-resize-column
> -                "<header-line> <down-mouse-1>" #'ignore))
> -        (dmap (define-keymap
> -                "<header-line> <drag-mouse-1>"
> -                (lambda (e)
> -                  (interactive "e")
> -                  (vtable--drag-resize-column e t))
> -                "<header-line> <down-mouse-1>" #'ignore)))
> +  (let* ((start (point))
> +         (divider (vtable-divider table))
> +         (rev-resize-fun (lambda (e)
> +                           (interactive "e")
> +                           (vtable--drag-resize-column e t)))
> +         (cmap (define-keymap
> +                 :parent vtable-header-line-map
> +                 "<header-line> <drag-mouse-1>" #'vtable--drag-resize-column
> +                 "<header-line> <down-mouse-1>" #'ignore
> +                 "<drag-mouse-1>" #'vtable--drag-resize-column
> +                 "<down-mouse-1>" #'ignore))
> +         (dmap (define-keymap
> +                 :parent vtable-header-line-map
> +                 "<header-line> <drag-mouse-1>" rev-resize-fun
> +                 "<header-line> <down-mouse-1>" #'ignore
> +                 "<drag-mouse-1>" rev-resize-fun
> +                 "<down-mouse-1>" #'ignore)))
>      (seq-do-indexed
>       (lambda (column index)
>         (let* ((name (propertize
>                       (vtable-column-name column)
>                       'face (list 'header-line (vtable-face table))
>                       'mouse-face 'header-line-highlight
> -                     'keymap cmap))
> +                     ;; Reverse resizing is more intuitive for the first
> +                     ;; column.
> +                     'keymap (if (= index 0)
> +                                 dmap
> +                               cmap)))
>                (start (point))
>                (indicator (vtable--indicator table index))
>                (indicator-width (string-pixel-width indicator))
> 
> 
> I also took the liberty to make one other change:
> 
>     I use DMAP instead of CMAP for the first column.  Without this
>     change, dragging the first column does nothing.  With this change,
>     dragging the first column to the left will increase its size.  I
>     think this behaviour is more intuitive than doing nothing.
> 
> In GNU Emacs 31.0.50 (build 25, x86_64-pc-linux-gnu, X toolkit, cairo
>  version 1.18.2, Xaw scroll bars) of 2024-11-10 built on astatine
> Repository revision: 1704fa4fb4164a15c7e258b922dbba190811d92d
> Repository branch: master
> Windowing system distributor 'The X.Org Foundation', version 11.0.12101014
> System Description: Debian GNU/Linux trixie/sid
> 
> Configured using:
>  'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d
>  --without-gconf --without-libsystemd --with-cairo CFLAGS=-g3'
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
> LCMS2 LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
> SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM
> XINPUT2 XPM LUCID ZLIB
> Important settings:
>   value of $LC_MONETARY: ta_IN.UTF-8
>   value of $LC_NUMERIC: ta_IN.UTF-8
>   value of $LANG: en_GB.UTF-8
>   locale-coding-system: utf-8-unix





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-12-21  9:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-05 14:31 bug#74701: 31.0.50; vtable: cannot drag to resize columns when :use-header-line is nil Visuwesh
2024-12-21  9:10 ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).