unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
@ 2011-05-07 15:30 Drew Adams
  2011-05-07 15:34 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2)new fns Drew Adams
  2014-02-09  6:45 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Lars Ingebrigtsen
  0 siblings, 2 replies; 14+ messages in thread
From: Drew Adams @ 2011-05-07 15:30 UTC (permalink / raw)
  To: 8634


`number-at-point' is defined like this:

(defun number-at-point ()
  "Return the number at point, or nil if none is found."
  (form-at-point 'sexp 'numberp))

That uses `read-from-string' for the sexp at point, and testing whether the
result is `numberp'.

That's fine, I guess, but it means that with buffer text such as ?A or ?\A-\^@
you get a non-nil result: the character value (wholenump) for ?A, which is 65,
and 4194304, respectively.  If you are depending on code to find _numerals_ in
text and return their numeric values then this is not what you want.  In that
case, you want a function that returns nil when point is not on a numeral.

The current behavior could admittedly be useful sometimes, but:

1. This should be mentioned in the doc string, as it's hardly what an uninformed
user would expect, especially a newbie who doesn't yet know Emacs's char
representation (`?.') and the fact that, for Emacs, chars are numbers.  This
behavior is not obvious, given the current doc and function name.

2. It might not be what the user or calling code really _wants_ in many (most?)
cases.

It's no doubt too late to change the name (e.g. to something like
`number-or-char-at-point').  Some existing code probably depends on the current
behavior.

But it's not too late to add functions that do what many people might expect:
return the number represented by the numeral at point, or nil if there is no
numeral at point.

Here are two functions that could be added.  Whether you add them or not, please
do mention the full behavior (with the gotcha) in the `number-at-point' doc
string.

