emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Context of interaction vs. literal syntactic interpretation (was: li


From: Bastien
Subject: [O] Context of interaction vs. literal syntactic interpretation (was: link interfering with brackets when abbreviated)
Date: Mon, 03 Mar 2014 10:50:57 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Hi Gustav, Josiah and Michael,

thanks *a lot* for your feedback, it triggered an idea I want to turn
into a proposal.  I changed the subject of this thread to better frame
the issue at stake, and explain my proposal.

Emacs commands depend on their context: this is the modal approach we
love.  For example, M-; will behave differently whether we are in an
org-mode buffer or in a html-mode buffer.  The context of interaction
is the relevant syntactic environment that Emacs needs to know about
when a command is called.

By essence, a parser is very strict about the inclusion model of
syntactic elements: e.g., a tag cannot be part of a paragraph, a TODO
keyword cannot be part of a timestamp, a timestamp cannot be part of
a property value, a link cannot be part of a comment, etc.

This is *good* to have such a strict parser and it must be as strict
and consistent as possible -- we all agree on that.

For most commands, the first literal syntactic interpretation is the
only relevant context of interaction: e.g., it would not make sense to
try updating a tag outside of a headline (i.e. outside of where a tag
is a tag, from the parser's view.)

For some commands, another higher context can also be relevant: e.g.,
when the point is on a heading and the user hit C-c C-o, Org needs to
know whether we are on a link (in this case it will open the link).  If
not, it checks for a higher context: when we are on a heading, it will
look for multiple links and prompt the user for which one to open.

(A generalization of this "links-in-a-heading" behavior for something
like "links-in-a-paragraph", as suggested by Gustav, is a good idea.)

For handling comments, my suggestion is this to let the user decide if
she wants to activate C-c C-o in comments by temporarily considering the
contents of a comment as a paragraph.

  Something like

  (let ((comment-contents
         (org-element-property :value (org-element-context))))
    (with-temp-buffer
      (insert comment-contents)
      (org-open-at-point)))

  provided we preserve the relative point position.

(Another route is to change the syntactic meaning of comments: they
could contain paragraphs and be contained within subtrees.)

Note that this suggestion does not deviate from what we already do:
see the example of C-c C-o checking for a higher context when hit in
headlines.

So while I suggest a change for handling links in paragraphs (I do
support Gustav suggestion) and in comments (see the proposal above),
I don't suggest a change in the role the parser has: I only describe
a frame in which what seems inconsistent is not anymore.

For example, it may seem inconsistent to allow using S-<right> to
update a timestamp in a property drawer, since property drawers don't
allow timestamps.  But it is not inconsistent if S-<right> is allowed
to refer to a higher context (the subtree's content instead of the
property drawer.)

For sure, such flexibility should be the exception, not the norm, but
considering it is very important in terms of user experience IMO.

I hope this is clear enough and can help us moving forward.

Thanks,

-- 
 Bastien



reply via email to

[Prev in Thread] Current Thread [Next in Thread]