unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes
@ 2013-06-25 18:34 Stephen Berman
  2013-06-26 23:39 ` Juri Linkov
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Berman @ 2013-06-25 18:34 UTC (permalink / raw)
  To: 14717

0. emacs -Q
1. Type `C-h i m Elisp RET m Using Interactive RET TAB TAB TAB' to put
   point on the left parent of the reference mark for footnote (1) in
   this node.
2. Type RET, expecting to jump to the footnote, but instead:
=> user-error: No such node or anchor: It may be a string; its contents
are a sequence of elements

The reason is that in Info-try-follow-nearest-node the search for a node
name succeeds, so it never gets to the footnote search, but the matching
string is not a node name, so user-error is signalled.  The following
patch makes the footnote search and hence jumping to the footnote in
that node succeed, but I'll defer to the judgment of the Info or regexp
gurus as to whether it's the best fix.

=== modified file 'lisp/info.el'
*** lisp/info.el	2013-05-27 22:42:11 +0000
--- lisp/info.el	2013-06-25 18:24:56 +0000
***************
*** 3870,3892 ****
       ((setq node (Info-get-token (point) "\\*note[ \n\t]+"
  				 "\\*note[ \n\t]+\\([^:]*\\):\\(:\\|[ \n\t]*(\\)?"))
        (Info-follow-reference node fork))
