Merge pull request #5725 from RaiKoHoff/dev_master
Some checks failed
Build / ${{ matrix.platform }} ${{ matrix.configuration }} (Release, ARM64) (push) Has been cancelled
Build / ${{ matrix.platform }} ${{ matrix.configuration }} (Release, Win32) (push) Has been cancelled
Build / ${{ matrix.platform }} ${{ matrix.configuration }} (Release, x64) (push) Has been cancelled
Build / ${{ matrix.platform }} ${{ matrix.configuration }} (Release, x64_AVX2) (push) Has been cancelled

fix: modernizing (Win10+) Clipboard monitoring feature
This commit is contained in:
Rainer Kottenhoff 2026-04-21 11:43:07 +02:00 committed by GitHub
commit fe253bad20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
34 changed files with 230 additions and 112 deletions

View File

@ -191,6 +191,7 @@ No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable
- **File encoding rules** (must be respected when creating or editing these files):
- `language\*\*.rc`**UTF-8 without BOM**. Never write or save these files with a UTF-8 BOM. Use `Build\rc_to_utf8.cmd` to strip accidental BOMs.
- **PowerShell pitfall**: `[System.Text.Encoding]::UTF8` writes **with** BOM. Always use `[System.Text.UTF8Encoding]::new($false)` when writing `.rc` files from PowerShell scripts.
- **Python/script pitfall**: `.rc` files use **CRLF** line endings. When writing or inserting lines from Python or other scripts, use `\r\n` — not bare `\n`. After bulk edits, normalize with: `content = content.replace('\r\n', '\n').replace('\n', '\r\n')` before writing.
- `Build\Notepad3.ini`, `Build\minipath.ini`**UTF-8 with BOM** (BOM = `EF BB BF`). These INI reference files must retain the BOM.
- **String safety**: Uses `strsafe.h` throughout; deprecated string functions are disabled

View File

@ -27,7 +27,10 @@ SettingsVersion=5
;NoCGIGuess=0
;NoCopyLineOnEmptySelection=0
;NoCutLineOnEmptySelection=0
;CopyMultiSelectionSeparator= ;(-> <use current EOL>) {use empty value for no separator}
;CopyMultiSelectionSeparator= ;(-> <use current EOL>) {separator between multi-selection copies; empty=no separator; supports escape sequences: \r\n=CRLF, \n=LF, \t=tab, \xHH=hex}
;PasteBoardSeparator= ;(-> <use current EOL>) {separator inserted verbatim between entries in pasteboard mode; empty=no separator; supports \r\n, \n, \t, \xHH; include newlines explicitly e.g. "\r\n---\r\n" for a dashed separator line}
;PasteBoardDebounceMs=200 ;(min: 0, max: 5000[msec]) {debounce interval for clipboard monitoring}
;PasteBoardAddTimestamp=0 ;(0/1) {prepend [HH:MM:SS] timestamp to each pasted entry in pasteboard mode}
;NoFadeHidden=0
;NoFileVariables=0
;NoHTMLGuess=0

View File

