A GhostText implementation for the Thunderbird email client.
This repo contains an in-development Thunderbird add-on that works as a GhostText client in the mail compose window, so that users can write their emails in their favorite text editor like Vim (provided the text editor already has a GhostText add-on installed).
-
Thunderbird 140 (We will mainly support ESR releases)
-
A text editor that has a GhostText server add-on installed and running:
The last two implementations can wrap any editor that blocks while editing.
- See the help page in the Mozilla Support Center for details.
You can install Ghostbird in several ways:
- In Thunderbird, open
Add-ons Manager
. - Search for "Ghostbird".
- Click the + Add to Thunderbird button.
- Download the latest release from the Thunderbird add-on website or Github Releases.
- In Thunderbird, go to
Add-ons Manager
. - Drag and drop the downloaded
.xpi
file into theAdd-ons Manager
window.
Alternatively, you can:
- Press βοΈ button at the top-right.
- Select
Install Add-on From File...
from the menu. - Select downloaded
.xpi
file.
- Basically,
make
will do, which internally callsyarn install && yarn build
. - See CONTRIBUTING.md to get started.
- Launch your favorite text editor.
- Start the GhostText server in your text editor (e.g., with
:GhostTextStart
in Vim). - Press the gray Ghostbird button
in the Thunderbird mail compose window. (The default shortcut is ^Ctrl+β§Shift+H)
- If the connection is successful, the button will turn blue
.
- If the connection fails, the button will turn red
. Make sure that the GhostText server is listening. See Troubleshooting page of original GhostText.
- If the connection is successful, the button will turn blue
- Write your email in the text editor.
- Close your text editor to stop Ghostbird.
- See design.md for details.
flowchart LR
subgraph Thunderbird
mailCompose@{label: Compose<br>Window}
gtClient@{label: Ghostbird}
end
subgraph Your favorite text editor
gtServer@{label: GhostText<br>Server}
textEditor@{label: Text editor<br>screen}
end
mailCompose -->|Starts| gtClient
gtClient -->|Connects to| gtServer
gtServer -->|Shows Initial Text| textEditor
textEditor -->|Returns Edited Text| gtServer
gtServer -->|Updates| gtClient
gtClient -->|Updates| mailCompose
Mark | Meaning | Description |
---|---|---|
β | Done | Released in previous versions |
πͺΊ | Experimental | Released recently; please try and tell us if you notice something |
π§ | WIP | In development but not released |
β¬ | Planned | Must be implemented to release the version |
β | Limitation | The version will be released with this limitation |
- β Prepare the project skeleton (README, build, test, lint, debug, CI)
- β Start button on the toolbar
- β Edit plain text emails
- β Keyboard shortcuts
- β Roadmap and Project board
- β Non-bidirectional: Thunderbird becomes read-only while Ghostbird is active
- β No i18n: the UI is only in English*
- β Quirky when editing HTML emails
*GhostText communicates only in UTF-8, so you can safely write emails in any language.
- β Debug
- πͺΊ Basic option (at minimum, the port of the GhostText server)
- πͺΊ Prepare for i18n (Make texts translatable)
- β¬ Edit Address and Subject fields
- β¬ Continue i18n (Add more languages)
- β¬ Support text editors that lack a GhostText add-on (e.g., Notepad)*
- β¬ Automate AMO release on GitHub Action
*Requires protocol extension and server-side support. I intend to develop one by forking GhostText-Any.
-
Proper implementation as a GhostText client
- β¬ Cursor and selection synchronization
- β¬ Bidirectional editing; changes in Thunderbird are reflected in the text editor
-
β¬ Better handling of conflicts, disconnection, and reconnection (possibly extending the protocol)
- Editing text boxes other than the email compose window in Thunderbird
- WYSIWYG editing for HTML emails
- Thunderbird Mobile support
If you like the idea, please:
- Star the repo.
- Feel free to open issues and submit pull requests. See CONTRIBUTING.md to get started.
- See our project board or issues for tasks you can contribute to, and use the Discussions page for general discussions.
We need help with:
- Website and materials (Please post screenshots to the wiki)
- Testing with various text editors
- Testing with various OSes
- Wiki pages for user guides and troubleshooting
- Developing the server counterpart so that this can be used as an External Editor replacement (GhostText-Any or Helix-Ghost can be a good starting point)
- Creating a testing checklist for testing and debugging (This page can be a good starting point)
- Automating tests with the real Thunderbird (See Testing)
- Organization members (I want to increase the bus factor of the organization)
- I'd say yes, but save your work frequently since it may contain bugs and eat your email.
- This add-on does not collect any personal data and can only connect to localhost. Attempts to send any data to external servers are blocked by Thunderbird's security model.
- You can look inside the released
.xpi
files (which are just zip files) to verify that they match the build from the source code. - As for trustworthiness, the safest option is to wait until it reaches 1.0.0, as that indicates it has passed Mozilla's manual review.
- See faq.md.
- See CONTRIBUTING.md for details on the development workflow.
- Make sure that the GhostText server is listening. See the Troubleshooting page of original GhostText.
- See doc/faq.md.
Please consider the following options:
- Star the repo
- Donate to Thunderbird (It's financially separate from Firefox)
- Donate to @fregante, the author of the original GhostText
- Contribute to the development
If you've looked at the options above and still want to motivate the maintainer @snipsnipsnip specifically, you can tip some ETH.
- Federico Brigante, the author of GhostText.
- Alexandre Feblot, the original author of External Editor, which I took over maintaining; it is now in a stale state. I intend to incorporate some of its features into Ghostbird.
- The button image is based on a photo of a Grey-headed Bushshrike by Patty McGann (CC-BY-2.0).
Ghostbird is dual-licensed under (MPL-2.0 OR GPL-3.0-or-later). See also NOTICE.