emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: ST <smntov@gmail.com>
To: John Kitchin <jkitchin@andrew.cmu.edu>
Cc: Eric S Fraga <esflists@gmail.com>,
	org-mode-email <Emacs-orgmode@gnu.org>,
	Christian Moe <mail@christianmoe.com>,
	Nicolas Goaziou <mail@nicolasgoaziou.fr>
Subject: Re: Structured links to headings with endless depth
Date: Wed, 14 Mar 2018 20:07:14 +0200	[thread overview]
Message-ID: <1521050834.1930.104.camel@gmail.com> (raw)
In-Reply-To: <CAJ51EToWgj+B3Gv=J77a8-OZyGsrcPLJ1k95WjJuktEWnen2vw@mail.gmail.com>

On Wed, 2018-03-14 at 07:15 -0700, John Kitchin wrote:
> I don't think this should be in org-mode, it is still too fragile in
> many ways. 
> 
> 
> For example, what if you have a colon in your headlines, e.g. "A
> chapter about Romans 15:13".  That will will mess up the suggested
> approach that splits on ":".

My bad, I didn't mean to add this specific solution, but rather improve
it till it is no longer fragile. I appealed to those who are responsible
for adding new feature requests (as described on the website) to
consider this idea (and maybe find other more stable ways to implement
it). I'm not sure who they are...

> 
> What if you have duplicate headlines in a hierarchy, how would you
> specify the nth one?

Normally there shouldn't be identical headlines on the same level (on
different levels [[My_Book::2:2:2]] is perfectly fine). Should this
happen - take first occurrence.

> 
> What if you have some convention to start at level 2 headlines? what
> would you do then?
> 
> 
> What about include files?
> 
> 
> What if you skip a level for some reason? What should the path look
> like then?

Then your structure is not well-defined and you should not use such
links.

Thank you!

> 
> 
> 
> On Wed, Mar 14, 2018 at 3:10 AM, ST <smntov@gmail.com> wrote:
>         John, thank you for this solution!
>         
>         I posted this question also here:
>         
>         https://emacs.stackexchange.com/q/39384/18760
>         
>         So if you wish, you may add your solution also there.
>         
>         Somebody there, posted also a possible solution however the
>         syntax is
>         pretty heavy:
>         
>         [[org-heading:/path/to/file.org::*1:2:1]]
>         
>         There is a workaround using links abbreviations, but still it
>         is a
>         workaround...
>         
>         I think this kind of linking is useful for many general cases.
>         Christian
>         has expressed concerns that such links are easily breakable
>         which is
>         true but only for documents that are in draft phase (or those
>         which are
>         supposed to be restructured on regular basis - like ToDo
>         lists). However
>         documents that has been published, like books or scientific
>         papers, and
>         will no longer change - will benefit greatly from such linking
>         option.
>         Imagine you have a scientific paper in your archive that you
>         have
>         already published and removed write access from it in order
>         not to
>         change it accidentally. You do want to reference certain
>         chapter:section:subsection from it in your new paper, which
>         you are
>         currently writing, but creating a target
>         <<chapter:section:subsection>>
>         in the old paper is no longer an option...
>         
>         So may I ask as a feature request, to please add, following
>         link type as
>         standard to the org-mode:
>         
>         [[path/to/file.org::chapter:section:subsection:etc:optional
>         target]]
>         
>         - chapter/section/subsection could be also just numbers
>         - optional target target might be <<optional target target>>
>         - there is no need to add '*' (like
>         [[path/to/file.org::*chapter:section]] to the link, as ':'
>         after '::'
>         imply that headings are referred.
>         
>         Thank you!
>         
>         On Tue, 2018-03-13 at 20:49 -0700, John Kitchin wrote:
>         > This is a tricky problem to generally solve. I think this
>         does it
>         > approximately well enough. It is lightly tested and works by
>         exactly
>         > matching headlines at subsequent levels. It will be
>         problematic if you
>         > have headlines with : in them, and it assumes there is a
>         level 1
>         > headline to start in.
>         >
>         >
>         > #+BEGIN_SRC emacs-lisp
>         > (defun xpath-follow (path)
>         >   (let* ((fields (split-string path "::"))
>         > (fname (car fields))
>         > (paths (split-string (cadr fields) ":"))
>         > (level 0)
>         > (current-point (point))
>         > cp hls n found)
>         >     (org-mark-ring-push)
>         >     (find-file fname)
>         >     (save-restriction
>         >       (while paths
>         > (setq cp (pop paths))
>         > (incf level)
>         > (setq hls (org-element-map (org-element-parse-buffer)
>         'headline
>         >     (lambda (hl)
>         >       (when (eq level (org-element-property :level hl))
>         > hl))))
>         > (setq n (-find-index (lambda (hl)
>         >        (string= cp (org-no-properties
>         >     (org-element-property :raw-value hl))))
>         >      hls))
>         > (if (not n)
>         >     (progn
>         >       (goto-char current-point)
>         >       (user-error "%s not found" cp))
>         >   (goto-char (org-element-property :begin (nth n hls)))
>         >   (org-narrow-to-subtree))))))
>         >
>         >
>         > (org-link-set-parameters
>         >  "xpath"
>         >  :follow 'xpath-follow)
>         > #+END_SRC
>         >
>         >
>         >
>         > John
>         >
>         > -----------------------------------
>         > Professor John Kitchin
>         > Doherty Hall A207F
>         > Department of Chemical Engineering
>         > Carnegie Mellon University
>         > Pittsburgh, PA 15213
>         > 412-268-7803
>         > @johnkitchin
>         > http://kitchingroup.cheme.cmu.edu
>         >
>         >
>         >
>         > On Mon, Mar 12, 2018 at 8:08 AM, ST <smntov@gmail.com>
>         wrote:
>         >         Hello,
>         >
>         >         Ss Christian has pointed out - introduce a separate
>         CUSTOM_ID
>         >         for text
>         >         with fixed structure and rather short verses is too
>         heavy.
>         >
>         >         I do need to write a custom link type, if this use
>         case is not
>         >         of common
>         >         interest for the orgmode community.
>         >
>         >         Thank you,
>         >
>         >
>         >         On Mon, 2018-03-12 at 15:10 +0100, Nicolas Goaziou
>         wrote:
>         >         > Hello,
>         >         >
>         >         > ST <smntov@gmail.com> writes:
>         >         >
>         >         > > I'm not that experienced in writing in lisp. Is
>         it
>         >         difficult to create
>         >         > > such custom link type? What is the closest link
>         type that
>         >         you would
>         >         > > recommend to take as starting point (link on
>         code, if
>         >         possible)?
>         >         >
>         >         > I'm not answering your question, but I suggest to
>         use a
>         >         CUSTOM_ID
>         >         > instead. This is readily available.
>         >         >
>         >         > Regards,
>         >         >
>         >
>         >
>         >
>         >
>         >
>         
>         
> 
> 

  reply	other threads:[~2018-03-14 18:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-12 10:09 Structured links to headings with endless depth ST
2018-03-12 10:29 ` Eric S Fraga
2018-03-12 10:39   ` ST
2018-03-12 13:08     ` Christian Moe
2018-03-12 13:46       ` ST
2018-03-12 14:10         ` Nicolas Goaziou
2018-03-12 15:08           ` ST
2018-03-14  3:49             ` John Kitchin
2018-03-14  6:58               ` Michael Brand
2019-05-06 16:34                 ` Michael Brand
2019-05-07  3:26                   ` Ihor Radchenko
2019-05-07 14:39                     ` Michael Brand
2019-05-18 10:44                       ` Ihor Radchenko
2018-03-14 10:10               ` ST
2018-03-14 13:26                 ` Nicolas Goaziou
2018-03-14 18:11                   ` ST
2018-03-14 18:32                     ` Nicolas Goaziou
2018-03-14 18:46                       ` ST
2018-03-14 14:15                 ` John Kitchin
2018-03-14 18:07                   ` ST [this message]
2018-03-12 12:43   ` ST

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=1521050834.1930.104.camel@gmail.com \
    --to=smntov@gmail.com \
    --cc=Emacs-orgmode@gnu.org \
    --cc=esflists@gmail.com \
    --cc=jkitchin@andrew.cmu.edu \
    --cc=mail@christianmoe.com \
    --cc=mail@nicolasgoaziou.fr \
    /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).