diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 19263efb6622..52b9961c16bf 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -17,9 +17,9 @@
### Debug Information
-
+
-
+
diff --git a/.github/ISSUE_TEMPLATE/1-bug.yml b/.github/ISSUE_TEMPLATE/1-bug.yml
index d3b3ade20069..43caee07e0a1 100644
--- a/.github/ISSUE_TEMPLATE/1-bug.yml
+++ b/.github/ISSUE_TEMPLATE/1-bug.yml
@@ -16,33 +16,32 @@ body:
required: true
- type: checkboxes
attributes:
- label: Is the issue reproducible in Notepad++ without plugin?
+ label: Is the issue reproducible in PaperWasp without plugins?
description: |
- If feasible, try launching Notepad++ without any plugins.
- Some updates to Notepad++ modify communication rules used by plugins,
+ If feasible, try launching PaperWasp without any plugins.
+ Some updates to PaperWasp modify communication rules used by plugins,
and if plugin developers do not keep their plugins in sync with these changes, issues may arise.
Running without plugins can help diagnose specific problems.
- You can use cmdline `notepad++.exe -noPlugin`
- or rename your plugin folder, usually "C:\Program Files\Notepad++\plugins\" to e.g. "...\plugins.bak\").
+ You can temporarily move your user plugin folder, usually `~/Library/Application Support/PaperWasp/plugins`.
options:
- - label: I have tried Notepad++ without plugin
+ - label: I have tried PaperWasp without plugins
required: false
- type: checkboxes
attributes:
- label: Is the issue reproducible in portable version of Notepad++?
+ label: Is the issue reproducible with a clean PaperWasp configuration?
description: |
- If feasible, try launching portable version of Notepad++.
- It can help to diagnose if specific configuration is causing issue.
+ If feasible, try launching PaperWasp with a clean user configuration.
+ It can help diagnose whether a specific configuration is causing the issue.
options:
- - label: I have tried portable version of Notepad++
+ - label: I have tried a clean PaperWasp configuration
required: false
- type: checkboxes
attributes:
label: Does the issue affect SciTE?
description: |
- Notepad++ relies on the Lexilla and Scintilla libraries.
+ PaperWasp relies on the Lexilla and Scintilla libraries.
For more details, visit https://github.com/ScintillaOrg/lexilla and https://sourceforge.net/p/scintilla.
- Consider using the reference program SciTE to verify whether the issue is a genuine bug in Notepad++.
+ Consider using the reference program SciTE to verify whether the issue is in the shared editor/lexer stack.
Download Scite from here https://www.scintilla.org/SciTEDownload.html.
options:
- label: I have tried SciTE
@@ -84,9 +83,9 @@ body:
attributes:
label: Debug Information
description: |
- In your Notepad++, click on the "?" menu (found to the right of "Window" in the menu bar).
+ In PaperWasp, click on the "?" menu (found to the right of "Window" in the menu bar).
In the menu that drops down, choose "Debug Info...".
- A dialog will open detailing specifics about your Notepad++ version, plugins, etc.
+ A dialog will open detailing specifics about your PaperWasp version, plugins, etc.
CLICK ON THE BUTTON "Copy debug info into clipboard".
Do a PASTE HERE
render: shell
diff --git a/.github/ISSUE_TEMPLATE/2-feature-request.yml b/.github/ISSUE_TEMPLATE/2-feature-request.yml
index ccc49cffba01..c0ee878c5125 100644
--- a/.github/ISSUE_TEMPLATE/2-feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/2-feature-request.yml
@@ -1,5 +1,5 @@
name: Feature request
-description: Suggest an idea for Notepad++
+description: Suggest an idea for PaperWasp
title: "[Feature request]
"
#labels: ["feature"]
#type: feature
@@ -27,9 +27,9 @@ body:
attributes:
label: Debug Information
description: |
- In your Notepad++, click on the "?" menu (found to the right of "Window" in the menu bar).
+ In PaperWasp, click on the "?" menu (found to the right of "Window" in the menu bar).
In the menu that drops down, choose "Debug Info...".
- A dialog will open detailing specifics about your Notepad++ version, plugins, etc.
+ A dialog will open detailing specifics about your PaperWasp version, plugins, etc.
CLICK ON THE BUTTON "Copy debug info into clipboard".
Do a PASTE HERE
render: shell
@@ -41,12 +41,12 @@ body:
description: |
Links? References? Anything that will give us more context about the feature you want!
- Notepad++ relies on the Lexilla and Scintilla libraries.
+ PaperWasp relies on the Lexilla and Scintilla libraries.
For more details, visit https://github.com/ScintillaOrg/lexilla and https://sourceforge.net/p/scintilla.
If you have specific language feature requests, consider using the reference program SciTE to verify whether the desired feature is supported.
You can download SciTE from here https://www.scintilla.org/SciTEDownload.html.
- If you have any questions about Notepad++ usage, explore the community forum https://community.notepad-plus-plus.org/category/7/faq.
+ For upstream Notepad++ usage questions, use the Notepad++ community forum: https://community.notepad-plus-plus.org/category/7/faq.
Tip: You can attach images by clicking this area to highlight it and then dragging files in.
validations:
diff --git a/.github/workflows/macos_ci.yml b/.github/workflows/macos_ci.yml
index 9e3028429f6b..0fdd45aec0d6 100644
--- a/.github/workflows/macos_ci.yml
+++ b/.github/workflows/macos_ci.yml
@@ -68,41 +68,41 @@ jobs:
working-directory: macos/build
run: cmake -G Xcode ..
- - name: Build MacNotePlusPlus (Release)
+ - name: Build PaperWasp (Release)
working-directory: macos/build
- run: cmake --build . --target MacNotePlusPlus --config Release -- -quiet
+ run: cmake --build . --target PaperWasp --config Release -- -quiet
- - name: Build MacNotePlusPlus (Debug)
+ - name: Build PaperWasp (Debug)
working-directory: macos/build
- run: cmake --build . --target MacNotePlusPlus --config Debug -- -quiet
+ run: cmake --build . --target PaperWasp --config Debug -- -quiet
- name: Build app bundle (package)
working-directory: macos/build
- run: cmake --build . --target MacNotePlusPlus_package --config Release
+ run: cmake --build . --target PaperWasp_package --config Release
- name: Verify app bundle
run: |
echo "=== App bundle structure ==="
- ls -lR macos/dist/MacNote++.app/Contents/ | head -30
+ ls -lR macos/dist/PaperWasp.app/Contents/ | head -30
echo ""
echo "=== Binary info ==="
- file macos/dist/MacNote++.app/Contents/MacOS/MacNotePlusPlus
+ file macos/dist/PaperWasp.app/Contents/MacOS/PaperWasp
echo ""
echo "=== Linked frameworks ==="
- otool -L macos/dist/MacNote++.app/Contents/MacOS/MacNotePlusPlus | head -20
+ otool -L macos/dist/PaperWasp.app/Contents/MacOS/PaperWasp | head -20
- name: Upload app bundle artifact
uses: actions/upload-artifact@v4
with:
- name: MacNote++.app-${{ matrix.runner }}-${{ matrix.arch }}
- path: macos/dist/MacNote++.app
+ name: PaperWasp.app-${{ matrix.runner }}-${{ matrix.arch }}
+ path: macos/dist/PaperWasp.app
retention-days: 14
- name: Upload Release binary artifact
uses: actions/upload-artifact@v4
with:
- name: MacNotePlusPlus-Release-${{ matrix.runner }}-${{ matrix.arch }}
- path: macos/build/Release/MacNotePlusPlus
+ name: PaperWasp-Release-${{ matrix.runner }}-${{ matrix.arch }}
+ path: macos/build/Release/PaperWasp
retention-days: 14
sign_and_notarize:
@@ -145,12 +145,12 @@ jobs:
if: steps.check_secrets.outputs.skip != 'true'
uses: actions/download-artifact@v4
with:
- name: MacNote++.app-macos-15-arm64
+ name: PaperWasp.app-macos-15-arm64
path: macos/dist
- name: Restore executable permission
if: steps.check_secrets.outputs.skip != 'true'
- run: chmod +x macos/dist/MacNote++.app/Contents/MacOS/MacNotePlusPlus
+ run: chmod +x macos/dist/PaperWasp.app/Contents/MacOS/PaperWasp
- name: Import code signing certificate
if: steps.check_secrets.outputs.skip != 'true'
@@ -185,17 +185,17 @@ jobs:
if: steps.check_secrets.outputs.skip != 'true'
run: |
mkdir -p macos/dist/dmg-root
- rm -rf macos/dist/dmg-root/MacNote++.app
- cp -R macos/dist/MacNote++.app macos/dist/dmg-root/MacNote++.app
+ rm -rf macos/dist/dmg-root/PaperWasp.app
+ cp -R macos/dist/PaperWasp.app macos/dist/dmg-root/PaperWasp.app
rm -f macos/dist/dmg-root/Applications
ln -s /Applications macos/dist/dmg-root/Applications
- rm -f macos/dist/MacNote++-unsigned.dmg
+ rm -f macos/dist/PaperWasp-unsigned.dmg
hdiutil create \
- -volname "MacNote++" \
+ -volname "PaperWasp" \
-srcfolder macos/dist/dmg-root \
-format UDZO \
-ov \
- macos/dist/MacNote++-unsigned.dmg
+ macos/dist/PaperWasp-unsigned.dmg
- name: Sign and notarize
if: steps.check_secrets.outputs.skip != 'true'
@@ -212,16 +212,16 @@ jobs:
if: steps.check_secrets.outputs.skip != 'true'
uses: actions/upload-artifact@v4
with:
- name: MacNote++.dmg-signed-arm64
- path: macos/dist/MacNote++.dmg
+ name: PaperWasp.dmg-signed-arm64
+ path: macos/dist/PaperWasp.dmg
retention-days: 30
- name: Upload signed app bundle
if: steps.check_secrets.outputs.skip != 'true'
uses: actions/upload-artifact@v4
with:
- name: MacNote++.app-signed-arm64
- path: macos/dist/MacNote++.app
+ name: PaperWasp.app-signed-arm64
+ path: macos/dist/PaperWasp.app
retention-days: 30
- name: Cleanup keychain
diff --git a/BUILD.md b/BUILD.md
index a9b98e5f25c7..3b26979eca67 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -1,4 +1,29 @@
-# Building Notepad++
+# Building PaperWasp
+
+PaperWasp is the macOS application in this repository. The `PowerEditor/`
+directory keeps the upstream Notepad++ Windows codebase for compatibility and
+attribution.
+
+## macOS
+
+Use the Xcode generator. The default Makefiles generator is not reliable with
+this source tree's deeply nested object paths.
+
+```bash
+cd macos/build
+cmake -G Xcode ..
+cmake --build . --target PaperWasp
+cmake --build . --target PaperWasp_package
+cmake --build . --target PaperWasp_dmg
+```
+
+Artifacts are generated in `macos/dist/`:
+
+- `PaperWasp.app`
+- `PaperWasp-unsigned.dmg`
+- `PaperWasp.dmg` when signing is enabled
+
+## Upstream Windows Build
## Microsoft Visual Studio
@@ -12,17 +37,17 @@ There are three components which are built from one visual studio solution:
- `libScintilla.lib` : static library based on [Scintilla](https://www.scintilla.org/)
- `libLexilla.lib` : static library based on [Lexilla](https://www.scintilla.org/Lexilla.html)
-Notepad++ is always built **with** Boost regex PCRE support instead of default c++11 regex ECMAScript used by plain Scintilla.
+The upstream Windows application is built **with** Boost regex PCRE support instead of default c++11 regex ECMAScript used by plain Scintilla.
### Build `notepad++.exe`
1. Open [`PowerEditor\visual.net\notepadPlus.sln`](https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/visual.net/notepadPlus.sln)
2. Select a solution configuration (Debug or Release) and a solution platform (x64 or Win32 or ARM64)
- 3. Build Notepad++ solution like a normal Visual Studio project. This will also build the dependent Scintilla and Lexilla projects.
+ 3. Build the upstream solution like a normal Visual Studio project. This will also build the dependent Scintilla and Lexilla projects.
### Build `libScintilla.lib` and `libLexilla.lib`
-As mentioned above, you'll need `libScintilla.lib` and `libLexilla.lib` for the Notepad++ build. This is done automatically on building the whole solution. So normally you don't need to care about this.
+As mentioned above, you'll need `libScintilla.lib` and `libLexilla.lib` for the upstream Windows build. This is done automatically on building the whole solution. So normally you don't need to care about this.
#### Build `libScintilla.lib` with boost and `libLexilla.lib` via nmake
@@ -50,13 +75,13 @@ uses features from Boost's `Boost.Regex` library.
## GCC
-If you have [MinGW-w64](https://www.mingw-w64.org/) installed, you can compile Notepad++ with GCC. Otherwise MinGW-w64 can be downloaded [here](https://sourceforge.net/projects/mingw-w64/files/). You can also download some collection of tools which supports MinGW-w64, like [MSYS2](https://www.msys2.org/) or [WinLibs](https://winlibs.com/).
+If you have [MinGW-w64](https://www.mingw-w64.org/) installed, you can compile the upstream Windows application with GCC. Otherwise MinGW-w64 can be downloaded [here](https://sourceforge.net/projects/mingw-w64/files/). You can also download some collection of tools which supports MinGW-w64, like [MSYS2](https://www.msys2.org/) or [WinLibs](https://winlibs.com/).
-Building Notepad++ is regularly tested on a Windows system by using [MSYS2](https://www.msys2.org/) project. Current versions of tools used to building (such as GCC, Clang, Make or Bash) can be checked by looking at some logs from the finished building (for example in the [current-build page](https://github.com/notepad-plus-plus/notepad-plus-plus/actions/workflows/CI_build.yml)). Other versions may also work but are untested.
+Building the upstream Windows application is regularly tested on a Windows system by using [MSYS2](https://www.msys2.org/) project. Current versions of tools used to building (such as GCC, Clang, Make or Bash) can be checked by looking at some logs from the finished building (for example in the upstream current-build page). Other versions may also work but are untested.
**Note:** Before building make sure that the system `PATH` environment variable contains `$MinGW-root$\bin` directory. Otherwise you have to set this directory yourself in Windows settings. You can also use a command like `set PATH=$MinGW-root$\bin;%PATH%` each time `cmd` is launched. But beware that if `PATH` contains several versions of MinGW-w64 GCC, only the first one will be usable.
-### Compiling Notepad++ binary
+### Compiling the upstream Windows binary
1. Launch `cmd` and add `$MinGW-root$\bin` to `PATH` if necessary.
2. `cd` into `notepad-plus-plus\PowerEditor\gcc`.
@@ -65,24 +90,10 @@ Building Notepad++ is regularly tested on a Windows system by using [MSYS2](http
#### Some additional information
-- The directory containing `notepad++.exe` will also contain everything needed for Notepad++ to start.
+- The directory containing `notepad++.exe` will also contain everything needed for the upstream Windows application to start.
- To have a debug build just add `DEBUG=1` to the `mingw32-make` invocation above. The output directory then will be suffixed with `-debug`.
- To see commands being executed add `VERBOSE=1` to the same command.
- When a project is built outside of the `PowerEditor/gcc` directory, for example when using `-f` option, then the entire project path must not contain any spaces. Additionally, the path to `makefile` of this project should be listed as first.
- When a project is built through MinGW-w64 with multilib support, a specific target can be forced by passing `TARGET_CPU` variable with `x86_64` or `i686` as value.
- To use Clang instead of GCC for compilation provide `CXX` variable with `clang++` as value.
- To use [Clang analyzer](https://clang-analyzer.llvm.org/) together with Clang provide `CLANGANALYZE=1` to the `mingw32-make` invocation.
-
-## macOS (experimental port)
-
-The macOS port uses CMake from the `macos/` directory.
-
-1. Configure: `cmake -S macos -B macos/build`
-2. Build app binary: `cmake --build macos/build --target MacOSNotePP`
-3. Package app bundle: `cmake --build macos/build --target MacOSNotePP_package`
-4. Build unsigned DMG: `cmake --build macos/build --target MacOSNotePP_dmg`
-
-Artifacts are generated in `macos/dist/`:
-
-- `MacNote++.app`
-- `MacNote++-unsigned.dmg`
diff --git a/CLAUDE.md b/CLAUDE.md
index dbe293d45209..fc4822fffe64 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Project Overview
-**MacNotePlusPlus 1.0** is a macOS port of Notepad++, the Windows-native source code editor written in C++20. The upstream Notepad++ wraps the Scintilla editor component and Lexilla lexer library, adding tabbed editing, plugin support, docking panels, and extensive configuration. The original is a Win32 application using the Windows API directly (no cross-platform framework). This project brings that functionality to macOS.
+**PaperWasp 1.0** is an independent macOS port based on Notepad++, the Windows-native source code editor written in C++20. The upstream Notepad++ project wraps the Scintilla editor component and Lexilla lexer library, adding tabbed editing, plugin support, docking panels, and extensive configuration. PaperWasp is not endorsed by the creators of Notepad++.
## Build Commands
@@ -19,18 +19,18 @@ rm -rf *
cmake -G Xcode ..
# Build the app (development binary)
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
# Build the .app bundle (for testing Finder integration, icon, etc.)
-cmake --build . --target MacNotePlusPlus_package
+cmake --build . --target PaperWasp_package
# Build unsigned DMG for distribution
-cmake --build . --target MacNotePlusPlus_dmg
+cmake --build . --target PaperWasp_dmg
# Build with code signing (opt-in, requires Developer ID certificate)
cmake -G Xcode .. -DCODESIGN_ENABLED=ON -DCODESIGN_IDENTITY="Developer ID Application"
-cmake --build . --target MacNotePlusPlus_sign # Sign .app bundle
-cmake --build . --target MacNotePlusPlus_dmg # Build + sign DMG
+cmake --build . --target PaperWasp_sign # Sign .app bundle
+cmake --build . --target PaperWasp_dmg # Build + sign DMG
# Full sign + notarize workflow (after building unsigned DMG)
export CODESIGN_IDENTITY="Developer ID Application"
@@ -40,10 +40,10 @@ export APPLE_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"
macos/scripts/sign-and-notarize.sh
# Run the app (development build)
-./Debug/MacNotePlusPlus
+./Debug/PaperWasp
# Run the packaged app
-open ../dist/MacNote++.app
+open ../dist/PaperWasp.app
```
**Important:** Use the Xcode generator (`-G Xcode`). The default Makefiles generator fails on deeply nested object paths in this repo. The Xcode generator is required for reliable builds.
diff --git a/README.md b/README.md
index 0b963ae79fee..2872944eb0e3 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,34 @@
-What is Notepad++ ?
-===================
-
-[](../../releases/latest) [](https://github.com/notepad-plus-plus/notepad-plus-plus/actions/workflows/CI_build.yml)
- [](https://community.notepad-plus-plus.org/)
-
-Notepad++ is a free (free as in both "free speech" and "free beer") source code
-editor and Notepad replacement that supports several programming languages and
-natural languages. Running in the MS Windows environment, its use is governed by
-[GPL License](LICENSE).
-
-See the [Notepad++ official site](https://notepad-plus-plus.org/) for more information.
-
-
-Notepad++ GPG Release Key
--------------------------
-_Since the release of version 7.6.5 Notepad++ is signed using GPG with the following key:_
-
-- **Signer:** Notepad++
-- **E-mail:** don.h@free.fr
-- **Key ID:** 0x8D84F46E
-- **Key fingerprint:** 14BC E436 2749 B2B5 1F8C 7122 6C42 9F1D 8D84 F46E
-- **Key type:** RSA 4096/4096
-- **Created:** 2019-03-11
-- **Expires:** 2027-03-13
-
-https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/nppGpgPub.asc
-
-
-Supported OS
-------------
-
-All the Windows systems still supported by Microsoft are supported by Notepad++. However, not all Notepad++ users can or want to use the newest system. Here is the [Supported systems information](SUPPORTED_SYSTEM.md) you may need in case you are one of them.
-
-
-
-
-Build Notepad++
----------------
-
-Please follow [build guide](BUILD.md) to build Notepad++ from source.
-
-
-Contribution
-------------
-
-Contributions are welcome. Be mindful of our [Contribution Rules](CONTRIBUTING.md) to increase the likelihood of your contribution getting accepted.
-
-[Notepad++ Contributors](https://github.com/notepad-plus-plus/notepad-plus-plus/graphs/contributors)
-
+# PaperWasp
+
+PaperWasp is an independent macOS source code editor based on the Notepad++ codebase.
+It ports the Windows-native C++ editor through a macOS compatibility layer, preserving
+the Scintilla editor component, Lexilla lexers, tabbed editing, plugins, and related
+editing workflows where practical.
+
+PaperWasp is not affiliated with, sponsored by, or endorsed by the creators of
+Notepad++.
+
+## Attribution
+
+PaperWasp is based on Notepad++ by Don Ho and the Notepad++ contributors. The
+upstream project is available at https://github.com/notepad-plus-plus/notepad-plus-plus
+and https://notepad-plus-plus.org/.
+
+PaperWasp also uses Scintilla and Lexilla. See the project licenses and vendored
+dependency notices for details.
+
+## Build PaperWasp
+
+The macOS port uses CMake with the Xcode generator:
+
+```bash
+cd macos/build
+cmake -G Xcode ..
+cmake --build . --target PaperWasp
+cmake --build . --target PaperWasp_package
+cmake --build . --target PaperWasp_dmg
+```
+
+Build outputs are written under `macos/build/` and `macos/dist/`.
+
+For legacy upstream Windows build information, see [BUILD.md](BUILD.md).
diff --git a/about.png b/about.png
new file mode 100644
index 000000000000..e7bb37abdb14
Binary files /dev/null and b/about.png differ
diff --git a/docs/superpowers/plans/2026-03-30-1.1-sprint-panels.md b/docs/superpowers/plans/2026-03-30-1.1-sprint-panels.md
index 04d9be3db8d4..fb4f6e039053 100644
--- a/docs/superpowers/plans/2026-03-30-1.1-sprint-panels.md
+++ b/docs/superpowers/plans/2026-03-30-1.1-sprint-panels.md
@@ -10,7 +10,7 @@
**Spec:** `docs/superpowers/specs/2026-03-30-1.1-sprint-panels-design.md`
-**Build command:** `cd macos/build && cmake --build . --target MacOSNotePP`
+**Build command:** `cd macos/build && cmake --build . --target PaperWasp`
**Review feedback addressed:** Concurrency guards for FSEvents, async icon caching, split-view behavior rules, inline rename validation, File Switcher unified-list semantics, path-display edge cases, cross-view switching helper, minimum panel width.
@@ -139,7 +139,7 @@ In `npp_constants.h`, after `IDM_VIEW_CLIPBOARD_HISTORY 42087` (line 116), add:
- [ ] **Step 3: Build to verify no compilation errors**
-Run: `cd macos/build && cmake --build . --target MacOSNotePP 2>&1 | tail -5`
+Run: `cd macos/build && cmake --build . --target PaperWasp 2>&1 | tail -5`
Expected: Build succeeds with no errors.
- [ ] **Step 4: Commit**
@@ -202,7 +202,7 @@ And in the save path, populate settings from `ctx()` before saving.
- [ ] **Step 4: Build to verify**
-Run: `cd macos/build && cmake --build . --target MacOSNotePP 2>&1 | tail -5`
+Run: `cd macos/build && cmake --build . --target PaperWasp 2>&1 | tail -5`
Expected: Build succeeds.
- [ ] **Step 5: Commit**
@@ -358,7 +358,7 @@ In `macos/CMakeLists.txt`, after the `clipboard_history_panel.mm` line (around l
- [ ] **Step 4: Build to verify**
-Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target MacOSNotePP 2>&1 | tail -5`
+Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target PaperWasp 2>&1 | tail -5`
Expected: Build succeeds. (cmake regeneration needed for new source file)
- [ ] **Step 5: Commit**
@@ -755,7 +755,7 @@ void* fileSwitcherContainerView() { return nullptr; }
- [ ] **Step 7: Build and manually verify**
-Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target MacOSNotePP 2>&1 | tail -10`
+Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target PaperWasp 2>&1 | tail -10`
Then launch the app and verify:
- Existing panels (Function List, Clipboard History, Document Map) still toggle and display correctly
@@ -812,7 +812,7 @@ Both panels currently use `NSViewMinXMargin | NSViewHeightSizable` (stick to rig
- [ ] **Step 6: Build and verify**
-Run: `cd macos/build && cmake --build . --target MacOSNotePP 2>&1 | tail -5`
+Run: `cd macos/build && cmake --build . --target PaperWasp 2>&1 | tail -5`
Launch and verify:
- Function List and Clipboard History both enabled → they stack vertically in the right zone
@@ -1181,7 +1181,7 @@ The `SCN_SAVEPOINTLEFT` / `SCN_SAVEPOINTREACHED` notification wiring should be a
- [ ] **Step 6: Build and verify**
-Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target MacOSNotePP 2>&1 | tail -10`
+Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target PaperWasp 2>&1 | tail -10`
Launch and manually test:
- Toggle File Switcher from View menu
@@ -1761,7 +1761,7 @@ Replace the stub with `#include "file_browser_panel.h"`.
- [ ] **Step 10: Build and verify**
-Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target MacOSNotePP 2>&1 | tail -10`
+Run: `cd macos/build && cmake -G Xcode .. && cmake --build . --target PaperWasp 2>&1 | tail -10`
Launch and test:
- Toggle File Browser panel from View menu → shows placeholder
@@ -1894,7 +1894,7 @@ Add to `app_delegate.mm`:
- [ ] **Step 8: Build and full integration test**
-Run: `cd macos/build && cmake --build . --target MacOSNotePP 2>&1 | tail -5`
+Run: `cd macos/build && cmake --build . --target PaperWasp 2>&1 | tail -5`
Full manual test:
- View > File Browser (Cmd+Shift+E) → toggles panel
diff --git a/docs/superpowers/plans/2026-04-14-compare-plus-menu-wiring.md b/docs/superpowers/plans/2026-04-14-compare-plus-menu-wiring.md
index e0a1dff8d82d..b5bc665c69bc 100644
--- a/docs/superpowers/plans/2026-04-14-compare-plus-menu-wiring.md
+++ b/docs/superpowers/plans/2026-04-14-compare-plus-menu-wiring.md
@@ -208,7 +208,7 @@ Expected: all five found in `plugins/comparePlus/src/NppAPI/Notepad_plus_msgs.h`
- [ ] **Step 7: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
cmake --build macos/build --target ComparePlus
cmake --build macos/build --target install_compare_plus
```
@@ -251,7 +251,7 @@ Catch regressions where the plugin initialization order or the second-view lifec
```objc
// plugin_invariants.h — launch-time and NPPN_READY assertions.
-// Output is gated behind MACNOTE_PLUGIN_DEBUG=1 env var.
+// Output is gated behind PAPERWASP_PLUGIN_DEBUG=1 env var.
#pragma once
@@ -278,7 +278,7 @@ static bool debugEnabled()
static int cached = -1;
if (cached < 0)
{
- const char* v = getenv("MACNOTE_PLUGIN_DEBUG");
+ const char* v = getenv("PAPERWASP_PLUGIN_DEBUG");
cached = (v && v[0] == '1') ? 1 : 0;
}
return cached == 1;
@@ -340,8 +340,8 @@ Add `"${CMAKE_CURRENT_SOURCE_DIR}/platform/plugin_invariants.mm"` to the `platfo
- [ ] **Step 5: Build and verify debug output**
```bash
-cmake --build macos/build --target MacNotePlusPlus
-MACNOTE_PLUGIN_DEBUG=1 ./macos/build/Debug/MacNotePlusPlus 2>&1 | grep plugin-invariants
+cmake --build macos/build --target PaperWasp
+PAPERWASP_PLUGIN_DEBUG=1 ./macos/build/Debug/PaperWasp 2>&1 | grep plugin-invariants
```
Expected: two lines logged, one pre-init with non-null pointers, one post-ready with a non-null pluginsMenu.
@@ -357,7 +357,7 @@ git commit -m "$(cat <<'EOF'
feat: add plugin-init invariants and post-NPPN_READY diagnostics
Asserts scintillaSecondHwnd is eager-allocated before plugin setInfo, and
-dumps menu + split state after NPPN_READY when MACNOTE_PLUGIN_DEBUG=1.
+dumps menu + split state after NPPN_READY when PAPERWASP_PLUGIN_DEBUG=1.
Catches regressions in the launch sequence before they surface as silent
compare failures.
@@ -381,13 +381,13 @@ cmake --build macos/build --target install_compare_plus
- [ ] **Step 2: Launch the app**
```bash
-open macos/build/Debug/MacNotePlusPlus.app
+open macos/build/Debug/PaperWasp.app
```
Or run the development binary directly:
```bash
-./macos/build/Debug/MacNotePlusPlus
+./macos/build/Debug/PaperWasp
```
- [ ] **Step 3: Prepare two test files**
@@ -420,7 +420,7 @@ Open both files in the app via File → Open or drag-and-drop.
- The editor splits into two panes side-by-side.
- The left pane shows A.txt, the right pane shows B.txt.
- Line 2 is highlighted as changed; "Unique to A" is marked removed in B's pane and "Unique to B" is marked added.
- - If nothing visible happens in the right pane, the visibility trigger failed — fall back to diagnosing via `MACNOTE_PLUGIN_DEBUG=1` logs.
+ - If nothing visible happens in the right pane, the visibility trigger failed — fall back to diagnosing via `PAPERWASP_PLUGIN_DEBUG=1` logs.
5. **Plugins → ComparePlus → Clear Active**. The split view collapses to a single pane; markers vanish.
6. Repeat steps 3-4, then **Clear All**. Same expected result.
7. Compare a file with itself: open two separate tabs pointing to `/tmp/A.txt`, Set as First on one, Compare on the other. Expected: a MessageBox appears stating "files are identical."
@@ -495,12 +495,12 @@ gh pr create --base feature/compare-plus-port \
## Summary
- Route NPPM_SETLINENUMBERWIDTHMODE to auto-split / auto-unsplit around the plugin's compareMode transitions so diff markers land in a visible pane.
- Add no-op handlers for NPPM_HIDETABBAR, NPPM_SETSTATUSBAR, and NPPM_ADDTOOLBARICON_FORDARKMODE.
-- Add pre-init invariants + post-NPPN_READY diagnostics gated on MACNOTE_PLUGIN_DEBUG=1.
+- Add pre-init invariants + post-NPPN_READY diagnostics gated on PAPERWASP_PLUGIN_DEBUG=1.
## Test plan
- [ ] `macos/scripts/smoke-test-compare.sh`
-- [ ] App launches, `MACNOTE_PLUGIN_DEBUG=1` logs show pre-init pointers non-null
+- [ ] App launches, `PAPERWASP_PLUGIN_DEBUG=1` logs show pre-init pointers non-null
- [ ] Open /tmp/A.txt and /tmp/B.txt; Set as First on A; Compare from B → split view appears, diffs are visible
- [ ] Clear Active → split collapses, markers vanish
- [ ] Clear All after re-Compare → same
@@ -699,7 +699,7 @@ In `macos/CMakeLists.txt`, add to the `SHIM_SOURCES` list (or equivalent — con
- [ ] **Step 6: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
Expected: clean compile. No linker errors yet (the template is registered but not consumed until Task 9).
@@ -795,7 +795,7 @@ HWND GetDlgItem(HWND hDlg, int nIDDlgItem)
- [ ] **Step 5: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
Expected: clean compile. No behavior change yet — nothing populates `dlgItemId` until Task 7.
@@ -1004,7 +1004,7 @@ Append to `SHIM_SOURCES`:
- [ ] **Step 4: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
- [ ] **Step 5: Commit**
@@ -1116,7 +1116,7 @@ Add `EnableWindow`, `SetWindowTextW`, `GetWindowTextW`, `GetWindowTextLengthW` e
- [ ] **Step 3: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
- [ ] **Step 4: Unit smoke test (ad-hoc)**
@@ -1371,7 +1371,7 @@ Append to `SHIM_SOURCES`:
- [ ] **Step 7: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
Expected: clean. Dialog infrastructure is now usable but no dialog opens yet because the plugin's dialog files are still stubbed.
@@ -1448,7 +1448,7 @@ Add each missing stub one by one, re-running the build, until the plugin links.
```bash
cmake --build macos/build --target install_compare_plus
-open macos/build/Debug/MacNotePlusPlus.app
+open macos/build/Debug/PaperWasp.app
```
Plugins → ComparePlus → **Compare Options** → verify:
@@ -1528,7 +1528,7 @@ AutoRegister _register;
- [ ] **Step 4: Build**
```bash
-cmake --build macos/build --target MacNotePlusPlus
+cmake --build macos/build --target PaperWasp
```
- [ ] **Step 5: Commit**
@@ -1628,12 +1628,12 @@ grep -n "WritePrivateProfileStringW\|GetPluginsConfigDir\|Settings.ini" \
plugins/comparePlus/src/UserSettings.cpp macos/shim/src/*.mm
```
-Expected: `UserSettings::save()` calls `WritePrivateProfileStringW` against a path derived from `NPPM_GETPLUGINSCONFIGDIR`. The shim's `WritePrivateProfileStringW` must resolve wide-string paths to the `~/Library/Application Support/MacNote++/plugins/Config/` tree.
+Expected: `UserSettings::save()` calls `WritePrivateProfileStringW` against a path derived from `NPPM_GETPLUGINSCONFIGDIR`. The shim's `WritePrivateProfileStringW` must resolve wide-string paths to the `~/Library/Application Support/PaperWasp/plugins/Config/` tree.
- [ ] **Step 2: Run the app, change a setting, quit, inspect disk**
```bash
-ls ~/Library/Application\ Support/MacNote++/plugins/Config/
+ls ~/Library/Application\ Support/PaperWasp/plugins/Config/
```
Expected: a `ComparePlus.ini` (or similar) file whose contents reflect the change.
@@ -1684,7 +1684,7 @@ gh pr create --base feature/compare-plus-port \
- [ ] Plugins → ComparePlus → Settings opens; color wells, spin edits, and radio groups render
- [ ] Changing a setting and running Compare afterward honours the new value
- [ ] Quit, relaunch, reopen dialog — change survived
-- [ ] `ls ~/Library/Application\ Support/MacNote++/plugins/Config/` shows a ComparePlus.ini
+- [ ] `ls ~/Library/Application\ Support/PaperWasp/plugins/Config/` shows a ComparePlus.ini
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
diff --git a/docs/superpowers/plans/2026-04-21-compareplus-radio-groups.md b/docs/superpowers/plans/2026-04-21-compareplus-radio-groups.md
index bf624ad4ea7f..47c0de36ffa8 100644
--- a/docs/superpowers/plans/2026-04-21-compareplus-radio-groups.md
+++ b/docs/superpowers/plans/2026-04-21-compareplus-radio-groups.md
@@ -114,7 +114,7 @@ Run:
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
```
Expected: build succeeds. No warnings about the new selectors (they're declared and implemented).
@@ -202,7 +202,7 @@ void Win32Radio_Init(void* hwndVoid, int groupIndex)
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
```
Expected: build succeeds. The function is unused for now — no warning because it has external linkage.
@@ -298,7 +298,7 @@ This keeps behavior identical to today (every radio falls back to `buttonClicked
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
```
Expected: build succeeds.
@@ -371,7 +371,7 @@ Replace it with:
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
```
Expected: build succeeds.
@@ -401,8 +401,8 @@ The shim has no UI test harness. Verify by hand on a Debug build.
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
-./Debug/MacNotePlusPlus
+cmake --build . --target PaperWasp
+./Debug/PaperWasp
```
- [ ] **Step 2: Open two files and the ComparePlus Settings dialog**
@@ -438,7 +438,7 @@ If steps 3-5 all pass, the fix is complete. If any step fails, document which ra
```bash
cd macos/build
-cmake --build . --target MacNotePlusPlus
+cmake --build . --target PaperWasp
```
Expected: build succeeds, working tree is clean (`git status` shows no pending changes beyond pre-existing untracked files).
diff --git a/docs/superpowers/specs/2026-04-14-compare-plus-menu-wiring-design.md b/docs/superpowers/specs/2026-04-14-compare-plus-menu-wiring-design.md
index 786e79dfbde5..caa6ab573a30 100644
--- a/docs/superpowers/specs/2026-04-14-compare-plus-menu-wiring-design.md
+++ b/docs/superpowers/specs/2026-04-14-compare-plus-menu-wiring-design.md
@@ -217,7 +217,7 @@ Upstream `doDialog()` is modeless with its own message loop. We model it as a **
### 4.7 Settings persistence
-`UserSettings::save()` (in `UserSettings.cpp`) writes INI via `WritePrivateProfileStringW`. Verify the shim's INI writer resolves paths against `NPPM_GETPLUGINSCONFIGDIR` (`~/Library/Application Support/MacNote++/plugins/Config/`).
+`UserSettings::save()` (in `UserSettings.cpp`) writes INI via `WritePrivateProfileStringW`. Verify the shim's INI writer resolves paths against `NPPM_GETPLUGINSCONFIGDIR` (`~/Library/Application Support/PaperWasp/plugins/Config/`).
### 4.8 Testing plan — PR 2
@@ -245,7 +245,7 @@ Upstream `doDialog()` is modeless with its own message loop. We model it as a **
### 5.1 Testing strategy across both PRs
Three layers:
-- **Launch-time assertions** (`macos/platform/plugin_invariants.mm`, gated behind `MACNOTE_PLUGIN_DEBUG=1`): `scintillaSecondHwnd != nullptr` after `applicationDidFinishLaunching`, plugin command-ID allocations within range, `NPPM_GETMENUHANDLE(NPPPLUGINMENU)` non-null. Catches ordering regressions; doesn't prove compare works.
+- **Launch-time assertions** (`macos/platform/plugin_invariants.mm`, gated behind `PAPERWASP_PLUGIN_DEBUG=1`): `scintillaSecondHwnd != nullptr` after `applicationDidFinishLaunching`, plugin command-ID allocations within range, `NPPM_GETMENUHANDLE(NPPPLUGINMENU)` non-null. Catches ordering regressions; doesn't prove compare works.
- **Focused unit tests** (2 per PR, under `macos/tests/`). Catches single-unit regressions; doesn't exercise integration.
- **Manual smoke tests** (Sections 3.5, 4.8). Authoritative; recorded in PR description as a reviewer checklist.
@@ -257,7 +257,7 @@ We deliberately **do not** build automated end-to-end diff tests. That infrastru
- `NSLog` on dialog template parse, with the control-class histogram.
- `NSLog` when `StaticDialog::create()` hits the unknown-control fallback.
-All gated behind `MACNOTE_PLUGIN_DEBUG=1`.
+All gated behind `PAPERWASP_PLUGIN_DEBUG=1`.
### 5.3 Rollback
@@ -276,7 +276,7 @@ All gated behind `MACNOTE_PLUGIN_DEBUG=1`.
1. Exact `SCI_*` messages the Engine sends that our bridge doesn't handle yet. Resolution: grep `sciFunc(` in `plugins/comparePlus/src/Engine/Engine.cpp` and `NppHelpers.cpp`; cross-reference `scintilla_bridge.mm`.
2. Does the bridge forward `SCI_ANNOTATIONSETTEXT` / `SCI_ANNOTATIONSETSTYLE`? If not, plan decides PR 1 vs defer.
3. Exact control inventory for the two target `.rc` files. Produce a `{class, count, max instance ID}` table; flag unmapped controls.
-4. Does `UserSettings::save()` succeed against `~/Library/Application Support/MacNote++/plugins/Config/` through the existing `WritePrivateProfileStringW` shim?
+4. Does `UserSettings::save()` succeed against `~/Library/Application Support/PaperWasp/plugins/Config/` through the existing `WritePrivateProfileStringW` shim?
5. Does the "first write un-hides second view" trigger fire reliably, or does the Engine issue reads before writes? Enumerate the first N Scintilla calls in `Engine.cpp`'s setup prologue; widen trigger to "any `SCI_*` against second handle with compareMode implied" if reads precede writes.
6. Does `EnableMenuItem`'s disabled/enabled flag propagate to `NSMenuItem.enabled`?
7. What base branch should PR 1 fork from? `git log --graph master..feature/compare-plus-port` to decide.
diff --git a/docs/superpowers/specs/2026-04-21-compareplus-radio-groups-design.md b/docs/superpowers/specs/2026-04-21-compareplus-radio-groups-design.md
index e8193a6497f3..e88541f7414f 100644
--- a/docs/superpowers/specs/2026-04-21-compareplus-radio-groups-design.md
+++ b/docs/superpowers/specs/2026-04-21-compareplus-radio-groups-design.md
@@ -162,7 +162,7 @@ ID, independent of grouping.
No automated UI tests exist for shim dialogs. Manual verification on
macOS Debug build:
-1. Build: `cd macos/build && cmake --build . --target MacNotePlusPlus`.
+1. Build: `cd macos/build && cmake --build . --target PaperWasp`.
2. Open the app, load two files, open **Plugins → ComparePlus →
Settings**.
3. Click each radio in each of the four groups. Assert:
diff --git a/logo.png b/logo.png
index 011567dc2e96..8ce797984a0d 100644
Binary files a/logo.png and b/logo.png differ
diff --git a/macos/CMakeLists.txt b/macos/CMakeLists.txt
index c437d749bc66..15565099bbd8 100644
--- a/macos/CMakeLists.txt
+++ b/macos/CMakeLists.txt
@@ -1,12 +1,14 @@
-cmake_minimum_required(VERSION 3.20)
-project(NotepadPlusPlusMac LANGUAGES C CXX OBJC OBJCXX)
-
-set(CMAKE_CXX_STANDARD 20)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_OBJCXX_STANDARD 20)
-
-# Root of the Notepad++ source tree
-set(NPP_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
+cmake_minimum_required(VERSION 3.20)
+project(PaperWaspMac LANGUAGES C CXX OBJC OBJCXX)
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_OBJCXX_STANDARD 20)
+
+# Root of the upstream Notepad++ source tree
+set(NPP_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
+set(PAPERWASP_APP_NAME "PaperWasp")
+set(PAPERWASP_BUNDLE_IDENTIFIER "com.softcentral.paperwasp")
# ============================================================
# Code Signing Configuration (opt-in)
@@ -14,7 +16,7 @@ set(NPP_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
option(CODESIGN_ENABLED "Enable code signing for the app bundle and DMG" OFF)
set(CODESIGN_IDENTITY "Developer ID Application" CACHE STRING
"Code signing identity (e.g., 'Developer ID Application: Your Name (TEAMID)')")
-set(CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/platform/MacNote.entitlements" CACHE FILEPATH
+set(CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/platform/PaperWasp.entitlements" CACHE FILEPATH
"Path to entitlements plist for hardened runtime")
if(CODESIGN_ENABLED)
@@ -333,7 +335,7 @@ add_custom_target(AppIcon DEPENDS "${CMAKE_BINARY_DIR}/AppIcon.icns")
# ============================================================
# Main macOS app target
# ============================================================
-add_executable(MacNotePlusPlus
+add_executable(PaperWasp
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_main.mm"
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_state.mm"
"${CMAKE_CURRENT_SOURCE_DIR}/platform/app_delegate.mm"
@@ -389,7 +391,7 @@ add_executable(MacNotePlusPlus
"${CMAKE_CURRENT_SOURCE_DIR}/platform/compare_plus_visibility.mm"
"${CMAKE_CURRENT_SOURCE_DIR}/platform/plugin_invariants.mm"
)
-target_include_directories(MacNotePlusPlus PRIVATE
+target_include_directories(PaperWasp PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/platform"
"${SHIM_INCLUDE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/shim/src"
@@ -398,7 +400,7 @@ target_include_directories(MacNotePlusPlus PRIVATE
"${UCHARDET_DIR}"
"${NPP_SRC_DIR}/MISC/PluginsManager"
)
-target_link_libraries(MacNotePlusPlus
+target_link_libraries(PaperWasp
win32shim
scintilla_bridge
Scintilla
@@ -411,7 +413,7 @@ target_link_libraries(MacNotePlusPlus
"-framework UniformTypeIdentifiers"
"-framework CoreServices"
)
-target_compile_options(MacNotePlusPlus PRIVATE
+target_compile_options(PaperWasp PRIVATE
-fobjc-arc
-Wno-deprecated-declarations
)
@@ -421,50 +423,53 @@ target_compile_options(MacNotePlusPlus PRIVATE
# present in the dynamic symbol table — without it, ld drops any shim
# .o the host itself doesn't reference, and plugins crash at runtime
# calling through a null function pointer.
-target_link_options(MacNotePlusPlus PRIVATE
+target_link_options(PaperWasp PRIVATE
-Wl,-export_dynamic
"LINKER:-force_load,$"
)
-add_dependencies(MacNotePlusPlus AppIcon)
-add_custom_command(TARGET MacNotePlusPlus POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${NPP_ROOT}/logo.png"
- "$/logo.png"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_BINARY_DIR}/AppIcon.icns"
- "$/AppIcon.icns"
- COMMENT "Copying logo.png and AppIcon.icns"
-)
+add_dependencies(PaperWasp AppIcon)
+add_custom_command(TARGET PaperWasp POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${NPP_ROOT}/logo.png"
+ "$/logo.png"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${NPP_ROOT}/about.png"
+ "$/about.png"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_BINARY_DIR}/AppIcon.icns"
+ "$/AppIcon.icns"
+ COMMENT "Copying logo.png, about.png, and AppIcon.icns"
+)
# ============================================================
-# Sample plugin: HelloMacNote
-# ============================================================
-add_library(HelloMacNote MODULE
- "${CMAKE_CURRENT_SOURCE_DIR}/plugin-sdk/example/HelloMacNote/HelloMacNote.cpp"
-)
-target_include_directories(HelloMacNote PRIVATE
- "${SHIM_INCLUDE_DIR}"
- "${NPP_SRC_DIR}/MISC/PluginsManager"
- "${SCINTILLA_INCLUDE_DIR}"
-)
-set_target_properties(HelloMacNote PROPERTIES
- PREFIX ""
- SUFFIX ".dylib"
- OUTPUT_NAME "HelloMacNote"
-)
-target_compile_options(HelloMacNote PRIVATE -Wno-deprecated-declarations)
-target_link_options(HelloMacNote PRIVATE -undefined dynamic_lookup)
-
-# Opt-in install target: cmake --build . --target install_sample_plugin
-add_custom_target(install_sample_plugin
- DEPENDS HelloMacNote
- COMMAND ${CMAKE_COMMAND} -E make_directory
- "$ENV{HOME}/Library/Application Support/MacNote++/plugins/HelloMacNote"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "$"
- "$ENV{HOME}/Library/Application Support/MacNote++/plugins/HelloMacNote/HelloMacNote.dylib"
- COMMENT "Installing HelloMacNote plugin to ~/Library/Application Support/MacNote++/plugins/"
-)
+# Sample plugin: HelloPaperWasp
+# ============================================================
+add_library(HelloPaperWasp MODULE
+ "${CMAKE_CURRENT_SOURCE_DIR}/plugin-sdk/example/HelloPaperWasp/HelloPaperWasp.cpp"
+)
+target_include_directories(HelloPaperWasp PRIVATE
+ "${SHIM_INCLUDE_DIR}"
+ "${NPP_SRC_DIR}/MISC/PluginsManager"
+ "${SCINTILLA_INCLUDE_DIR}"
+)
+set_target_properties(HelloPaperWasp PROPERTIES
+ PREFIX ""
+ SUFFIX ".dylib"
+ OUTPUT_NAME "HelloPaperWasp"
+)
+target_compile_options(HelloPaperWasp PRIVATE -Wno-deprecated-declarations)
+target_link_options(HelloPaperWasp PRIVATE -undefined dynamic_lookup)
+
+# Opt-in install target: cmake --build . --target install_sample_plugin
+add_custom_target(install_sample_plugin
+ DEPENDS HelloPaperWasp
+ COMMAND ${CMAKE_COMMAND} -E make_directory
+ "$ENV{HOME}/Library/Application Support/PaperWasp/plugins/HelloPaperWasp"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "$"
+ "$ENV{HOME}/Library/Application Support/PaperWasp/plugins/HelloPaperWasp/HelloPaperWasp.dylib"
+ COMMENT "Installing HelloPaperWasp plugin to ~/Library/Application Support/PaperWasp/plugins/"
+)
# ============================================================
# Plugin: ComparePlus (macOS port)
@@ -519,63 +524,69 @@ target_link_libraries(ComparePlus PRIVATE
"-framework Foundation"
)
-add_custom_target(install_compare_plus
- DEPENDS ComparePlus
- COMMAND ${CMAKE_COMMAND} -E make_directory
- "$ENV{HOME}/Library/Application Support/MacNote++/plugins/ComparePlus"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "$"
- "$ENV{HOME}/Library/Application Support/MacNote++/plugins/ComparePlus/ComparePlus.dylib"
- COMMENT "Installing ComparePlus plugin to ~/Library/Application Support/MacNote++/plugins/"
-)
+add_custom_target(install_compare_plus
+ DEPENDS ComparePlus
+ COMMAND ${CMAKE_COMMAND} -E make_directory
+ "$ENV{HOME}/Library/Application Support/PaperWasp/plugins/ComparePlus"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "$"
+ "$ENV{HOME}/Library/Application Support/PaperWasp/plugins/ComparePlus/ComparePlus.dylib"
+ COMMENT "Installing ComparePlus plugin to ~/Library/Application Support/PaperWasp/plugins/"
+)
# ============================================================
# Packaging: App bundle, code signing, and DMG
# ============================================================
-set(NPP_MACOS_DIST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist")
-set(NPP_MACOS_APP_BUNDLE "${NPP_MACOS_DIST_DIR}/MacNote++.app")
-set(NPP_MACOS_APP_CONTENTS "${NPP_MACOS_APP_BUNDLE}/Contents")
-set(NPP_MACOS_APP_MACOS "${NPP_MACOS_APP_CONTENTS}/MacOS")
-set(NPP_MACOS_APP_RESOURCES "${NPP_MACOS_APP_CONTENTS}/Resources")
-set(NPP_MACOS_DMG_ROOT "${NPP_MACOS_DIST_DIR}/dmg-root")
-set(NPP_MACOS_DMG_APP_BUNDLE "${NPP_MACOS_DMG_ROOT}/MacNote++.app")
-set(NPP_MACOS_UNSIGNED_DMG "${NPP_MACOS_DIST_DIR}/MacNotePlusPlus-unsigned.dmg")
-set(NPP_MACOS_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/MacNote++-Info.plist")
-
-configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/platform/MacNoteInfo.plist.in"
- "${NPP_MACOS_INFO_PLIST}"
- @ONLY
-)
-
-set(NPP_MACOS_APP_PLUGINS "${NPP_MACOS_APP_CONTENTS}/PlugIns")
-
-add_custom_target(MacNotePlusPlus_package
- DEPENDS MacNotePlusPlus ComparePlus
- COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_APP_BUNDLE}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_MACOS}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_RESOURCES}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_PLUGINS}/ComparePlus"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "$"
- "${NPP_MACOS_APP_MACOS}/MacNotePlusPlus"
+set(NPP_MACOS_DIST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist")
+set(NPP_MACOS_APP_BUNDLE "${NPP_MACOS_DIST_DIR}/${PAPERWASP_APP_NAME}.app")
+set(NPP_MACOS_APP_CONTENTS "${NPP_MACOS_APP_BUNDLE}/Contents")
+set(NPP_MACOS_APP_MACOS "${NPP_MACOS_APP_CONTENTS}/MacOS")
+set(NPP_MACOS_APP_RESOURCES "${NPP_MACOS_APP_CONTENTS}/Resources")
+set(NPP_MACOS_DMG_ROOT "${NPP_MACOS_DIST_DIR}/dmg-root")
+set(NPP_MACOS_DMG_APP_BUNDLE "${NPP_MACOS_DMG_ROOT}/${PAPERWASP_APP_NAME}.app")
+set(NPP_MACOS_UNSIGNED_DMG "${NPP_MACOS_DIST_DIR}/${PAPERWASP_APP_NAME}-unsigned.dmg")
+set(NPP_MACOS_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/${PAPERWASP_APP_NAME}-Info.plist")
+
+configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/platform/PaperWaspInfo.plist.in"
+ "${NPP_MACOS_INFO_PLIST}"
+ @ONLY
+)
+
+set(NPP_MACOS_APP_PLUGINS "${NPP_MACOS_APP_CONTENTS}/PlugIns")
+
+add_custom_target(PaperWasp_package
+ DEPENDS PaperWasp ComparePlus
+ COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_APP_BUNDLE}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_MACOS}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_RESOURCES}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_APP_PLUGINS}/ComparePlus"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "$"
+ "${NPP_MACOS_APP_MACOS}/${PAPERWASP_APP_NAME}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$"
"${NPP_MACOS_APP_PLUGINS}/ComparePlus/ComparePlus.dylib"
- COMMAND ditto --norsrc
- "${NPP_ROOT}/logo.png"
- "${NPP_MACOS_APP_MACOS}/logo.png"
- COMMAND ditto --norsrc
- "${NPP_ROOT}/logo.png"
- "${NPP_MACOS_APP_RESOURCES}/logo.png"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_BINARY_DIR}/AppIcon.icns"
- "${NPP_MACOS_APP_RESOURCES}/AppIcon.icns"
+ COMMAND ditto --norsrc
+ "${NPP_ROOT}/logo.png"
+ "${NPP_MACOS_APP_MACOS}/logo.png"
+ COMMAND ditto --norsrc
+ "${NPP_ROOT}/about.png"
+ "${NPP_MACOS_APP_MACOS}/about.png"
+ COMMAND ditto --norsrc
+ "${NPP_ROOT}/logo.png"
+ "${NPP_MACOS_APP_RESOURCES}/logo.png"
+ COMMAND ditto --norsrc
+ "${NPP_ROOT}/about.png"
+ "${NPP_MACOS_APP_RESOURCES}/about.png"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_BINARY_DIR}/AppIcon.icns"
+ "${NPP_MACOS_APP_RESOURCES}/AppIcon.icns"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${NPP_MACOS_INFO_PLIST}"
"${NPP_MACOS_APP_CONTENTS}/Info.plist"
- COMMENT "Packaging MacNote++.app"
-)
+ COMMENT "Packaging ${PAPERWASP_APP_NAME}.app"
+)
if(CODESIGN_ENABLED)
# Sign and build DMG in a temp directory to avoid iCloud/FileProvider xattr
@@ -588,12 +599,12 @@ if(CODESIGN_ENABLED)
else()
set(NPP_SIGN_STAGE_ROOT "/tmp")
endif()
- set(NPP_SIGN_STAGE "${NPP_SIGN_STAGE_ROOT}/MacNotePP-sign-stage")
- set(NPP_SIGN_STAGE_APP "${NPP_SIGN_STAGE}/MacNote++.app")
- set(NPP_SIGN_STAGE_DMG_ROOT "${NPP_SIGN_STAGE}/dmg-root")
-
- add_custom_target(MacNotePlusPlus_sign
- DEPENDS MacNotePlusPlus_package
+ set(NPP_SIGN_STAGE "${NPP_SIGN_STAGE_ROOT}/PaperWasp-sign-stage")
+ set(NPP_SIGN_STAGE_APP "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.app")
+ set(NPP_SIGN_STAGE_DMG_ROOT "${NPP_SIGN_STAGE}/dmg-root")
+
+ add_custom_target(PaperWasp_sign
+ DEPENDS PaperWasp_package
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_SIGN_STAGE}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_SIGN_STAGE}"
COMMAND ditto --norsrc
@@ -610,50 +621,50 @@ if(CODESIGN_ENABLED)
"${NPP_SIGN_STAGE_APP}"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_APP_BUNDLE}"
COMMAND ditto "${NPP_SIGN_STAGE_APP}" "${NPP_MACOS_APP_BUNDLE}"
- COMMAND ${CMAKE_COMMAND} -E echo
- "Signed app bundle: ${NPP_MACOS_APP_BUNDLE}"
- COMMENT "Code signing MacNote++.app with '${CODESIGN_IDENTITY}'"
- )
-
- add_custom_target(MacNotePlusPlus_dmg
- DEPENDS MacNotePlusPlus_sign
- COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_SIGN_STAGE_DMG_ROOT}"
- COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_SIGN_STAGE_DMG_ROOT}/MacNote++.app"
- COMMAND ditto "${NPP_SIGN_STAGE_APP}" "${NPP_SIGN_STAGE_DMG_ROOT}/MacNote++.app"
+ COMMAND ${CMAKE_COMMAND} -E echo
+ "Signed app bundle: ${NPP_MACOS_APP_BUNDLE}"
+ COMMENT "Code signing ${PAPERWASP_APP_NAME}.app with '${CODESIGN_IDENTITY}'"
+ )
+
+ add_custom_target(PaperWasp_dmg
+ DEPENDS PaperWasp_sign
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_SIGN_STAGE_DMG_ROOT}"
+ COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_SIGN_STAGE_DMG_ROOT}/${PAPERWASP_APP_NAME}.app"
+ COMMAND ditto "${NPP_SIGN_STAGE_APP}" "${NPP_SIGN_STAGE_DMG_ROOT}/${PAPERWASP_APP_NAME}.app"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_SIGN_STAGE_DMG_ROOT}/Applications"
COMMAND ${CMAKE_COMMAND} -E create_symlink
"/Applications"
"${NPP_SIGN_STAGE_DMG_ROOT}/Applications"
- COMMAND ${CMAKE_COMMAND} -E rm -f "${NPP_SIGN_STAGE}/MacNotePlusPlus.dmg"
- COMMAND hdiutil create
- -volname "MacNotePlusPlus"
- -srcfolder "${NPP_SIGN_STAGE_DMG_ROOT}"
- -format UDZO
- -ov
- "${NPP_SIGN_STAGE}/MacNotePlusPlus.dmg"
- COMMAND codesign --force --sign "${CODESIGN_IDENTITY}"
- --timestamp "${NPP_SIGN_STAGE}/MacNotePlusPlus.dmg"
- COMMAND codesign --verify --verbose=2 "${NPP_SIGN_STAGE}/MacNotePlusPlus.dmg"
- COMMAND ${CMAKE_COMMAND} -E copy
- "${NPP_SIGN_STAGE}/MacNotePlusPlus.dmg"
- "${NPP_MACOS_DIST_DIR}/MacNotePlusPlus.dmg"
- COMMAND ${CMAKE_COMMAND} -E echo
- "Signed DMG: ${NPP_MACOS_DIST_DIR}/MacNotePlusPlus.dmg"
+ COMMAND ${CMAKE_COMMAND} -E rm -f "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.dmg"
+ COMMAND hdiutil create
+ -volname "${PAPERWASP_APP_NAME}"
+ -srcfolder "${NPP_SIGN_STAGE_DMG_ROOT}"
+ -format UDZO
+ -ov
+ "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.dmg"
+ COMMAND codesign --force --sign "${CODESIGN_IDENTITY}"
+ --timestamp "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.dmg"
+ COMMAND codesign --verify --verbose=2 "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.dmg"
+ COMMAND ${CMAKE_COMMAND} -E copy
+ "${NPP_SIGN_STAGE}/${PAPERWASP_APP_NAME}.dmg"
+ "${NPP_MACOS_DIST_DIR}/${PAPERWASP_APP_NAME}.dmg"
+ COMMAND ${CMAKE_COMMAND} -E echo
+ "Signed DMG: ${NPP_MACOS_DIST_DIR}/${PAPERWASP_APP_NAME}.dmg"
COMMAND ${CMAKE_COMMAND} -E echo
"NOTE: If your project directory is iCloud-synced, signature verification"
COMMAND ${CMAKE_COMMAND} -E echo
"may fail locally due to Finder xattrs. The DMG is valid for distribution."
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_SIGN_STAGE}"
- COMMENT "Building and signing MacNotePlusPlus.dmg"
- )
-else()
- add_custom_target(MacNotePlusPlus_sign
- DEPENDS MacNotePlusPlus_package
- COMMENT "Code signing SKIPPED (CODESIGN_ENABLED=OFF)"
- )
-
- add_custom_target(MacNotePlusPlus_dmg
- DEPENDS MacNotePlusPlus_sign
+ COMMENT "Building and signing ${PAPERWASP_APP_NAME}.dmg"
+ )
+else()
+ add_custom_target(PaperWasp_sign
+ DEPENDS PaperWasp_package
+ COMMENT "Code signing SKIPPED (CODESIGN_ENABLED=OFF)"
+ )
+
+ add_custom_target(PaperWasp_dmg
+ DEPENDS PaperWasp_sign
COMMAND ${CMAKE_COMMAND} -E make_directory "${NPP_MACOS_DMG_ROOT}"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${NPP_MACOS_DMG_APP_BUNDLE}"
COMMAND ${CMAKE_COMMAND} -E copy_directory
@@ -664,22 +675,22 @@ else()
"/Applications"
"${NPP_MACOS_DMG_ROOT}/Applications"
COMMAND ${CMAKE_COMMAND} -E rm -f "${NPP_MACOS_UNSIGNED_DMG}"
- COMMAND hdiutil create
- -volname "MacNotePlusPlus"
- -srcfolder "${NPP_MACOS_DMG_ROOT}"
- -format UDZO
- -ov
- "${NPP_MACOS_UNSIGNED_DMG}"
- COMMENT "Building MacNotePlusPlus-unsigned.dmg"
- )
-endif()
-
-message(STATUS "=== Notepad++ macOS Port ===")
-message(STATUS "Compatibility compile target: npp_macos_compile_test")
-message(STATUS "App target: MacNotePlusPlus")
-message(STATUS "Packaging target: MacNotePlusPlus_package")
-message(STATUS "Signing target: MacNotePlusPlus_sign")
-message(STATUS "DMG target: MacNotePlusPlus_dmg")
+ COMMAND hdiutil create
+ -volname "${PAPERWASP_APP_NAME}"
+ -srcfolder "${NPP_MACOS_DMG_ROOT}"
+ -format UDZO
+ -ov
+ "${NPP_MACOS_UNSIGNED_DMG}"
+ COMMENT "Building ${PAPERWASP_APP_NAME}-unsigned.dmg"
+ )
+endif()
+
+message(STATUS "=== PaperWasp macOS Port ===")
+message(STATUS "Compatibility compile target: npp_macos_compile_test")
+message(STATUS "App target: PaperWasp")
+message(STATUS "Packaging target: PaperWasp_package")
+message(STATUS "Signing target: PaperWasp_sign")
+message(STATUS "DMG target: PaperWasp_dmg")
message(STATUS "Shim headers: ${SHIM_INCLUDE_DIR}")
message(STATUS "Scintilla: ${SCINTILLA_DIR}")
message(STATUS "Lexilla: ${LEXILLA_DIR}")
diff --git a/macos/platform/MacNote.entitlements b/macos/platform/PaperWasp.entitlements
similarity index 100%
rename from macos/platform/MacNote.entitlements
rename to macos/platform/PaperWasp.entitlements
diff --git a/macos/platform/MacNoteInfo.plist.in b/macos/platform/PaperWaspInfo.plist.in
similarity index 96%
rename from macos/platform/MacNoteInfo.plist.in
rename to macos/platform/PaperWaspInfo.plist.in
index f55ba4d56c82..ed93cc0dd1ae 100644
--- a/macos/platform/MacNoteInfo.plist.in
+++ b/macos/platform/PaperWaspInfo.plist.in
@@ -5,17 +5,17 @@
CFBundleDevelopmentRegion
en
CFBundleExecutable
- MacNotePlusPlus
+ @PAPERWASP_APP_NAME@
CFBundleIdentifier
- com.softcentral.macnotepp
+ @PAPERWASP_BUNDLE_IDENTIFIER@
CFBundleIconFile
AppIcon
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- MacNote++
+ @PAPERWASP_APP_NAME@
CFBundleDisplayName
- MacNote++
+ @PAPERWASP_APP_NAME@
CFBundlePackageType
APPL
CFBundleShortVersionString
@@ -25,7 +25,7 @@
NSHighResolutionCapable
NSHumanReadableCopyright
- Copyright © 2024-2026. Based on Notepad++ by Don Ho.
+ Copyright © 2024-2026. PaperWasp is based on Notepad++ by Don Ho and the Notepad++ contributors. PaperWasp is independent and is not endorsed by the creators of Notepad++.
LSMinimumSystemVersion
13.0
LSApplicationCategoryType
diff --git a/macos/platform/about_dialog.h b/macos/platform/about_dialog.h
index 9a2c03bb2f47..2c074adbd665 100644
--- a/macos/platform/about_dialog.h
+++ b/macos/platform/about_dialog.h
@@ -1,5 +1,5 @@
// about_dialog.h — About dialog
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/about_dialog.mm b/macos/platform/about_dialog.mm
index d27c5d672a34..432b82adc98d 100644
--- a/macos/platform/about_dialog.mm
+++ b/macos/platform/about_dialog.mm
@@ -1,5 +1,5 @@
-// about_dialog.mm — About dialog
-// Part of the Notepad++ macOS port modular refactor.
+// about_dialog.mm — About dialog
+// Part of the PaperWasp macOS app.
#import
#include "about_dialog.h"
@@ -8,119 +8,194 @@ @interface AboutDialogController : NSObject
- (void)openRepository:(id)sender;
@end
-@implementation AboutDialogController
+@implementation AboutDialogController
- (void)openRepository:(id)sender
{
- [[NSWorkspace sharedWorkspace] openURL:
- [NSURL URLWithString:@"https://github.com/hybridmachine/MacNotePlusPlus"]];
+ [[NSWorkspace sharedWorkspace] openURL:
+ [NSURL URLWithString:@"https://github.com/hybridmachine/PaperWasp"]];
}
- (void)windowWillClose:(NSNotification*)notification
{
[NSApp stopModal];
-}
-@end
-
-void showAboutDlg()
-{
- @autoreleasepool {
- NSPanel* panel = [[NSPanel alloc]
- initWithContentRect:NSMakeRect(0, 0, 400, 360)
- styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable
- backing:NSBackingStoreBuffered
- defer:NO];
- [panel setTitle:@"About MacNote++"];
+}
+@end
+
+static NSTextField* makeCenteredLabel(NSString* text, NSFont* font, NSColor* color, CGFloat maxWidth)
+{
+ NSTextField* label = [NSTextField wrappingLabelWithString:text];
+ [label setFont:font];
+ if (color)
+ [label setTextColor:color];
+ [label setAlignment:NSTextAlignmentCenter];
+ [label setLineBreakMode:NSLineBreakByWordWrapping];
+ [label setMaximumNumberOfLines:0];
+ [label setPreferredMaxLayoutWidth:maxWidth];
+ [label setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[label widthAnchor] constraintLessThanOrEqualToConstant:maxWidth].active = YES;
+ [label setContentCompressionResistancePriority:NSLayoutPriorityRequired
+ forOrientation:NSLayoutConstraintOrientationVertical];
+ return label;
+}
+
+static NSView* makeSpacer(CGFloat height)
+{
+ NSView* spacer = [[NSView alloc] init];
+ [spacer setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[spacer heightAnchor] constraintEqualToConstant:height].active = YES;
+ [[spacer widthAnchor] constraintEqualToConstant:1].active = YES;
+ return spacer;
+}
+
+void showAboutDlg()
+{
+ @autoreleasepool {
+ const CGFloat panelWidth = 480;
+ const CGFloat panelHeight = 640;
+ const CGFloat sideInset = 25;
+ const CGFloat contentWidth = panelWidth - (sideInset * 2);
+ const CGFloat aboutImageScale = 0.25;
+
+ NSPanel* panel = [[NSPanel alloc]
+ initWithContentRect:NSMakeRect(0, 0, panelWidth, panelHeight)
+ styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ [panel setTitle:@"About PaperWasp"];
[panel center];
[panel setReleasedWhenClosed:NO];
// Keep the controller alive during modal
- AboutDialogController* controller = [[AboutDialogController alloc] init];
-
- NSView* contentView = [panel contentView];
- CGFloat y = 310;
-
- // App icon
- NSImage* logo = [NSApp applicationIconImage];
- if (!logo)
- {
- NSString* dir = [[[NSBundle mainBundle] executablePath] stringByDeletingLastPathComponent];
- logo = [[NSImage alloc] initWithContentsOfFile:[dir stringByAppendingPathComponent:@"logo.png"]];
- }
- if (logo)
- {
- NSImageView* iconView = [[NSImageView alloc] initWithFrame:NSMakeRect(168, y - 64, 64, 64)];
- [iconView setImage:logo];
- [iconView setImageScaling:NSImageScaleProportionallyUpOrDown];
- [contentView addSubview:iconView];
- }
- y -= 80;
-
- // App name
- NSTextField* nameLabel = [NSTextField labelWithString:@"MacNote++"];
- [nameLabel setFont:[NSFont boldSystemFontOfSize:18]];
- [nameLabel setAlignment:NSTextAlignmentCenter];
- [nameLabel setFrame:NSMakeRect(20, y, 360, 24)];
- [contentView addSubview:nameLabel];
- y -= 22;
-
- // Version — read from bundle at runtime
- NSString* version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
- if (!version) version = @"1.0.0";
- NSString* build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
- NSString* versionStr = build && ![build isEqualToString:version]
- ? [NSString stringWithFormat:@"Version %@ (%@)", version, build]
- : [NSString stringWithFormat:@"Version %@", version];
- NSTextField* versionLabel = [NSTextField labelWithString:versionStr];
- [versionLabel setFont:[NSFont systemFontOfSize:13]];
- [versionLabel setTextColor:[NSColor secondaryLabelColor]];
- [versionLabel setAlignment:NSTextAlignmentCenter];
- [versionLabel setFrame:NSMakeRect(20, y, 360, 18)];
- [contentView addSubview:versionLabel];
- y -= 28;
-
- // Attribution
- NSTextField* creditLabel = [NSTextField labelWithString:@"Based on Notepad++ by Don Ho"];
- [creditLabel setFont:[NSFont systemFontOfSize:13]];
- [creditLabel setAlignment:NSTextAlignmentCenter];
- [creditLabel setFrame:NSMakeRect(20, y, 360, 18)];
- [contentView addSubview:creditLabel];
- y -= 30;
-
- // Separator
- NSBox* separator = [[NSBox alloc] initWithFrame:NSMakeRect(40, y, 320, 1)];
- [separator setBoxType:NSBoxSeparator];
- [contentView addSubview:separator];
- y -= 24;
-
- // Component versions
- NSTextField* compLabel = [NSTextField labelWithString:
- @"Scintilla 5.5.3 \u2022 Lexilla 5.4.0 \u2022 Boost.Regex 1.90.0"];
- [compLabel setFont:[NSFont systemFontOfSize:11]];
- [compLabel setTextColor:[NSColor tertiaryLabelColor]];
- [compLabel setAlignment:NSTextAlignmentCenter];
- [compLabel setFrame:NSMakeRect(20, y, 360, 16)];
- [contentView addSubview:compLabel];
- y -= 22;
-
- // Build date
- NSString* buildDate = [NSString stringWithFormat:@"Built: %s", __DATE__];
- NSTextField* buildLabel = [NSTextField labelWithString:buildDate];
- [buildLabel setFont:[NSFont systemFontOfSize:11]];
- [buildLabel setTextColor:[NSColor tertiaryLabelColor]];
- [buildLabel setAlignment:NSTextAlignmentCenter];
- [buildLabel setFrame:NSMakeRect(20, y, 360, 16)];
- [contentView addSubview:buildLabel];
- y -= 28;
-
- // Repository link (clickable button styled as link)
- NSButton* linkButton = [[NSButton alloc] initWithFrame:NSMakeRect(60, y, 280, 20)];
- [linkButton setTitle:@"github.com/hybridmachine/MacNotePlusPlus"];
- [linkButton setBezelStyle:NSBezelStyleInline];
- [linkButton setBordered:NO];
+ AboutDialogController* controller = [[AboutDialogController alloc] init];
+
+ NSView* contentView = [panel contentView];
+
+ NSStackView* stack = [[NSStackView alloc] init];
+ [stack setOrientation:NSUserInterfaceLayoutOrientationVertical];
+ [stack setAlignment:NSLayoutAttributeCenterX];
+ [stack setSpacing:7];
+ [stack setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [contentView addSubview:stack];
+
+ [NSLayoutConstraint activateConstraints:@[
+ [[stack topAnchor] constraintEqualToAnchor:[contentView topAnchor] constant:28],
+ [[stack leadingAnchor] constraintEqualToAnchor:[contentView leadingAnchor] constant:sideInset],
+ [[stack trailingAnchor] constraintEqualToAnchor:[contentView trailingAnchor] constant:-sideInset],
+ [[stack bottomAnchor] constraintLessThanOrEqualToAnchor:[contentView bottomAnchor] constant:-18]
+ ]];
+
+ // About artwork. Adjust aboutImageScale above after visual review.
+ NSImage* aboutImage = nil;
+ NSString* aboutImagePath = [[NSBundle mainBundle] pathForResource:@"about" ofType:@"png"];
+ if (aboutImagePath)
+ aboutImage = [[NSImage alloc] initWithContentsOfFile:aboutImagePath];
+ if (!aboutImage)
+ {
+ NSString* dir = [[[NSBundle mainBundle] executablePath] stringByDeletingLastPathComponent];
+ aboutImage = [[NSImage alloc] initWithContentsOfFile:[dir stringByAppendingPathComponent:@"about.png"]];
+ }
+ if (aboutImage)
+ {
+ NSSize imageSize = [aboutImage size];
+ CGFloat imageWidth = imageSize.width * aboutImageScale;
+ CGFloat imageHeight = imageSize.height * aboutImageScale;
+ if (imageWidth > contentWidth)
+ {
+ const CGFloat constrainedScale = contentWidth / imageWidth;
+ imageWidth *= constrainedScale;
+ imageHeight *= constrainedScale;
+ }
+
+ NSImageView* imageView = [[NSImageView alloc] init];
+ [imageView setImage:aboutImage];
+ [imageView setImageScaling:NSImageScaleProportionallyUpOrDown];
+ [imageView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[imageView widthAnchor] constraintEqualToConstant:imageWidth].active = YES;
+ [[imageView heightAnchor] constraintEqualToConstant:imageHeight].active = YES;
+ [stack addArrangedSubview:imageView];
+ }
+
+ // App name
+ NSTextField* nameLabel = makeCenteredLabel(
+ @"PaperWasp",
+ [NSFont boldSystemFontOfSize:24],
+ [NSColor labelColor],
+ contentWidth);
+ [stack addArrangedSubview:nameLabel];
+
+ // Version - read from bundle at runtime
+ NSString* version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
+ if (!version) version = @"1.0.0";
+ NSString* build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
+ NSString* versionStr = build && ![build isEqualToString:version]
+ ? [NSString stringWithFormat:@"Version %@ (%@)", version, build]
+ : [NSString stringWithFormat:@"Version %@", version];
+ NSTextField* versionLabel = makeCenteredLabel(
+ versionStr,
+ [NSFont systemFontOfSize:15],
+ [NSColor secondaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:versionLabel];
+ [stack setCustomSpacing:18 afterView:versionLabel];
+
+ // Attribution
+ NSTextField* creditLabel = makeCenteredLabel(
+ @"Based on Notepad++ by Don Ho and the Notepad++ contributors",
+ [NSFont systemFontOfSize:13],
+ [NSColor labelColor],
+ contentWidth);
+ [stack addArrangedSubview:creditLabel];
+
+ NSTextField* disclaimerLabel = makeCenteredLabel(
+ @"PaperWasp is independent and is not endorsed by the creators of Notepad++.",
+ [NSFont systemFontOfSize:12],
+ [NSColor secondaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:disclaimerLabel];
+
+ NSTextField* productionLabel = makeCenteredLabel(
+ @"Produced and Directed by Brian Tabone\nImplemented by Codex, Claude, and Copilot",
+ [NSFont systemFontOfSize:12],
+ [NSColor secondaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:productionLabel];
+ [stack setCustomSpacing:20 afterView:productionLabel];
+
+ // Separator
+ NSBox* separator = [[NSBox alloc] init];
+ [separator setBoxType:NSBoxSeparator];
+ [separator setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[separator widthAnchor] constraintEqualToConstant:contentWidth].active = YES;
+ [stack addArrangedSubview:separator];
+ [stack setCustomSpacing:16 afterView:separator];
+
+ // Component versions
+ NSTextField* compLabel = makeCenteredLabel(
+ @"Scintilla 5.5.3 \u2022 Lexilla 5.4.0 \u2022 Boost.Regex 1.90.0",
+ [NSFont systemFontOfSize:11],
+ [NSColor tertiaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:compLabel];
+
+ // Build date
+ NSString* buildDate = [NSString stringWithFormat:@"Built: %s", __DATE__];
+ NSTextField* buildLabel = makeCenteredLabel(
+ buildDate,
+ [NSFont systemFontOfSize:11],
+ [NSColor tertiaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:buildLabel];
+ [stack setCustomSpacing:12 afterView:buildLabel];
+
+ // Repository link (clickable button styled as link)
+ NSButton* linkButton = [[NSButton alloc] init];
+ [linkButton setTitle:@"github.com/hybridmachine/PaperWasp"];
+ [linkButton setBezelStyle:NSBezelStyleInline];
+ [linkButton setBordered:NO];
[linkButton setTarget:controller];
[linkButton setAction:@selector(openRepository:)];
NSMutableAttributedString* linkAttr = [[NSMutableAttributedString alloc]
- initWithString:@"github.com/hybridmachine/MacNotePlusPlus"];
+ initWithString:@"github.com/hybridmachine/PaperWasp"];
[linkAttr addAttribute:NSForegroundColorAttributeName
value:[NSColor linkColor]
range:NSMakeRange(0, linkAttr.length)];
@@ -128,29 +203,34 @@ void showAboutDlg()
value:@(NSUnderlineStyleSingle)
range:NSMakeRange(0, linkAttr.length)];
[linkAttr addAttribute:NSFontAttributeName
- value:[NSFont systemFontOfSize:11]
- range:NSMakeRange(0, linkAttr.length)];
- [linkButton setAttributedTitle:linkAttr];
- [linkButton setAlignment:NSTextAlignmentCenter];
- [contentView addSubview:linkButton];
- y -= 24;
-
- // License
- NSTextField* licenseLabel = [NSTextField labelWithString:@"GNU General Public License v3"];
- [licenseLabel setFont:[NSFont systemFontOfSize:11]];
- [licenseLabel setTextColor:[NSColor secondaryLabelColor]];
- [licenseLabel setAlignment:NSTextAlignmentCenter];
- [licenseLabel setFrame:NSMakeRect(20, y, 360, 16)];
- [contentView addSubview:licenseLabel];
-
- // OK button
- NSButton* okButton = [[NSButton alloc] initWithFrame:NSMakeRect(160, 12, 80, 32)];
- [okButton setTitle:@"OK"];
- [okButton setBezelStyle:NSBezelStyleRounded];
- [okButton setTarget:NSApp];
- [okButton setAction:@selector(stopModal)];
- [okButton setKeyEquivalent:@"\r"];
- [contentView addSubview:okButton];
+ value:[NSFont systemFontOfSize:11]
+ range:NSMakeRange(0, linkAttr.length)];
+ [linkButton setAttributedTitle:linkAttr];
+ [linkButton setAlignment:NSTextAlignmentCenter];
+ [linkButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[linkButton widthAnchor] constraintLessThanOrEqualToConstant:contentWidth].active = YES;
+ [stack addArrangedSubview:linkButton];
+
+ // License
+ NSTextField* licenseLabel = makeCenteredLabel(
+ @"GNU General Public License v3",
+ [NSFont systemFontOfSize:11],
+ [NSColor secondaryLabelColor],
+ contentWidth);
+ [stack addArrangedSubview:licenseLabel];
+ [stack addArrangedSubview:makeSpacer(6)];
+
+ // OK button
+ NSButton* okButton = [[NSButton alloc] init];
+ [okButton setTitle:@"OK"];
+ [okButton setBezelStyle:NSBezelStyleRounded];
+ [okButton setTarget:NSApp];
+ [okButton setAction:@selector(stopModal)];
+ [okButton setKeyEquivalent:@"\r"];
+ [okButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [[okButton widthAnchor] constraintEqualToConstant:92].active = YES;
+ [[okButton heightAnchor] constraintEqualToConstant:32].active = YES;
+ [stack addArrangedSubview:okButton];
// Escape triggers the panel's close, which calls windowWillClose: → stopModal
[panel setDefaultButtonCell:[okButton cell]];
diff --git a/macos/platform/app_delegate.h b/macos/platform/app_delegate.h
index b54d92172397..522f5924ba30 100644
--- a/macos/platform/app_delegate.h
+++ b/macos/platform/app_delegate.h
@@ -1,5 +1,5 @@
// app_delegate.h — Application delegate and lifecycle
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/app_delegate.mm b/macos/platform/app_delegate.mm
index e6df4edc0ab3..784181425e9f 100644
--- a/macos/platform/app_delegate.mm
+++ b/macos/platform/app_delegate.mm
@@ -1,5 +1,5 @@
// app_delegate.mm — Application delegate, lifecycle, drag-and-drop
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "app_delegate.h"
@@ -156,13 +156,13 @@ - (void)applicationDidFinishLaunching:(NSNotification*)notification
WNDCLASSEXW wc = {};
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = MainWndProc;
- wc.lpszClassName = L"Notepad++Phase7";
+ wc.lpszClassName = L"PaperWaspMainWindow";
RegisterClassExW(&wc);
HMENU hMenuBar = buildMenuBar();
ctx().mainHwnd = CreateWindowExW(
- 0, L"Notepad++Phase7", L"Notepad++ (macOS) — Phase 7",
+ 0, L"PaperWaspMainWindow", L"PaperWasp",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
static_cast(s.windowWidth), static_cast(s.windowHeight),
@@ -407,7 +407,7 @@ - (void)applicationDidFinishLaunching:(NSNotification*)notification
});
const char* welcomeText =
- "// Welcome to Notepad++ on macOS \xe2\x80\x94 Phase 7!\n"
+ "// Welcome to PaperWasp!\n"
"//\n"
"// What's new in Phase 7:\n"
"// - Settings persistence (window pos, font, recent files)\n"
@@ -519,7 +519,7 @@ - (void)applicationDidFinishLaunching:(NSNotification*)notification
restoreSession();
- // Handle CLI arguments (for direct executable launch: ./MacOSNotePP file.txt)
+ // Handle CLI arguments (for direct executable launch: ./PaperWasp file.txt)
NSArray* args = [[NSProcessInfo processInfo] arguments];
for (NSUInteger i = 1; i < args.count; ++i)
{
@@ -579,7 +579,7 @@ - (void)applicationDidFinishLaunching:(NSNotification*)notification
pluginManager().notify(&tbNotif);
}
- NSLog(@"=== Notepad++ macOS Port — Phase 7 ===");
+ NSLog(@"=== PaperWasp ===");
NSLog(@"Settings, split view, edit commands, encoding, session, drag-and-drop!");
}
diff --git a/macos/platform/app_main.mm b/macos/platform/app_main.mm
index 47a4c589db14..bb876ff8d6d0 100644
--- a/macos/platform/app_main.mm
+++ b/macos/platform/app_main.mm
@@ -1,5 +1,5 @@
// app_main.mm — Application entry point
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "app_delegate.h"
diff --git a/macos/platform/app_state.h b/macos/platform/app_state.h
index f9143c7dd28d..1732ca951d6a 100644
--- a/macos/platform/app_state.h
+++ b/macos/platform/app_state.h
@@ -1,5 +1,5 @@
// app_state.h — Shared application state (globals + AppContext)
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
//
// Design note: All mutable application state is grouped in AppContext.
// A single global instance is accessed via ctx(). This centralizes
diff --git a/macos/platform/app_state.mm b/macos/platform/app_state.mm
index 4f932496c7a1..2f9923289b74 100644
--- a/macos/platform/app_state.mm
+++ b/macos/platform/app_state.mm
@@ -1,5 +1,5 @@
// app_state.mm — Global AppContext storage
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "app_state.h"
diff --git a/macos/platform/appearance.h b/macos/platform/appearance.h
index 9c8bfb68c1eb..87d9d33862e2 100644
--- a/macos/platform/appearance.h
+++ b/macos/platform/appearance.h
@@ -1,5 +1,5 @@
// appearance.h — Dark/light mode, theme switching
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/appearance.mm b/macos/platform/appearance.mm
index 00b9285fb87c..f8611b90de37 100644
--- a/macos/platform/appearance.mm
+++ b/macos/platform/appearance.mm
@@ -1,5 +1,5 @@
// appearance.mm — Dark/light mode, theme switching
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "appearance.h"
diff --git a/macos/platform/auto_indent.mm b/macos/platform/auto_indent.mm
index 213c5001c987..33a17b86f5ed 100644
--- a/macos/platform/auto_indent.mm
+++ b/macos/platform/auto_indent.mm
@@ -1,5 +1,5 @@
// auto_indent.mm — Auto-indentation on Enter + smart brace indentation
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "auto_indent.h"
#include "npp_constants.h"
diff --git a/macos/platform/autocomplete.h b/macos/platform/autocomplete.h
index 6ebbbee9bdd2..cfa74a8acc23 100644
--- a/macos/platform/autocomplete.h
+++ b/macos/platform/autocomplete.h
@@ -1,5 +1,5 @@
// autocomplete.h — Word auto-completion
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/autocomplete.mm b/macos/platform/autocomplete.mm
index de9e42f590bf..201789c70269 100644
--- a/macos/platform/autocomplete.mm
+++ b/macos/platform/autocomplete.mm
@@ -1,5 +1,5 @@
// autocomplete.mm — Word auto-completion
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "autocomplete.h"
#include "npp_constants.h"
diff --git a/macos/platform/bookmarks.h b/macos/platform/bookmarks.h
index 2e582f5730e6..1371372acaeb 100644
--- a/macos/platform/bookmarks.h
+++ b/macos/platform/bookmarks.h
@@ -1,5 +1,5 @@
// bookmarks.h — Bookmark toggle/navigation
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/bookmarks.mm b/macos/platform/bookmarks.mm
index 66c5a0a7aff2..f45083c6378b 100644
--- a/macos/platform/bookmarks.mm
+++ b/macos/platform/bookmarks.mm
@@ -1,5 +1,5 @@
// bookmarks.mm — Bookmark toggle/navigation
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "bookmarks.h"
#include "npp_constants.h"
diff --git a/macos/platform/brace_match.mm b/macos/platform/brace_match.mm
index 51d73b81a9d3..407f597f35af 100644
--- a/macos/platform/brace_match.mm
+++ b/macos/platform/brace_match.mm
@@ -1,5 +1,5 @@
// brace_match.mm — Brace matching and highlighting
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "brace_match.h"
#include "npp_constants.h"
diff --git a/macos/platform/build_test.mm b/macos/platform/build_test.mm
index 60c0b71268f1..bf14af989450 100644
--- a/macos/platform/build_test.mm
+++ b/macos/platform/build_test.mm
@@ -86,7 +86,7 @@ static void testAPIs()
int main(int argc, const char* argv[])
{
@autoreleasepool {
- NSLog(@"=== Notepad++ macOS Port - Phase 0 Build Test ===");
+ NSLog(@"=== PaperWasp macOS Port - Phase 0 Build Test ===");
testTypes();
NSLog(@" Win32 types: OK");
diff --git a/macos/platform/change_history.h b/macos/platform/change_history.h
index 529dd135b460..9c0bf712c144 100644
--- a/macos/platform/change_history.h
+++ b/macos/platform/change_history.h
@@ -1,5 +1,5 @@
// change_history.h — Change history margin markers
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/change_history.mm b/macos/platform/change_history.mm
index 40835e13814b..429d80a942dc 100644
--- a/macos/platform/change_history.mm
+++ b/macos/platform/change_history.mm
@@ -1,5 +1,5 @@
// change_history.mm — Change history margin markers
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "change_history.h"
#include "npp_constants.h"
diff --git a/macos/platform/context_menu.h b/macos/platform/context_menu.h
index 5b329c14b0e1..6598a1353c52 100644
--- a/macos/platform/context_menu.h
+++ b/macos/platform/context_menu.h
@@ -1,5 +1,5 @@
// context_menu.h — Context menu
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/context_menu.mm b/macos/platform/context_menu.mm
index 6d1941344112..2dc931a28564 100644
--- a/macos/platform/context_menu.mm
+++ b/macos/platform/context_menu.mm
@@ -1,5 +1,5 @@
// context_menu.mm — Context menu
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "context_menu.h"
#include "npp_constants.h"
diff --git a/macos/platform/document_data.h b/macos/platform/document_data.h
index e77af2198889..b1c6676a602a 100644
--- a/macos/platform/document_data.h
+++ b/macos/platform/document_data.h
@@ -1,5 +1,5 @@
// document_data.h — Per-tab document state, encoding types
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/document_manager.h b/macos/platform/document_manager.h
index 5bb5332e9662..dd2954e44968 100644
--- a/macos/platform/document_manager.h
+++ b/macos/platform/document_manager.h
@@ -1,5 +1,5 @@
// document_manager.h — Tab/document management, state save/restore
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/document_manager.mm b/macos/platform/document_manager.mm
index 181e1a559e44..4c46324d9f31 100644
--- a/macos/platform/document_manager.mm
+++ b/macos/platform/document_manager.mm
@@ -1,5 +1,5 @@
// document_manager.mm — Tab/document management, state save/restore
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "document_manager.h"
#include "npp_constants.h"
@@ -149,7 +149,7 @@ void switchToTabInView(int viewIndex, int tabIndex)
const auto& doc = docs[tabIndex];
NSString* title = WideToNSString(doc.title.c_str());
- [ctx().mainWindow setTitle:[NSString stringWithFormat:@"Notepad++ — %@", title]];
+ [ctx().mainWindow setTitle:[NSString stringWithFormat:@"PaperWasp — %@", title]];
updateWindowDocumentEdited();
// Notify plugins that a buffer was activated
@@ -224,7 +224,7 @@ int addNewTabToView(int viewIndex, const std::wstring& title, const std::string&
refreshSyncScrollAnchor();
NSString* nsTitle = WideToNSString(title.c_str());
- [ctx().mainWindow setTitle:[NSString stringWithFormat:@"Notepad++ — %@", nsTitle]];
+ [ctx().mainWindow setTitle:[NSString stringWithFormat:@"PaperWasp — %@", nsTitle]];
return newIndex;
}
@@ -279,7 +279,7 @@ void closeTabFromView(int viewIndex, int tabIndex)
tcItem.pszText = untitled;
SendMessageW(tabHwnd, TCM_SETITEMW, 0, reinterpret_cast(&tcItem));
}
- [ctx().mainWindow setTitle:@"Notepad++ — Untitled"];
+ [ctx().mainWindow setTitle:@"PaperWasp — Untitled"];
updateTabModifiedIndicator(viewIndex, 0);
updateWindowDocumentEdited();
@@ -322,7 +322,7 @@ void closeTabFromView(int viewIndex, int tabIndex)
const auto& doc = docs[activeTab];
NSString* title = WideToNSString(doc.title.c_str());
- [ctx().mainWindow setTitle:[NSString stringWithFormat:@"Notepad++ — %@", title]];
+ [ctx().mainWindow setTitle:[NSString stringWithFormat:@"PaperWasp — %@", title]];
updateWindowDocumentEdited();
// Notify plugins that the file has been closed
diff --git a/macos/platform/edit_commands.h b/macos/platform/edit_commands.h
index ee47b42961d2..5c686e6050a0 100644
--- a/macos/platform/edit_commands.h
+++ b/macos/platform/edit_commands.h
@@ -1,5 +1,5 @@
// edit_commands.h — Edit menu commands
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/edit_commands.mm b/macos/platform/edit_commands.mm
index 519e87bc795c..99a94b234047 100644
--- a/macos/platform/edit_commands.mm
+++ b/macos/platform/edit_commands.mm
@@ -1,5 +1,5 @@
// edit_commands.mm — Edit menu commands (case, line ops, comments, sort, join)
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "edit_commands.h"
diff --git a/macos/platform/file_operations.h b/macos/platform/file_operations.h
index efb52118baf0..6ad3f270e361 100644
--- a/macos/platform/file_operations.h
+++ b/macos/platform/file_operations.h
@@ -1,5 +1,5 @@
// file_operations.h — File I/O, encoding detection, open/save
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/file_operations.mm b/macos/platform/file_operations.mm
index 095b6c963eea..5b798f6ade66 100644
--- a/macos/platform/file_operations.mm
+++ b/macos/platform/file_operations.mm
@@ -1,5 +1,5 @@
// file_operations.mm — File I/O, encoding detection, open/save
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "file_operations.h"
#include
@@ -334,7 +334,7 @@ void saveCurrentFile()
updateTabModifiedIndicator(ctx().activeView, tabIdx);
updateWindowDocumentEdited();
NSString* nsTitle = WideToNSString(doc.title.c_str());
- [ctx().mainWindow setTitle:[NSString stringWithFormat:@"Notepad++ — %@", nsTitle]];
+ [ctx().mainWindow setTitle:[NSString stringWithFormat:@"PaperWasp — %@", nsTitle]];
addRecentFile(doc.filePath);
rebuildRecentMenu();
diff --git a/macos/platform/file_path_ops.h b/macos/platform/file_path_ops.h
index 0b46d529efa4..146b76f0aea4 100644
--- a/macos/platform/file_path_ops.h
+++ b/macos/platform/file_path_ops.h
@@ -1,5 +1,5 @@
// file_path_ops.h — Reveal in Finder and copy-path commands
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/file_path_ops.mm b/macos/platform/file_path_ops.mm
index 8d24ed47f763..d248d9d26912 100644
--- a/macos/platform/file_path_ops.mm
+++ b/macos/platform/file_path_ops.mm
@@ -1,5 +1,5 @@
// file_path_ops.mm — Reveal in Finder and copy-path commands
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "file_path_ops.h"
diff --git a/macos/platform/find_replace.h b/macos/platform/find_replace.h
index 9a60e4ee66b6..61d896f52b34 100644
--- a/macos/platform/find_replace.h
+++ b/macos/platform/find_replace.h
@@ -1,5 +1,5 @@
// find_replace.h — Find/Replace dialog and search logic
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/find_replace.mm b/macos/platform/find_replace.mm
index a9906efd9904..5560f2b8312b 100644
--- a/macos/platform/find_replace.mm
+++ b/macos/platform/find_replace.mm
@@ -1,5 +1,5 @@
// find_replace.mm — Find/Replace dialog and search logic
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "find_replace.h"
diff --git a/macos/platform/function_list_panel.mm b/macos/platform/function_list_panel.mm
index fcf4ea5eb841..16195ec3742e 100644
--- a/macos/platform/function_list_panel.mm
+++ b/macos/platform/function_list_panel.mm
@@ -11,7 +11,7 @@
#include
static FILE* dbgLog()
{
- static FILE* f = fopen("/tmp/MacNotePP.log", "a");
+ static FILE* f = fopen("/tmp/PaperWasp.log", "a");
return f;
}
#define FLLOG(fmt, ...) do { if (FILE* _f = dbgLog()) { fprintf(_f, "[FL] " fmt "\n", ##__VA_ARGS__); fflush(_f); } } while(0)
@@ -256,7 +256,7 @@ - (void)outlineActivated:(id)sender
static dispatch_queue_t parseQueue()
{
- static dispatch_queue_t q = dispatch_queue_create("com.notepadpp.functionlist.parse", DISPATCH_QUEUE_SERIAL);
+ static dispatch_queue_t q = dispatch_queue_create("com.paperwasp.functionlist.parse", DISPATCH_QUEUE_SERIAL);
return q;
}
diff --git a/macos/platform/function_list_parser.mm b/macos/platform/function_list_parser.mm
index db9b2516ab5e..bdf996d3b4c1 100644
--- a/macos/platform/function_list_parser.mm
+++ b/macos/platform/function_list_parser.mm
@@ -11,7 +11,7 @@
#include
static FILE* dbgLog()
{
- static FILE* f = fopen("/tmp/MacNotePP.log", "a");
+ static FILE* f = fopen("/tmp/PaperWasp.log", "a");
return f;
}
#define FLLOG(fmt, ...) do { if (FILE* _f = dbgLog()) { fprintf(_f, "[FLParser] " fmt "\n", ##__VA_ARGS__); fflush(_f); } } while(0)
diff --git a/macos/platform/hash_tools.h b/macos/platform/hash_tools.h
index 1e7c31e42c55..c3bfd5076a0f 100644
--- a/macos/platform/hash_tools.h
+++ b/macos/platform/hash_tools.h
@@ -1,5 +1,5 @@
// hash_tools.h — Hash tool declarations (MD5, SHA-1, SHA-256, SHA-512)
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/hash_tools.mm b/macos/platform/hash_tools.mm
index 87fb58b2befb..0c6ba9035838 100644
--- a/macos/platform/hash_tools.mm
+++ b/macos/platform/hash_tools.mm
@@ -1,5 +1,5 @@
// hash_tools.mm — Hash tools (MD5, SHA-1, SHA-256, SHA-512)
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
//
// Hashes the current selection if non-empty, otherwise the entire document.
// Shows result in a modal NSPanel with Copy / Insert at Cursor / Close buttons.
diff --git a/macos/platform/keyboard_shortcuts.h b/macos/platform/keyboard_shortcuts.h
index ea42839b234d..69fe70ab1659 100644
--- a/macos/platform/keyboard_shortcuts.h
+++ b/macos/platform/keyboard_shortcuts.h
@@ -1,5 +1,5 @@
// keyboard_shortcuts.h — Native macOS keyboard shortcut configuration
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/keyboard_shortcuts.mm b/macos/platform/keyboard_shortcuts.mm
index cd56a944ecb5..fa0fcf7947bd 100644
--- a/macos/platform/keyboard_shortcuts.mm
+++ b/macos/platform/keyboard_shortcuts.mm
@@ -1,5 +1,5 @@
// keyboard_shortcuts.mm — Native macOS keyboard shortcut configuration
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
//
// Remaps Scintilla key bindings to match macOS Human Interface Guidelines:
// Home/End → line start/end (not document)
diff --git a/macos/platform/language_defs.h b/macos/platform/language_defs.h
index 3025b11db066..0aed220ead01 100644
--- a/macos/platform/language_defs.h
+++ b/macos/platform/language_defs.h
@@ -1,5 +1,5 @@
// language_defs.h — Language definitions and extension-based detection
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/language_defs.mm b/macos/platform/language_defs.mm
index 1e48c30d61d6..ecb9ae544b9d 100644
--- a/macos/platform/language_defs.mm
+++ b/macos/platform/language_defs.mm
@@ -1,5 +1,5 @@
// language_defs.mm — Language table and extension-based detection
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "language_defs.h"
diff --git a/macos/platform/lexer_styles.h b/macos/platform/lexer_styles.h
index dbc3a9860678..1c85f307ae8d 100644
--- a/macos/platform/lexer_styles.h
+++ b/macos/platform/lexer_styles.h
@@ -1,5 +1,5 @@
// lexer_styles.h — Per-lexer style tables and language switching
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/lexer_styles.mm b/macos/platform/lexer_styles.mm
index e5de367b4b6a..803d7c8bd780 100644
--- a/macos/platform/lexer_styles.mm
+++ b/macos/platform/lexer_styles.mm
@@ -1,5 +1,5 @@
// lexer_styles.mm — Per-lexer style tables, language switching
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "lexer_styles.h"
#include "npp_constants.h"
diff --git a/macos/platform/macro_manager.h b/macos/platform/macro_manager.h
index 5081c8b8caf6..71a35b4c03e8 100644
--- a/macos/platform/macro_manager.h
+++ b/macos/platform/macro_manager.h
@@ -1,5 +1,5 @@
// macro_manager.h — Macro recording, playback, and persistence
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#pragma once
#include
diff --git a/macos/platform/macro_manager.mm b/macos/platform/macro_manager.mm
index a468a0ae77ea..c6ec527cc7c9 100644
--- a/macos/platform/macro_manager.mm
+++ b/macos/platform/macro_manager.mm
@@ -1,5 +1,5 @@
// macro_manager.mm — Macro recording, playback, and persistence
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#import
#include "macro_manager.h"
@@ -174,7 +174,8 @@ static bool isStringMessage(int message)
std::string MacroManager::macrosDir() const
{
NSString* home = NSHomeDirectory();
- NSString* dir = [home stringByAppendingPathComponent:@".npp-macos"];
+ NSString* dir = [[home stringByAppendingPathComponent:@"Library/Application Support"]
+ stringByAppendingPathComponent:@"PaperWasp"];
const char* fs = [dir fileSystemRepresentation];
if (!fs) return "";
return std::string(fs);
diff --git a/macos/platform/menu_builder.h b/macos/platform/menu_builder.h
index 53e88921cf5c..86d3a388410e 100644
--- a/macos/platform/menu_builder.h
+++ b/macos/platform/menu_builder.h
@@ -1,5 +1,5 @@
// menu_builder.h — Menu bar construction
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/menu_builder.mm b/macos/platform/menu_builder.mm
index 71eefdcbf7df..82885393f82b 100644
--- a/macos/platform/menu_builder.mm
+++ b/macos/platform/menu_builder.mm
@@ -1,5 +1,5 @@
// menu_builder.mm — Menu bar construction
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "menu_builder.h"
#include "npp_constants.h"
@@ -215,7 +215,7 @@ HMENU buildMenuBar()
// Help menu
HMENU hHelpMenu = CreatePopupMenu();
- AppendMenuW(hHelpMenu, MF_STRING, IDM_HELP_ABOUT, L"About MacNote++");
+ AppendMenuW(hHelpMenu, MF_STRING, IDM_HELP_ABOUT, L"About PaperWasp");
AppendMenuW(hMenuBar, MF_POPUP, reinterpret_cast(hHelpMenu), L"&Help");
return hMenuBar;
diff --git a/macos/platform/npp_constants.h b/macos/platform/npp_constants.h
index 0288cad1d098..3f88a39f1541 100644
--- a/macos/platform/npp_constants.h
+++ b/macos/platform/npp_constants.h
@@ -1,5 +1,5 @@
// npp_constants.h — Command IDs, SCI message enum, Scintilla constants
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
@@ -465,7 +465,7 @@ enum {
#define SC_UPDATE_V_SCROLL 0x4
#define SC_UPDATE_H_SCROLL 0x8
-// Indicator allocation table for MacNotePP:
+// Indicator allocation table for PaperWasp:
// 0-7: Reserved by Scintilla lexers
// 8-20: Reserved for plugins
// 28: INDIC_INCREMENTAL_SEARCH (P1-03)
diff --git a/macos/platform/nppm_handler.mm b/macos/platform/nppm_handler.mm
index 1fc5a1039a2e..21451d887847 100644
--- a/macos/platform/nppm_handler.mm
+++ b/macos/platform/nppm_handler.mm
@@ -71,7 +71,7 @@ static int toNppEncoding(int encoding)
{
case ENC_ANSI: return 0;
case ENC_UTF8_BOM: return 1;
- // MacNote++ currently saves UTF-16 without a BOM; Notepad++ UniMode
+ // PaperWasp currently saves UTF-16 without a BOM; Notepad++ UniMode
// values 6/7 represent UTF-16 BE/LE without BOM.
case ENC_UTF16_BE: return 6;
case ENC_UTF16_LE: return 7;
@@ -174,7 +174,7 @@ LRESULT handleNppmMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
case NPPM_GETPLUGINSCONFIGDIR:
{
@autoreleasepool {
- NSString* configDir = [@"~/Library/Application Support/MacNote++/plugins/Config"
+ NSString* configDir = [@"~/Library/Application Support/PaperWasp/plugins/Config"
stringByExpandingTildeInPath];
[[NSFileManager defaultManager] createDirectoryAtPath:configDir
withIntermediateDirectories:YES attributes:nil error:nil];
@@ -196,7 +196,7 @@ LRESULT handleNppmMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
case NPPM_GETNPPVERSION:
{
// Plugins use this to gate feature-availability checks, not to
- // discover our product version. Reporting MacNote++ 1.0 made
+ // discover our product version. Reporting PaperWasp 1.0 made
// ComparePlus refuse to run (it requires Notepad++ >= 8.420).
// Report a recent Notepad++ version whose NPPM surface we emulate
// — 8.8.0 is past every version-gated path in vendored plugins
@@ -416,7 +416,7 @@ LRESULT handleNppmMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
return 0;
case NPPM_GETCURRENTCMDLINE:
- // MacNote++ launches through Cocoa document-open events rather
+ // PaperWasp launches through Cocoa document-open events rather
// than Notepad++'s Windows command-line parser. Report an empty
// command line so plugins such as ComparePlus can safely skip
// optional startup commands without logging an unhandled NPPM.
diff --git a/macos/platform/plugin_invariants.h b/macos/platform/plugin_invariants.h
index 6a9b85cb6596..f236fb2bf384 100644
--- a/macos/platform/plugin_invariants.h
+++ b/macos/platform/plugin_invariants.h
@@ -1,5 +1,5 @@
// plugin_invariants.h — launch-time and NPPN_READY assertions.
-// Output is gated behind MACNOTE_PLUGIN_DEBUG=1 env var.
+// Output is gated behind PAPERWASP_PLUGIN_DEBUG=1 env var.
#pragma once
diff --git a/macos/platform/plugin_invariants.mm b/macos/platform/plugin_invariants.mm
index 13597cd329f4..1248c2b6c45e 100644
--- a/macos/platform/plugin_invariants.mm
+++ b/macos/platform/plugin_invariants.mm
@@ -8,7 +8,7 @@ static bool debugEnabled()
static int cached = -1;
if (cached < 0)
{
- const char* v = getenv("MACNOTE_PLUGIN_DEBUG");
+ const char* v = getenv("PAPERWASP_PLUGIN_DEBUG");
cached = (v && v[0] == '1') ? 1 : 0;
}
return cached == 1;
diff --git a/macos/platform/plugin_manager.h b/macos/platform/plugin_manager.h
index 7267034dfed3..748e6e286478 100644
--- a/macos/platform/plugin_manager.h
+++ b/macos/platform/plugin_manager.h
@@ -1,5 +1,5 @@
// plugin_manager.h — macOS plugin loading and management
-// Source-code-compatible plugin system for MacNote++.
+// Source-code-compatible plugin system for PaperWasp.
// Loads .dylib plugins using the same PluginInterface.h contract as Notepad++.
#pragma once
diff --git a/macos/platform/plugin_manager.mm b/macos/platform/plugin_manager.mm
index 70e3f4d18d57..85d036a5ec8d 100644
--- a/macos/platform/plugin_manager.mm
+++ b/macos/platform/plugin_manager.mm
@@ -1,6 +1,6 @@
// plugin_manager.mm — macOS plugin loading and management
// Loads .dylib plugins from the app bundle's Contents/PlugIns/ (bundled defaults)
-// and ~/Library/Application Support/MacNote++/plugins/ (user-installed).
+// and ~/Library/Application Support/PaperWasp/plugins/ (user-installed).
#import
#include "plugin_manager.h"
@@ -356,16 +356,23 @@ static bool validateMachOArchitecture(const std::string& path)
@autoreleasepool {
NSFileManager* fm = [NSFileManager defaultManager];
- // Scan the user plugins directory first, then the bundled PlugIns
- // directory. A user-installed plugin with the same folder name as a
- // bundled one wins (lets users override a shipped default).
- NSString* userDir = [@"~/Library/Application Support/MacNote++/plugins"
+ // Scan the PaperWasp user plugins directory first, then the legacy
+ // MacNote++ directory, then bundled PlugIns. Earlier directories win,
+ // so users can override bundled defaults and new installs override
+ // legacy copies with the same folder name.
+ NSString* userDir = [@"~/Library/Application Support/PaperWasp/plugins"
stringByExpandingTildeInPath];
[fm createDirectoryAtPath:userDir withIntermediateDirectories:YES attributes:nil error:nil];
- NSMutableArray* pluginDirs = [NSMutableArray arrayWithCapacity:2];
+ NSMutableArray* pluginDirs = [NSMutableArray arrayWithCapacity:3];
[pluginDirs addObject:userDir];
+ NSString* legacyUserDir = [@"~/Library/Application Support/MacNote++/plugins"
+ stringByExpandingTildeInPath];
+ BOOL legacyIsDir = NO;
+ if ([fm fileExistsAtPath:legacyUserDir isDirectory:&legacyIsDir] && legacyIsDir)
+ [pluginDirs addObject:legacyUserDir];
+
NSString* bundledDir = [[NSBundle mainBundle] builtInPlugInsPath];
if (bundledDir && [fm fileExistsAtPath:bundledDir])
[pluginDirs addObject:bundledDir];
diff --git a/macos/platform/preferences_dialog.h b/macos/platform/preferences_dialog.h
index 0d610f52b963..2781c0188332 100644
--- a/macos/platform/preferences_dialog.h
+++ b/macos/platform/preferences_dialog.h
@@ -1,5 +1,5 @@
// preferences_dialog.h — Preferences dialog
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/preferences_dialog.mm b/macos/platform/preferences_dialog.mm
index 1a1b81ff64f3..277f2bd8ac24 100644
--- a/macos/platform/preferences_dialog.mm
+++ b/macos/platform/preferences_dialog.mm
@@ -1,5 +1,5 @@
// preferences_dialog.mm — Preferences dialog
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "preferences_dialog.h"
diff --git a/macos/platform/print_support.h b/macos/platform/print_support.h
index 5ee9a0cde1c3..45f2a68128e8 100644
--- a/macos/platform/print_support.h
+++ b/macos/platform/print_support.h
@@ -1,5 +1,5 @@
// print_support.h — Printing via macOS print system
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/print_support.mm b/macos/platform/print_support.mm
index cb6c47c5eed4..863c6fa377b1 100644
--- a/macos/platform/print_support.mm
+++ b/macos/platform/print_support.mm
@@ -1,5 +1,5 @@
// print_support.mm — Printing via macOS print system (Phase 1 MVP)
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "print_support.h"
diff --git a/macos/platform/recent_files.h b/macos/platform/recent_files.h
index 022e592f1d7c..f1f34255a08c 100644
--- a/macos/platform/recent_files.h
+++ b/macos/platform/recent_files.h
@@ -1,5 +1,5 @@
// recent_files.h — Recent files list management
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/recent_files.mm b/macos/platform/recent_files.mm
index da26276d9d03..77a73fbe712e 100644
--- a/macos/platform/recent_files.mm
+++ b/macos/platform/recent_files.mm
@@ -1,5 +1,5 @@
// recent_files.mm — Recent files list management
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "recent_files.h"
#include "npp_constants.h"
diff --git a/macos/platform/save_prompt.h b/macos/platform/save_prompt.h
index dca019afb54e..4973cb825fef 100644
--- a/macos/platform/save_prompt.h
+++ b/macos/platform/save_prompt.h
@@ -1,5 +1,5 @@
// save_prompt.h — Save-before-close prompts
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/save_prompt.mm b/macos/platform/save_prompt.mm
index 03b13fdcfb17..7deaeadcf3a5 100644
--- a/macos/platform/save_prompt.mm
+++ b/macos/platform/save_prompt.mm
@@ -1,5 +1,5 @@
// save_prompt.mm — Save-before-close prompts
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "save_prompt.h"
diff --git a/macos/platform/scintilla_config.h b/macos/platform/scintilla_config.h
index d5d0f64cf8e6..433c9d91f75d 100644
--- a/macos/platform/scintilla_config.h
+++ b/macos/platform/scintilla_config.h
@@ -1,5 +1,5 @@
// scintilla_config.h — Scintilla editor configuration
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/scintilla_config.mm b/macos/platform/scintilla_config.mm
index 1965a12330c7..a1ce10e32410 100644
--- a/macos/platform/scintilla_config.mm
+++ b/macos/platform/scintilla_config.mm
@@ -1,5 +1,5 @@
// scintilla_config.mm — Scintilla editor configuration
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "scintilla_config.h"
#include "npp_constants.h"
diff --git a/macos/platform/session_manager.h b/macos/platform/session_manager.h
index 5ec8dcd557b0..5a0af494b09b 100644
--- a/macos/platform/session_manager.h
+++ b/macos/platform/session_manager.h
@@ -1,5 +1,5 @@
// session_manager.h — Session save/restore
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/session_manager.mm b/macos/platform/session_manager.mm
index 0352e0341df5..976f21f0f86e 100644
--- a/macos/platform/session_manager.mm
+++ b/macos/platform/session_manager.mm
@@ -1,5 +1,5 @@
// session_manager.mm — Session save/restore
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "session_manager.h"
@@ -16,13 +16,16 @@
std::string sessionPath()
{
- NSString* home = NSHomeDirectory();
- return std::string([home UTF8String]) + "/.npp-macos/session.json";
-}
-
-void saveSession()
-{
- NSString* dir = [NSString stringWithFormat:@"%@/.npp-macos", NSHomeDirectory()];
+ NSString* home = NSHomeDirectory();
+ NSString* dir = [[home stringByAppendingPathComponent:@"Library/Application Support"]
+ stringByAppendingPathComponent:@"PaperWasp"];
+ return std::string([dir fileSystemRepresentation]) + "/session.json";
+}
+
+void saveSession()
+{
+ NSString* dir = [[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support"]
+ stringByAppendingPathComponent:@"PaperWasp"];
[[NSFileManager defaultManager] createDirectoryAtPath:dir
withIntermediateDirectories:YES attributes:nil error:nil];
diff --git a/macos/platform/settings_manager.h b/macos/platform/settings_manager.h
index 6e6440b4e0ef..5125faa127de 100644
--- a/macos/platform/settings_manager.h
+++ b/macos/platform/settings_manager.h
@@ -1,6 +1,6 @@
#pragma once
-// Settings Manager for Notepad++ macOS Port
-// Reads/writes settings to ~/.npp-macos/settings.json using NSJSONSerialization.
+// Settings Manager for PaperWasp
+// Reads/writes settings to ~/Library/Application Support/PaperWasp/settings.json.
#include
#include
@@ -51,11 +51,11 @@ class SettingsManager
public:
static SettingsManager& instance();
- // Load settings from ~/.npp-macos/settings.json
+ // Load settings from ~/Library/Application Support/PaperWasp/settings.json
// Returns true if file was found and parsed successfully.
bool load();
- // Save current settings to ~/.npp-macos/settings.json
+ // Save current settings to ~/Library/Application Support/PaperWasp/settings.json
bool save();
AppSettings settings;
diff --git a/macos/platform/settings_manager.mm b/macos/platform/settings_manager.mm
index 3cebad1b8615..5359da8e60ac 100644
--- a/macos/platform/settings_manager.mm
+++ b/macos/platform/settings_manager.mm
@@ -1,5 +1,5 @@
-// Settings Manager for Notepad++ macOS Port
-// Persists user settings to ~/.npp-macos/settings.json using NSJSONSerialization.
+// Settings Manager for PaperWasp
+// Persists user settings to ~/Library/Application Support/PaperWasp/settings.json.
#import
#include "settings_manager.h"
@@ -25,7 +25,8 @@
std::string SettingsManager::settingsDir() const
{
NSString* home = NSHomeDirectory();
- NSString* dir = [home stringByAppendingPathComponent:@".npp-macos"];
+ NSString* dir = [[home stringByAppendingPathComponent:@"Library/Application Support"]
+ stringByAppendingPathComponent:@"PaperWasp"];
const char* fs = [dir fileSystemRepresentation];
if (!fs) return "";
return std::string(fs);
diff --git a/macos/platform/smart_highlight.mm b/macos/platform/smart_highlight.mm
index 4e67a1ae0516..ca735337e6cc 100644
--- a/macos/platform/smart_highlight.mm
+++ b/macos/platform/smart_highlight.mm
@@ -1,5 +1,5 @@
// smart_highlight.mm — Smart highlighting (mark all occurrences)
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#include "smart_highlight.h"
#include "npp_constants.h"
diff --git a/macos/platform/split_view.h b/macos/platform/split_view.h
index dbfb08734045..cf6281a573de 100644
--- a/macos/platform/split_view.h
+++ b/macos/platform/split_view.h
@@ -1,5 +1,5 @@
// split_view.h — Split view management
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/split_view.mm b/macos/platform/split_view.mm
index 1bdf46ebf8e1..695a65e561ba 100644
--- a/macos/platform/split_view.mm
+++ b/macos/platform/split_view.mm
@@ -1,5 +1,5 @@
// split_view.mm — Split view management
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "split_view.h"
@@ -505,7 +505,7 @@ void doUnsplit()
if (ctx().activeTab >= 0 && ctx().activeTab < static_cast(ctx().documents.size()))
{
NSString* title = WideToNSString(ctx().documents[ctx().activeTab].title.c_str());
- [ctx().mainWindow setTitle:[NSString stringWithFormat:@"Notepad++ — %@", title]];
+ [ctx().mainWindow setTitle:[NSString stringWithFormat:@"PaperWasp — %@", title]];
}
updateWindowDocumentEdited();
diff --git a/macos/platform/status_bar.h b/macos/platform/status_bar.h
index da984609fccb..a2f8558b58cd 100644
--- a/macos/platform/status_bar.h
+++ b/macos/platform/status_bar.h
@@ -1,5 +1,5 @@
// status_bar.h — Status bar update
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/status_bar.mm b/macos/platform/status_bar.mm
index e04743e139e2..f87f4e93b41d 100644
--- a/macos/platform/status_bar.mm
+++ b/macos/platform/status_bar.mm
@@ -1,5 +1,5 @@
// status_bar.mm — Status bar update
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#include "status_bar.h"
#include "npp_constants.h"
diff --git a/macos/platform/string_utils.h b/macos/platform/string_utils.h
index 2d579eb2b526..6aa7ba83a906 100644
--- a/macos/platform/string_utils.h
+++ b/macos/platform/string_utils.h
@@ -1,5 +1,5 @@
// string_utils.h — wchar_t <-> NSString conversion helpers
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/tab_bar_view.h b/macos/platform/tab_bar_view.h
index dc03c65b396f..79f2fb77a6dd 100644
--- a/macos/platform/tab_bar_view.h
+++ b/macos/platform/tab_bar_view.h
@@ -1,5 +1,5 @@
// tab_bar_view.h — Custom tab bar view with close buttons and drag-to-reorder
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/tab_bar_view.mm b/macos/platform/tab_bar_view.mm
index eaecacf752c2..4d2976d68988 100644
--- a/macos/platform/tab_bar_view.mm
+++ b/macos/platform/tab_bar_view.mm
@@ -1,5 +1,5 @@
// tab_bar_view.mm — Custom tab bar view with close buttons and drag-to-reorder
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#import "tab_bar_view.h"
diff --git a/macos/platform/tab_context_menu.h b/macos/platform/tab_context_menu.h
index 19d60f5082f5..53883e2f4c28 100644
--- a/macos/platform/tab_context_menu.h
+++ b/macos/platform/tab_context_menu.h
@@ -1,5 +1,5 @@
// tab_context_menu.h — Tab bar context menu (right-click)
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/tab_context_menu.mm b/macos/platform/tab_context_menu.mm
index 943b702cce80..b218a28bbe1f 100644
--- a/macos/platform/tab_context_menu.mm
+++ b/macos/platform/tab_context_menu.mm
@@ -1,5 +1,5 @@
// tab_context_menu.mm — Tab bar context menu (right-click)
-// Part of the Notepad++ macOS port.
+// Part of the PaperWasp macOS app.
#import
#include "tab_context_menu.h"
diff --git a/macos/platform/toolbar.h b/macos/platform/toolbar.h
index 31724faadeea..a20d173b977d 100644
--- a/macos/platform/toolbar.h
+++ b/macos/platform/toolbar.h
@@ -1,5 +1,5 @@
// toolbar.h — NSToolbar with SF Symbols
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/toolbar.mm b/macos/platform/toolbar.mm
index 05bcbc68a98a..048d5ffb15a8 100644
--- a/macos/platform/toolbar.mm
+++ b/macos/platform/toolbar.mm
@@ -1,5 +1,5 @@
// toolbar.mm — NSToolbar with SF Symbols
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "toolbar.h"
@@ -7,7 +7,7 @@
#include "app_state.h"
#include "windows.h"
-static NSString* const kToolbarIdentifier = @"MacNotePPToolbar";
+static NSString* const kToolbarIdentifier = @"PaperWaspToolbar";
static NSString* const kNewItem = @"ToolbarNew";
static NSString* const kOpenItem = @"ToolbarOpen";
diff --git a/macos/platform/wndproc.h b/macos/platform/wndproc.h
index 89254111ee43..2be9c06bd4f1 100644
--- a/macos/platform/wndproc.h
+++ b/macos/platform/wndproc.h
@@ -1,5 +1,5 @@
// wndproc.h — Main window procedure (command dispatch)
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#pragma once
diff --git a/macos/platform/wndproc.mm b/macos/platform/wndproc.mm
index 210cfb5baab1..bca826e6d92a 100644
--- a/macos/platform/wndproc.mm
+++ b/macos/platform/wndproc.mm
@@ -1,5 +1,5 @@
// wndproc.mm — Main window procedure (command dispatch)
-// Part of the Notepad++ macOS port modular refactor.
+// Part of the PaperWasp macOS app.
#import
#include "wndproc.h"
diff --git a/macos/plugin-sdk/CMakeLists.txt b/macos/plugin-sdk/CMakeLists.txt
index 7480a30650d7..104485a90666 100644
--- a/macos/plugin-sdk/CMakeLists.txt
+++ b/macos/plugin-sdk/CMakeLists.txt
@@ -1,11 +1,11 @@
-# MacNote++ Plugin SDK
-# For building plugins as .dylib files that load into MacNote++.
+# PaperWasp Plugin SDK
+# For building plugins as .dylib files that load into PaperWasp.
#
# Plugins include PluginInterface.h which pulls in Notepad_plus_msgs.h and Scintilla.h.
# On macOS, resolves to the Win32 shim from macos/shim/include/.
cmake_minimum_required(VERSION 3.20)
-project(MacNotePlusPluginSDK LANGUAGES CXX)
+project(PaperWaspPluginSDK LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
# Paths to headers
@@ -14,10 +14,10 @@ set(NPP_PLUGINS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../PowerEditor/src/MISC/Plug
set(SCINTILLA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../scintilla/include")
# Example plugin
-add_subdirectory(example/HelloMacNote)
+add_subdirectory(example/HelloPaperWasp)
# Apply SDK include paths to all plugin targets
-target_include_directories(HelloMacNote PRIVATE
+target_include_directories(HelloPaperWasp PRIVATE
"${SHIM_DIR}"
"${NPP_PLUGINS_DIR}"
"${SCINTILLA_DIR}"
diff --git a/macos/plugin-sdk/example/HelloMacNote/CMakeLists.txt b/macos/plugin-sdk/example/HelloMacNote/CMakeLists.txt
deleted file mode 100644
index 4ae76ec1ac71..000000000000
--- a/macos/plugin-sdk/example/HelloMacNote/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-cmake_minimum_required(VERSION 3.20)
-project(HelloMacNote LANGUAGES CXX)
-set(CMAKE_CXX_STANDARD 20)
-
-add_library(HelloMacNote MODULE HelloMacNote.cpp)
-
-set_target_properties(HelloMacNote PROPERTIES
- PREFIX ""
- SUFFIX ".dylib"
- OUTPUT_NAME "HelloMacNote"
-)
-
-# Allow unresolved symbols that the host app provides at load time
-target_link_options(HelloMacNote PRIVATE
- "LINKER:-undefined,dynamic_lookup"
-)
diff --git a/macos/plugin-sdk/example/HelloPaperWasp/CMakeLists.txt b/macos/plugin-sdk/example/HelloPaperWasp/CMakeLists.txt
new file mode 100644
index 000000000000..9672665c87a1
--- /dev/null
+++ b/macos/plugin-sdk/example/HelloPaperWasp/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.20)
+project(HelloPaperWasp LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 20)
+
+add_library(HelloPaperWasp MODULE HelloPaperWasp.cpp)
+
+set_target_properties(HelloPaperWasp PROPERTIES
+ PREFIX ""
+ SUFFIX ".dylib"
+ OUTPUT_NAME "HelloPaperWasp"
+)
+
+# Allow unresolved symbols that the host app provides at load time
+target_link_options(HelloPaperWasp PRIVATE
+ "LINKER:-undefined,dynamic_lookup"
+)
diff --git a/macos/plugin-sdk/example/HelloMacNote/HelloMacNote.cpp b/macos/plugin-sdk/example/HelloPaperWasp/HelloPaperWasp.cpp
similarity index 90%
rename from macos/plugin-sdk/example/HelloMacNote/HelloMacNote.cpp
rename to macos/plugin-sdk/example/HelloPaperWasp/HelloPaperWasp.cpp
index 427dc4ac9067..2ebcb12e15c0 100644
--- a/macos/plugin-sdk/example/HelloMacNote/HelloMacNote.cpp
+++ b/macos/plugin-sdk/example/HelloPaperWasp/HelloPaperWasp.cpp
@@ -1,4 +1,4 @@
-// HelloMacNote — Sample Notepad++ plugin
+// HelloPaperWasp — Sample PaperWasp plugin
// Compiles on both Windows (.dll) and macOS (.dylib) without #ifdef guards.
#include "PluginInterface.h"
@@ -14,7 +14,7 @@ static FuncItem funcItems[NB_FUNC];
static void helloWorld()
{
- ::MessageBox(nppData._nppHandle, L"Hello from MacNote++ plugin!", L"HelloMacNote", MB_OK);
+ ::MessageBox(nppData._nppHandle, L"Hello from PaperWasp plugin!", L"HelloPaperWasp", MB_OK);
}
static void insertTimestamp()
@@ -39,7 +39,7 @@ static void showVersion()
int minor = LOWORD(ver);
wchar_t msg[128];
- swprintf(msg, 128, L"MacNote++ version: %d.%d", major, minor);
+ swprintf(msg, 128, L"PaperWasp compatibility API version: %d.%d", major, minor);
::MessageBox(nppData._nppHandle, msg, L"Version", MB_OK);
}
@@ -64,7 +64,7 @@ extern "C" __declspec(dllexport) void setInfo(NppData nd)
extern "C" __declspec(dllexport) const wchar_t* getName()
{
- return L"HelloMacNote";
+ return L"HelloPaperWasp";
}
extern "C" __declspec(dllexport) FuncItem* getFuncsArray(int* nbItems)
diff --git a/macos/scripts/clean-debug-build.sh b/macos/scripts/clean-debug-build.sh
index 7dd376a8691d..8d3a972dc973 100755
--- a/macos/scripts/clean-debug-build.sh
+++ b/macos/scripts/clean-debug-build.sh
@@ -12,6 +12,6 @@ echo "==> Running CMake setup (Xcode generator)..."
cmake -G Xcode ..
echo "==> Building debug package..."
-cmake --build . --target MacNotePlusPlus_package --config Debug
+cmake --build . --target PaperWasp_package --config Debug
-echo "==> Done. App bundle is at: $(cd "$SCRIPT_DIR/../dist" && pwd)/MacNote++.app"
+echo "==> Done. App bundle is at: $(cd "$SCRIPT_DIR/../dist" && pwd)/PaperWasp.app"
diff --git a/macos/scripts/sign-and-notarize.sh b/macos/scripts/sign-and-notarize.sh
index 7ceb58c26622..f08a21fdd6e0 100755
--- a/macos/scripts/sign-and-notarize.sh
+++ b/macos/scripts/sign-and-notarize.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# sign-and-notarize.sh -- Sign and notarize MacNote++.app and produce a signed DMG
+# sign-and-notarize.sh -- Sign and notarize PaperWasp.app and produce a signed DMG
#
# This script performs inside-out signing: every nested Mach-O (plugin dylibs,
# frameworks) is signed before the outer bundle, then a fresh DMG is built from
@@ -18,10 +18,10 @@
# API key auth: APPLE_API_KEY + APPLE_API_ISSUER (+ optional APPLE_API_KEY_PATH)
#
# Options:
-# --app-path PATH Path to .app bundle (default: macos/dist/MacNote++.app)
-# --dmg-output PATH Output path for signed DMG (default: macos/dist/MacNotePlusPlus.dmg)
-# --volname NAME DMG volume name (default: MacNotePlusPlus)
-# --entitlements PATH Path to entitlements (default: macos/platform/MacNote.entitlements)
+# --app-path PATH Path to .app bundle (default: macos/dist/PaperWasp.app)
+# --dmg-output PATH Output path for signed DMG (default: macos/dist/PaperWasp.dmg)
+# --volname NAME DMG volume name (default: PaperWasp)
+# --entitlements PATH Path to entitlements (default: macos/platform/PaperWasp.entitlements)
# --skip-notarize Only sign, do not submit for notarization
# --skip-dmg Only sign/notarize the .app (no DMG produced)
# --verbose Enable verbose output
@@ -34,10 +34,10 @@ REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
MACOS_DIR="$REPO_ROOT/macos"
# Defaults
-APP_PATH="${MACOS_DIR}/dist/MacNote++.app"
-DMG_OUTPUT="${MACOS_DIR}/dist/MacNotePlusPlus.dmg"
-DMG_VOLNAME="MacNotePlusPlus"
-ENTITLEMENTS="${MACOS_DIR}/platform/MacNote.entitlements"
+APP_PATH="${MACOS_DIR}/dist/PaperWasp.app"
+DMG_OUTPUT="${MACOS_DIR}/dist/PaperWasp.dmg"
+DMG_VOLNAME="PaperWasp"
+ENTITLEMENTS="${MACOS_DIR}/platform/PaperWasp.entitlements"
SKIP_NOTARIZE=false
SKIP_DMG=false
VERBOSE=false
@@ -141,7 +141,7 @@ spctl --assess --type execute --verbose=2 "$APP_PATH" 2>&1 || \
DMG_PATH=""
if ! $SKIP_DMG; then
- STAGE_ROOT="$(mktemp -d -t macnotepp-sign)"
+ STAGE_ROOT="$(mktemp -d -t paperwasp-sign)"
STAGE_DMG_ROOT="$STAGE_ROOT/dmg-root"
trap 'rm -rf "$STAGE_ROOT"' EXIT
@@ -178,7 +178,7 @@ if ! $SKIP_NOTARIZE; then
NOTARIZE_TARGET="$DMG_PATH"
CLEANUP_NOTARIZE_TARGET=false
else
- NOTARIZE_TARGET="$(mktemp -t macnotepp-notarize).zip"
+ NOTARIZE_TARGET="$(mktemp -t paperwasp-notarize).zip"
log "Creating zip for notarization: $NOTARIZE_TARGET"
ditto -c -k --keepParent "$APP_PATH" "$NOTARIZE_TARGET"
CLEANUP_NOTARIZE_TARGET=true
diff --git a/macos/shim/src/win32_menu_impl.mm b/macos/shim/src/win32_menu_impl.mm
index 935080755f6b..b75e57de4157 100644
--- a/macos/shim/src/win32_menu_impl.mm
+++ b/macos/shim/src/win32_menu_impl.mm
@@ -388,11 +388,15 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
// Add application menu (About, Quit)
NSMenuItem* appMenuItem = [[NSMenuItem alloc] init];
- NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Notepad++"];
+ NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"PaperWasp"];
appMenu.delegate = [Win32MenuDelegate shared];
- [appMenu addItemWithTitle:@"About Notepad++" action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+ NSMenuItem* aboutItem = [appMenu addItemWithTitle:@"About PaperWasp"
+ action:@selector(menuItemClicked:)
+ keyEquivalent:@""];
+ [aboutItem setTarget:[Win32MenuTarget shared]];
+ [aboutItem setTag:IDM_HELP_ABOUT];
[appMenu addItem:[NSMenuItem separatorItem]];
- NSMenuItem* quitItem = [appMenu addItemWithTitle:@"Quit Notepad++" action:@selector(terminate:) keyEquivalent:@"q"];
+ NSMenuItem* quitItem = [appMenu addItemWithTitle:@"Quit PaperWasp" action:@selector(terminate:) keyEquivalent:@"q"];
(void)quitItem;
appMenuItem.submenu = appMenu;
[mainMenu addItem:appMenuItem];
diff --git a/macos/shim/src/win32_misc.mm b/macos/shim/src/win32_misc.mm
index 1f60d3b0ab1c..ce6731a19118 100644
--- a/macos/shim/src/win32_misc.mm
+++ b/macos/shim/src/win32_misc.mm
@@ -241,7 +241,7 @@ DWORD FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId,
// ============================================================
// GetCommandLine
// ============================================================
-static WCHAR s_commandLine[MAX_PATH * 4] = L"notepad++.exe";
+static WCHAR s_commandLine[MAX_PATH * 4] = L"PaperWasp";
LPWSTR GetCommandLineW()
{
diff --git a/macos_plan.md b/macos_plan.md
index ab1021ee5ff9..b80147ad1441 100644
--- a/macos_plan.md
+++ b/macos_plan.md
@@ -1,8 +1,8 @@
-# Notepad++ macOS Port via Win32 Shim Layer
+# PaperWasp macOS Port via Win32 Shim Layer
## Context
-Notepad++ is a Windows-only C++ text editor deeply coupled to Win32 APIs (~291 distinct functions, ~4,100+ call sites across 284 files). The user wants to build it for macOS by creating a compatibility shim that translates Win32 calls to Cocoa/AppKit/CoreGraphics equivalents, keeping the existing source code largely unmodified.
+PaperWasp is based on Notepad++, a Windows-only C++ text editor deeply coupled to Win32 APIs (~291 distinct functions, ~4,100+ call sites across 284 files). The port uses a compatibility shim that translates Win32 calls to Cocoa/AppKit/CoreGraphics equivalents, keeping the existing source code largely unmodified.
**Key insight**: The vendored Scintilla already has **complete macOS/Cocoa support** (`scintilla/cocoa/`) with Xcode projects, and Lexilla is fully platform-independent. The editor core is already portable — the challenge is the application shell and UI layer.
diff --git a/plugins/comparePlus/src/Strings.cpp b/plugins/comparePlus/src/Strings.cpp
index 2e2cf906b933..3537b7028a7f 100644
--- a/plugins/comparePlus/src/Strings.cpp
+++ b/plugins/comparePlus/src/Strings.cpp
@@ -159,7 +159,7 @@ Strings::Strings() : _currentLocale {"english"}
{ "IDC_HIDE_MOVED_LINES", "Hide moved lines" },
{ "IDC_SHOW_ONLY_SELECTIONS", "Show only compared selections" },
- { "CONFIG_DIR_FAIL", "Notepad++ plugins config folder\n'%s'\ndoesn't exist and failed to be created.\nCannot write configuration file." },
+ { "CONFIG_DIR_FAIL", "PaperWasp plugins config folder\n'%s'\ndoesn't exist and failed to be created.\nCannot write configuration file." },
{ "CONFIG_WRITE_FAIL", "Failed to write configuration file\n'%s'" },
{ "MARK_NEW", " ** New to Compare" },
@@ -216,8 +216,8 @@ Strings::Strings() : _currentLocale {"english"}
{ "PATCH_SELECT", "Select patch file:" },
{ "MSG_CMD_LINE_AMBIGUOUS", "Command line file name ambiguous (several opened files with that name) - compare aborted.\nEither use full file paths or add '-nosession' option to command line." },
- { "MSG_NOT_COMPATIBLE", "%s version is not compatible with current Notepad++ version.\nPlugin will be disabled." },
- { "MSG_MARKER_ALLOC_FAIL", "Notepad++ marker allocation for visualizing diff changes failed.\nDefault one will be used but conflicts with other plugins might appear.\nPlease switch to Notepad++ version 8.5.6 or newer." },
+ { "MSG_NOT_COMPATIBLE", "%s version is not compatible with the current PaperWasp compatibility API.\nPlugin will be disabled." },
+ { "MSG_MARKER_ALLOC_FAIL", "PaperWasp marker allocation for visualizing diff changes failed.\nDefault one will be used but conflicts with other plugins might appear.\nPlease use a PaperWasp build with Notepad++ API emulation 8.5.6 or newer." },
{ "MSG_MARGIN_ALLOC_FAIL", "Allocating new margin for compare diff symbols failed.\nLines diff symbols will not be visible." },
{ "MSG_ALREADY_COMPARED", "File '%s' is already compared - operation ignored." },
{ "MSG_ENCODINGS", "Trying to compare files with different encodings - the result might be inaccurate and misleading.\n\nCompare anyway?" },
@@ -246,7 +246,7 @@ Strings::Strings() : _currentLocale {"english"}
{ "MSG_IGNORED_DIFFS", "\n\nDiffs exist but have been ignored due to the compare options." },
{ "MSG_PROMPT_CLOSE", "\n\nClose compared files?" },
{ "MSG_COMPARE_FAIL", "Failure allocating resources, compare aborted" },
- { "MSG_REPLACED", "Compared file text replaced by Notepad++. Please manually re-compare to make sure compare results are valid!" },
+ { "MSG_REPLACED", "Compared file text replaced by PaperWasp. Please manually re-compare to make sure compare results are valid!" },
{ "MSG_HIDDEN_NOT_POSSIBLE", "Operation not possible while diffs are hidden." },
{ "MSG_PATCH_NO_UNIQUE", "Patch generation for 'Find Unique' commands is currently not supported." },
{ "MSG_PATCH_NO_MODIFIED", "Compared file is modified, generating patch is not possible.\nPlease manually re-compare and try again." },