diff --git a/.forgejo/workflows/publish.yml b/.forgejo/workflows/publish.yml
deleted file mode 100644
index fde3206..0000000
--- a/.forgejo/workflows/publish.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-on:
- push:
- tags:
- - 'v*'
-jobs:
- publish:
- runs-on: based-alpine
- steps:
- - uses: actions/checkout@v4
- - name: setup cache
- id: uv-cache
- uses: https://git.ficd.sh/ficd/uv-cache@v1
- - name: build
- run: |
- uv sync
- uv build
- - name: publish
- run: |
- uv publish --token ${{ secrets.PYPI_TOKEN }}
-
diff --git a/README.md b/README.md
index ff2c780..e09b662 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,22 @@
Mail Format
`mailfmt` is a simple plain text email formatter. It's designed to ensure
-consistent paragraph spacing while preserving markdown syntax, email
-headers, sign-offs, and signature blocks.
+consistent paragraph spacing while preserving markdown syntax, email headers,
+sign-offs, and signature blocks.
-By default, the command accepts its input on `stdin` and prints to
-`stdout`. This makes it well suited for use as a formatter with a text
-editor like Kakoune or Helix.
+By default, this script accepts its input on `stdin` and prints to `stdout`.
+This makes it well suited for use as a formatter with a text editor like Kakoune
+or Helix. It has no dependencies besides the standard Python interpreter, and
+was written and tested against Python 3.13.3.
- [Features](#features)
-- [Installation](#installation)
- [Usage](#usage)
- [Output Example](#output-example)
- [Markdown Safety](#markdown-safety)
- [Aerc Integration](#aerc-integration)
+- [Contributing](#contributing)
@@ -32,27 +33,9 @@ editor like Kakoune or Helix.
- Markdown-style code blocks.
- Usenet-style signature block at EOF.
- Sign-offs.
-- If specified, output can be made safe for passing to a Markdown
- renderer.
- - Use case: piping the output to `pandoc` to write a `text/html`
- message. See [Markdown Safety](#markdown-safety).
-
-## Installation
-
-`mailfmt` is intended for use as a standaole tool. The package is
-available on PyPI as `mailfmt`. I recommend using
-[uv](https://github.com/astral-sh/uv) or `pipx` to install it so the
-`mailfmt` command is available on your path:
-
-```sh
-uv tool install mailfmt
-```
-
-Verify that the installation was successful:
-
-```sh
-mailfmt --help
-```
+- If specified, output can be made safe for passing to a Markdown renderer.
+ - Use case: piping the output to `pandoc` to write a `text/html` message. See
+ [Markdown Safety](#markdown-safety).
## Usage
@@ -80,7 +63,8 @@ options:
-o, --output OUTPUT Output file. (default: STDOUT)
Author : Daniel Fichtinger
-Contact: daniel@ficd.sh
+License: ISC
+Contact: daniel@ficd.ca
```
## Output Example
@@ -103,7 +87,8 @@ Daniel
--
Daniel
-daniel@ficd.sh
+sr.ht/~ficd
+daniel@ficd.ca
```
After:
@@ -125,24 +110,23 @@ Daniel
--
Daniel
-daniel@ficd.sh
+sr.ht/~ficd
+daniel@ficd.ca
```
## Markdown Safety
-In some cases, you may want to generate an HTML email. Ideally, you'd want
-the HTML to be generated directly from the plain text message, and for
-_both_ versions to be legible and have the same semantics.
+In some cases, you may want to generate an HTML email. Ideally, you'd want the
+HTML to be generated directly from the plain text message, and for _both_
+versions to be legible and have the same semantics.
-Although `mailfmt` was written with Markdown markup in mind, its intended
-output is still the `text/plain` format. If you pass its output directly
-to a Markdown renderer, line breaks in sign-offs and the signature block
-won't be preserved.
+Although `mailfmt` was written with Markdown markup in mind, its intended output
+is still the `text/plain` format. If you pass its output directly to a Markdown
+renderer, line breaks in sign-offs and the signature block won't be preserved.
-If you invoke `mailfmt --markdown-safe`, then `\` characters will be
-appended to mark line breaks that would otherwise be squashed, making the
-output suitable for conversion into HTML. Here's an example of one such
-pipeline:
+If you invoke `mailfmt --markdown-safe`, then `\` characters will be appended to
+mark line breaks that would otherwise be squashed, making the output suitable
+for conversion into HTML. Here's an example of one such pipeline:
```bash
cat message.txt | mailfmt --markdown-safe | pandoc -f markdown -t html
@@ -168,20 +152,24 @@ Daniel \
-- \
Daniel \
-daniel@ficd.sh \
+sr.ht/~ficd \
+daniel@ficd.ca \
```
## Aerc Integration
-For integration with `aerc`, consider adding the following to your
-`aerc.conf`:
+For integration with `aerc`, consider adding the following to your `aerc.conf`:
```ini
[multipart-converters]
text/html=mailfmt --markdown-safe | pandoc -f markdown -t html --standalone
```
-When you're done writing your email, you can call the
-`:multipart text/html` command to generate a `multipart/alternative`
-message which includes _both_ your original `text/plain` _and_ the newly
-generated `text/html` content.
+When you're done writing your email, you can call the `:multipart text/html`
+command to generate a `multipart/alternative` message which includes _both_ your
+original `text/plain` _and_ the newly generated `text/html` content.
+
+## Contributing
+
+Please send patches, requests, and concerns to my
+[public inbox](https://lists.sr.ht/~ficd/public-inbox).
diff --git a/justfile b/justfile
deleted file mode 100644
index b0828ed..0000000
--- a/justfile
+++ /dev/null
@@ -1,21 +0,0 @@
-clean:
- #!/bin/sh
- if [ ! -d "dist" ] && [ ! -d "__pycache__" ]; then
- echo "Nothing to clean."
- exit 0
- fi
- if [ -d "dist" ]; then
- echo "Removing dist/"
- rm -r dist/
- fi
- if [ -d "__pycache__" ]; then
- echo "Removing __pycache__/"
- rm -r "__pycache__"
- fi
-publish:
- #!/bin/sh
- just clean
- uv build
- export UV_PUBLISH_TOKEN="$(pass show pypi)"
- uv publish
-
diff --git a/mailfmt.py b/mailfmt.py
index 995e9aa..e8d1f7a 100755
--- a/mailfmt.py
+++ b/mailfmt.py
@@ -11,11 +11,10 @@
# Author: Daniel Fichtinger
# License: ISC
-import argparse
-import re
-import sys
import textwrap
-from importlib.metadata import version
+import sys
+import re
+import argparse
def main() -> None:
@@ -76,7 +75,7 @@ def main() -> None:
if not signoff_cache and 1 <= n <= 5 and line[-1] == ",":
return True
# second potential line
- elif signoff_cache and 1 <= n <= 5:
+ elif signoff_cache and 1 <= n <= 5 and line[-1].isalpha():
for w in words:
if not w[0].isupper():
return False
@@ -85,22 +84,14 @@ def main() -> None:
return False
parser = argparse.ArgumentParser(
- description="Heuristic formatter for plain text email. Preserves markup, signoffs, and signature blocks.",
+ description='Formatter for plain text email.\n"--no-*" options are NOT passed by default.',
epilog="""
-Author : Daniel Fichtinger
-Repository: https://git.ficd.sh/ficd/mailfmt
-License : ISC
-Contact : daniel@ficd.sh
+Author : Daniel Fichtinger
+License: ISC
+Contact: daniel@ficd.ca
""",
formatter_class=argparse.RawDescriptionHelpFormatter,
)
- parser.add_argument(
- "-v",
- "--version",
- required=False,
- help="Print version info and exit.",
- action="store_true",
- )
parser.add_argument(
"-w",
"--width",
@@ -170,9 +161,6 @@ Contact : daniel@ficd.sh
help="Output file. (default: %(default)s)",
)
args = parser.parse_args()
- if args.version:
- print(version("mailfmt"))
- exit(0)
width = args.width
should_check_signoff = args.no_signoff
should_check_signature = args.no_signature
diff --git a/pyproject.toml b/pyproject.toml
index 5694f65..d8dedf2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,19 +1,13 @@
[project]
name = "mailfmt"
-version = "1.0.4"
-description = "Heuristic plain text email formatter."
+version = "0.1.0"
+description = "Add your description here"
readme = "README.md"
authors = [
- { name = "Daniel Fichtinger", email = "daniel@ficd.sh" }
+ { name = "Daniel Fichtinger", email = "daniel@ficd.ca" }
]
requires-python = ">=3.11"
dependencies = []
-license = "ISC"
-license-files = ["LICENSE"]
-keywords = ["email", "formatter", "cli"]
-
-[project.urls]
-Repository = "https://git.ficd.sh/ficd/mailfmt"
[project.scripts]
mailfmt = "mailfmt:main"
diff --git a/uv.lock b/uv.lock
index 029043b..6688ee9 100644
--- a/uv.lock
+++ b/uv.lock
@@ -4,5 +4,5 @@ requires-python = ">=3.11"
[[package]]
name = "mailfmt"
-version = "1.0.3"
+version = "0.1.0"
source = { editable = "." }