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.
