I did a bit more testing, and saw that an if-statement had to be
extended. If I'm not the only one relying on this behavior, then the
code needs to be tested by someone knowing the whole pricture and
knowing about possible side effects:

    def OnIconDoubleClick (self,p):

        # Note: "icondclick" hooks handled by vnode callback routine.

        c = self.c
        s = p.h.strip()
        if g.match_word(s,0,"@url"):
#fge            if p.b:
            if p.b and not ("http:" in s or "https:" in s or "ftp:" in
s or "file:" in s): #fge
                #fge# Headline urls have precedence. If the headline
doesn't contain a valid url, the body is taken.
                url = p.b.strip()
            else:
                url = s[4:].strip()
            # g.trace(url,g.callers())
#fge            if url.lstrip().startswith('--'):
            #fge# Now we have an url. We need to check, where it comes
from.
            #fge# If both, the headline and the body provide an url,
then we have to choose
            #fge# appropriately.
            if p.b \
            and p.b and not ("http:" in s or "https:" in s or "ftp:"
in s or "file:" in s) \
            and any( map( lambda x, url=url.lstrip():
url.startswith( x), ("--", "http:", "https:", "ftp:", "file:"))): #fge
                #fge# We always take the first line and only the first
line, if the url seems valid.
                # Get the url from the first body line.
                lines = p.b.split('\n')
                url = lines and lines[0] or ''
            else:
                #...@+<< stop the url after any whitespace >>
                #...@+node:ekr.20031218072017.2313: *5* << stop the url
after any whitespace  >>
                # For safety, the URL string should end at the first
whitespace, unless quoted.
                # This logic is also found in the UNL plugin so we
don't have to change the 'unl1' hook.

                url = url.replace('\t',' ')

                # Strip quotes.
                i = -1
                if url and url[0] in ('"',"'"):
                    i = url.find(url[0],1)
                    if i > -1:
                        url = url[1:i]

                if i == -1:
                    # Not quoted or no matching quote.
                    i = url.find(' ')
                    if i > -1:
                        if 0: # No need for a warning.  Assume
everything else is a comment.
                            z_url = url[i:]
                            g.es("ignoring characters after space in
url:",z_url)
                            g.es("use %20 instead of spaces")
                        url = url[:i]
                #...@-<< stop the url after any whitespace >>
            if not g.doHook("@url1",c=c,p=p,v=p,url=url):
                g.handleUrlInUrlNode(url)
            g.doHook("@url2",c=c,p=p,v=p)

        return 'break' # 11/19/06

Kind regards
F. GEIGER



On Nov 30, 7:36 pm, "F. GEIGER" <[email protected]> wrote:
> I upgraded from 4.6.1 to 4.8 and saw this new feature. However, it
> behaves quite differently than it used to: It is no more possible, to
> comment an url in the body pane, by none of the two variants:
>
> 1. If the headline contains "@urlhttp://www.google.at"; and the body
> contains "This is my favorite search engine", then Leo tries to use
> the body text as an url - and fails.
>
> All my nodes look this way since Leo is able to @url. As a
> consequence, all my nodes fail if I do not change them all.
>
> 2. If the headline contains "@url Google" and the body contains
> "http://www.google.at\n\nThis is my favorite search engine", then Leo
> tries to use the body text as an url, instad of just the first line -
> and fails. It works, however, if "--" is preceded. But that opens a
> new Firefox window, which shouldn't happen with me.
>
> I therefore came up with the following changes in
> leoTree::OnIconDoubleClick (I have tagged the changes by leading and
> trailing '#fge' tags):
>
>     def OnIconDoubleClick (self,p):
>
>         # Note: "icondclick" hooks handled by vnode callback routine.
>
>         c = self.c
>         s = p.h.strip()
>         if g.match_word(s,0,"@url"):
> #fge            if p.b:
>             if p.b and not ("http:" in s or "https:" in s or "ftp:" in
> s or "file:" in s): #fge
>                 #fge# Headline urls have precedence. If the headline
> doesn't contain a valid url, the body is taken.
>                 url = p.b.strip()
>             else:
>                 url = s[4:].strip()
>             # g.trace(url,g.callers())
> #fge            if url.lstrip().startswith('--'):
>             if any( map( lambda x, url=url.lstrip():
> url.startswith( x), ("--", "http:", "https:", "ftp:", "file:"))): #fge
>                 #fge# We alwas take the first line and only the first
> line, if the url seems valid.
>                 # Get the url from the first body line.
>                 lines = p.b.split('\n')
>                 url = lines and lines[0] or ''
>             else:
>                 #...@+<< stop the url after any whitespace >>
>                 #...@+node:ekr.20031218072017.2313: *5* << stop the url
> after any whitespace  >>
>                 # For safety, the URL string should end at the first
> whitespace, unless quoted.
>                 # This logic is also found in the UNL plugin so we
> don't have to change the 'unl1' hook.
>
>                 url = url.replace('\t',' ')
>
>                 # Strip quotes.
>                 i = -1
>                 if url and url[0] in ('"',"'"):
>                     i = url.find(url[0],1)
>                     if i > -1:
>                         url = url[1:i]
>
>                 if i == -1:
>                     # Not quoted or no matching quote.
>                     i = url.find(' ')
>                     if i > -1:
>                         if 0: # No need for a warning.  Assume
> everything else is a comment.
>                             z_url = url[i:]
>                             g.es("ignoring characters after space in
> url:",z_url)
>                             g.es("use %20 instead of spaces")
>                         url = url[:i]
>                 #...@-<< stop the url after any whitespace >>
>             if not g.doHook("@url1",c=c,p=p,v=p,url=url):
>                 g.handleUrlInUrlNode(url)
>             g.doHook("@url2",c=c,p=p,v=p)
>
>         return 'break' # 11/19/06
>
> I've tested the code until I saw that it works for me. What do you
> think about it?
>
> Kind regards
> F. GEIGER

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/leo-editor?hl=en.

Reply via email to