Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
0f7b613
Bump version to v0.4.0
albert-gee Sep 9, 2026
311e30f
Implemented Clipboard History and persistent Local History end-to-end
albert-gee Sep 9, 2026
ca0cbff
Improve Local History robustness and add clipboard insertion enhancem…
albert-gee Sep 9, 2026
b0bc55a
Enhance Local History with path transition handling and clipboard imp…
albert-gee Sep 9, 2026
740b3d0
Add support for promoting untitled documents within Local History
albert-gee Sep 10, 2026
5dcd7f9
Track and restore pending identity promotions in Local History sessions
albert-gee Sep 10, 2026
afc8489
Preserve Local History identity across Save As and reopen
albert-gee Sep 10, 2026
5810c4d
Refactor PDF export error handling and cleanup unused BusyDocument me…
albert-gee Sep 10, 2026
182b223
Ensure block focus after inserting hard break in WYSIWYG editor
albert-gee Sep 11, 2026
f04c44c
Add support for blank line insertion in WYSIWYG editor
albert-gee Sep 11, 2026
6dc7add
Improve markdown serializer with enhanced hard break handling
albert-gee Sep 11, 2026
8bd35a6
Add support for thematic break insertion in WYSIWYG editor
albert-gee Sep 11, 2026
89273b1
Improve workspace refresh and Local History restore logic
albert-gee Sep 11, 2026
db3a987
Add support for transient trailing paragraphs in WYSIWYG editor and e…
albert-gee Sep 11, 2026
f40ce89
Update localization strings for 'TOC' to 'Topics' across multiple lan…
albert-gee Sep 11, 2026
59a0b2f
Refactor `BusyMarkSearchField` with custom text controller and update…
albert-gee Sep 11, 2026
d674f19
Remove `WorkspaceIdentityRow`, enhance Local History integration and …
albert-gee Sep 12, 2026
e92c0b0
Update smoke test timer and refine Local History handling
albert-gee Sep 12, 2026
f7ab372
Improve Clipboard History UI and refine Local History header logic
albert-gee Sep 12, 2026
5ac7672
Enhance Local History flushing and buffer closure logic
albert-gee Sep 12, 2026
b65af9e
Refactor Local History handling to incorporate accepted history and b…
albert-gee Sep 12, 2026
4c1a47a
Enhance Local History handling with protection requirements and impro…
albert-gee Sep 12, 2026
08a219f
Enhance untitled document handling in Local History with identity tra…
albert-gee Sep 12, 2026
a57c032
fix search: make source and workspace search safe and consistent:
albert-gee Sep 12, 2026
5067216
Fix search: add failure tracking and ensure safe navigation, replacem…
albert-gee Sep 12, 2026
10ac024
Update docs
albert-gee Sep 12, 2026
8f3c08a
Disable hardware acceleration for GtkOffscreenWindow in WebKit WebVie…
albert-gee Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions .github/workflows/flutter-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ jobs:
- name: Run real WebKit, PlantUML, Mermaid, OpenAPI, and D2 smoke tests
run: |
xvfb-run -a -s '-screen 0 1280x1024x24' \
env WEBKIT_DISABLE_COMPOSITING_MODE=1 LIBGL_ALWAYS_SOFTWARE=1 \
env GDK_BACKEND=x11 LIBGL_ALWAYS_SOFTWARE=1 \
/usr/bin/python3 -u tools/visualization_smoke.py \
--assets build/linux/x64/release/bundle/share/busymark/visualization \
--d2 build/linux/x64/release/bundle/libexec/busymark/d2 \
Expand All @@ -123,7 +123,7 @@ jobs:
report="${RUNNER_TEMP}/visualization-release-x11.json"
timeout --signal=TERM 300s \
xvfb-run -a -s '-screen 0 1280x1024x24' \
env BUSYMARK_RELEASE_SMOKE=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 \
env GDK_BACKEND=x11 BUSYMARK_RELEASE_SMOKE=1 \
LIBGL_ALWAYS_SOFTWARE=1 \
build/linux/x64/release/bundle/busymark \
--visualization-release-smoke="$report"
Expand Down Expand Up @@ -151,8 +151,7 @@ jobs:
done
test -S "$runtime_dir/wayland-99"
XDG_RUNTIME_DIR="$runtime_dir" WAYLAND_DISPLAY=wayland-99 \
GDK_BACKEND=wayland WEBKIT_DISABLE_COMPOSITING_MODE=1 \
LIBGL_ALWAYS_SOFTWARE=1 \
GDK_BACKEND=wayland LIBGL_ALWAYS_SOFTWARE=1 \
/usr/bin/python3 -u tools/visualization_smoke.py \
--assets build/linux/x64/release/bundle/share/busymark/visualization \
--d2 build/linux/x64/release/bundle/libexec/busymark/d2 \
Expand All @@ -161,7 +160,7 @@ jobs:
report="${RUNNER_TEMP}/visualization-release-wayland.json"
XDG_RUNTIME_DIR="$runtime_dir" WAYLAND_DISPLAY=wayland-99 \
GDK_BACKEND=wayland BUSYMARK_RELEASE_SMOKE=1 \
WEBKIT_DISABLE_COMPOSITING_MODE=1 LIBGL_ALWAYS_SOFTWARE=1 \
LIBGL_ALWAYS_SOFTWARE=1 \
timeout --signal=TERM 300s \
build/linux/x64/release/bundle/busymark \
--visualization-release-smoke="$report"
Expand Down Expand Up @@ -228,7 +227,7 @@ jobs:
mkdir -p "$(dirname "$report")"
timeout --signal=TERM 300s \
xvfb-run -a -s '-screen 0 1280x1024x24' \
env BUSYMARK_RELEASE_SMOKE=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 \
env GDK_BACKEND=x11 BUSYMARK_RELEASE_SMOKE=1 \
LIBGL_ALWAYS_SOFTWARE=1 snap run busymark \
--visualization-release-smoke="$report"
python3 -c 'import json,sys; report=json.load(open(sys.argv[1], encoding="utf-8")); assert report["ok"], report' "$report"
Expand Down Expand Up @@ -257,7 +256,7 @@ jobs:
report="$HOME/snap/busymark/common/visualization-release-wayland.json"
XDG_RUNTIME_DIR="$runtime_dir" WAYLAND_DISPLAY=wayland-99 \
GDK_BACKEND=wayland BUSYMARK_RELEASE_SMOKE=1 \
WEBKIT_DISABLE_COMPOSITING_MODE=1 LIBGL_ALWAYS_SOFTWARE=1 \
LIBGL_ALWAYS_SOFTWARE=1 \
timeout --signal=TERM 300s snap run busymark \
--visualization-release-smoke="$report"
python3 -c 'import json,sys; report=json.load(open(sys.argv[1], encoding="utf-8")); assert report["ok"], report' "$report"
Expand Down
144 changes: 86 additions & 58 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,81 @@ Markdown and Writerside editor for Linux.

