I wrote a small script that does what I think you want, although only for a single @md file at a time. The top-level node must have a headline that starts with "@md " and a filename or path, like this: @md test.md. This node may optionally be the child of an @path node to write the output file somewhere else besides the outline's location. To use the command, select any node in the markdown's subtree and invoke the command.
Note that the command as currently written will not recognize an @auto-md node. The node's headline has to start with @md . All headlines will be indented according to their nesting level, except that the top node, the one with the file name, will not have a heading (since the @md headline wouldn't make much sense, at least to me).
There are no extra features such as the rst3 command has, but it's a start. Try it out, see what you think or want to change.
@language python
"""Write an @md file tree with headings corresponding to node indentation.
Searches node and parents to find the nearest node headline beginning
with *@md*, then writes the entire subtree of that node.
Output file is written to the path in effect at the @md node.
"""
from pathlib import Path
MD_PREFIX = '@md '
def find_md_root(p):
"""Return the top position of an @md tree or None.
The top headline must begin with "@md ".
"""
for p0 in p.self_and_parents():
if p0.h.startswith(MD_PREFIX):
break
else:
p0 = None
return p0
def walk_md(root):
"""Return a string for the markdown file from root position.
Headlines are indented relative to their nesting level under
the root."""
markdown = ''
root_indent = root.level()
for p in root.self_and_subtree():
if p.h and p != root:
indent = p.level() - root_indent + 1
markdown += '#' * indent
markdown += p.h + '\n'
markdown += p.b + '\n'
return markdown
root = find_md_root(p)
# Get path for node; path does not include the filename
path = Path(c.getNodePath(root)) if root else None
if path and path.exists():
fname = root.h[len(MD_PREFIX):]
path = path.joinpath(Path(fname))
md = walk_md(root)
try:
with open(path, 'w', encoding = 'utf-8') as f:
f.write(md)
g.es(f'Wrote {path}')
except Exception as e:
g.es(f'Could not write file at {path}: {e}')
else:
g.es(f'Path {path} does not exist')