From 67071b2d0af8383cd943027de2f6c8def451a516 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Mon, 23 Mar 2026 10:06:15 +0100 Subject: [PATCH] chg: crtl+c / rmb-copy for line (empty selection) and hyperlinks --- language/common_res.h | 1 + language/np3_af_za/menu_af_za.rc | 1 + language/np3_be_by/menu_be_by.rc | 1 + language/np3_de_de/menu_de_de.rc | 1 + language/np3_el_gr/menu_el_gr.rc | 1 + language/np3_en_gb/menu_en_gb.rc | 1 + language/np3_en_us/menu_en_us.rc | 1 + language/np3_es_es/menu_es_es.rc | 1 + language/np3_fi_fi/menu_fi_fi.rc | 1 + language/np3_fr_fr/menu_fr_fr.rc | 1 + language/np3_hi_in/menu_hi_in.rc | 1 + language/np3_hu_hu/menu_hu_hu.rc | 1 + language/np3_id_id/menu_id_id.rc | 1 + language/np3_it_it/menu_it_it.rc | 1 + language/np3_ja_jp/menu_ja_jp.rc | 1 + language/np3_ko_kr/menu_ko_kr.rc | 1 + language/np3_nl_nl/menu_nl_nl.rc | 1 + language/np3_pl_pl/menu_pl_pl.rc | 1 + language/np3_pt_br/menu_pt_br.rc | 1 + language/np3_pt_pt/menu_pt_pt.rc | 1 + language/np3_ru_ru/menu_ru_ru.rc | 1 + language/np3_sk_sk/menu_sk_sk.rc | 1 + language/np3_sv_se/menu_sv_se.rc | 1 + language/np3_tr_tr/menu_tr_tr.rc | 1 + language/np3_vi_vn/menu_vi_vn.rc | 1 + language/np3_zh_cn/menu_zh_cn.rc | 1 + language/np3_zh_tw/menu_zh_tw.rc | 1 + src/Helpers.c | 10 +++++++--- src/Notepad3.c | 8 ++++++-- 29 files changed, 40 insertions(+), 5 deletions(-) diff --git a/language/common_res.h b/language/common_res.h index 0a6db312d..787aa472c 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -556,6 +556,7 @@ #define CMD_ENTER_RETURN 20062 #define CMD_PARAGRAPH_UP 20063 #define CMD_PARAGRAPH_DOWN 20064 +#define CMD_COPY_HYPERLINK 20065 #define IDS_MUI_MENU_LANGUAGE 34500 #define IDS_MUI_LANG_EN_US 34501 diff --git a/language/np3_af_za/menu_af_za.rc b/language/np3_af_za/menu_af_za.rc index 019df04e0..b5733c9d4 100644 --- a/language/np3_af_za/menu_af_za.rc +++ b/language/np3_af_za/menu_af_za.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Maak Skakel Oop", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Undo", IDM_EDIT_UNDO MENUITEM "Redo", IDM_EDIT_REDO diff --git a/language/np3_be_by/menu_be_by.rc b/language/np3_be_by/menu_be_by.rc index 1b68cf3d9..44c032a40 100644 --- a/language/np3_be_by/menu_be_by.rc +++ b/language/np3_be_by/menu_be_by.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Адкрыць гіперспасылку", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Адмена", IDM_EDIT_UNDO MENUITEM "Паўтор", IDM_EDIT_REDO diff --git a/language/np3_de_de/menu_de_de.rc b/language/np3_de_de/menu_de_de.rc index aee7bad54..6099c386a 100644 --- a/language/np3_de_de/menu_de_de.rc +++ b/language/np3_de_de/menu_de_de.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Öffne Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Rückgängig", IDM_EDIT_UNDO MENUITEM "Wiederholen", IDM_EDIT_REDO diff --git a/language/np3_el_gr/menu_el_gr.rc b/language/np3_el_gr/menu_el_gr.rc index f7cc15ee1..d84b203e8 100644 --- a/language/np3_el_gr/menu_el_gr.rc +++ b/language/np3_el_gr/menu_el_gr.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Άνοιγμα υπερσύνδεσης", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Αναίρεση", IDM_EDIT_UNDO MENUITEM "Επανάληψη ενέργειας", IDM_EDIT_REDO diff --git a/language/np3_en_gb/menu_en_gb.rc b/language/np3_en_gb/menu_en_gb.rc index ce5571fcd..89e816de5 100644 --- a/language/np3_en_gb/menu_en_gb.rc +++ b/language/np3_en_gb/menu_en_gb.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Open Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Undo", IDM_EDIT_UNDO MENUITEM "Redo", IDM_EDIT_REDO diff --git a/language/np3_en_us/menu_en_us.rc b/language/np3_en_us/menu_en_us.rc index 1b389de1e..1857f2809 100644 --- a/language/np3_en_us/menu_en_us.rc +++ b/language/np3_en_us/menu_en_us.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Open Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Undo", IDM_EDIT_UNDO MENUITEM "Redo", IDM_EDIT_REDO diff --git a/language/np3_es_es/menu_es_es.rc b/language/np3_es_es/menu_es_es.rc index b8121fe28..7defa3896 100644 --- a/language/np3_es_es/menu_es_es.rc +++ b/language/np3_es_es/menu_es_es.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Abrir Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Deshacer", IDM_EDIT_UNDO MENUITEM "Rehacer", IDM_EDIT_REDO diff --git a/language/np3_fi_fi/menu_fi_fi.rc b/language/np3_fi_fi/menu_fi_fi.rc index ea5aa4cc7..c36b3686c 100644 --- a/language/np3_fi_fi/menu_fi_fi.rc +++ b/language/np3_fi_fi/menu_fi_fi.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Avaa Hyperlinkki", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Kumoa", IDM_EDIT_UNDO MENUITEM "Tee uudelleen", IDM_EDIT_REDO diff --git a/language/np3_fr_fr/menu_fr_fr.rc b/language/np3_fr_fr/menu_fr_fr.rc index 13146f2b1..2a641c268 100644 --- a/language/np3_fr_fr/menu_fr_fr.rc +++ b/language/np3_fr_fr/menu_fr_fr.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Ouvrir l'hyperlien", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Défaire", IDM_EDIT_UNDO MENUITEM "Refaire", IDM_EDIT_REDO diff --git a/language/np3_hi_in/menu_hi_in.rc b/language/np3_hi_in/menu_hi_in.rc index a5dd5ae7c..81afe995c 100644 --- a/language/np3_hi_in/menu_hi_in.rc +++ b/language/np3_hi_in/menu_hi_in.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "हाईपरलिंक खोलें", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "पूर्ववत करें", IDM_EDIT_UNDO MENUITEM "फिर से करें", IDM_EDIT_REDO diff --git a/language/np3_hu_hu/menu_hu_hu.rc b/language/np3_hu_hu/menu_hu_hu.rc index 424c8edbd..dbe64bb01 100644 --- a/language/np3_hu_hu/menu_hu_hu.rc +++ b/language/np3_hu_hu/menu_hu_hu.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Hiperhivatkozás megnyitása", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Visszavonás", IDM_EDIT_UNDO MENUITEM "Újra", IDM_EDIT_REDO diff --git a/language/np3_id_id/menu_id_id.rc b/language/np3_id_id/menu_id_id.rc index cdd4ca9a9..697601aef 100644 --- a/language/np3_id_id/menu_id_id.rc +++ b/language/np3_id_id/menu_id_id.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Buka Tautan", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Urungkan", IDM_EDIT_UNDO MENUITEM "Kembalikan", IDM_EDIT_REDO diff --git a/language/np3_it_it/menu_it_it.rc b/language/np3_it_it/menu_it_it.rc index a1cf44a5f..bbb216796 100644 --- a/language/np3_it_it/menu_it_it.rc +++ b/language/np3_it_it/menu_it_it.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Apri hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Annulla", IDM_EDIT_UNDO MENUITEM "Ripristina", IDM_EDIT_REDO diff --git a/language/np3_ja_jp/menu_ja_jp.rc b/language/np3_ja_jp/menu_ja_jp.rc index 16dfc8a10..481c3ffa2 100644 --- a/language/np3_ja_jp/menu_ja_jp.rc +++ b/language/np3_ja_jp/menu_ja_jp.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "リンクを開く", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "元に戻す", IDM_EDIT_UNDO MENUITEM "やり直し", IDM_EDIT_REDO diff --git a/language/np3_ko_kr/menu_ko_kr.rc b/language/np3_ko_kr/menu_ko_kr.rc index 547f5e2fc..32df4e6ad 100644 --- a/language/np3_ko_kr/menu_ko_kr.rc +++ b/language/np3_ko_kr/menu_ko_kr.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "하이퍼링크 열기", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "실행 취소", IDM_EDIT_UNDO MENUITEM "다시 실행", IDM_EDIT_REDO diff --git a/language/np3_nl_nl/menu_nl_nl.rc b/language/np3_nl_nl/menu_nl_nl.rc index 0ccbf8e81..94057b3d4 100644 --- a/language/np3_nl_nl/menu_nl_nl.rc +++ b/language/np3_nl_nl/menu_nl_nl.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Hyperlink openen", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Ongedaan maken", IDM_EDIT_UNDO MENUITEM "Opnieuw uitvoeren", IDM_EDIT_REDO diff --git a/language/np3_pl_pl/menu_pl_pl.rc b/language/np3_pl_pl/menu_pl_pl.rc index a2e1daecb..53bbc206a 100644 --- a/language/np3_pl_pl/menu_pl_pl.rc +++ b/language/np3_pl_pl/menu_pl_pl.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Otwórz łącze", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Cofnij", IDM_EDIT_UNDO MENUITEM "Do przodu", IDM_EDIT_REDO diff --git a/language/np3_pt_br/menu_pt_br.rc b/language/np3_pt_br/menu_pt_br.rc index 85ec0b0b1..3986c4a73 100644 --- a/language/np3_pt_br/menu_pt_br.rc +++ b/language/np3_pt_br/menu_pt_br.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Abrir Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Desfazer", IDM_EDIT_UNDO MENUITEM "Refazer", IDM_EDIT_REDO diff --git a/language/np3_pt_pt/menu_pt_pt.rc b/language/np3_pt_pt/menu_pt_pt.rc index 469db75b7..9b45f6935 100644 --- a/language/np3_pt_pt/menu_pt_pt.rc +++ b/language/np3_pt_pt/menu_pt_pt.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Abrir hiperligação", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Anular", IDM_EDIT_UNDO MENUITEM "Refazer", IDM_EDIT_REDO diff --git a/language/np3_ru_ru/menu_ru_ru.rc b/language/np3_ru_ru/menu_ru_ru.rc index 84a83e77f..2a639833d 100644 --- a/language/np3_ru_ru/menu_ru_ru.rc +++ b/language/np3_ru_ru/menu_ru_ru.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Открыть гиперссылку", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Отмена", IDM_EDIT_UNDO MENUITEM "Повтор", IDM_EDIT_REDO diff --git a/language/np3_sk_sk/menu_sk_sk.rc b/language/np3_sk_sk/menu_sk_sk.rc index 907eafbe2..5c28362ce 100644 --- a/language/np3_sk_sk/menu_sk_sk.rc +++ b/language/np3_sk_sk/menu_sk_sk.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Otvoriť Hyperlink", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Späť", IDM_EDIT_UNDO MENUITEM "Znova", IDM_EDIT_REDO diff --git a/language/np3_sv_se/menu_sv_se.rc b/language/np3_sv_se/menu_sv_se.rc index 584e1f3d1..d19cb98d2 100644 --- a/language/np3_sv_se/menu_sv_se.rc +++ b/language/np3_sv_se/menu_sv_se.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Öppna hyperlänk", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Ångra", IDM_EDIT_UNDO MENUITEM "Gör om", IDM_EDIT_REDO diff --git a/language/np3_tr_tr/menu_tr_tr.rc b/language/np3_tr_tr/menu_tr_tr.rc index 55d0c44f9..84f59b99f 100644 --- a/language/np3_tr_tr/menu_tr_tr.rc +++ b/language/np3_tr_tr/menu_tr_tr.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Bağlantıyı aç", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Geri al", IDM_EDIT_UNDO MENUITEM "Yinele", IDM_EDIT_REDO diff --git a/language/np3_vi_vn/menu_vi_vn.rc b/language/np3_vi_vn/menu_vi_vn.rc index 61e99be2b..0764a7569 100644 --- a/language/np3_vi_vn/menu_vi_vn.rc +++ b/language/np3_vi_vn/menu_vi_vn.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "Mở liên kết", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "Hoàn tác", IDM_EDIT_UNDO MENUITEM "Làm lại", IDM_EDIT_REDO diff --git a/language/np3_zh_cn/menu_zh_cn.rc b/language/np3_zh_cn/menu_zh_cn.rc index 581872c6c..6c3ecb33c 100644 --- a/language/np3_zh_cn/menu_zh_cn.rc +++ b/language/np3_zh_cn/menu_zh_cn.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "打开超链接", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "撤销", IDM_EDIT_UNDO MENUITEM "重做", IDM_EDIT_REDO diff --git a/language/np3_zh_tw/menu_zh_tw.rc b/language/np3_zh_tw/menu_zh_tw.rc index 91e241b17..e1e524bb4 100644 --- a/language/np3_zh_tw/menu_zh_tw.rc +++ b/language/np3_zh_tw/menu_zh_tw.rc @@ -560,6 +560,7 @@ BEGIN POPUP "+" BEGIN MENUITEM "打開超連結", CMD_OPEN_HYPERLINK + MENUITEM "Copy Hyperlink URL", CMD_COPY_HYPERLINK MENUITEM SEPARATOR MENUITEM "復原", IDM_EDIT_UNDO MENUITEM "取消復原", IDM_EDIT_REDO diff --git a/src/Helpers.c b/src/Helpers.c index 364e38f1e..d83820e20 100644 --- a/src/Helpers.c +++ b/src/Helpers.c @@ -1949,11 +1949,15 @@ ptrdiff_t MultiByteToWideCharEx( // // UrlEscapeEx() // - void UrlEscapeEx(LPCWSTR lpURL, LPWSTR lpEscaped, DWORD* pcchEscaped, bool bEscReserved) { - UNREFERENCED_PARAMETER(bEscReserved); - UrlEscape(lpURL, lpEscaped, pcchEscaped, (URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_URI_COMPONENT)); + if (bEscReserved) { + // full component encoding (like encodeURIComponent) — for EditURLEncode + UrlEscape(lpURL, lpEscaped, pcchEscaped, (URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_URI_COMPONENT)); + } else { + // preserve URL structure, encode unsafe chars + non-ASCII as UTF-8, leave query/fragment as-is + UrlEscape(lpURL, lpEscaped, pcchEscaped, (URL_BROWSER_MODE | URL_ESCAPE_AS_UTF8)); + } } diff --git a/src/Notepad3.c b/src/Notepad3.c index 8c954cd3c..a4c4cb93f 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -4678,6 +4678,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) bool const bIsHLink = (SciCall_IndicatorValueAt(INDIC_NP3_HYPERLINK, iCurPos) > 0); EnableCmd(hmenu, CMD_OPEN_HYPERLINK, !mrs && bIsHLink); + EnableCmd(hmenu, CMD_COPY_HYPERLINK, !mrs && bIsHLink); EnableCmd(hmenu, CMD_WEBACTION1, !se && !mrs && bPosInSel && !bIsHLink); EnableCmd(hmenu, CMD_WEBACTION2, !se && !mrs && bPosInSel && !bIsHLink); @@ -5248,8 +5249,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) s_bLastCopyFromMe = true; } if (SciCall_IsSelectionEmpty()) { - if (!HandleHotSpotURLClicked(SciCall_GetCurrentPos(), COPY_HYPERLINK) && - !Settings2.NoCopyLineOnEmptySelection) { + if (!Settings2.NoCopyLineOnEmptySelection) { if (Sci_GetNetLineLength(Sci_GetCurrentLineNumber()) > 0) { SciCall_CopyAllowLine(); // (!) VisualStudio behavior // On Windows, an extra "MSDEVLineSelect" marker is added to the clipboard @@ -7398,6 +7398,10 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) HandleHotSpotURLClicked(SciCall_GetCurrentPos(), (OPEN_WITH_BROWSER | OPEN_IN_NOTEPAD3)); break; + case CMD_COPY_HYPERLINK: + HandleHotSpotURLClicked(SciCall_GetCurrentPos(), COPY_HYPERLINK); + break; + case CMD_FOLDJUMPDOWN: EditFoldCmdKey(DOWN, SNIFF); break;