@ -276,6 +276,7 @@ No native ARM64 grepWin build exists. The ARM64 build uses `grepWin-x64_portable
- **File encoding rules** (must be respected when creating or editing these files):
- `language\*\*.rc`**UTF-8 without BOM**. Never write or save these files with a UTF-8 BOM. Use `Build\rc_to_utf8.cmd` to strip accidental BOMs.
- **PowerShell pitfall**: `[System.Text.Encoding]::UTF8` writes **with** BOM. Always use `[System.Text.UTF8Encoding]::new($false)` when writing `.rc` files from PowerShell scripts.
- **Python/script pitfall**: `.rc` files use **CRLF** line endings. When writing or inserting lines from Python or other scripts, use `\r\n` — not bare `\n`. After bulk edits, normalize with: `content = content.replace('\r\n', '\n').replace('\n', '\r\n')` before writing.
- `Build\Notepad3.ini`, `Build\minipath.ini`**UTF-8 with BOM** (BOM = `EF BB BF`). These INI reference files must retain the BOM.
- String safety via `strsafe.h` throughout; deprecated string functions are disabled

View File

@ -35,6 +35,7 @@ Notepad3 is a free, open-source text editor with syntax highlighting for Windows
- **Virtual space** rectangular selection (Alt+Drag)
- **Accelerated word navigation** with configurable delimiters
- **Insert GUIDs** directly into your document
- **Clipboard monitoring mode** (`/b` command-line switch) — automatically appends every clipboard change as a new entry at the end of the document; stop at any time via **Edit → Stop Clipboard Monitoring** without closing the editor
### Syntax Highlighting
Over 55 languages supported, including:

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Wysig"
BEGIN
MENUITEM "Document &Read Only" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "O&ngedaan\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Oo&rdoen\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Kopieer &Voeg\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Plak\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Uitruil\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Verwyder\tDel", IDM_EDIT_CLEAR
MENUITEM "Maak &Klipbord Skoon", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Kies &Alles\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Verwyder\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Maak &Klipbord Skoon", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "W&oorde"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Праўка"
BEGIN
MENUITEM "Дакумент толькі для &чытання" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "Ад&мена\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Паўтор\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Дадаць у канец буфера\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Уст&авіць\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Памяняць\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "В&ыдаліць\tDel", IDM_EDIT_CLEAR
MENUITEM "А&чысціць буфер абмену", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Вылучыць у&сё\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "В&ыдаліць\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "А&чысціць буфер абмену", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Словы"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Bearbeiten"
BEGIN
MENUITEM "&Dokument Nur Lesen" IDM_VIEW_READONLY
MENUITEM "Zwischenablage &Überwachung abbrechen", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Rückgängig\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Wiederholen\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Kopiere ans &Ende\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Einfügen\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Auswahl <-> &Zwischenablage\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Löschen\tDel", IDM_EDIT_CLEAR
MENUITEM "&Lösche Zwischenablage", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Alles auswählen\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Löschen\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "&Lösche Zwischenablage", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Zwischenablage &Überwachung abbrechen", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "&Wörter"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Επεξεργασία"
BEGIN
MENUITEM "Document &Read Only" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "Αναίρε&ση\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Επανάλη&ψη ενέργειας\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Προσ&θήκη αντιγραφής\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Επ&ικόλληση\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Αν&τιμετάθεση\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Διαγραφή\tDel", IDM_EDIT_CLEAR
MENUITEM "&Απαλοιφή πρόχειρου", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Επιλ&ογή όλων\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Διαγραφή\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "&Απαλοιφή πρόχειρου", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "&Λέξεις"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Edit"
BEGIN
MENUITEM "Document &Read Only" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Redo\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Cop&y Add\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "S&wap\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Delete\tDel", IDM_EDIT_CLEAR
MENUITEM "Cl&ear Clipboard", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Select All\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Delete\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Cl&ear Clipboard", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "W&ords"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Edit"
BEGIN
MENUITEM "Document &Read Only" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Redo\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Cop&y Add\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "S&wap\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Delete\tDel", IDM_EDIT_CLEAR
MENUITEM "Cl&ear Clipboard", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Select All\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Delete\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Cl&ear Clipboard", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "W&ords"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Edición"
BEGIN
MENUITEM "Documento &Sólo lectura" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Deshacer\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Re&hacer\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Copiar a&ñadiendo\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Pegar\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Perm&utar\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "E&liminar\tDel", IDM_EDIT_CLEAR
MENUITEM "&Vaciar el portapapeles", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Seleccionar todo\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "E&liminar\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "&Vaciar el portapapeles", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "P&alabras"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Muokkaa"
BEGIN
MENUITEM "Dokumentti Vain &luettavissa" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "K&umoa\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Tee uudelleen\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Kop&ioi lisäys\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Liitä\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Vaihda\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Poista\tDel", IDM_EDIT_CLEAR
MENUITEM "Tyhj&ennä leikepöytä", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Valit&se kaikki\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Poista\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Tyhj&ennä leikepöytä", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "S&anat"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Edition"
BEGIN
MENUITEM "Document en &lecture seule" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "Défaire\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Rétablir\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Copier& / Ajouter\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Co&ller\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "P&ermuter\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Supprimer\tSuppr", IDM_EDIT_CLEAR
MENUITEM "Vi&der le presse-papiers", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Sélectionner tout\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Supprimer\tSuppr", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Vi&der le presse-papiers", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "M&ots"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "संपादन (&E)"
BEGIN
MENUITEM "दस्तावेज़ केवल पढ़ने योग्य (&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "पूर्ववत करें (&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "फिर से करें (&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "कॉपी करें और जोड़ें (&Y)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "चिपकाएं (&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "बदलें (&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "हटाएं (&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "क्लिपबोर्ड साफ़ करें (&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "सारा चुनें (&S)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "हटाएं (&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "क्लिपबोर्ड साफ़ करें (&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "शब्द (&O)"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Szerkesztés"
BEGIN
MENUITEM "&Csak olvasható dokumentum" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Visszavonás\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Újra\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Vág&ólaphoz ad\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Beillesztés\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Csere\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Törlés\tDel", IDM_EDIT_CLEAR
MENUITEM "Vágólap t&örlése", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Min&d kijelölése\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Törlés\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Vágólap t&örlése", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Sza&vak"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Sunting"
BEGIN
MENUITEM "Mode Hanya &Baca" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Urungkan\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Kem&balikan\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Tambah ke Papan &Klip\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Te&mpel\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Tuka&r\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "Hap&us\tDel", IDM_EDIT_CLEAR
MENUITEM "Bersi&hkan Papan Klip", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Pil&ih Semua\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "Hap&us\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Bersi&hkan Papan Klip", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Ka&ta"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Modifica"
BEGIN
MENUITEM "Documento in sola &lettura" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Annulla\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Ripristina\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Copia aggiungi\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Incolla\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Scam&bia\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Elimina\tCanc", IDM_EDIT_CLEAR
MENUITEM "Svuota appunti", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Seleziona tutto\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Elimina\tCanc", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Svuota appunti", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "&Parole"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "編集(&E)"
BEGIN
MENUITEM "閲覧専用(&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "元に戻す(&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "やり直し(&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "クリップボード末尾に追加(&Y)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "貼り付け(&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "クリップボードと入替(&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "削除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "クリップボードをクリア(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "すべて選択(&S)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "削除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "クリップボードをクリア(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "単語(&O)"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "편집(&E)"
BEGIN
MENUITEM "읽기 전용 문서(&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "실행 취소(&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "다시 실행(&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "복사 추가(&A)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "붙여넣기(&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "교환(&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "삭제(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "클립보드 지우기(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "모두 선택(&S)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "삭제(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "클립보드 지우기(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "단어(&W)"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "Bew&erken"
BEGIN
MENUITEM "Document &Read Only" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Ongedaan maken\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Op&nieuw uitvoeren\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Kopie &toevoegen\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Plakken\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Verwisselen\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Wissen\tDel", IDM_EDIT_CLEAR
MENUITEM "&Klembord wissen", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Alles &selecteren\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Wissen\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "&Klembord wissen", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "W&oorden"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Edycja"
BEGIN
MENUITEM "Dokument &tylko do odczytu" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Cofnij\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Powtórz\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Dodaj do schowka\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Wklej\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Zamień\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Usuń\tDel", IDM_EDIT_CLEAR
MENUITEM "Wyczyść schowek", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Zaznacz wszystko\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Usuń\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Wyczyść schowek", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "W&yrazy"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Editar"
BEGIN
MENUITEM "Documento somente leitu&ra" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Desfazer\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Refazer\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Cop&iar Adicional\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Colar\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "T&rocar\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Apagar\tDel", IDM_EDIT_CLEAR
MENUITEM "L&impar Área de Transferência", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Selecionar Tudo\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Apagar\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "L&impar Área de Transferência", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "P&alavras"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Editar"
BEGIN
MENUITEM "Documento só de leitu&ra" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "An&ular\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Refazer\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Cop&iar Adicionar\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Co&lar\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Trocar\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Eliminar\tDel", IDM_EDIT_CLEAR
MENUITEM "Limpar ár&ea de transferência", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "&Seleccionar tudo\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Eliminar\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Limpar ár&ea de transferência", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Pala&vras"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Правка"
BEGIN
MENUITEM "Документ только для чтени&я" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Отмена\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Повтор\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Добавить в конец буфера\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Вст&авить\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Поменять\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Удалить\tDel", IDM_EDIT_CLEAR
MENUITEM "О&чистить буфер обмена", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Выделить в&сё\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Удалить\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "О&чистить буфер обмена", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Слова"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "&Upraviť"
BEGIN
MENUITEM "Dokument &Len na čítanie" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Späť\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Znova\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Kopírov&ať pridané\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Vložiť\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Z&ameniť\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "Z&mazať\tDel", IDM_EDIT_CLEAR
MENUITEM "Vyprázdniť &schránku", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Vy&brať všetko\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "Z&mazať\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Vyprázdniť &schránku", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "&Slová"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "Redigera"
BEGIN
MENUITEM "Skrivskydda dokument" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "Ångra\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Gör om\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Lägg till i urklipp\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Klistra in\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Byt\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "Ta bort\tDel", IDM_EDIT_CLEAR
MENUITEM "Rensa urklipp", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Markera allt\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "Ta bort\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Rensa urklipp", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Ord"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "Dü&zenle"
BEGIN
MENUITEM "Belge salt &okunur" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "&Geri al\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "&Yinele\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Tümünü y&apıştır\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "&Yapıştır\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "&Değiştir\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "&Sil\tDel", IDM_EDIT_CLEAR
MENUITEM "&Panoyu temizle", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Tü&münü seç\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "&Sil\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "&Panoyu temizle", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "&Sözcükler"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "Chỉnh sửa(&E)"
BEGIN
MENUITEM "Tài liệu chỉ đọc(&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "Hoàn tác(&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Làm lại(&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "Sao chép thêm(&A)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "Dán(&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Hoán đổi(&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "Xóa(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "Xóa bộ nhớ tạm(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Chọn tất cả(&S)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "Xóa(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "Xóa bộ nhớ tạm(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "Từ(&W)"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "编辑(&E)"
BEGIN
MENUITEM "只读(&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "撤销(&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "重做(&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "增量复制(&Y)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "粘贴(&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "与剪贴板交换(&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "删除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "清空剪贴板(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "全选(&A)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "删除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "清空剪贴板(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "单词(&O)"
BEGIN

View File

@ -155,7 +155,6 @@ BEGIN
POPUP "編輯(&E)"
BEGIN
MENUITEM "唯讀(&R)" IDM_VIEW_READONLY
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
MENUITEM "復原(&U)\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "取消復原(&R)\tCtrl+Y", IDM_EDIT_REDO
@ -166,9 +165,11 @@ BEGIN
MENUITEM "增量複製(&Y)\tCtrl+E", IDM_EDIT_COPYADD
MENUITEM "貼上(&P)\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "與剪貼簿置換(&W)\tCtrl+K", IDM_EDIT_SWAP
MENUITEM "刪除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM "清空剪貼簿(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "全選(&A)\tCtrl+A", IDM_EDIT_SELECTALL
MENUITEM "刪除(&D)\tDel", IDM_EDIT_CLEAR
MENUITEM SEPARATOR
MENUITEM "清空剪貼簿(&E)", IDM_EDIT_CLEARCLIPBOARD
MENUITEM "Stop Clipboard &Monitoring", IDM_EDIT_STOP_PASTEBOARD
MENUITEM SEPARATOR
POPUP "單詞(&O)"
BEGIN

View File

@ -181,6 +181,42 @@ Set to `1` to prevent **Ctrl+C** from copying the current line when nothing is s
Set to `1` to prevent **Ctrl+X** from cutting the current line when nothing is selected.
#### `CopyMultiSelectionSeparator=`
String placed between selections when copying a multi-selection (**Ctrl+C** with multiple cursors/selections active). Default (key absent) uses the document's current EOL character. Set to empty for no separator. Supports escape sequences: `\r` (CR), `\n` (LF), `\t` (tab), `\xHH` (hex character). Common choices:
```ini
CopyMultiSelectionSeparator= ;empty — selections joined without any separator
CopyMultiSelectionSeparator=\t ;tab-separated
CopyMultiSelectionSeparator=\r\n ;CRLF between each selection
```
### Clipboard Monitoring
Notepad3 can be launched in **clipboard monitoring mode** with the `/b` command-line switch. In this mode, every clipboard change is automatically appended as a new entry at the end of the document. Stop monitoring at any time via **Edit → Stop Clipboard Monitoring** without closing the editor. While active, the status bar shows **`CBS`** in the INS/OVR field.
#### `PasteBoardDebounceMs=200`
Debounce interval in milliseconds before a clipboard change is pasted into the document. Increase this value if rapid successive copies result in missed or doubled entries. Range: `0``5000`.
#### `PasteBoardSeparator=`
String inserted verbatim between pasted entries — all newlines must be included explicitly. Default (key absent) uses the document's current EOL character, placing entries on consecutive lines. Set to empty (`PasteBoardSeparator=`) for no separator (entries concatenated). Supports escape sequences: `\r` (CR), `\n` (LF), `\t` (tab), `\xHH` (hex character). Common choices:
```ini
PasteBoardSeparator=\r\n---\r\n ; dashed line on its own line (CRLF doc)
PasteBoardSeparator=\n---\n ; dashed line on its own line (LF doc)
PasteBoardSeparator=\r\n ; one line break (consecutive lines, CRLF doc)
PasteBoardSeparator=\r\n\r\n ; blank line between entries (CRLF doc)
PasteBoardSeparator=\r\n\r\n\r\n ; two blank lines between entries
```
> **Note:** The separator string is inserted verbatim — exactly the number of newline characters you specify will appear between entries. To place a text separator (e.g. `---`) on its own line, include the surrounding newlines: `\n---\n`.
#### `PasteBoardAddTimestamp=0`
Set to `1` to prepend a `[HH:MM:SS]` timestamp to each pasted entry.
#### `NoFadeHidden=0`
Set to `1` to disable fading of hidden objects in file lists (Favorites, etc.).
@ -426,7 +462,7 @@ Defines visible fields and their order:
| 6 | File size (UTF-8 mode) |
| 7 | Encoding (double-click to open Encoding dialog) |
| 8 | EOL mode (toggle CR+LF / LF / CR) |
| 9 | INS/OVR mode toggle |
| 9 | INS/OVR mode toggle (double-click); shows **CBS** when clipboard monitoring is active — double-click **CBS** stops monitoring |
| 10 | STD/2ND text mode toggle |
| 11 | Current scheme (double-click to open scheme selector) |
| 12 | Ch — Character count from line start |

View File

@ -1459,6 +1459,17 @@ void LoadSettings()
IniSectionGetString(IniSecSettings2, L"CopyMultiSelectionSeparator", L"\x01",
Settings2.CopyMultiSelectionSeparator, COUNTOF(Settings2.CopyMultiSelectionSeparator));
if (Settings2.CopyMultiSelectionSeparator[0] != L'\x01') {
UnSlashW(Settings2.CopyMultiSelectionSeparator, Encoding_SciCP); // interpret \n, \t, \xHH, etc.
}
IniSectionGetString(IniSecSettings2, L"PasteBoardSeparator", L"\x01",
Settings2.PasteBoardSeparator, COUNTOF(Settings2.PasteBoardSeparator));
if (Settings2.PasteBoardSeparator[0] != L'\x01') {
UnSlashW(Settings2.PasteBoardSeparator, Encoding_SciCP); // interpret \n, \t, \xHH, etc.
}
Settings2.PasteBoardDebounceMs = clampi(IniSectionGetInt(IniSecSettings2, L"PasteBoardDebounceMs", 200), 0, 5000);
Settings2.PasteBoardAddTimestamp = IniSectionGetBool(IniSecSettings2, L"PasteBoardAddTimestamp", false);
for (int i = 0; i < COUNTOF(Settings2.CodeFontPrefPrioList); ++i) {
if (i < COUNTOF(g_CodeFontPrioList))

View File

@ -150,7 +150,7 @@ static bool s_IsThisAnElevatedRelaunch = false;
static WCHAR s_wchWndClass[64] = { L'\0' };
static HWND s_hwndEditFrame = NULL;
static HWND s_hwndNextCBChain = NULL;
static bool s_bPasteBoardListening = false;
static int s_WinCurrentWidth = 0;
@ -166,6 +166,8 @@ static UINT s_msgTaskbarCreated = 0;
static WCHAR s_wchTitleExcerpt[MIDSZ_BUFFER] = { L'\0' };
static LONG64 s_iLastCopyTime = 0;
static bool s_bLastCopyFromMe = false;
static DWORD s_dwLastPasteSeqNo = 0;
static bool s_bLastPasteSeqNoValid = false;
static bool s_bInMultiEditMode = false;
static bool s_bCallTipEscDisabled = false;
@ -2096,12 +2098,11 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow)
// Check for Paste Board option -- after loading files
if (s_flagPasteBoard) {
s_bLastCopyFromMe = true;
s_hwndNextCBChain = SetClipboardViewer(Globals.hwndMain);
s_bLastCopyFromMe = false;
s_iLastCopyTime = 0;
SetTimer(Globals.hwndMain, ID_PASTEBOARDTIMER, 100, PasteBoardTimerProc);
s_bPasteBoardListening = AddClipboardFormatListener(Globals.hwndMain);
if (s_bPasteBoardListening) {
s_iLastCopyTime = 0;
SetTimer(Globals.hwndMain, ID_PASTEBOARDTIMER, 100, PasteBoardTimerProc);
}
}
// check if a lexer was specified from the command line
@ -2283,7 +2284,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
// bPendingChangeNotify = false;
// break;
case WM_DRAWCLIPBOARD:
case WM_CLIPBOARDUPDATE:
if (s_flagPasteBoard) {
if (!s_bLastCopyFromMe) {
s_iLastCopyTime = GetTicks_ms();
@ -2291,19 +2292,6 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
s_bLastCopyFromMe = false;
}
}
if (s_hwndNextCBChain) {
SendMessage(s_hwndNextCBChain,WM_DRAWCLIPBOARD,wParam,lParam);
}
break;
case WM_CHANGECBCHAIN:
if ((HWND)wParam == s_hwndNextCBChain) {
s_hwndNextCBChain = (HWND)lParam;
}
if (s_hwndNextCBChain) {
SendMessage(s_hwndNextCBChain,WM_CHANGECBCHAIN,wParam,lParam);
}
break;
case WM_SYSCOMMAND:
@ -3266,8 +3254,13 @@ LRESULT MsgEndSession(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
// Terminate clipboard watching
if (s_flagPasteBoard) {
s_flagPasteBoard = false;
s_iLastCopyTime = 0;
KillTimer(hwnd, ID_PASTEBOARDTIMER);
ChangeClipboardChain(hwnd, s_hwndNextCBChain);
if (s_bPasteBoardListening) {
RemoveClipboardFormatListener(hwnd);
s_bPasteBoardListening = false;
}
}
// close Find/Replace and CustomizeSchemes
@ -5143,12 +5136,16 @@ static bool _HandleEditBasicCommands(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM
case IDM_EDIT_STOP_PASTEBOARD:
KillTimer(Globals.hwndMain, ID_PASTEBOARDTIMER);
ChangeClipboardChain(Globals.hwndMain, s_hwndNextCBChain);
s_hwndNextCBChain = NULL;
if (s_bPasteBoardListening) {
RemoveClipboardFormatListener(Globals.hwndMain);
s_bPasteBoardListening = false;
}
s_flagPasteBoard = false;
s_iLastCopyTime = 0;
s_bLastCopyFromMe = false;
s_bLastPasteSeqNoValid = false;
UpdateToolbar_Now(Globals.hwndMain);
UpdateStatusbar(true);
break;
@ -9252,7 +9249,11 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
break;
case STATUS_OVRMODE:
PostWMCommand(hwnd, CMD_VK_INSERT);
if (s_flagPasteBoard) {
PostWMCommand(hwnd, IDM_EDIT_STOP_PASTEBOARD);
} else {
PostWMCommand(hwnd, CMD_VK_INSERT);
}
break;
case STATUS_2ND_DEF:
@ -10608,17 +10609,22 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
// ------------------------------------------------------
if (g_iStatusbarVisible[STATUS_OVRMODE]) {
static bool s_bIsOVR = -1;
static int s_bIsOVR = -1; // int for -1 sentinel (first-paint trigger)
static bool s_bPasteBoard = false;
bool const bIsOVR = SciCall_GetOverType();
if (bForceRedraw || (s_bIsOVR != bIsOVR)) {
if (bIsOVR) {
if (bForceRedraw || (s_bIsOVR != (int)bIsOVR) || (s_bPasteBoard != s_flagPasteBoard)) {
if (s_flagPasteBoard) {
StringCchPrintf(tchStatusBar[STATUS_OVRMODE], txtWidth, L"%sCBS%s",
g_mxSBPrefix[STATUS_OVRMODE], g_mxSBPostfix[STATUS_OVRMODE]);
} else if (bIsOVR) {
StringCchPrintf(tchStatusBar[STATUS_OVRMODE], txtWidth, L"%sOVR%s",
g_mxSBPrefix[STATUS_OVRMODE], g_mxSBPostfix[STATUS_OVRMODE]);
} else {
StringCchPrintf(tchStatusBar[STATUS_OVRMODE], txtWidth, L"%sINS%s",
g_mxSBPrefix[STATUS_OVRMODE], g_mxSBPostfix[STATUS_OVRMODE]);
}
s_bIsOVR = bIsOVR;
s_bIsOVR = (int)bIsOVR;
s_bPasteBoard = s_flagPasteBoard;
bIsUpdateNeeded = true;
}
}
@ -12310,7 +12316,15 @@ void CALLBACK PasteBoardTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD
if (!s_flagPasteBoard) { return; }
if ((s_iLastCopyTime > 0) && ((GetTicks_ms() - s_iLastCopyTime) > 200)) {
int const debounceMs = max(0, Settings2.PasteBoardDebounceMs);
if ((s_iLastCopyTime > 0) && ((GetTicks_ms() - s_iLastCopyTime) > (LONG64)debounceMs)) {
// Skip if clipboard hasn't changed since last paste (sequence number check)
DWORD const dwCurrentSeqNo = GetClipboardSequenceNumber();
if (s_bLastPasteSeqNoValid && (dwCurrentSeqNo == s_dwLastPasteSeqNo)) {
s_iLastCopyTime = 0;
return;
}
if (SciCall_CanPaste()) {
bool bAutoIndent2 = Settings.AutoIndent;
@ -12318,13 +12332,34 @@ void CALLBACK PasteBoardTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD
EditJumpTo(-1, 0);
UndoTransActionBegin();
if (!Sci_IsDocEmpty()) {
SciCall_NewLine();
if (Settings2.PasteBoardSeparator[0] == L'\x01') {
// default: one EOL between entries
SciCall_NewLine();
}
else if (Settings2.PasteBoardSeparator[0] != L'\0') {
// custom separator inserted verbatim — user controls all newlines in the string
char sepBuf[MICRO_BUFFER * 3] = { '\0' };
int const sepLen = WideCharToMultiByte(Encoding_SciCP, 0, Settings2.PasteBoardSeparator, -1,
sepBuf, (int)(sizeof(sepBuf) - 1), NULL, NULL);
if (sepLen > 0) {
SciCall_ReplaceSel(sepBuf);
}
}
// if '\0' (empty): no separator, entries joined directly
}
if (Settings2.PasteBoardAddTimestamp) {
char tsBuf[32] = { '\0' };
SYSTEMTIME st;
GetLocalTime(&st);
StringCchPrintfA(tsBuf, COUNTOF(tsBuf), "[%02u:%02u:%02u] ", st.wHour, st.wMinute, st.wSecond);
SciCall_ReplaceSel(tsBuf);
}
SciCall_Paste();
SciCall_NewLine();
EndUndoTransAction();
Sci_ScrollSelectionToView();
Settings.AutoIndent = bAutoIndent2;
s_dwLastPasteSeqNo = dwCurrentSeqNo;
s_bLastPasteSeqNoValid = true;
}
s_iLastCopyTime = 0;
}

View File

@ -844,6 +844,10 @@ typedef struct SETTINGS2_T {
WCHAR CopyMultiSelectionSeparator[MICRO_BUFFER];
WCHAR PasteBoardSeparator[MICRO_BUFFER];
int PasteBoardDebounceMs;
bool PasteBoardAddTimestamp;
const WCHAR* CodeFontPrefPrioList[MICRO_BUFFER];
const WCHAR* TextFontPrefPrioList[MICRO_BUFFER];