Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Notepad--

Notepad++ for the Mac — an HTML interface wrapped in Python.

Ships as three editions from one codebase (./build_app.sh builds all):

Notepad-- (classic) Notepad-- Plus Notepad-- AI
Entry point python3 app.py --classic python3 app.py --plus python3 app.py
Tabs, syntax, find/replace, session restore, Run console
PDF viewing + annotation
Apple Notes integration
Decide panel (Claude-powered decision briefs)

Classic stays true to Notepad++; Plus is everything we've built minus the AI; AI is the fully evolved edition. Each keeps its own session, so tabs never leak between them.

A lightweight, classic-Notepad++-style text editor. The UI is HTML/CSS/JS (with CodeMirror for editing) rendered inside a native macOS window via pywebview, which uses the system WKWebView — so there's no bundled browser and the app stays small.

Classic Notepad++ look: menus, toolbar, tabs, status bar

Features

  • Tabs — open many files at once; middle-click or ✕ to close; red/blue dot shows unsaved/saved state (like Notepad++'s floppy icons)
  • Session restore — quit any time; your tabs and unsaved text come back exactly as you left them, Notepad++ style (stored in ~/Library/Application Support/Notepad--/session.json)
  • Syntax highlighting — Python, JavaScript, JSON, HTML, CSS, XML, Markdown, C/C++/Java, Shell, SQL, YAML; auto-detected by file extension, switchable from the Language menu
  • Find & Replace — with match-case and regular expressions (including $1 capture groups in replacements), live match highlighting and match counts, wrap-around search
  • Find in Files — ⇧⌘F greps a whole folder (binary files and the usual junk dirs skipped) into a results panel; click any hit to jump straight to that file and line
  • Line operations — duplicate (⌘D), move up/down (⌥⌘↑/↓), delete (⇧⌘K), join (⌘J), sort, UPPERCASE/lowercase, and comment/uncomment (⌘/) aware of each language's comment syntax
  • Multi-cursor editing — ⌘-click to add cursors, ⌥-drag for column/rectangle selection, and brackets/quotes auto-close as you type
  • Markdown preview — ⇧⌘M splits the editor with a live rendered preview (headings, lists, code fences, quotes, links) for .md tabs
  • Folder sidebar — File → Open Folder… puts a collapsible file tree beside the editor; click to open, drag its edge to resize
  • Recent Files — the File menu remembers your last 15 files
  • Tabs, continued — drag tabs to reorder them; ⌘1–⌘9 jumps to tab N; drop files from Finder anywhere on the window to open them
  • Disk watching — if an open file changes on disk (a git pull, another editor), Notepad-- notices within seconds and offers to reload it
  • The classics — line numbers, word wrap toggle, go-to-line, zoom, current-line highlight, bracket matching, line/column/selection status bar, Windows/Unix line-ending detection (preserved on save)
  • Your work is protected — closing a tab with unsaved changes asks Save / Don't Save / Cancel; saving warns if another program changed the file on disk since you opened it; files keep their original encoding (UTF-8, UTF-8-BOM, ANSI) instead of being silently re-encoded
  • Run scripts — ⌘R runs the current Python or shell file (saving it first if needed) with live stdout/stderr streaming into a console panel; ⇧⌘R runs any one-off shell command in the file's directory, with command history, a Stop button, and exit-code status — like Notepad++'s Run menu. The console is resizable (drag its edge) and docks to the bottom or the right side; size and position are remembered.
  • PDF annotation — Highlight mode marks selected text; Note mode pins comments anywhere on a page. Annotations persist across sessions (stored alongside the app, the original PDF is untouched) and Export Annotated… saves a copy of the PDF with the highlights and notes drawn in.
  • Decide (decision intelligence) — ⇧⌘A sends the open document to the Claude API and streams back a decision brief: what's being decided, the options with trade-offs, risks, a recommendation, and next actions. Ask free-form questions about the document in the same panel. Works on text tabs and PDFs (via extracted text). Provider-agnostic: use Claude (Anthropic), OpenAI, or any OpenAI-compatible endpoint — including a local Ollama server for fully offline, free analysis. Configure once under Decide → AI Provider Settings (keys stored locally with 0600 permissions; pip3 install anthropic and/or openai).
  • Opens from Finder — the built app registers itself for text, code, and PDF files, so right-click → Open WithNotepad-- and setting it as the default app both work. Double-clicked files open whether the app is closed (launches with the file) or already running (the file lands in a new tab and the window comes to the front) — handled via the macOS open-documents Apple Event
  • Skins — six looks under View → Skin: Classic (the Notepad++ default), Dark, Solarized Light, Solarized Dark, Monokai, and Matrix (black and phosphor green, glow included). A skin restyles the whole app — menus, toolbar, tabs, editor and syntax colors — and is remembered across sessions. Skin: Custom… creates ~/Library/Application Support/Notepad--/custom-skin.css where you can override any palette variable to build your own
  • Decide, on a selection — Decide → Analyze Selection sends just the highlighted text instead of the whole document
  • Apple NotesFile → Open Apple Note… lists your notes (filter-as- you-type), opens one as a tab, and ⌘S saves your edits back into Apple Notes; Send Tab to Apple Notes turns any tab into a new note. Uses macOS automation — the first use asks permission to control Notes. Formatting is flattened to plain text while editing (lists become "- item" lines); Save As to a file detaches the tab from Notes.
  • PDF viewing — open a .pdf and it renders in a read-only tab (PDF.js, vendored, works offline): page navigation, zoom/fit-width, ⌘L go-to-page, text selection, and ⌘F search with highlighting across pages. File → Open PDF as Text (or the Open as Text button) extracts all the text into a normal editable tab. PDF tabs restore with your last page and zoom, like everything else.

Run it (quick start)

pip3 install -r requirements.txt
python3 app.py

Build a real Mac app

./build_app.sh

This produces dist/Notepad--.app — drag it into Applications and pin it to your Dock. (Requires Python 3 from python.org or Homebrew; the script installs pyinstaller automatically.)

Keyboard shortcuts

Action Shortcut
New / Open / Save / Save As ⌘N / ⌘O / ⌘S / ⇧⌘S
Close tab ⌘W
Find / Replace ⌘F / ⌥⌘F
Find next / previous ⌘G / ⇧⌘G
Go to line ⌘L
Zoom in / out / reset ⌘+ / ⌘− / ⌘0

Note: because unsaved text is always preserved in the session, closing the window never loses work — just like Notepad++.

Known caveat: macOS may bind ⌘W to "close window" at the native menu level before the app sees it. If that happens, your tabs are restored on relaunch.

Project layout

app.py            # Python shell: native window, file dialogs, disk I/O, session
ui/index.html     # the interface
ui/css/style.css  # classic Notepad++ styling
ui/js/app.js      # tabs, find/replace, menus, session logic
ui/vendor/        # CodeMirror 5 + PDF.js (vendored, no network needed)
build_app.sh      # makes dist/Notepad--.app with PyInstaller

ui/index.html also runs in a plain browser (demo mode with limited file access) — handy for UI development.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages