Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FYI: I wrote a native helper in Rust #67

Open
Screwtapello opened this issue Jul 10, 2020 · 0 comments
Open

FYI: I wrote a native helper in Rust #67

Screwtapello opened this issue Jul 10, 2020 · 0 comments

Comments

@Screwtapello
Copy link
Contributor

As I hinted in a recent PR, I've written a native-messaging helper in Rust that's (I believe) compatible with the official Python one. The code (and instructions, and a pre-built static binary) are here:

https://gitlab.com/Screwtapello/textern-helper/

Compared to the existing Python implementation:

  • The user can build a single binary and copy it to each system where they want to use Textern, instead of having to clone the code and build it for whatever version of Python happens to be present
  • The single binary can generate and install its own manifest file, rather than requiring it to be installed separately
    • Currently only installs manifests in the per-user location, not system-wide
  • The single binary automatically installs itself for Chrome and Chromium, not just Firefox, in case Textern ever gets ported
  • Rather than async, the Rust version just uses a thread to monitor every edited file
    • threads are easy and safe in Rust, while the async ecosystem is not yet as mature as Python's
  • Rather than using inotify or a file-modification-event system, the Rust version just polls the file's mtime once per second
    • because Textern wants to be notified of file update events and process-exit events, I felt the complexity of plumbing those together wasn't worth the efficiency gain
  • Probably a lot more status messages to stderr
  • The generate-and-install-manifest code doesn't work on macOS or Windows, but if you manually generate and install a manifest, I expect the actual native-messaging code would work just fine
    • For future reference, I filed issues about what it would take to support macOS and Windows fully

I won't claim this code is bullet-proof or beautiful; as soon as it worked for me I decided to publish it. There's certainly things I'd like to change if I need to dive into the code again for whatever reason, but absent any external influence I expect to leave it alone for now.

I'm happy to answer any questions you may have, or take suggestions if you'd like to try out my code, but otherwise feel free to close this issue, and thanks for writing Textern!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant