GNU bug report logs - #69239
30.0.50; number-at-point and bounds-of-thing-at-point disagree

Previous Next

Package: emacs;

Reported by: Visuwesh <visuweshm <at> gmail.com>

Date: Sun, 18 Feb 2024 18:25:05 UTC

Severity: normal

Found in version 30.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 69239 in the body.
You can then email your comments to 69239 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#69239; Package emacs. (Sun, 18 Feb 2024 18:25:06 GMT) Full text and rfc822 format available.

Acknowledgement sent to Visuwesh <visuweshm <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 18 Feb 2024 18:25:06 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Visuwesh <visuweshm <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.50; number-at-point and bounds-of-thing-at-point disagree
Date: Fri, 16 Feb 2024 17:56:20 +0530
The bounds returned by (bounds-of-thing-at-point 'number) does not match
the bounds of the number returned by number-at-point.  To demonstrate:

    1. emacs -Q
    2. Write any number in the scratch buffer, say 14.6.
    3. With point on the number, say M-: (number-at-point) RET and
       observe 14.6 being returned.
    4. Now say, 

       M-: (let ((x (bounds-of-thing-at-point 'number))) (buffer-substring (car x) (cdr x))) RET

       and observe the incorrect value of 14 being returned.

This is because the 'forward-op' property for 'number' thing is
forward-word which fails in certain modes (not just in Elisp buffers,
but also in LaTeX buffers).  What do you think about a patch like below
that adds an explicit bounds-of-thing-at-point property to 'number'
thing?  One thing to consider is that this patch includes the "0x" or
"#x" prefix for base 16 numbers that number-at-point ignores.  If you
want to neglect it, then I can adjust the patch accordingly.

diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 323d3d1cf6c..fc89331ea8c 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -765,6 +765,9 @@ number-at-point
     (string-to-number
      (buffer-substring (match-beginning 0) (match-end 0))))))
 
+(put 'number 'bounds-of-thing-at-point
+     (lambda ()
+       (and (number-at-point) (cons (match-beginning 0) (match-end 0)))))
 (put 'number 'forward-op 'forward-word)
 (put 'number 'thing-at-point 'number-at-point)
 


In GNU Emacs 30.0.50 (build 42, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.18.0, Xaw scroll bars) of 2024-01-31 built on astatine
Repository revision: c4d16909fa4c30fd5f11bd66de7936790349cb7d
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101011
System Description: Debian GNU/Linux trixie/sid

Configured using:
 'configure --with-sound=alsa --with-x-toolkit=lucid --with-json
 --without-xaw3d --without-gconf --without-libsystemd --with-cairo
 --with-xft'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON 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:
  bug-reference-prog-mode: t
  TeX-PDF-mode: t
  recentf-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
  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/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 bug-reference calc-lang calc-embed preview reporter
desktop frameset tex-buf font-latex tex-mode flyspell ispell ecomplete
tabify timezone org-capture doct gnus-dired help-fns radix-tree msb
dictionary external-completion dictionary-connection typo etags fileloop
imenu-xref display-line-numbers epa-file ement-room-list ement-lib
ement-api ement-structs plz ement-macros taxy-magit-section
magit-section benchmark taxy svg-lib persist flow-fill log-edit add-log
smerge-mode calccomp calc-aent calc-misc calc-arith calc-math calc-alg
calc-menu pcmpl-unix tramp-cmds gnus-cite mm-archive mail-extr
gnus-bcklg qp textsec uni-scripts idna-mapping ucs-normalize
uni-confusable textsec-check gnus-async sort gnus-ml nndraft nnmh
nnmaildir nnagent nnml nnnil gnus-agent gnus-srvr gnus-score score-mode
nnvirtual gnus-msg nntp gnus-cache avy misearch multi-isearch reveal
xref dabbrev misc pulse color icomplete olivetti pdf-sync pdf-outline
pdf-links pdf-history pdf-roll dired-aux shell-command+ network-stream
url-http url-gw nsm url-cache url-auth latex latex-flymake tex-ispell
tex-style tex tramp-cache time-stamp recentf tree-widget do-at-point
mule-util cursor-sensor vc-backup log-view pcvs-util vc diff vc-git
diff-mode vc-dispatcher 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 f-shortdoc shortdoc s org-ql peg ts dash
org-habit org-duration 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
generator ob-fortran ob-python python compat compat-macs ob-calc
calc-store calc-trail calc-ext calc calc-loaddefs rect calc-macs ob-C
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs ob-shell ob-racket async ob-async cdlatex texmathp
org-attach ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info
ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls
dig 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
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 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
sh-script smie treesit executable ob-comint org-pcomplete org-list
org-footnote org-faces org-entities noutline outline 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 server paredit edmacro
kmacro eros checkdoc lisp-mnt flymake project warnings thingatpt
wordel-autoloads mines-autoloads sokoban-autoloads ement-autoloads
svg-lib-autoloads taxy-magit-section-autoloads magit-section-autoloads
taxy-autoloads persist-autoloads plz-autoloads nov-autoloads
esxml-autoloads kv-autoloads transmission-autoloads csv-mode-autoloads
lua-mode-autoloads nix-mode-autoloads gnuplot-autoloads
go-mode-autoloads racket-mode-autoloads eros-autoloads
writegood-mode-autoloads do-at-point-autoloads siege-mode-autoloads
paredit-autoloads puni-autoloads expand-region-autoloads
filladapt-autoloads compose org-ql-autoloads transient-autoloads
peg-autoloads ov-autoloads org-super-agenda-autoloads ts-autoloads
ht-autoloads f-autoloads s-autoloads dash-autoloads scroll-other-window
org-pdftools-autoloads org-noter-autoloads change-env-autoloads
math-delimiters-autoloads doct-autoloads ob-async-autoloads
async-autoloads emacs-ob-racket-autoloads valign-autoloads
cdlatex-autoloads tempo bibtex 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 url-vars compile cus-edit
wid-edit pdf-view 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 battery filenotify dom tamil99 quail disp-table
lacarte-autoloads shell-command-plus-autoloads icons delsel easy-mmode
xt-mouse cus-load avy-autoloads icalendar diary-lib diary-loaddefs
cal-menu calendar cal-loaddefs dired-du-autoloads finder-inf filecache
imenu-xref-autoloads ert ewoc debug backtrace find-func
qrencode-autoloads derived tochemfig-autoloads chemtable-autoloads
molar-mass-autoloads vc-backup-autoloads compat-autoloads skeleton
saveplace-pdf-view saveplace tramp-sh tramp trampver tramp-integration
files-x tramp-message tramp-compat xdg shell pcomplete comint ansi-osc
ring parse-time iso8601 time-date format-spec auth-source eieio
eieio-core password-cache json map byte-opt ansi-color tramp-loaddefs
bookmark text-property-search pp saveplace-pdf-view-autoloads dbus xml
rx inspector-autoloads xr-autoloads org-mode-autoloads pcase
straight-autoloads cl-seq info cl-extra help-mode straight subr-x
cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile 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 2513315 412071) (symbols 48 59758 89)
 (strings 32 331770 67417) (string-bytes 1 53668308)
 (vectors 16 142741) (vector-slots 8 2164856 283096)
 (floats 8 121532 13469) (intervals 56 114483 1273) (buffers 976 81))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69239; Package emacs. (Sat, 24 Feb 2024 09:19:02 GMT) Full text and rfc822 format available.

Message #8 received at 69239 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Visuwesh <visuweshm <at> gmail.com>
Cc: 69239 <at> debbugs.gnu.org
Subject: Re: bug#69239: 30.0.50;
 number-at-point and bounds-of-thing-at-point disagree
Date: Sat, 24 Feb 2024 11:17:20 +0200
> From: Visuwesh <visuweshm <at> gmail.com>
> Date: Fri, 16 Feb 2024 17:56:20 +0530
> 
> 
> The bounds returned by (bounds-of-thing-at-point 'number) does not match
> the bounds of the number returned by number-at-point.  To demonstrate:
> 
>     1. emacs -Q
>     2. Write any number in the scratch buffer, say 14.6.
>     3. With point on the number, say M-: (number-at-point) RET and
>        observe 14.6 being returned.
>     4. Now say, 
> 
>        M-: (let ((x (bounds-of-thing-at-point 'number))) (buffer-substring (car x) (cdr x))) RET
> 
>        and observe the incorrect value of 14 being returned.
> 
> This is because the 'forward-op' property for 'number' thing is
> forward-word which fails in certain modes (not just in Elisp buffers,
> but also in LaTeX buffers).  What do you think about a patch like below
> that adds an explicit bounds-of-thing-at-point property to 'number'
> thing?

We could perhaps add something like this, but I don't think
bounds-of-thing-at-point can call THING-at-point for some THING,
because thing-at-point will cal bounds-of-thing-at-point, so this
could lead to an infinite recursion, right?  So the implementation
will need to change not to call number-at-point.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69239; Package emacs. (Sun, 25 Feb 2024 04:44:02 GMT) Full text and rfc822 format available.

Message #11 received at 69239 <at> debbugs.gnu.org (full text, mbox):

From: Visuwesh <visuweshm <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 69239 <at> debbugs.gnu.org
Subject: Re: bug#69239: 30.0.50; number-at-point and
 bounds-of-thing-at-point disagree
Date: Sun, 25 Feb 2024 10:12:10 +0530
[சனி பிப்ரவரி 24, 2024] Eli Zaretskii wrote:

>> From: Visuwesh <visuweshm <at> gmail.com>
>> Date: Fri, 16 Feb 2024 17:56:20 +0530
>> 
>> 
>> The bounds returned by (bounds-of-thing-at-point 'number) does not match
>> the bounds of the number returned by number-at-point.  To demonstrate:
>> 
>>     1. emacs -Q
>>     2. Write any number in the scratch buffer, say 14.6.
>>     3. With point on the number, say M-: (number-at-point) RET and
>>        observe 14.6 being returned.
>>     4. Now say, 
>> 
>>        M-: (let ((x (bounds-of-thing-at-point 'number))) (buffer-substring (car x) (cdr x))) RET
>> 
>>        and observe the incorrect value of 14 being returned.
>> 
>> This is because the 'forward-op' property for 'number' thing is
>> forward-word which fails in certain modes (not just in Elisp buffers,
>> but also in LaTeX buffers).  What do you think about a patch like below
>> that adds an explicit bounds-of-thing-at-point property to 'number'
>> thing?
>
> We could perhaps add something like this, but I don't think
> bounds-of-thing-at-point can call THING-at-point for some THING,
> because thing-at-point will cal bounds-of-thing-at-point, so this
> could lead to an infinite recursion, right?

Looking at the definition of thing-at-point, it checks if THING's symbol
property 'thing-at-point is non-nil first before falling back to using
bounds-of-thing-at-point for THING.

         (cond
          ((let ((alist thing-at-point-provider-alist)
                 elt result)
             ...
             result))
          ((get thing 'thing-at-point)                      <<<<<<<
           (funcall (get thing 'thing-at-point)))
          (t
           (let ((bounds (bounds-of-thing-at-point thing))) <<<<<<<
             (when bounds
               (buffer-substring (car bounds) (cdr bounds))))))

Since number already has the property 'thing-at-point defined, we should
be fine with using number-at-point in bounds-of-thing-at-point function
for number.

> So the implementation will need to change not to call number-at-point.

But if you want to be on the safer side, then I can write a patch that
doesn't use number-at-point.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69239; Package emacs. (Sun, 25 Feb 2024 07:11:02 GMT) Full text and rfc822 format available.

Message #14 received at 69239 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Visuwesh <visuweshm <at> gmail.com>
Cc: 69239 <at> debbugs.gnu.org
Subject: Re: bug#69239: 30.0.50; number-at-point and
 bounds-of-thing-at-point disagree
Date: Sun, 25 Feb 2024 08:38:34 +0200
> From: Visuwesh <visuweshm <at> gmail.com>
> Cc: 69239 <at> debbugs.gnu.org
> Date: Sun, 25 Feb 2024 10:12:10 +0530
> 
> [சனி பிப்ரவரி 24, 2024] Eli Zaretskii wrote:
> 
> > We could perhaps add something like this, but I don't think
> > bounds-of-thing-at-point can call THING-at-point for some THING,
> > because thing-at-point will cal bounds-of-thing-at-point, so this
> > could lead to an infinite recursion, right?
> 
> Looking at the definition of thing-at-point, it checks if THING's symbol
> property 'thing-at-point is non-nil first before falling back to using
> bounds-of-thing-at-point for THING.

I know, but the code clearly tells us that bounds-of-thing-at-point is
a lower-level primitive than thing-at-point, so the former should not
call the latter.

> But if you want to be on the safer side, then I can write a patch that
> doesn't use number-at-point.

Yes, please.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69239; Package emacs. (Sat, 09 Mar 2024 09:50:01 GMT) Full text and rfc822 format available.

Message #17 received at 69239 <at> debbugs.gnu.org (full text, mbox):

From: Visuwesh <visuweshm <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 69239 <at> debbugs.gnu.org
Subject: Re: bug#69239: 30.0.50; number-at-point and
 bounds-of-thing-at-point disagree
Date: Sat, 09 Mar 2024 15:18:03 +0530
[Message part 1 (text/plain, inline)]
[ஞாயிறு பிப்ரவரி 25, 2024] Eli Zaretskii wrote:

>> But if you want to be on the safer side, then I can write a patch that
>> doesn't use number-at-point.
>
> Yes, please.
>
> Thanks.

Sorry for the delay, life had me busy.  Please find attached patch.

[0001-Add-bounds-of-thing-at-point-property-for-number.patch (text/x-diff, attachment)]

Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Thu, 14 Mar 2024 09:43:02 GMT) Full text and rfc822 format available.

Notification sent to Visuwesh <visuweshm <at> gmail.com>:
bug acknowledged by developer. (Thu, 14 Mar 2024 09:43:02 GMT) Full text and rfc822 format available.

Message #22 received at 69239-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Visuwesh <visuweshm <at> gmail.com>
Cc: 69239-done <at> debbugs.gnu.org
Subject: Re: bug#69239: 30.0.50; number-at-point and
 bounds-of-thing-at-point disagree
Date: Thu, 14 Mar 2024 11:42:13 +0200
> From: Visuwesh <visuweshm <at> gmail.com>
> Cc: 69239 <at> debbugs.gnu.org
> Date: Sat, 09 Mar 2024 15:18:03 +0530
> 
> [ஞாயிறு பிப்ரவரி 25, 2024] Eli Zaretskii wrote:
> 
> >> But if you want to be on the safer side, then I can write a patch that
> >> doesn't use number-at-point.
> >
> > Yes, please.
> >
> > Thanks.
> 
> Sorry for the delay, life had me busy.  Please find attached patch.

Thanks, installed on master, and closing the bug.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 11 Apr 2024 11:24:21 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 69 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.