-      ;; menu item: node name
-      ((setq node (Info-get-token (point) "\\* +" "\\* +\\([^:]*\\)::"))
-       (Info-goto-node node fork))
-      ;; menu item: node name or index entry
-      ((Info-get-token (point) "\\* +" "\\* +\\(.*\\): ")
-       (beginning-of-line)
-       (forward-char 2)
-       (setq node (Info-extract-menu-node-name nil (Info-index-node)))
-       (Info-goto-node node fork))
-      ((setq node (Info-get-token (point) "Up: " "Up: \\([^,\n\t]*\\)"))
-       (Info-goto-node node fork))
-      ((setq node (Info-get-token (point) "Next: " "Next: \\([^,\n\t]*\\)"))
-       (Info-goto-node node fork))
-      ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
-       (Info-goto-node "Top" fork))
-      ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
-       (Info-goto-node node fork))
       ;; footnote
       ((setq node (Info-get-token (point) "(" "\\(([0-9]+)\\)"))
        (let ((old-point (point)) new-point)
--- 3870,3875 ----
***************
*** 3904,3910 ****
  	    (progn
  	      (goto-char new-point)
  	      (setq node t))
! 	  (setq node nil)))))
      node))
  
  (defun Info-mouse-follow-link (click)
--- 3887,3910 ----
  	    (progn
  	      (goto-char new-point)
  	      (setq node t))
! 	  (setq node nil))))
!      ;; menu item: node name
!      ((setq node (Info-get-token (point) "\\* +" "\\* +\\([^:]*\\)::"))
!       (Info-goto-node node fork))
!      ;; menu item: node name or index entry
!      ((Info-get-token (point) "\\* +" "\\* +\\(.*\\): ")
!       (beginning-of-line)
!       (forward-char 2)
!       (setq node (Info-extract-menu-node-name nil (Info-index-node)))
!       (Info-goto-node node fork))
!      ((setq node (Info-get-token (point) "Up: " "Up: \\([^,\n\t]*\\)"))
!       (Info-goto-node node fork))
!      ((setq node (Info-get-token (point) "Next: " "Next: \\([^,\n\t]*\\)"))
!       (Info-goto-node node fork))
!      ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
!       (Info-goto-node "Top" fork))
!      ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
!       (Info-goto-node node fork)))
      node))
  
  (defun Info-mouse-follow-link (click)


In GNU Emacs 24.3.50.2 (x86_64-suse-linux-gnu, GTK+ Version 3.4.4)
 of 2013-06-25 on rosalinde
Bzr revision: 113175 lekktu@gmail.com-20130625172019-xiu7eowuwtknvz39
Windowing system distributor `The X.Org Foundation', version 11.0.11203000
System Description:	openSUSE 12.2 (x86_64)

Configured using:
 `configure --without-toolkit-scroll-bars CFLAGS=-g3 -O0'

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=local
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t





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

* bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes
  2013-06-25 18:34 bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes Stephen Berman
@ 2013-06-26 23:39 ` Juri Linkov
  2013-06-27  9:37   ` Stephen Berman
  0 siblings, 1 reply; 4+ messages in thread
From: Juri Linkov @ 2013-06-26 23:39 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 14717

> 0. emacs -Q
> 1. Type `C-h i m Elisp RET m Using Interactive RET TAB TAB TAB' to put
>    point on the left parent of the reference mark for footnote (1) in
>    this node.
> 2. Type RET, expecting to jump to the footnote, but instead:
> => user-error: No such node or anchor: It may be a string; its contents
> are a sequence of elements
>
> The following patch makes the footnote search and
> hence jumping to the footnote in that node succeed

Thanks, your patch correctly fixes the bug, I recommend to commit it.

BTW, if you are interested what I'm trying to do in bug#14670
where I renamed the text property of footnotes from `link' to `shr-url'
is to support shr-url links in Info.  The value of the text properly
`shr-url' is the target of the link.  The problem is how to address
a footnote?  Maybe add a function that finds a footnote.  But I'm afraid
that supporting an arbitrary function on the text properly `shr-url'
is too unsafe.  So `shr-url' should contain only a string.  The question
is in what format to specify a link to a footnote.  Currently it has
the value `t'.  Perhaps as a string it could contain a line number
of the footnote like "(elisp) Using Interactive (line 42)".





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

* bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes
  2013-06-26 23:39 ` Juri Linkov
@ 2013-06-27  9:37   ` Stephen Berman
  2013-06-28 21:50     ` Juri Linkov
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Berman @ 2013-06-27  9:37 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 14717-done

On Thu, 27 Jun 2013 02:39:07 +0300 Juri Linkov <juri@jurta.org> wrote:

>> 0. emacs -Q
>> 1. Type `C-h i m Elisp RET m Using Interactive RET TAB TAB TAB' to put
>>    point on the left parent of the reference mark for footnote (1) in
>>    this node.
>> 2. Type RET, expecting to jump to the footnote, but instead:
>> => user-error: No such node or anchor: It may be a string; its contents
>> are a sequence of elements
>>
>> The following patch makes the footnote search and
>> hence jumping to the footnote in that node succeed
>
> Thanks, your patch correctly fixes the bug, 

Thanks for confirming.

>                                             I recommend to commit it.

Done and closing the bug.

> BTW, if you are interested what I'm trying to do in bug#14670
> where I renamed the text property of footnotes from `link' to `shr-url'
> is to support shr-url links in Info.  The value of the text properly
> `shr-url' is the target of the link.  The problem is how to address
> a footnote?  Maybe add a function that finds a footnote.  But I'm afraid
> that supporting an arbitrary function on the text properly `shr-url'
> is too unsafe.  So `shr-url' should contain only a string.  The question
> is in what format to specify a link to a footnote.  Currently it has
> the value `t'.  Perhaps as a string it could contain a line number
> of the footnote like "(elisp) Using Interactive (line 42)".

Would that mean the link would have to be manually updated whenever the
line number of the footnote in the file changes?  If so, it seems
error-prone.  But I don't know the implementation, maybe that's not an
issue.  Otherwise, seems like an interesting idea.

Steve Berman





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

* bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes
  2013-06-27  9:37   ` Stephen Berman
@ 2013-06-28 21:50     ` Juri Linkov
  0 siblings, 0 replies; 4+ messages in thread
From: Juri Linkov @ 2013-06-28 21:50 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 14717

>> BTW, if you are interested what I'm trying to do in bug#14670
>> where I renamed the text property of footnotes from `link' to `shr-url'
>> is to support shr-url links in Info.  The value of the text properly
>> `shr-url' is the target of the link.  The problem is how to address
>> a footnote?  Maybe add a function that finds a footnote.  But I'm afraid
>> that supporting an arbitrary function on the text properly `shr-url'
>> is too unsafe.  So `shr-url' should contain only a string.  The question
>> is in what format to specify a link to a footnote.  Currently it has
>> the value `t'.  Perhaps as a string it could contain a line number
>> of the footnote like "(elisp) Using Interactive (line 42)".
>
> Would that mean the link would have to be manually updated whenever the
> line number of the footnote in the file changes?  If so, it seems
> error-prone.  But I don't know the implementation, maybe that's not an
> issue.  Otherwise, seems like an interesting idea.

`Info-fontify-node' could calculate the line number dynamically
before putting it to the text property `link', but since I have
no idea in what format to put line numbers in links, I'll leave
it unchanged for now.

The main point for bug#14670 is to put a new condition
that checks general links to `Info-try-follow-nearest-node'
either after checking for footnotes, or before checking
for footnotes but with an additional condition

  `(not (eq node t))'

because for footnotes `Info-fontify-node' puts the text property `link'
with the value `t' that should be skipped when the current link
is a link to footnote and not a general link, so another existing
`cond' branch will check whether text at point contains a link for footnote.
I see no problems for footnotes after adding processing of general links
with this patch:

=== modified file 'lisp/info.el'
--- lisp/info.el	2013-06-27 09:20:04 +0000
+++ lisp/info.el	2013-06-27 23:31:27 +0000
@@ -3863,6 +3919,8 @@ (defun Info-try-follow-nearest-node (&op
 If FORK is non-nil, it is passed to `Info-goto-node'."
   (let (node)
     (cond
+     ((and (setq node (get-text-property (point) 'link)) (not (eq node t)))
+      (Info-goto-node node fork))
      ((setq node (Info-get-token (point) "[hf]t?tps?://"
 				 "\\([hf]t?tps?://[^ \t\n\"`({<>})']+\\)"))
       (browse-url node)





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

end of thread, other threads:[~2013-06-28 21:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-25 18:34 bug#14717: 24.3.50; Info-try-follow-nearest-node misses some footnotes Stephen Berman
2013-06-26 23:39 ` Juri Linkov
2013-06-27  9:37   ` Stephen Berman
2013-06-28 21:50     ` Juri Linkov

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