That is all curios. I am unclear the expanduser() call would affect things 
that way. Then again I understand <1% of Leo code at this point.
What *is *clear is that I will need to get Leo setup on Windows and Linux 
as well.

On Saturday, April 10, 2021 at 11:46:28 PM UTC-4 [email protected] wrote:

> Unfortunately, there is a fly in the ointment.  I have an external file at 
> a location that uses "..", like this:
>
> - @path d:/Tom/devel/leo/plugins
>     -@file ../plugins/viewrendered3.py
>
> Leo wants this @file path to contain the *../plugins* path step.  With 
> the *expanduser()* line, my file doesn't save.  I tried adding an 
> *os.path.abspath()* operation, but then a lot of other files don't load 
> and Leo operation are quite messed up.  Apparently certain calls expect 
> relative paths to be returned.  So it's a mess, so far as creating correct 
> directory @paths that contain "~" is concerned.
>
> And without adding the *os.path.expanduser()* call, Leo doesn't make the 
> correct directories when the *@path* subtree starts with "~".  So this is 
> not such an easy thing to fix properly.
>
> I have come up with completely  different code for opening a directory 
> that properly expands "~".  Of course, it won't cause the correct 
> directories to be made, but it does return the correct directory path, 
> including "~",  and does not rely on ".".  It won't work right if an 
> *@path* directory contains ".." but it does work right if the *@file* 
> headline contains ".." as in my example above.
>
> """Return the full path on disk to an external file or directory.  
>
> Honor all @path directives. Expand "~" in path to be the user's 
> home directory. If get_file is False, return only the directory's 
> path (less any filename).
> """
> import os
>
> steps = [d.get('path') for d in g.get_directives_dict_list(p) if 'path' in 
> d]
> steps.reverse()
>
> # Comment in these four lines if you also want to include the file itself 
> in the path.
> #pth = g.fullPath(c, p)
> #fn = os.path.basename(pth) #file name if there is a file here. 
> #if fn:  
>     #steps.append(fn)
>
> if len(steps) > 1:
>     pth = os.path.join(steps[0], *steps[1:])
> elif len(steps) == 1:
>     pth = steps[0]
> else:
>     pth = os.getcwd()
>
> pth = os.path.expanduser(pth)
> if g.isWindows:
>     pth = pth.replace('/', '\\')
> else:
>     pth = pth.replace('\\', '/')
>
>
> [email protected]
>
> On Friday, April 9, 2021 at 10:11:49 PM UTC-4 [email protected] 
> <https://groups.google.com/> wrote:
> It looks like there is a simple fix.  This hasn't had hardly any testing, 
> but on the surface it's doing the right thing.  The little example that 
> failed in an earlier post created the right directories.
>
> In *leoCommands.py*, in the method *expand_path_expression(self, s)*, add 
> the line marked below
>
>     val = ''.join(aList)
>     *val = os.path.expanduser(val)  # <===== Add this line*
>     if g.isWindows:
>         val = val.replace('\\', '/')
>     return val
>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/7f996527-a849-417d-a77c-8c7f9cd747b4n%40googlegroups.com.

Reply via email to