rnote icon indicating copy to clipboard operation
rnote copied to clipboard

Add Typst integration (and appease clippy)

Open Xyndra opened this issue 1 month ago • 16 comments

Fixes https://github.com/flxzt/rnote/issues/644

Current state (as of first commit): button with a menu that has a preview button and renders into a vector Ideal end state: button with a menu that automatically updates its preview, rendering into an image or vector format that contains its original text for editing, but can also cancel in cases where some resources went missing and can't be recovered

Xyndra avatar Nov 14 '25 21:11 Xyndra

  • [x] Live preview
  • [x] Higher resolution in the preview
  • [x] Fix monospace
  • [ ] ~~Option between image and vector format~~ (considered unimportant/useless for first version)
  • [x] Allow for changing text after inserting (with proper cancel button)
  • [ ] Possibly some kind of auto-saving for changes since there are a lot of important changes happening without closing the menu and the menu can simply be closed with escape atm
  • [x] Consider shipping fonts for typst

Xyndra avatar Nov 14 '25 23:11 Xyndra

how it looks atm:

image

Xyndra avatar Nov 14 '25 23:11 Xyndra

I would appreciate feedback, especially from @flxzt, both about the looks/idea and the code

Xyndra avatar Nov 15 '25 00:11 Xyndra

I am unsure whether to increment the save version number, would need some info from the maintainers. It does not crash in either direction, but accessing it with an older version removes the Typst text metadata.

Xyndra avatar Nov 15 '25 14:11 Xyndra

I think this is enough for a first version. The auto-save and option between pixel and vector are not must-haves, and about incrementing the version number, I would need feedback from maintainers (most of the save format seems to be from @flxzt)

Xyndra avatar Nov 16 '25 11:11 Xyndra

Not a maintainer, but looks pretty promising! I have a couple of comments / suggestions though (not in order of importance or anything):

(also saw you just commit something as I'm writing this, I hope my comments aren't already out-of-date)

  • Any reason for using version 0.12.0 of typst when 0.14.0 is out?
  • I would move the typst-related code in crates/rnote-engine/src/utils.rs to their own file
  • Is there a way to import typst packages (e.g. CeTZ)?
  • I realize I am way too dependent on code-completion (e.g. from tinymist) to write typst, but somewhat hard to use without to be frank.

As for the UI

satty_2025-11-16_13:15:01

Finally, I'm still not too familiar with GTK and more complicated Rnote internals as a whole, so I can't comment on much more..

anesthetice avatar Nov 16 '25 12:11 anesthetice

Not a maintainer, but looks pretty promising! I have a couple of comments / suggestions though (not in order of importance or anything):

(also saw you just commit something as I'm writing this, I hope my comments aren't already out-of-date)

* Any reason for using version `0.12.0` of typst when `0.14.0` is out?

* I would move the typst-related code in [crates/rnote-engine/src/utils.rs](https://github.com/flxzt/rnote/pull/1587/files#diff-69e14b6632502e3ecc34bc99cab25aebed4717bb0b288df3f5f8fb96808827a4) to their own file

* Is there a way to import typst packages (e.g. CeTZ)?

* I realize I am way too dependent on code-completion (e.g. from tinymist) to write typst, but somewhat hard to use without to be frank.

As for the UI satty_2025-11-16_13:15:01

Finally, I'm still not too familiar with GTK and more complicated Rnote internals as a whole, so I can't comment on much more..

Thanks for the feedback, you are right, I did seem to make a few oversights. I will look into all of them, but I can already say that tinymist integration is close to impossible, at least for me. That is something that would require IDE-like infrastructure, which a simple GTK text field most likely does not have.

Xyndra avatar Nov 16 '25 12:11 Xyndra

There does seem to be a library GtkSourceView for gtk4 that helps with code completion, but still probably a herculean task to set up and integrate with something like tinymist.

anesthetice avatar Nov 16 '25 12:11 anesthetice

Yeah, that is something that is definitely too much for a first version, maybe at a later point in time. This is also not meant to be a Typst IDE, just a way to write something scientific like with LaTeX.

Xyndra avatar Nov 16 '25 12:11 Xyndra

Lilaq is now working image

Xyndra avatar Nov 16 '25 13:11 Xyndra

I have now fixed all the feedback except for the misalignment of the middle line (which is draggable, and honestly not that bad), and the tinymist stuff since that is way too hard

Xyndra avatar Nov 16 '25 13:11 Xyndra

@flxzt I fixed all the clippy messages, if that was what is keeping you from merging this. Would be nice if you could merge this, since I have other changes conflicting with this I want to work on

Xyndra avatar Nov 17 '25 13:11 Xyndra

Typst support is something that is super exciting, this is quite incredible!

I need to do a proper review on this huge diff. It looks good, but it might take a little while until I am able to do it

flxzt avatar Nov 17 '25 18:11 flxzt

Btw if this ever gets merged, I also have another branch based on this where I also added a marker tool

Xyndra avatar Nov 18 '25 16:11 Xyndra

One trick that could be used for the IDE part is the use of temporary files.

I've seen it done on some GUI sftp software. Show the folder content, and if you want to edit a text file on remote, you can "open with" your favorite IDE and it just opens the file with the IDE. Internally, it downloads and copy the file to a temp folder, calls the "open with" command on the file (so you can choose any program that opens txt), and more importantly watches the files so that when you save it in the IDE, it syncs the change back to the remote.

Using the same tactic here, we could make it possible to edit each typst element in vscode with all the benefits of the IDE support

Doublonmousse avatar Nov 19 '25 07:11 Doublonmousse

I also noticed I need to set the flag for the flatpak somewhere so that it is allowed to access the internet for typst plugins

Xyndra avatar Nov 20 '25 11:11 Xyndra

Wonderful feature! It also integrates well with whole app.

Is there a possibility of rendering in white font when dark style is active? Maybe also allow exiting the typst editor by pressing 'Esc'

image

Also when double-clicking an existing typst text, which is not tha unintuitive, it opens the windows twice.

hoellwerth avatar Dec 13 '25 17:12 hoellwerth

Is there a possibility of a white font when dark style is active?

This is not really something for the wrapper but rather for the file (you can change font color and background color in typst), but in the future, maybe it could put the color from the current tool as text color. I think that is a bit much for a first attempt though, as there are already huge changes.

Maybe also allow exiting the typst editor by pressing 'Esc'

See the conversation above, allowing 'esc' to exit would lead to the entire file being lost, which can be really annoying, especially for people frequently using vim where you esc+:+w+enter to save a file. As mentioned above, maybe this could be solved by implementing an "open in editor", but since this is cross-platform, even supporting embedded, which I can't test, I am not sure if that is a good idea to add.

Also when double-clicking an existing typst text, which is not tha unintuitive, it opens the windows twice.

I noticed that too, however that is a bit hard to fix with the project structure. This happens because renderer and drawing are decoupled and the popup sometimes is not fast enough. For me, this only occurs the first time since once Typst is loaded, it is fast enough to open before I can click again, but that probably depends on system load

Xyndra avatar Dec 13 '25 17:12 Xyndra

Thanks for the really fast reply, Sorry for not entirely reading the conversation, I guess I was just too excited for the change! can't wait to see this in upstream and really looking forward to future features.

hoellwerth avatar Dec 13 '25 17:12 hoellwerth