Files
klammertext/doc/edit/notepadpp/README.md
T
ackandClaude Fable 5.1 715d939727 What a Windows editor saves, and a standard user's Windows install (from dev 9d6f66456a3d)
- CRLF line endings are read as newlines on every system (the reader used
  to delete the pair, collapsing a Notepad++ file into one line on Linux
  and macOS); a leading UTF-8 byte-order mark is ignored; a UTF-16 or
  Windows-1252 source is refused with the encoding, the place and the
  remedy named. .gitattributes pins LF in every clone.
- Windows source install: the repository path must hold no space (GNU
  Make), accented letters are fine (every linker input is relative now);
  python.org's Python is selected ahead of an MSYS2 one that poppler pulls
  in; TeX Live goes to its Windows default C:\texlive\2026.
- The Python binding needs an ASCII installation path on Windows, and its
  suite says so there.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-26 16:17:59 +02:00

5.5 KiB

Klammertext support for Notepad++

Notepad++ support for editing Klammertext files (.kt documents and .k klammer definitions): syntax highlighting through a User Defined Language, and the shared editor core's delimiter check and reindentation through two Run-menu commands. Notepad++ is Windows only, and so is this package.

Notepad++ has no Python plugin host and no built-in language-server client, so it cannot import the shared core the way Sublime Text does or talk to the language server the way VS Code does. What it has is a declarative highlighter and a Run menu that can invoke any program on the current file, and this package uses exactly those two things.

Files

File Purpose
Klammertext.udl.xml The User Defined Language: highlighting for the three @-tiers, escapes, text removal, and the @code verbatim interior. Its header lists what it colours and the limits of a UDL.
klammertext_edit.py The shared editor core (in the editing zip it sits here; in the Klammertext repository it is doc\edit\shared\klammertext_edit.py). The Run commands call it.
README.md This file.

Requirements

  • Notepad++ 7.9 or later (the userDefineLangs folder; any recent version qualifies).
  • For the Run commands: python on the Path, which the Klammertext installation already needs.
  • Files saved as UTF-8 (Notepad++'s default for new files; Encoding → Convert to UTF-8 for an older one). Line endings do not matter, and a file in another encoding is refused by ktext with the remedy named.

Install the highlighting

Copy Klammertext.udl.xml into Notepad++'s user-defined-language folder and restart Notepad++:

$d = "$env:AppData\Notepad++\userDefineLangs"
New-Item -ItemType Directory -Force $d | Out-Null
Copy-Item Klammertext.udl.xml $d

Notepad++ loads every file in that folder at start. .kt and .k files then open as "Klammertext" (the language shows in the status bar and at the bottom of the Language menu). The alternative is the dialog: Language → User Defined Language → Define your language… → Import…, which copies the file to the same place.

What you see: klammer applications (@name … @) in blue, definitions (@@name … @@) in green, system commands (@@@name … @@@) in orange; a # at the start of a line greys the rest of the line, #[ … ]# greys and folds a region; ##, #-, #+, #/, | and : in the marker red; the interior of @code … code@ muted and uninterpreted. The colours are the palette's light-ground values with transparent backgrounds, so a dark theme keeps its own ground.

Two limits, both properties of a UDL rather than of Klammertext, are documented in the file's header: a # that is not the first thing on its line is not treated as a comment (so that the whitespace operators #-, #+, #/ never grey the rest of their line), and @c … c@ is not made verbatim (a UDL delimiter has no word boundary, so @c would also open at @caption and @cond).

The Run commands

The shared core's command-line interface reads a file on standard input and writes the result on standard output; Notepad++'s Run → Run… dialog (F5) runs a command line with the current file's path filled in as $(FULL_CURRENT_PATH). Two commands cover the structural tools. Replace C:\Users\<you>\klammertext\doc\edit\shared with the folder that holds klammertext_edit.py (with the editing zip, the folder this README is in).

Check the delimiters — lists every unclosed opening, extra close, name or tier mismatch, and unclosed literal span or #[ block, as line:column: message; an empty window means the file is balanced. The /k keeps the window open to read:

cmd /k python "C:\Users\<you>\klammertext\doc\edit\shared\klammertext_edit.py" check < "$(FULL_CURRENT_PATH)"

Reindent the file — rewrites the file with the canonical indentation (2 spaces per nesting level, bars and closes at their opener's column, @document transparent, verbatim and removed text untouched):

cmd /c python "C:\Users\<you>\klammertext\doc\edit\shared\klammertext_edit.py" indent < "$(FULL_CURRENT_PATH)" > "$(FULL_CURRENT_PATH).tmp" && move /y "$(FULL_CURRENT_PATH).tmp" "$(FULL_CURRENT_PATH)"

Paste each line into the Run dialog once, press Save…, give it a name ("Klammertext check", "Klammertext reindent") and a shortcut (Ctrl+Alt+K, Ctrl+Alt+I are free); they then appear at the bottom of the Run menu with those keys.

Two things to know about the reindent command. It works on the file on disk, so save first (Ctrl+S); Notepad++ does not save before running. And after it runs, Notepad++ notices the changed file: with the default setting it asks whether to reload, which you answer Yes; under Settings → Preferences → MISC. → File Status Auto-Detection the choice "Update silently" makes the reload automatic. Undo history is lost on a reload, as for any external edit.

Table alignment and jump-to-match need a caret position the Run dialog cannot pass, so they are not offered here. They are available in every other supported editor, and for Notepad++ through the PythonScript plugin, which embeds a Python that can import the shared core and reach the caret; a script for it is a possible addition, not part of this package.

Keeping things in sync

The UDL restates the literal-klammer set (@code) that the shared core owns in LITERAL_KLAMMERS; its header says how to add one. The editor support's overview is doc/edit/README.md in the Klammertext repository.