*g.fullPath* is a really good method. I could wish that it would return a 
directory instead of None when the path is to a directory instead of a 
file, but I suppose that would break some things that use it.  It could 
have a new *returnDir=False* argument, so that nothing downstream get 
broken.

I wrote a more complete script than I had used before to open a directory 
manager window on a node's directory, and *g.fullPath* did half the work 
for me:

@language python
"""Open directory for a node, respecting any @path directives and "~"."""

import os
from subprocess import run

pth = g.fullPath(c, p)
if pth:
    direc, _ = os.path.split(pth)
else:
    # not a file, so construct directory's path from @path directives
    steps = [d.get('path') for d in g.get_directives_dict_list(p) if 'path' 
in d]
    if steps:
        steps.reverse()
        if len(steps) > 1:
            direc = os.path.join(steps[0], *steps[1:])
        else:
            direc = steps[0]

        # Expand Leo-specific "{}" expressions in path
        direc = c.expand_path_expression(direc)

        # Expand "~" to user's home directory, even on Windows
        direc = os.path.expanduser(direc)

        if not os.path.isabs(direc):
            # Path is relative to the outline's path
            outline_dir, _ = g.os_path_split(c.fileName())
            direc = g.os_path_join(outline_dir, direc)

    else:
        # No @path directives, directory is the outline's directory
        direc, _ = g.os_path_split(c.fileName())

direc = os.path.normpath(direc)

if g.os_path_exists(direc):
    term = 'explorer.exe' if g.isWindows else 'xdg-open'
    run([term, direc])
else:
    g.es(f'Path {direc} doesn't exist')

On Friday, April 30, 2021 at 8:45:55 AM UTC-4 Edward K. Ream wrote:

> This branch contains work on #1914, 
> <https://github.com/leo-editor/leo-editor/issues/1914> a simplification 
> of Leo's path-related logic based on g.fullPath.
>
> All tests pass, but this is tricky code. Please report any problems 
> immediately.
>
> Edward
>

-- 
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 leo-editor+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/b52a8b3f-aec6-4d97-b883-81b67606e9d6n%40googlegroups.com.

Reply via email to