User guide¶
A tour of the Notepad++-style behavior implemented by the notepadia
extension, organized by the menu tree a Notepad++ user already knows. Each
menu section lists its entries with the chord (if any) and whether the
browser gets in the way; the prose below each table is the detail. Browser-only
limitations are collected in one place in
Differences from Notepad++; the tables here just point at
them.
The menu tree is Notepad++'s:
| Place | Menu |
|---|---|
| 1 | File |
| 2 | Edit |
| 3 | Search |
| 4 | View |
| 5 | Encoding |
| 6 | Language |
| 6b | Macros |
| 6c | Run |
| 6d | Window |
| 7 | Settings |
Default behavior profile¶
On a cold profile (no saved settings) Notepadia starts with Notepad++-style defaults rather than VS Code-style editor intelligence:
- word wrap off, 4-wide real tabs (
insertSpaces: false), tab-size detection disabled - no auto-closing brackets, quotes or auto-surround
- no suggestions popup while typing (
quickSuggestionsoff) and no suggestions on trigger characters - formatting off on paste/type, no trimming of trailing whitespace on save
- whitespace and control characters hidden, line numbers on, rulers off, autosave off
Each of these lives in the app's theia.frontend.config.preferences block in
applications/browser/package.json and applications/electron/package.json,
so they take effect before any user setting and can be overridden per
workspace or per user.
File menu¶
| Entry | Chord | Browser-limited? |
|---|---|---|
| New | Ctrl+N, or Ctrl+Alt+N |
yes, see below |
| Open from Computer | Ctrl+O, Ctrl+Alt+O |
yes, see below |
| Open from Workspace... | - | no |
| Upload to Workspace... | - | no |
| Save | Ctrl+S |
no |
| Save As... | Ctrl+Shift+S |
no |
| Save a Copy As... | - | no |
| Save All | - | no |
| Save Session... / Load Session... | - | no |
| Reload from Disk | - | no |
| Rename... | - | no |
| Delete from Disk | - | no |
| Close | Ctrl+F4 |
yes, see below |
| Close All | Ctrl+Alt+Shift+W |
yes, see below |
| - | no | |
| Print Preview... | - | no |
| Open Folder as Workspace... | - | no |
| Recent Files | - | no |
| Set/Clear Read-Only | Ctrl+Alt+R |
no |
| Save To This Computer... | - | yes, see below |
See Shortcuts the browser claims for the
Ctrl+N / Ctrl+O / Ctrl+W / Ctrl+Shift+W pairings, and Files on your
own computer for Open from Computer /
Save To This Computer... / Upload to Workspace....
New documents¶
File ▸ New (Ctrl+N, or Ctrl+Alt+N where the browser claims Ctrl+N)
opens a new untitled document named new 1, new 2, ... like Notepad++, in
plain text (no extension, no language detection). Save As... (Ctrl+Shift+S)
prompts for a real file name.
Working on a file¶
Four File-menu entries act on the file behind the current tab. Each one goes
through Theia's FileService, so the tab, the Files tree and the bytes on
disk agree afterwards:
- Reload from Disk throws away what is on screen and re-reads the file. It asks first, and only when the tab has unsaved changes.
- Save a Copy As... writes the current buffer to a file you name and leaves
the tab on the file it already had, so the next
Ctrl+Sstill goes to the original. This is the way to get an untitled buffer out of the browser: a copy ofnew 1is offered asnew 1.txt. - Rename... moves the file and moves the tab with it, carrying unsaved text
across, so a save after the rename writes to the new name. A relative path is
allowed (
sub/notes.txtmoves the file into a subfolder) but..and absolute paths are refused: a command called "Rename" should not also be a way to move a file out of the folder you are looking at. Renaming onto an existing file asks before replacing it. - Delete from Disk removes the file and closes the tab, always after a confirmation that names the file, and says so when unsaved changes will go with it.
Open Folder as Workspace... picks a directory as the workspace root. It is Theia's own folder chooser, kept in the menu under a name that says what it does.
Read-only documents¶
File ▸ Set/Clear Read-Only (Ctrl+Alt+R) flags the current document
read-only, and clears the flag when it is already set. This is the one
Notepad++ read-only entry that is a toggle, so it is labelled as one; the tab
context menu and a future "Clear Read-Only Flag" split are not duplicated
here.
While a document is flagged:
- typing, pasting and every editing command are rejected by the editor itself, not by the app deciding to ignore them - so nothing slips through a shortcut the app did not know about
- the tab shows the padlock icon
- the status bar mode indicator reads
Read-Onlyinstead ofINS/OVR
does not inherit it. An untitled document can be flagged too, and is tracked separately.
Print¶
File ▸ Print and File ▸ Print Preview... (also on the toolbar and the tab
context menu) render the active document as plain text with line numbers and a
file-name header. In a browser session that rendering opens in a dedicated
window and is handed to the page's print dialog; no chord is bound because
Ctrl+P belongs to the browser's own print command. In the desktop app the
current window prints itself in place, so File ▸ Print reaches the operating
system's native print dialog directly.
Sessions and recent files¶
File ▸ Save Session... / Load Session... write and restore a named session
file: the open tab set, order, active tab, caret positions and bookmarks.
File ▸ Recent Files lists recently opened editors (most recent first,
deduplicated, capped at 15) with a Clear Recent Files entry; that history
survives reloads via localStorage.
Unsaved changes and drag-and-drop¶
File ▸ CloseandFile ▸ Close Allconfirm before discarding dirty editors (Save / Don't Save / Cancel; Close All also offers Save All).- Dropping files onto the browser app window offers the built-in "Upload Files..." flow to copy them into the workspace.
Files on your own computer¶
Notepad++'s File ▸ Open and File ▸ Save always mean the disk of the
machine you are sitting at. Notepadia is a browser app served by another
machine, so it has two entirely separate storages and the menu names them
explicitly. Nothing else in the UI is ambiguous about this:
Open is the user's own disk, everywhere. The File menu entry, the
toolbar's Open button and Ctrl+O are one command with one label —
Open from Computer — and all three open a file picker on your machine. The
server workspace keeps its own entry, Open from Workspace..., which says
which filesystem it browses. No control in the application is labeled
Open..., so the verb can never resolve to two different places.
| Command | Reads from | Creates / writes to | Changes the tab? |
|---|---|---|---|
Open from Computer (File menu, toolbar button, Ctrl+O) |
your disk | a new in-browser tab (nothing is written to the server) | opens a new tab |
Open from Workspace..., Save, Save As..., Save All |
server workspace | server workspace | yes |
Save To This Computer... |
the open tab | a copy on your disk | no |
Upload to Workspace... |
your disk | server workspace | opens the uploaded file |
On Chromium, Open from Computer keeps the handle to the file it picked, so
Ctrl+S on that tab writes straight back to the same file on your disk
instead of asking for a server-side name. The tab is titled with the real file
name (notes.txt), not new 1, and a second copy of the same name opens as
notes (2).txt.
Save To This Computer... never changes the tab. It asks where to write, and
on a browser without the picker it falls back to an ordinary download, so you
end up with a copy on your disk and the tab untouched.
Upload to Workspace... is the deliberate route for getting a file into the
server workspace, where the Files tree, Find in Files and every other
workspace-aware feature can see it. It is the working replacement for Theia's
own Upload Files... command, which is only enabled when a node happens to be
selected in the Files tree and is therefore a dead entry in the File menu.
A cancelled picker is never treated as an error: closing the dialog does nothing at all. If the browser refuses write permission, the message names the file that was not saved.
Where the picker opens. In the desktop app, Open from Computer,
Save To This Computer... and the upload conflict's Save As open in your home
folder. A browser cannot point the File System Access API at $HOME (it takes
only well-known folders or a file/directory handle), so the browser picker
instead reopens at the folder you used last in this profile, and falls back to
the browser's own default (documents) the first time. Cancelling the picker
still does nothing.
Browser support¶
| Browser | Reading (Open from Computer) |
Writing (Save To This Computer...) |
Ctrl+S write-back |
|---|---|---|---|
| Chromium 99+ (Chrome, Edge, Opera, Brave) | OS picker, file handle kept | OS picker, writes to the picked file | yes, to the original file |
| Firefox, Safari | OS picker via <input type="file"> |
browser download | no - Ctrl+S offers Save As |
The File System Access API needs a secure context, so https:// or
http://localhost. On plain http:// the app automatically falls back to the
upload/download route.
In the desktop app there is no browser to negotiate with: Open from
Computer and Save To This Computer... open the operating system's own native
Open/Save dialogs, and Ctrl+S writes back to the file you chose. The commands
have the same names and the same meaning in both targets - only the dialog and
the write-back mechanism differ.
Ctrl+Alt+O, not Ctrl+O
Notepad++ opens local files with Ctrl+O, but the browser claims Ctrl+O (and
Ctrl+Shift+O, which is bookmark-all-tabs in Chromium) before the page ever
sees the key, and a web app cannot intercept either. Ctrl+Alt+O is bound
instead - see Shortcuts the browser
claims - and the command is in the File
menu as always.
Edit menu¶
| Entry | Chord | Browser-limited? |
|---|---|---|
| Undo / Redo | Ctrl+Z / Ctrl+Y |
no |
| Cut / Copy / Paste | Ctrl+X / Ctrl+C / Ctrl+V |
no |
| Copy to Clipboard group | - | no |
| Paste Special group | - | yes, clipboard read, see below |
| Indent / Unindent | - | no |
| Duplicate Current Line | Ctrl+D |
no |
| Delete Current Line | Ctrl+L |
no |
| Move Current Line Up / Down | - | no |
| Join Lines | Ctrl+J |
no |
| Toggle Comment | - | no |
| Select group | Ctrl+A, Ctrl+Alt+B |
no |
| Line Operations submenu | see below | no |
| Convert Case submenu | Ctrl+Shift+U, Ctrl+U |
no |
| Insert ▸ Date & Time | F5, Ctrl+F5, Ctrl+Alt+D, Ctrl+Alt+Shift+D |
yes, F5, Ctrl+F5, see below |
| Blank Operations submenu | - | no |
| EOL Conversion submenu | - | no |
| Bookmarks submenu | Ctrl+F2, F2, Shift+F2 |
no |
| Clipboard History panel | - | no |
| Character Panel | - | no |
Paste Special needs to read the clipboard, which a browser only allows from
a secure context and only after the user has granted permission. Served over
https or from localhost it works; opened as a plain http:// page from
another machine it cannot, and the app says so in a message instead of
silently pasting nothing. Ctrl+V is unaffected and always works.
Insert ▸ Date & Time is bound to F5 / Ctrl+F5 in the desktop app; in the
browser those are the reload chords, so Ctrl+Alt+D / Ctrl+Alt+Shift+D are
added (see Shortcuts the browser claims).
Line Operations¶
Edit ▸ Line Operations holds Notepad++'s bulk line editing commands, all
undoable (the single-line commands - Indent, Duplicate, Delete, Move, Join,
Toggle Comment - sit directly in the Edit menu above this submenu):
- Split Lines splits each selected line at the caret column, or every line at its longest common prefix when there is no selection.
- Remove Consecutive Duplicate Lines deletes duplicate lines that are adjacent, leaving the first of each run; Remove Duplicate Lines catches duplicates anywhere in the selection, not just neighbours.
- Sort Lines Ascending / Descending and Reverse Lines reorder the selected lines; with no selection the whole document is sorted.
- Trim Trailing Whitespace strips trailing spaces and tabs from every
selected line (there is also
Edit ▸ Blank Operationsfor the leading end). - Column Editor... opens Notepad++'s column dialog: insert a fixed text string, a number sequence with its own initial value and increment (with or without leading zeros), or a repeated text down the current selection.
- Column Mode (
Alt+C) turns the current selection into a rectangular block: the selection's columns are applied to every line it covers, and typing then edits every cell at once. Monaco already does this withAlt+ drag, so this is for the people who do not know about the modifier. Unlike Notepad++, no dialog opens - the command is the conversion, and a...on a menu entry should mean "you are about to be asked something".
Blank Operations¶
Edit ▸ Blank Operations holds Notepad++'s whitespace helpers, all working on
the buffer through Monaco's edit engine (so each is undoable):
- Tab to Space converts the leading tabs of each selected line to spaces, and Space to Tab converts leading spaces back to tabs, both against the current tab width.
- Trim Leading and Trailing Space strips both ends of every selected line; Trim Trailing Space only the end.
- EOL to Space replaces the line endings of the selected lines with spaces, joining them.
- Remove Unnecessary EOL removes the line-endings that mark empty lines.
Convert Case¶
Edit ▸ Convert Case registers the two single-shot conversions whose effect
depends only on the selected text:
| Entry | Chord | Effect |
|---|---|---|
| UPPER CASE | Ctrl+Shift+U |
every selected character uppercased |
| lower case | Ctrl+U |
every selected character lowercased |
Notepad++ also offers Title Case, Sentence case, invert case and
ranDOM cASE; those are not registered here (see
Differences from Notepad++).
Copy to Clipboard¶
Covers Notepad++'s Copy to Clipboard group, which copies where the document
is, because the text itself is already on the clipboard after any ordinary
Copy:
| Entry | What lands on the clipboard |
|---|---|
| Current Full File Path | the whole path, e.g. /home/you/notes/todo.txt |
| Current Filename | just the name, e.g. todo.txt |
| Current Directory Path | the folder, with no trailing separator |
The three are disabled while an untitled document is active, because it has no path to report.
Paste Special¶
Edit ▸ Paste Special pastes at the caret and then fixes the indentation,
comparing against the line above:
- Paste and Indent lines the first pasted line up with the line above the caret, which is what puts a copied block into an indented file at the right column. A line above with no indentation leaves the clipboard alone: "not indented here" is not a request to strip what was copied.
- Paste and Unindent is the mirror image - it removes that same run of spaces or tabs from the start of the pasted text, so copying an indented block and pasting it next to indented code does not double the indent.
- Paste Unformatted inserts the
text/plainflavour of the clipboard as it stands. In a plain-text editor there is no formatting to strip, so this is the same as an ordinary Paste; it is here for the muscle memory.
Select¶
Edit ▸ Select holds the selection commands:
- Select All is
Ctrl+A, unchanged. - Begin/End Select (
Ctrl+Alt+B) works the way Notepad++'s does: the first press drops an anchor where the caret is, every move from then on extends the selection from that anchor rather than from the caret, and a second press leaves the selection on screen and forgets the anchor. The anchor belongs to the document, so switching tabs and back keeps it, and it stays armed until that second press - so give it one before you go back to placing a plain caret, or the next move you make will grow the selection again. - Multi-Select All puts a cursor on every occurrence of the word under the caret - no selection needed, which is what makes it useful. Match case only finds the same casing, and Whole word skips occurrences inside a longer word. At most 1000 matches are selected, and saying so is better than freezing the editor on a file with a million of them.
Line endings (EOL)¶
Edit ▸ EOL Conversion offers, in menu order:
Convert to Windows Format (CRLF)Convert to Unix Format (LF)Change Line Endings...- a quick-pick offering the same two targets, also reachable by clicking the EOL entry in the status bar.
The two conversions transform the buffer with Monaco's setEOL and are
undoable.
Tip
Only LF and CRLF are offered. Monaco's line model splits on \n, so
classic CR cannot be a separator inside the editor; CR files are
detected and shown as CR in the status bar.
Bookmarks¶
Ctrl+F2toggles a bookmark on the current line.F2/Shift+F2jump to the next / previous bookmark (wrapping).Edit ▸ Bookmarks ▸ Clear All Bookmarksempties the current file's set.
Bookmarks are per-model (keyed by URI), session-scoped, and rendered as glyphs in the line-number gutter.
Insert ▸ Date & Time¶
Edit ▸ Insert ▸ Date & Time puts a timestamp at every caret:
- Date & Time (short) (
F5) insertsHH:mm:ss dd/MM/yyyy. - Date & Time (long) (
Ctrl+F5) insertsddd, MMM d, yyyy h:mm tt, which comes out asMon, Sep 30, 2026 2:35 PM. - Date & Time (customized)... asks for a format string. The tokens are
yyyy,yy,MMMM,MMM,MM,M,dddd,ddd,dd,d,HH,H,hh,h,mm,m,ss,sandtt(AM/PM).MMis always the month andmmis always the minutes - Windows' ownstrftimehas to guess from the token before it, and nobody remembers that rule. Text in single quotes is literal, soyyyy'-'MM'-'ddgives2026-09-30, and''is a literal apostrophe. A format with no token in it is refused with a reason, rather than inserting the same constant string every time you use it.
Search menu¶
| Entry | Chord | Browser-limited? |
|---|---|---|
| Find... | Ctrl+F |
no |
| Find Next / Find Previous | F3 / Shift+F3 |
no |
| Replace... | Ctrl+H |
no |
| Find in Files... | Ctrl+Shift+F |
no |
| Replace in Files... | - | no |
| Mark... | Ctrl+M |
no |
| Mark submenu (Mark All, Clear All Marks, Select and Find Next) | - | no |
| Go To Line... | - | no |
| Matching Bracket | - | no |
| Incremental Search | Ctrl+Alt+I |
no |
| Search Results Window | F7 |
no |
| Next Search Result | F4 |
no |
| Previous Search Result | Shift+F4 |
no |
| Clear All Search Results | - | no |
The Find dialog¶
Ctrl+F, Ctrl+H, Ctrl+Shift+F and Ctrl+M all open the same modeless
dialog with four Notepad++ tabs — Find, Replace, Find in Files and
Mark. The dialog floats over the editor and is not modal, so you can keep
typing while it is open. Monaco's inline find widget is disabled; Escape
closes the dialog from the editor, the menu bar or anywhere else.
Shared controls: Find what, Search Mode (Normal / Extended / Regular
expression), the options checkboxes (Match case, Match whole word only,
Backward direction, Wrap around, In selection) and a status line reporting the
match position, e.g. 2 of 4 or 4 results on current document.
- Find:
Find Next,Count,Find All in Current Document(selects every hit) andFind All in All Opened Documents. Both Find All actions also fill the Search Results window. - Replace:
Replace,Replace AllandReplace All in All Opened Documents, all of which are ordinary undoable edits. - Find in Files:
FiltersandDirectorynarrow the workspace search,In hidden foldersincludes dot-folders, andFind All/Replace Alldrive the existing search-in-workspace backend.Find Allsends its results to the Search Results window;Replace Allstays on Theia's search panel, because that is where the replacement machinery lives. - Mark: marks every occurrence in the current document in one of five
styles, with
Mark All,Clear All Marks,Select and Find Nextand aPurge for each searchoption. The same actions remain available underSearch ▸ Mark.
Note
The editor's search engine matches within a single line, so the
. matches newline option is shown disabled with an explanation rather
than silently doing nothing. Notepad++ supports it; this build does not.
Extended search mode¶
The Find dialog's Search Mode ▸ Extended radio turns the Find what
field into Notepad++'s extended search: \n, \r, \t, \0, \\, \xHH,
\oOOO, \dDDD and \bBBBBBBBB escapes are expanded to their literal
characters before searching. Unlike Regular expression mode the rest of the
text is matched literally, so a file full of backslashes is still searchable.
Unrecognised escapes and a lone trailing backslash pass through literally -
Notepad++ does not error on them either. The same three Search Mode radios
(Normal / Extended / Regular expression) also apply to the Incremental Search
bar.
There is no Search ▸ Search Mode menu: the radios live in the dialog where
the search is typed.
Incremental Search¶
Ctrl+Alt+I (or Search ▸ Incremental Search) opens Notepad++'s Incremental
Search bar, a thin strip docked at the foot of the editor. Unlike the Find
dialog it searches as you type: every keystroke jumps to the next occurrence
of the whole term after the caret, wrapping around the end of the document.
Enter/Shift+Enterstep to the next / previous occurrence; the ▲ / ▼ buttons do the same.- Highlight all colors every occurrence and cleans up when the bar closes.
- Match case is shared with the Find dialog, so either UI toggles the same setting, and the Search Mode radios (Normal / Extended / Regular expression) apply to the bar's search too.
- When nothing matches, the field turns red and the bar announces
no matchthrough an aria-live region instead of just showing red. Escapecloses the bar. If no match was accepted during the session the caret returns to where it was when the bar opened; once a match has been stepped to with Enter,Escapekeeps the jump.
Search Results window¶
F7 (or Search ▸ Search Results Window) opens a panel at the foot of the
window that lists what a search found, in the order Notepad++ lists it. F7
toggles it, so the same key shows and hides it.
Every search that Theia runs for you appends a group to the window, newest last, and a group stays until you clear it:
Find All in Current DocumentandFind All in All Opened Documentsfrom the Find tab,Find Allfrom the Find in Files tab.
The header reads Search "foo" (12 hits in 3 files of 1 searched). Under it,
one row per file with the file's name as a URI, and under that a row per hit
reading Line 4: foo bar foo with the matching text highlighted. Clicking a
row opens that file and puts the caret on the match; double-clicking hands
focus to the editor so you can carry on typing. A group's files can be
collapsed with Collapse All and brought back with Expand All, a single
group can be Cleared, and Clear All empties the window.
F4 moves to the next hit and Shift+F4 to the previous one, wrapping at
either end. With no row chosen, stepping starts from the caret in the editor
instead of the top of the list, so F4 takes you to the hit at or after the
caret. F3 and Shift+F3 still step through the editor's own matches, so
nothing that worked before F4 was added has changed.
The panel is a tree to a screen reader: each row announces its level, its expanded or collapsed state, and whether it holds the cursor, and a search that adds hits announces the new count.
Note
A Find in Files header stops at in 5 files. The workspace search backend
reports the matches it found but never how many files it looked at, and a
made-up of N searched would be worse than none.
View menu¶
| Entry | Chord | Browser-limited? |
|---|---|---|
| Folder as Workspace | - | no |
| Toolbar | - | no |
| Status Bar | - | no |
| Zoom (In / Out / Restore Default) | Ctrl+= / Ctrl+- / Ctrl+0 |
yes, editor focus decides |
| Tab Size | - | no |
| Word Wrap | - | no |
| Document Map | - | no |
| Document List | - | no |
| Show Symbol submenu | - | no |
| Fold All / Unfold All | Alt+0 / Alt+Shift+0 |
no |
| Fold Level | Alt+1..7 / Alt+Shift+1..7 |
no |
| Clone to Other View | - | no |
| Move to Other View | - | no |
| Synchronize Vertical / Horizontal Scrolling | Ctrl+Alt+Shift+V / Ctrl+Alt+Shift+H |
no |
| Summary... | - | no |
| Full Screen | F11, or Ctrl+Shift+F11 |
yes |
| Post-It | F12 |
no |
| Function List | - | no |
| Tab Bar submenu (Draw Close Button, Multi-line) | - | no |
Document Map¶
View ▸ Document Map toggles the minimap, the narrow overview of the whole
file beside the editor. The toggle writes the notepadia.documentMap.visible
preference (mirrored into editor.minimap.enabled), so the choice:
- applies to every open editor at once,
- survives opening other tabs and a page reload,
- is editable directly in Settings alongside the Notepad++ preferences.
The "minimap hidden on a cold profile" default is part of the behavior profile above.
Show Symbol, folding and the split view¶
View ▸ Show Symbol is where Notepad++ keeps the character markers, so all
four that map to Monaco live there:
- Show Space and TAB and Show All Characters write
editor.renderWhitespace(all/none). Show All Characters is the umbrella: checking it turns on the space/tab and end-of-line markers, and unchecking it clears both. - Show End of Line draws a
¶after the last character of every line. Monaco has no end-of-line glyph, so it is a decoration whose stylesheet::aftersupplies the character. - Show Indent Guide writes
editor.guides.indentation.
These are written as editor preferences, not as options on the current
widget. The product pins editor.renderWhitespace: "none", and Theia
re-applies that on every preference pass, so a control.updateOptions() call
on one editor is overwritten almost immediately - which is why the markers
used to light the check mark and draw nothing. A preference change also
reaches every open editor at once and survives a page reload, which is what
you want from a view setting. Monaco only draws the whitespace glyphs through
its font renderer, so Show Symbol also pins
editor.experimentalWhitespaceRendering to font; its default, svg, paints
an overlay with no .mwh element to style.
Notepad++'s Show Wrap Symbol is not offered, because Monaco 1.75 has no wrapping-indicator option to bind it to. Show All Characters is still available from the toolbar.
Folding¶
View ▸ Fold All (Alt+0) collapses every fold and View ▸ Unfold All
(Alt+Shift+0) opens them again. View ▸ Fold Level folds to a level:
Alt+1 through Alt+7 fold, and Alt+Shift+1 through Alt+Shift+7 unfold
back to it. Notepad++ lists eight levels, but Monaco registers folding actions
only for levels 1-7, so level 8 is left off rather than bound to an action
that does not exist.
Split view and synchronized scrolling¶
View ▸ Clone to Other View shows the current file in a second pane, and
View ▸ Move to Other View moves it there so it is only in the other pane.
Notepad++'s constraint of exactly two panes is kept; closing the second pane
returns the file to a single view. With a second pane open, View ▸
Synchronize Vertical Scrolling and View ▸ Synchronize Horizontal Scrolling
mirror the two positions as you scroll either one, through a re-entrancy guard
so the pane that follows does not scroll the first one back.
Full Screen and Post-It¶
View ▸ Full Screen (F11, or Ctrl+Shift+F11 where the browser claims
F11) puts the whole application in the Fullscreen API. View ▸ Post-It
(F12) is Notepad++'s distraction-free mode: it hides the menu bar, toolbar,
tab bar and status bar, leaving the editor alone on the page. It is a real
view mode, not a one-off class, so it is remembered. Both restore cleanly.
Summary...¶
View ▸ Summary... reports the document's characters, words, lines and
selected characters. It uses the same counters as the status bar's
length : N lines : N and Sel fields, so the dialog and the status bar
cannot disagree.
Document List panel¶
View ▸ Document List opens the Document List panel (View ▸ Document Map is
the minimap - two different things). The panel lists every open document, is
filterable, and clicking a row focuses its tab. The Document List panel and
the Window menu read the same model, so they always agree about what is open.
Encoding menu¶
| Entry | Chord |
|---|---|
| Encode in UTF-8 | - |
| Encode in UTF-8 BOM | - |
| Encode in UTF-16 LE | - |
| Encode in UTF-16 BE | - |
| Convert to ANSI (Windows 1252) | - |
| Change File Encoding... | - |
| Reload as UTF-8 | - |
The Encoding menu provides Notepad++-style operations backed by Theia's iconv-lite pipeline:
Encode in UTF-8Encode in UTF-8 BOMEncode in UTF-16 LE/Encode in UTF-16 BEConvert to ANSI (Windows 1252)Change File Encoding...— quick-pick to reopen/save with any supported encoding (including the ISO-8859 family).Reload as UTF-8(decode mode).
The status bar shows the current encoding and is clickable to change it.
UTF-16 LE/BE and UTF-8 BOM files round-trip as-is. A UTF-8-BOM encode is
patched with the EF BB BF bytes post-write so the BOM survives (upstream
collapses utf8bom to utf8 at write time).
Language menu¶
| Entry | Chord |
|---|---|
| Change Language Mode... | - |
| one action per curated language | - |
Change Language Mode...opens Monaco's language quick-pick.- A curated list (JavaScript, TypeScript, HTML, CSS, Markdown, YAML, XML, Python, C, C++, C#, Java, JSON, PHP, PowerShell, Ruby, Go, Rust, Shell Script, SQL, Plain Text) is registered at startup with lightweight Monarch tokenizers, and each entry is a menu action switching the editor language.
- The status bar shows the friendly language name and is clickable.
Macros menu¶
| Entry | Chord |
|---|---|
| Record Macro... | - |
| Stop Recording | - |
| Discard Recording | - |
| Run Macro | - |
| Clear Macro | - |
The Macros menu records keyboard-driven editing as a script and replays it.
Record Macro... starts a recording (the ... is honest: it is the start of
a session, and the status bar shows a REC indicator while recording);
Stop Recording ends it, Discard Recording throws the current one away,
Run Macro replays it at the current caret, and Clear Macro empties it.
This build holds one macro at a time, in memory. It does not survive a restart, and there is no macro manager - see Differences from Notepad++.
Run menu¶
| Entry | Chord |
|---|---|
| Run... | - |
| saved commands (first ten) | - |
| Modify Shortcut/Delete Command... | - |
Run sits where Notepad++ has it, between Macros and Window, and holds
Run... plus Modify Shortcut/Delete Command.... It is not bound to a
single chord: Notepad++ reaches it with F5, and here F5 is
Insert ▸ Date & Time, so Run... is opened from the menu. Bind it in
the keybindings preferences if you want a chord.
Run... takes a command line, expands Notepad++'s run variables in it, and then does what the target it is running in can actually do:
- a command that expands to an
http://orhttps://URL opens in a new tab, - any other command in the browser says that a browser tab cannot start a program, and that it needs the desktop build. It never fails silently.
The variables are expanded before anything else happens:
| Variable | Expands to |
|---|---|
$(FULL_CURRENT_PATH) |
full path of the current document, empty for an unsaved one |
$(CURRENT_DIRECTORY) |
its directory, without a trailing separator |
$(FILE_NAME) |
the file name, e.g. notes.txt |
$(NAME_PART) |
the name without its last extension, e.g. notes |
$(EXT_PART) |
that last extension, without the dot, e.g. txt |
$(CURRENT_WORD) |
the word under the caret |
$(CURRENT_LINE) |
the caret's line number, from 1 |
$(CURRENT_LINESTR) |
the text of the caret's line |
$(CURRENT_COLUMN) |
the caret's column, from 1 |
Both / and \ are understood as separators. Only the last extension is
split off, so .gitignore is all name and archive.tar.gz has the name part
archive.tar. A variable Notepad++ does not define, such as $(HOME), is
left exactly as written rather than being emptied - dropping it would run a
different command from the one you typed.
Save as (optional) names the command and Save keeps it. Saved commands are listed in the Run menu (the first ten) and kept across restarts. Modify Shortcut/Delete Command... lists them all with their commands and offers Run, Delete and Close; Delete removes the entry from the menu. It keeps Notepad++'s dialog name but does not store a shortcut with each entry - assign chords in the keybindings preferences if you want them.
On the desktop build the expanded command really is launched, in the current
document's directory, and the exit code and output are reported back. That
executes arbitrary text, so it is gated behind the
notepadia.run.allowProcessLaunch preference, which is off by default;
until you turn it on, the Run menu explains that launching is turned off. A
command that runs longer than 30 seconds reports that it is still running
rather than holding the dialog: the process is left alone on purpose.
Window menu¶
Windows...¶
Window ▸ Windows... opens Notepad++'s document switcher: every open document
with its Name, Path and Type (Text when the name has no usable
extension), and the Activate, Save, Close and Sort buttons.
Rows are multi-selectable - Ctrl-click to add one, Shift-click for a range, or
Space with the keyboard - so Save and Close act on everything selected
at once. Sort cycles Name, Path and Type and reverses direction when it
wraps. The dialog is a real listbox: the arrow keys and Home/End move, Space
toggles, Enter activates the focused document, and double-clicking a row opens
it.
The Document List panel (View ▸ Document List) and this menu read the same
model, so they always agree about what is open.
The first ten documents¶
Window lists the first ten open documents, numbered from one, in tab order.
Clicking one activates that tab. The list follows the open set, so it is
renumbered as documents are opened and closed; only the first ten appear, as
in Notepad++.
Settings menu¶
Settings ▸ Shortcut Mapper opens Theia's own shortcut editor, which lists
every registered chord and rebinds it. Nothing in this app is reachable only by
keyboard: each command is also a menu entry.
The Settings UI also holds the Notepad++ preferences this product adds
(notepadia.*: the Document Map visibility, the backup feature, run-process
launch, and the rest), alongside the editor preferences each toggle writes.
The rest of the chrome¶
These are not menu entries, but they are part of the Notepad++ shape:
Toolbar¶
A 26px Notepad++-style toolbar runs under the menu bar. View ▸ Toolbar
toggles the strip on and off, and the choice survives reloads.
- Groups, left to right: file actions (New, Open, Save, Save All, Close, Close All), Print, clipboard (Cut / Copy / Paste), history (Undo / Redo), search (Find, Replace, Find Next, Find Previous), zoom (In / Out / Restore Default), view toggles (Word Wrap, Show All Characters, Document Map, Folder as Workspace, Function List) and macros (Start Recording, Stop Recording, Play Recording).
- State: buttons that map to a real toggle —
Word Wrap,Show All Characters,Document Map,Folder as Workspace,Function ListandStart Recording— renderaria-pressed, so their state is visible and announced. Buttons without a toggled meaning never claim one. - Keyboard: the strip is a single tab stop (ARIA toolbar / roving
tabindex).
→/←move between buttons,Home/Endjump to the first/last, andEnteractivates the focused button. Disabled buttons are skipped. - Toolbar buttons follow the current editor: file/editor actions such as Save and Undo are enabled only while a file is open.
Tab bar¶
The editor tab bar uses Notepad++'s own state icons instead of VS Code's dot:
- a red floppy means the file has unsaved changes, a blue floppy that it is saved, and a padlock that the document is read-only.
Right-clicking a tab opens the Notepad++ tab menu rather than VS Code's:
- Close, Close All BUT This, Close All to the Left and Close All to the Right
- Save and Save As...
- Copy File Path, Copy File Name and Copy Directory Path
Middle-clicking a tab closes it. View > Tab Bar > Draw Close Button toggles
whether every tab shows an always-visible x on hover.
Status bar and INS/OVR overtype mode¶
The status bar shows the Notepad++ fields, live, left to right:
- the language name (clickable to change language mode)
- the caret position as
Ln : 3 Col : 12 Pos : 47— 1-based line and column with the 0-based character offset, thousands-grouped - the selection size as
Sel : 18 | 2(characters | lines); with no selection it readsSel : 0 | 0 - the document size as
length : 1,234 lines : 56(length includes the line endings) - the encoding (clickable) and the EOL (clickable)
- the indent mode (
Spaces: 4/Tabs: 4) - the mode indicator
INS/OVR, which readsRead-Onlyinstead while a document is flagged read-only (see Read-only documents)
Pressing Insert (or clicking the mode indicator) toggles overtype mode.
In OVR the caret becomes a block and each character you type replaces the
character under the cursor instead of inserting, exactly like Notepad++ —
typing at the end of a line just inserts normally. Toggling back to INS
restores insert behavior. The status bar is throttled to render once per
animation frame, so it stays responsive even in very large files.
Clipboard History panel¶
Edit ▸ Clipboard History opens a panel listing what you have copied in this
session, newest first, up to 20 entries. Click one to put it back at the
caret, as a single undoable edit applied at every cursor.
The list is filled by the editor's own copy and cut events, so it records
what actually went to the clipboard — including copies made with Ctrl+C from
anywhere in the app, not only from a Notepadia command. Copies made outside
the app's window cannot be observed by a web page and are not recorded, and
the list is per session: it is not written to disk.
Clear empties it, and the panel closes the same way it opened, from the same
menu entry.
Character Panel¶
Edit ▸ Character Panel opens the Notepad++ panel that holds the special
characters Notepad++ ships - arrows, boxes, blocks, currency and mathematical
signs - grouped by category. Clicking one puts that character into the
document at the caret, so a character that has no key on this keyboard can
still be typed. The panel is also under View, which is where Notepad++
keeps it; both entries run the same command and only one of them can be
showing at a time.
Folder as Workspace panel¶
The file tree Notepad++ calls Folder as Workspace is Notepadia's left panel.
It starts hidden; View ▸ Folder as Workspace, or the matching toolbar
button, opens it, and the same toggle closes it again.
The panel is headed Folder as Workspace whatever folder is open, rather than
taking the workspace root's name the way VS Code's Explorer does. Its rows are
drawn Notepad++'s way — a tight 20px line and plain names rather than a
per-language file icon — and a right-click opens the Folder as Workspace menu
(New File, New Folder, Find in Files, Copy Path, Rename, Delete, Remove
Folder) rather than Explorer's full editor menu.
Note
Notepad++'s separate multi-root Project Panels 1, 2 and 3 are not built. The single Folder as Workspace tree is the whole of the left panel.
Function List panel¶
View ▸ Function List opens a panel down the right-hand side listing the
functions of the file you are editing, in the order Notepad++ lists them. The
same command hides it again, and the toolbar carries a Function List
button that toggles it too.
The list reads the text of the current document, so it keeps itself current: it re-reads 250 ms after you stop typing, and again when you switch to a file in another language. It never writes to your document.
Each row reads the function's name, its kind (function, class or
section) and the line it is declared on, and clicking a row puts the caret
on that line. Use the filter box to narrow the list by name as you type;
Escape clears it. The sort button reads A-Z or 1-9 and toggles between
document order (the default, top to bottom) and alphabetical; its pressed
state and tooltip say which of the two is in force.
Languages with rules include JavaScript, TypeScript, Python, C, C++, C#, Java, PHP, Ruby, PowerShell, Bash and shell scripts, SQL, JSON, XML, HTML, Markdown, INI, Go and Rust. A file in a language with no rules, or one with nothing declared in it, says so instead of showing an empty box.
The panel is a tree to a screen reader: the list is announced as a tree naming
the language it is listing, each row announces its name, kind and line, and
the row holding the list's own cursor is announced as selected. Up and
Down move that cursor, Home and End jump to the ends, and Enter jumps
to the cursor's row in the editor.
Note
The list is built by matching each language's declaration syntax, not by parsing the file. A declaration written in a way the pattern does not recognise is not listed.
Recovering unsaved work¶
Asking before you close a tab only helps if the tab is still there. A crash, a killed browser tab, or closing a document by accident left nothing behind: the text existed only in memory. Notepadia now keeps a copy.
- Every few seconds of typing, a copy of what is unsaved is written to this browser's own storage (IndexedDB, in the page — nothing is sent to the server and no other user can see it). The copy is taken after you pause, so it is a whole document rather than a fragment, and only for documents with unsaved changes.
- The next time you open Notepadia, those documents come back. A recovered
tab is marked dirty on purpose: the text is in the editor but not yet on
disk, so
Ctrl+Sis how you keep it, and nothing is written for you. - Saving clears the copy, and so does discarding the changes on purpose
(
Don't Save, or reverting the document). What you threw away does not come back the next morning. - A file that changed on disk since the copy was taken is not restored over. If the file is newer than the copy, the newer version wins and the copy is dropped, so a recovery can never overwrite a file that moved on.
- Two settings control it, in
Settings ▸ notepadia.backup:notepadia.backup.enabled(on by default) turns the whole feature off, andnotepadia.backup.intervalSeconds(5 by default) is how many seconds to wait after the last keystroke before taking the copy. Turning the feature off does not delete copies that already exist; it just stops taking new ones. - Large documents are skipped rather than stored. A document over 2 MB is not backed up, and the total kept across all documents is capped at 8 MB, oldest copy first. A copy of a document that has since grown past the limit is dropped rather than left behind stale.
The copies are per-browser: they live in the profile of the browser you are
using, they are not synchronized, and clearing that browser's site data removes
them. Use Save for anything you cannot afford to lose.
Automatic updates (desktop)¶
Installed desktop builds check GitHub Releases for updates on startup and on
Help ▸ Check for Updates.... Choosing the menu item opens a dialog that either
confirms Notepad is up to date or names the newer version and offers to download
and install it; the download only starts when you accept, then the dialog offers
to restart and apply it. The startup check is quiet and never downloads or
installs on its own.
Windows installer
Updates apply only to the default installation directory. The
installer does not offer a custom install location (assisted installer,
fixed directory) so that electron-updater always knows where the app
lives.
Keyboard shortcuts¶
| Shortcut | Action |
|---|---|
| Ctrl+D | Duplicate current line |
| Ctrl+L | Delete current line |
| Ctrl+F2 | Toggle bookmark on the current line |
| F2 / Shift+F2 | Next / previous bookmark (wraps in file) |
| F3 / Shift+F3 | Find next / previous |
| F4 / Shift+F4 | Next / previous search result |
| F7 | Show / hide the Search Results window |
| Ctrl+F | Open the tabbed Find dialog (Find tab) |
| Ctrl+H | Open the tabbed Find dialog (Replace tab) |
| Ctrl+Shift+F | Open the tabbed Find dialog (Find in Files tab) |
| Ctrl+M | Open the tabbed Find dialog (Mark tab) |
| Ctrl+Alt+I | Toggle the Incremental Search bar |
| Insert | Toggle INS/OVR (overtype) mode |
| Ctrl+Alt+N | New document (browser-safe) |
| Ctrl+F4 | Close document (browser-safe) |
| Ctrl+Alt+Shift+W | Close all documents (browser-safe) |
| Ctrl+Alt+O | Open from Computer (browser-safe) |
| Ctrl+= / Ctrl+- / Ctrl+0 | Zoom in / zoom out / reset the editor text |
| Ctrl+Alt+B | Begin/End Select |
| Alt+C | Column Mode |
| F5 / Ctrl+F5 | Insert Date & Time (short / long) |
| Ctrl+Alt+D | Insert Date & Time (browser-safe short) |
| Ctrl+Alt+Shift+D | Insert Date & Time (browser-safe long) |
| Ctrl+Alt+R | Set/Clear Read-Only |
| Alt+0 / Alt+Shift+0 | Fold all / unfold all |
| Alt+1..7 / Alt+Shift+1..7 | Fold / unfold to level |
| F11 / Ctrl+Shift+F11 | Full Screen |
| F12 | Post-It (distraction-free) |
| Ctrl+Alt+Shift+V | Synchronize vertical scrolling |
| Ctrl+Alt+Shift+H | Synchronize horizontal scrolling |
Note
The editor is forced onto the classic textarea input path
(editContext: false) so Theia's own keybinding layer stays
deterministic. The Ctrl+D / Ctrl+L chords are mirrored into Monaco's
keybinding service as a fallback.
Shortcuts the browser claims¶
In a browser tab some of the chords a text editor is expected to own never reach the page, because the browser acts on them first. A web app cannot intercept them, and cannot unbind them either, so each one that Notepad++ uses for something has an alternate chord that the browser leaves alone:
| Chord | What the browser does with it | What it is in Notepad++ | Use |
|---|---|---|---|
| Ctrl+N | new browser window (Chromium) / new tab (Firefox) | New document | Ctrl+Alt+N |
| Ctrl+W | close the browser tab | Close document | Ctrl+F4 |
| Ctrl+Shift+W | close the browser window | Close All | Ctrl+Alt+Shift+W |
| Ctrl+O | Open File... (the browser's own file dialog) | Open from Computer (the app's own picker) | Ctrl+Alt+O |
| Ctrl+Shift+O | bookmark all tabs (Chromium) | - | nothing is bound to it |
| Ctrl+T | new browser tab | - | nothing is bound to it |
| Ctrl+Shift+N | incognito window | - | nothing is bound to it |
| Ctrl+Shift+T | reopen the last closed tab | - | nothing is bound to it |
| F5 | reload the page (Chromium) | Insert Date & Time (short) | Ctrl+Alt+D |
| Ctrl+F5 | hard reload, skipping the cache (Chromium) | Insert Date & Time (long) | Ctrl+Alt+Shift+D |
| Ctrl+Shift+R | hard reload in Firefox | - | nothing is bound to it |
| Ctrl+= / Ctrl+- / Ctrl+0 | page zoom | editor zoom | same chord, editor focused |
Nothing was taken away: Ctrl+N, Ctrl+W, Ctrl+Shift+W, Ctrl+O, F5 and
Ctrl+F5 are still bound and still work in the desktop app, where no browser
claims them. The alternates are added alongside them.
The zoom chords are the one place where both meanings are wanted, so the division is by focus rather than by chord:
- Editor has focus -
Ctrl+=grows the editor text,Ctrl+-shrinks it andCtrl+0resets it, and the page does not zoom. - Anything else has focus - the menubar, the tab bar, the folder panel - the browser keeps its own page zoom.
Alt is left alone throughout, because Ctrl+Alt is AltGr on Windows
keyboard layouts and those chords belong to the layout, not to the app.
How this list was checked
The automated browser tests cannot confirm which chords a browser reserves: Puppeteer injects key events over the DevTools protocol, which delivers them straight to the page and bypasses the browser's accelerator handling entirely. The table therefore records standard Chromium and Firefox behaviour, and the automated tests cover the parts that are reachable - that each alternate opens the right thing, and that the editor zoom wins while the editor has focus. Re-check the table by hand after a major browser upgrade.