diff --git a/pyn/commands.py b/pyn/commands.py index bd191be..b28cb2e 100644 --- a/pyn/commands.py +++ b/pyn/commands.py @@ -1,6 +1,6 @@ from pyn.common import parser, logger from pyn.config import Config -from pyn import notes +from pyn import notes, templating import sys import os @@ -57,7 +57,7 @@ def cmd_del_note(config: Config, title: str, notebook: str, yes: bool) -> None: del_note = group.add_parser("delete", aliases=["del"]) del_note.add_argument("--notebook", "-n", help="add to this notebook [general]") del_note.add_argument("--yes", action="store_true", help="dont prompt for confirmation") -del_note.add_argument("title", help="title for note", nargs="?") +del_note.add_argument("title", help="title for note", nargs="*") del_note.set_defaults(func=cmd_del_note) ### List notes @@ -89,7 +89,7 @@ def cmd_edit_note(config, title, notebook: str) -> None: edit_note = group.add_parser("edit", aliases=["e"]) -edit_note.add_argument("title", help="note title", nargs="?") +edit_note.add_argument("title", help="note title", nargs="*") edit_note.add_argument("--notebook", "-n", help="limit to this notebook") edit_note.set_defaults(func=cmd_edit_note) @@ -102,28 +102,24 @@ def cmd_show_note(config, title, notebook: str) -> None: show_note = group.add_parser("show", aliases=["s", "cat"]) -show_note.add_argument("title", help="note title", nargs="?") +show_note.add_argument("title", help="note title", nargs="*") show_note.add_argument("--notebook", "-n", help="limit to this notebook") show_note.set_defaults(func=cmd_show_note) + def cmd_render_note(config, title, notebook: str) -> None: filename = notes.search_filenames(config, title, notebook) - import markdown - import tempfile - import subprocess - import time with open(filename, "r", encoding="utf-8") as input_file: text = input_file.read() - html = markdown.markdown(text) - with tempfile.NamedTemporaryFile(suffix=".html", delete=True) as f: - f.write(html.encode('utf-8')) - subprocess.run(['firefox', '--new-tab', f"file://{f.name}"]) - time.sleep(1) + html = templating.render_note(text, title=filename.stem) + + print(html) + render_note = group.add_parser("render") -render_note.add_argument("title", help="note title", nargs="?") +render_note.add_argument("title", help="note title", nargs="*") render_note.add_argument("--notebook", "-n", help="limit to this notebook") render_note.set_defaults(func=cmd_render_note) diff --git a/pyn/notes.py b/pyn/notes.py index 4e95bd9..45ac504 100644 --- a/pyn/notes.py +++ b/pyn/notes.py @@ -77,19 +77,25 @@ def get_file_list( dirs[:] = [d for d in dirs if d[0] != "."] for filename in files: - yield d / filename + if filename.endswith(".md"): + yield d.relative_to(root) / filename def search_filenames( - config: Config, title: str, notebook: str | None = None + config: Config, title: str | list[str], notebook: str | None = None ) -> pathlib.Path: root = config.directory / notebook if notebook else config.directory + files = "\n".join((str(x) for x in get_file_list(config, notebook))) + + if isinstance(title, list): + title = " ".join(title) + cmd = ["fzf", "-1", "-i"] if title: cmd.extend(["-q", title]) try: - output = subprocess.check_output(cmd, cwd=root) + output = subprocess.check_output(cmd, cwd=root, input=files.encode()) file_path = root / output.decode("utf-8").strip() return file_path except subprocess.CalledProcessError as e: diff --git a/pyn/templates/render_note.html b/pyn/templates/render_note.html new file mode 100644 index 0000000..d723a61 --- /dev/null +++ b/pyn/templates/render_note.html @@ -0,0 +1,43 @@ + + + + {{ title }} + + + +
+ {{ content|safe }} +
+ + diff --git a/pyn/templating.py b/pyn/templating.py new file mode 100644 index 0000000..97d4429 --- /dev/null +++ b/pyn/templating.py @@ -0,0 +1,11 @@ +from jinja2 import Environment, PackageLoader, select_autoescape +import markdown + +env = Environment(loader=PackageLoader("pyn"), autoescape=select_autoescape()) + + +def render_note(note: str, title: str = "") -> str: + content = markdown.markdown(note) + + template = env.get_template("render_note.html") + return template.render(content=content, title=title) diff --git a/pyproject.toml b/pyproject.toml index abecf9a..6abcc43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,8 @@ authors = [ readme = "README.md" requires-python = ">=3.13" dependencies = [ - "markdown (>=3.10.1,<4.0.0)" + "markdown (>=3.10.1,<4.0.0)", + "jinja2 (>=3.1.6,<4.0.0)" ] [project.scripts]