(defun number-at-point-decimal ()
  "Return the number represented by the decimal numeral at point.
Return nil if none is found."
  (let ((strg  (thing-at-point 'sexp)))
    (and (stringp strg)        
         (if (fboundp 'string-match-p)
             (string-match-p "\\`[0-9]+\\'" strg)
           (string-match "\\`[0-9]+\\'" strg))
         (string-to-number strg))))

(defun number-at-point-hex ()
  "Return the number represented by the hex numeral at point.
Return nil if none is found."
  (let ((strg  (thing-at-point 'sexp)))
    (and (stringp strg)
         (if (fboundp 'string-match-p)
             (string-match-p "\\`[0-9a-fA-F]+\\'" strg)
           (string-match "\\`[0-9a-fA-F]+\\'" strg))
         (string-to-number strg 16))))
 

In GNU Emacs 24.0.50.1 (i386-mingw-nt5.1.2600)
 of 2011-04-25 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (4.5) --no-opt --cflags
-Ic:/imagesupport/include'
 






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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2)new fns
  2011-05-07 15:30 bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Drew Adams
@ 2011-05-07 15:34 ` Drew Adams
  2014-02-09  6:45 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Lars Ingebrigtsen
  1 sibling, 0 replies; 14+ messages in thread
From: Drew Adams @ 2011-05-07 15:34 UTC (permalink / raw)
  To: 8634

>          (if (fboundp 'string-match-p)
>              (string-match-p "\\`[0-9a-fA-F]+\\'" strg)
>            (string-match "\\`[0-9a-fA-F]+\\'" strg))

(Obviously, vanilla Emacs can just use `string-match-p', since it is defined.)






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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2011-05-07 15:30 bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Drew Adams
  2011-05-07 15:34 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2)new fns Drew Adams
@ 2014-02-09  6:45 ` Lars Ingebrigtsen
  2014-02-09 16:17   ` Eli Zaretskii
  1 sibling, 1 reply; 14+ messages in thread
From: Lars Ingebrigtsen @ 2014-02-09  6:45 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8634

"Drew Adams" <drew.adams@oracle.com> writes:

> `number-at-point' is defined like this:
>
> (defun number-at-point ()
>   "Return the number at point, or nil if none is found."
>   (form-at-point 'sexp 'numberp))
>
> That uses `read-from-string' for the sexp at point, and testing whether the
> result is `numberp'.
>
> That's fine, I guess, but it means that with buffer text such as ?A or ?\A-\^@
> you get a non-nil result: the character value (wholenump) for ?A, which is 65,
> and 4194304, respectively.  If you are depending on code to find _numerals_ in
> text and return their numeric values then this is not what you want.  In that
> case, you want a function that returns nil when point is not on a numeral.

Looks like this is fixed now.  Closing.  Please reopen if you're still
seeing this.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-09  6:45 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Lars Ingebrigtsen
@ 2014-02-09 16:17   ` Eli Zaretskii
  2014-02-10  1:04     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2014-02-09 16:17 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 8634

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Sat, 08 Feb 2014 22:45:02 -0800
> Cc: 8634@debbugs.gnu.org
> 
> "Drew Adams" <drew.adams@oracle.com> writes:
> 
> > `number-at-point' is defined like this:
> >
> > (defun number-at-point ()
> >   "Return the number at point, or nil if none is found."
> >   (form-at-point 'sexp 'numberp))
> >
> > That uses `read-from-string' for the sexp at point, and testing whether the
> > result is `numberp'.
> >
> > That's fine, I guess, but it means that with buffer text such as ?A or ?\A-\^@
> > you get a non-nil result: the character value (wholenump) for ?A, which is 65,
> > and 4194304, respectively.  If you are depending on code to find _numerals_ in
> > text and return their numeric values then this is not what you want.  In that
> > case, you want a function that returns nil when point is not on a numeral.
> 
> Looks like this is fixed now.

Are you saying that "M-: (number-at-point) RET" with point at ?A says
"nil"?





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-09 16:17   ` Eli Zaretskii
@ 2014-02-10  1:04     ` Lars Ingebrigtsen
  2014-02-10  1:20       ` Drew Adams
  2014-02-10  3:41       ` Eli Zaretskii
  0 siblings, 2 replies; 14+ messages in thread
From: Lars Ingebrigtsen @ 2014-02-10  1:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 8634

Eli Zaretskii <eliz@gnu.org> writes:

> Are you saying that "M-: (number-at-point) RET" with point at ?A says
> "nil"?

Yes.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  1:04     ` Lars Ingebrigtsen
@ 2014-02-10  1:20       ` Drew Adams
  2014-02-10  2:20         ` Lars Ingebrigtsen
  2014-02-10  3:41       ` Eli Zaretskii
  1 sibling, 1 reply; 14+ messages in thread
From: Drew Adams @ 2014-02-10  1:20 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Eli Zaretskii; +Cc: 8634

> > Are you saying that "M-: (number-at-point) RET" with point at ?A
> > says "nil"?
> 
> Yes.

I don't see that, in a build from 2014-02-07.  Lars, are you sure
you put point on the `?' in the text `?A', and not just on an
isolated `A' in the text?  This is about reading character
literals.





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  1:20       ` Drew Adams
@ 2014-02-10  2:20         ` Lars Ingebrigtsen
  2014-02-10  3:20           ` Drew Adams
  0 siblings, 1 reply; 14+ messages in thread
From: Lars Ingebrigtsen @ 2014-02-10  2:20 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8634

Drew Adams <drew.adams@oracle.com> writes:

> I don't see that, in a build from 2014-02-07.  Lars, are you sure
> you put point on the `?' in the text `?A', and not just on an
> isolated `A' in the text?  This is about reading character
> literals.

Yeah, I put point on the ? in ?A, say M-: (number-at-point), and Emacs
says "nil".

This is on Fedora 19.

But I take it that that's not what you and Eli are seeing?  I'll reopen
the bug.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  2:20         ` Lars Ingebrigtsen
@ 2014-02-10  3:20           ` Drew Adams
  2014-02-10  3:59             ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Drew Adams @ 2014-02-10  3:20 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 8634

> > I don't see that, in a build from 2014-02-07.  Lars, are you sure
> > you put point on the `?' in the text `?A', and not just on an
> > isolated `A' in the text?  This is about reading character
> > literals.
> 
> Yeah, I put point on the ? in ?A, say M-: (number-at-point), and
> Emacs says "nil".

OK, thanks for double-checking.  Sounds like it might be a Windows
bug.

> This is on Fedora 19.
> But I take it that that's not what you and Eli are seeing?  I'll
> reopen the bug.

It's not what I see, at least.  Thx.





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  1:04     ` Lars Ingebrigtsen
  2014-02-10  1:20       ` Drew Adams
@ 2014-02-10  3:41       ` Eli Zaretskii
  2014-02-10  3:59         ` Lars Ingebrigtsen
  1 sibling, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2014-02-10  3:41 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 8634

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: drew.adams@oracle.com,  8634@debbugs.gnu.org
> Date: Sun, 09 Feb 2014 17:04:57 -0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Are you saying that "M-: (number-at-point) RET" with point at ?A says
> > "nil"?
> 
> Yes.

Then we must be using a very different Emacs, or maybe the recipe is
not what I think it is.  For me, it still says "65", FWIW.





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  3:41       ` Eli Zaretskii
@ 2014-02-10  3:59         ` Lars Ingebrigtsen
  2014-02-10  4:06           ` Drew Adams
  0 siblings, 1 reply; 14+ messages in thread
From: Lars Ingebrigtsen @ 2014-02-10  3:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 8634

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Lars Ingebrigtsen <larsi@gnus.org>
>> Cc: drew.adams@oracle.com,  8634@debbugs.gnu.org
>> Date: Sun, 09 Feb 2014 17:04:57 -0800
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> > Are you saying that "M-: (number-at-point) RET" with point at ?A says
>> > "nil"?
>> 
>> Yes.
>
> Then we must be using a very different Emacs, or maybe the recipe is
> not what I think it is.  For me, it still says "65", FWIW.

I just tried saying the same in the *scratch* buffer, and there it
returns 65!

Here in the Message buffer it returns nil.  It does in a
fundamental-mode buffer, too...

----

number-at-point is an autoloaded compiled Lisp function in
`thingatpt.el'.

(number-at-point)

Return the number at point, or nil if none is found.


-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  3:20           ` Drew Adams
@ 2014-02-10  3:59             ` Eli Zaretskii
  0 siblings, 0 replies; 14+ messages in thread
From: Eli Zaretskii @ 2014-02-10  3:59 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8634, larsi

> Date: Sun, 9 Feb 2014 19:20:10 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: Eli Zaretskii <eliz@gnu.org>, 8634@debbugs.gnu.org
> 
> > > I don't see that, in a build from 2014-02-07.  Lars, are you sure
> > > you put point on the `?' in the text `?A', and not just on an
> > > isolated `A' in the text?  This is about reading character
> > > literals.
> > 
> > Yeah, I put point on the ? in ?A, say M-: (number-at-point), and
> > Emacs says "nil".
> 
> OK, thanks for double-checking.  Sounds like it might be a Windows
> bug.

No, it's not Windows specific, because I see this on this machine:

  Linux fencepost.gnu.org 2.6.32-48-server #1trisquel3 SMP Mon Jun 17 20:00:36 UTC 2013 x86_64 GNU/Linux





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  3:59         ` Lars Ingebrigtsen
@ 2014-02-10  4:06           ` Drew Adams
  2014-02-10 14:27             ` Nicolas Richard
  0 siblings, 1 reply; 14+ messages in thread
From: Drew Adams @ 2014-02-10  4:06 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Eli Zaretskii; +Cc: 8634

> I just tried saying the same in the *scratch* buffer, and there it
> returns 65!
> 
> Here in the Message buffer it returns nil.  It does in a
> fundamental-mode buffer, too...

Sounds like we might be getting somewhere now.  Something in
certain buffers causes `number-at-point' to do the wrong thing.





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10  4:06           ` Drew Adams
@ 2014-02-10 14:27             ` Nicolas Richard
  2016-04-28 10:38               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 14+ messages in thread
From: Nicolas Richard @ 2014-02-10 14:27 UTC (permalink / raw)
  To: Drew Adams; +Cc: 8634, Lars Ingebrigtsen

Drew Adams <drew.adams@oracle.com> writes:

>> I just tried saying the same in the *scratch* buffer, and there it
>> returns 65!
>> 
>> Here in the Message buffer it returns nil.  It does in a
>> fundamental-mode buffer, too...
>
> Sounds like we might be getting somewhere now.  Something in
> certain buffers causes `number-at-point' to do the wrong thing.

That is because number-at-point uses the 'sexp at point, which depends
on the syntax table.

The following definition seems to fix that dependance (500 is arbitrary
choice -- the same arbitrary choice as for emails) :

diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 9a40049..7b4cf56 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -581,7 +581,10 @@ Signal an error if the entire string was not used."
 ;;;###autoload
 (defun number-at-point ()
   "Return the number at point, or nil if none is found."
-  (form-at-point 'sexp 'numberp))
+  (when (thing-at-point-looking-at "-?[0-9]+\\.?[0-9]*" 500)
+    (string-to-number
+     (buffer-substring (match-beginning 0) (match-end 0)))))
+
 (put 'number 'thing-at-point 'number-at-point)
 ;;;###autoload
 (defun list-at-point ()


-- 
Nico.





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

* bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns
  2014-02-10 14:27             ` Nicolas Richard
@ 2016-04-28 10:38               ` Lars Ingebrigtsen
  0 siblings, 0 replies; 14+ messages in thread
From: Lars Ingebrigtsen @ 2016-04-28 10:38 UTC (permalink / raw)
  To: Nicolas Richard; +Cc: 8634

Nicolas Richard <theonewiththeevillook@yahoo.fr> writes:

> The following definition seems to fix that dependance (500 is arbitrary
> choice -- the same arbitrary choice as for emails) :
>
> diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
> index 9a40049..7b4cf56 100644
> --- a/lisp/thingatpt.el
> +++ b/lisp/thingatpt.el
> @@ -581,7 +581,10 @@ Signal an error if the entire string was not used."
>  ;;;###autoload
>  (defun number-at-point ()
>    "Return the number at point, or nil if none is found."
> -  (form-at-point 'sexp 'numberp))
> +  (when (thing-at-point-looking-at "-?[0-9]+\\.?[0-9]*" 500)
> +    (string-to-number
> +     (buffer-substring (match-beginning 0) (match-end 0)))))
> +
>  (put 'number 'thing-at-point 'number-at-point)
>  ;;;###autoload
>  (defun list-at-point ()

Thanks; applied to the trunk.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

end of thread, other threads:[~2016-04-28 10:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-07 15:30 bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Drew Adams
2011-05-07 15:34 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2)new fns Drew Adams
2014-02-09  6:45 ` bug#8634: 24.0.50; `number-at-point' returns char value for `?' constructs - 1) doc, 2) new fns Lars Ingebrigtsen
2014-02-09 16:17   ` Eli Zaretskii
2014-02-10  1:04     ` Lars Ingebrigtsen
2014-02-10  1:20       ` Drew Adams
2014-02-10  2:20         ` Lars Ingebrigtsen
2014-02-10  3:20           ` Drew Adams
2014-02-10  3:59             ` Eli Zaretskii
2014-02-10  3:41       ` Eli Zaretskii
2014-02-10  3:59         ` Lars Ingebrigtsen
2014-02-10  4:06           ` Drew Adams
2014-02-10 14:27             ` Nicolas Richard
2016-04-28 10:38               ` Lars Ingebrigtsen

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).