* **Markdown editing** — Source, Editor, Reading, and Split views with formatting tools, syntax highlighting, code folding, tables, images, links, code blocks, callouts, collapsible content, and document diagnostics.
* **Writerside projects** — Open and create Writerside-compatible projects; edit Markdown and XML topics; manage instances, tables of contents, reusable TOC libraries, and project structure.
* **Project navigation and search** — Files, TOC, and Outline views, tabbed documents, command palette, keyboard shortcuts, document search and replace, reviewed workspace-wide replacement, and Markdown TOC generation.
* **Project navigation and search** — Files, Topics, and Outline views, tabbed documents, command palette, keyboard shortcuts, document search and replace, reviewed workspace-wide replacement, and Markdown TOC generation.
* **Technical documentation** — Local rendering of Mermaid, PlantUML, D2, fenced OpenAPI specifications, and MathJax mathematical expressions.
* **PDF and HTML publishing** — Export Markdown documents and Writerside instances to configurable PDF or portable offline HTML, with controls for layout, typography, tables of contents, heading numbering, and HTML styling.
* **Git integration** — Review changes and diffs, stage and unstage files, commit, create and switch branches, fetch, pull, push, inspect file and project history, compare historical versions, and restore earlier file versions.
* **Clipboard and Local History** — Reuse source, rich-text, and image fragments during the current session; compare and restore persistent on-device document revisions independently of Git.
* **AI-assisted editing** — Optional Ollama, OpenAI, and Gemini integration with explicit edit scope and shared context, proposal review before changes are applied, and AI-assisted Git commit-message drafting.
* **Workspace reliability** — Detect files changed outside BusyMark, recover unsaved documents, restore previous workspace sessions, manage remote-image permissions, and protect Git operations behind workspace trust.

## Installation

Install BusyMark from the Snap Store:

```bash
sudo snap install busymark --beta
```

The Snap uses strict confinement. See [Snap confinement](docs/snap-confinement.md)
for filesystem and Git-integration details.

## Run from source

BusyMark currently uses Flutter 3.47.2. Install the Linux packages required by
Flutter and BusyMark's CMake configuration:

```bash
sudo apt-get install -y \
clang \
cmake \
curl \
fonts-noto-core \
fonts-noto-mono \
libgtk-3-dev \
libhandy-1-dev \
libsecret-1-dev \
libwebkit2gtk-4.1-dev \
ninja-build \
pkg-config \
xz-utils
```

Node.js 22 or newer with npm is also required to build the bundled web
components.

