emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: emacs18@gmail.com (Richard Y. Kim)
To: Emacs-orgmode@gnu.org
Subject: Re: patch to add new link type "infoi" that leverages Info-index command
Date: Sat, 15 Nov 2014 10:46:19 -0800	[thread overview]
Message-ID: <qtm4mu05mkk.fsf@gmail.com> (raw)
In-Reply-To: <87y4rjqusd.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Mon, 10 Nov 2014 10:17:22 +0100")

[-- Attachment #1: Type: text/plain, Size: 701 bytes --]

Hi Nicolas,

Thanks for your feedback.  Attached is new patch which incorporates all
your suggestions except the following:

> Not directly related to your patch, but shouldn't it be
>
>   (user-error "Could not open: %s" name)

I'm not sure what you mean by this.  Do you mean that the verb "open" is
more approrpriate than "find" in the error message, i.e., "Could not
open" rather than "Could not find"?  If so, then it seems like "find" is
more appropriate since "open" seems like there was a problem with
opening a file when the problem is that a particular node was not found
after successfully opening a file.  Please let me know if I
misunderstood.  Thanks again for your valuable feedbacks.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-info-try-info-index-if-info-node-is-not-found.patch --]
[-- Type: text/x-diff, Size: 3239 bytes --]

From 16c25b88043f6f84c6d3df14ca3018040a09fe25 Mon Sep 17 00:00:00 2001
From: Kim <emacs18@gmail.com>
Date: Sat, 15 Nov 2014 10:37:39 -0800
Subject: [PATCH] org-info: try info index if info node is not found

* lisp/org-info.el (org-info-follow-link): Attempt index lookup if node
  lookup fails.

* doc/org.texi (External links): Update info links.

Info index is almost always finer grain than info nodes.  For example
with this change, [[info:libc#close]] brings up not only
"(libc)Opening and Closing Files" info node, but also place the cursor
on the line that documents "close" function within the node.  This is
done by looking up "close"in the index upon failing to find a node
named "close".  Hence one can now link function, variable and other
names that are in the index rather than being limited to info node
names.  Typically there are far more index items than there are node
names.  For example libc manual has about 700 nodes, but over 4000
concept, type, function, and variables index items.  More examples of
new ways to create links are shown using org.info as example

- [[info:org#org-clock-idle-time]] uses "Variable Index"
- [[info:org#org-capture]] uses "Command and Function Index".
- [[info:org#timestamp]] uses "Main Index"
- [[info:org#C-c C-c]] uses "Key Index"

TINYCHANGE
---
 doc/org.texi     |  2 +-
 lisp/org-info.el | 15 +++++++++++----
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/doc/org.texi b/doc/org.texi
index b01db2c..fcaee0c 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -3575,7 +3575,7 @@ gnus:group                                @r{Gnus group link}
 gnus:group#id                             @r{Gnus article link}
 bbdb:R.*Stallman                          @r{BBDB link (with regexp)}
 irc:/irc.com/#emacs/bob                   @r{IRC link}
-info:org#External links                   @r{Info node link}
+info:org#External links                   @r{Info node or index link}
 shell:ls *.org                            @r{A shell command}
 elisp:org-agenda                          @r{Interactive Elisp command}
 elisp:(find-file-other-frame "Elisp.org") @r{Elisp form to evaluate}
diff --git a/lisp/org-info.el b/lisp/org-info.el
index 8a2d717..7c828a6 100644
--- a/lisp/org-info.el
+++ b/lisp/org-info.el
@@ -67,11 +67,18 @@
   "Follow an Info file and node link specified by NAME."
   (if (or (string-match "\\(.*\\)[#:]:?\\(.*\\)" name)
           (string-match "\\(.*\\)" name))
-      (progn
+      (let ((filename (match-string 1 name))
+	    (nodename-or-index (or (match-string 2 name) "Top")))
 	(require 'info)
-        (if (match-string 2 name) ; If there isn't a node, choose "Top"
-            (Info-find-node (match-string 1 name) (match-string 2 name))
-          (Info-find-node (match-string 1 name) "Top")))
+	;; If nodename-or-index is invalid node name, then look it
+	;; up in the index.
+	(condition-case nil
+	    (Info-find-node filename nodename-or-index)
+	  (user-error (Info-find-node filename "Top")
+		      (condition-case nil
+			  (Info-index nodename-or-index)
+			(user-error (format "Could not find '%s' node or index entry" 
+					    nodename-or-index))))))
     (message "Could not open: %s" name)))
 
 (provide 'org-info)
-- 
1.9.1


  reply	other threads:[~2014-11-15 18:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-01 18:23 patch to add new link type "infoi" that leverages Info-index command Richard Kim
2014-11-06 18:41 ` Nicolas Goaziou
2014-11-10  3:58   ` Richard Kim
2014-11-10  9:17     ` Nicolas Goaziou
2014-11-15 18:46       ` Richard Y. Kim [this message]
2014-11-15 23:21         ` Nicolas Goaziou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=qtm4mu05mkk.fsf@gmail.com \
    --to=emacs18@gmail.com \
    --cc=Emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.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).