Prepare and run the application:

```bash
flutter doctor
flutter pub get
flutter run -d linux
```

Pass a Markdown file or documentation directory after `--` to open it at
startup:

```bash
flutter run -d linux -- /absolute/path/to/document.md
flutter run -d linux -- /absolute/path/to/documentation
```

Build and run the standard checks with:

```bash
flutter build linux
flutter analyze
flutter test
```

The build assembles BusyMark's runtime components. Packaged users do not need
separate Typst, Java, Node.js, or Chromium installations.

The CI workflow installs additional packages for headless X11/Wayland, browser,
PDF, and sandbox verification. Those packages are not required for an ordinary
local build; see [the Linux workflow](.github/workflows/flutter-linux.yml) when
reproducing release verification.

## Screenshots

<table>
Expand Down Expand Up @@ -74,6 +142,11 @@ Markdown and Writerside editor for Linux.
</tr>
</table>

## Documentation

The [documentation index](docs/README.md) lists user guides and the separate
developer notes.

## Markdown and Writerside

BusyMark opens Markdown files using `.md` and `.markdown` extensions and can work with ordinary documentation folders.
Expand All @@ -82,11 +155,18 @@ Writerside-compatible projects are recognized through `writerside.cfg` and the o

More information:

* [Writerside support and limitations](docs/writerside-support.md)
* [Writerside instances](docs/writerside-instances.md)
* [Writerside videos](docs/videos.md)
* [Admonitions](docs/admonitions.md)
* [Collapsible elements](docs/collapsible-elements.md)

## Search and replace

BusyMark supports active-document replacement and reviewed workspace-wide
replacement. See [Search and replace](docs/search-and-replace.md) for search
options, scope, preview behavior, and stale-result handling.

## Diagrams and mathematics

BusyMark renders Mermaid, PlantUML, D2, and fenced OpenAPI content locally. Mathematical expressions are rendered with the bundled MathJax environment.
Expand Down Expand Up @@ -116,64 +196,12 @@ BusyMark supports Ollama, OpenAI, and Google Gemini. Proposed edits are presente

See [AI editing](docs/local-ai.md) for configuration, privacy, provider behavior, and security information.

## Installation

Install BusyMark from the Snap Store:

```bash
sudo snap install busymark --beta
```

The Snap uses strict confinement. See [Snap confinement notes](docs/snap-confinement.md) for details about filesystem and Git integration.

## Run from source

BusyMark currently uses Flutter 3.47.0.

Install the required Linux development packages:
## History and recovery

```bash
sudo apt-get install \
curl \
libhandy-1-dev \
xz-utils \
libwebkit2gtk-4.1-dev \
fonts-noto-core \
fonts-noto-mono
```

Node.js 22 or newer with npm is also required when building the bundled web components.

Prepare and run the application:

```bash
flutter doctor
flutter pub get
flutter run -d linux
```

A Markdown file or documentation folder can be opened directly from the command line:

```bash
flutter run -d linux
```

## Build

Build the Linux desktop application with:

```bash
flutter build linux
```

The build assembles the runtime components required by BusyMark. Packaged users do not need separate Typst, Java, Node.js, or Chromium installations.

## Test

```bash
flutter analyze
flutter test
```
See [Clipboard History and Local History](docs/history.md) for collection scope,
limits, retention, restoration, exclusions, and how these tools differ from
undo, crash recovery, and Git. Implementation and verification details are in
[the history implementation notes](docs/development/history.md).

## Contributing

Expand Down
39 changes: 39 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# BusyMark documentation

This directory contains user guides for BusyMark and a separate set of notes
for contributors. Start with the workflow you need; syntax and limitation pages
are intentionally independent so they can be referenced directly.

## Everyday workflows

- [Search and replace](search-and-replace.md)
- [AI editing](local-ai.md)
- [Clipboard History and Local History](history.md)
- [Snap confinement](snap-confinement.md)

## Writerside

- [Supported content and limitations](writerside-support.md)
- [Instances and TOC libraries](writerside-instances.md)
- [Admonitions](admonitions.md)
- [Collapsible elements](collapsible-elements.md)
- [Videos](videos.md)

## Technical content

- [Mathematical expressions](math.md)
- [Offline visualizations](visualizations.md)

## Export

- [PDF export](pdf-export.md)
- [Writerside PDF export](writerside-pdf-export.md)
- [HTML export](html-export.md)

## Developer notes

- [AI implementation and qualification](development/ai.md)
- [Export verification](development/export-verification.md)
- [History implementation](development/history.md)
- [Visualization implementation and verification](development/visualizations.md)
- [Writerside verification](development/writerside-verification.md)
77 changes: 0 additions & 77 deletions docs/clipboard-fix-plan.md

This file was deleted.

Loading
Loading