mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+fix: virtual space navigation and rectangular selection (minor issues)
(allow "Virtual Space Rectangular Selection" also allows moving Caret into virtual space (beyond line end))
This commit is contained in:
parent
352ba83efa
commit
32ccdc0671
39
src/Edit.c
39
src/Edit.c
@ -286,18 +286,22 @@ HWND EditCreate(HWND hwndParent)
|
||||
|
||||
Encoding_SciSetCodePage(hwnd,iDefaultEncoding);
|
||||
SendMessage(hwnd,SCI_SETEOLMODE,SC_EOL_CRLF,0);
|
||||
SendMessage(hwnd,SCI_SETPASTECONVERTENDINGS,1,0);
|
||||
SendMessage(hwnd,SCI_SETPASTECONVERTENDINGS,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETMODEVENTMASK,/*SC_MODEVENTMASKALL*/SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT|SC_MOD_CONTAINER,0);
|
||||
SendMessage(hwnd,SCI_USEPOPUP,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETSCROLLWIDTH, DEFAULT_SCROLL_WIDTH,0);
|
||||
SendMessage(hwnd,SCI_SETSCROLLWIDTHTRACKING,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETENDATLASTLINE,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETCARETSTICKY,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETCARETLINEVISIBLEALWAYS,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_OFF,0);
|
||||
//SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_WHITESPACE,0);
|
||||
SendMessage(hwnd,SCI_SETXCARETPOLICY,CARET_SLOP|CARET_EVEN,50);
|
||||
SendMessage(hwnd,SCI_SETYCARETPOLICY,CARET_EVEN,0);
|
||||
SendMessage(hwnd,SCI_SETMOUSESELECTIONRECTANGULARSWITCH,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETMULTIPLESELECTION,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALSELECTIONTYPING,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS,(bVirtualSpaceInRectSelection ? SCVS_RECTANGULARSELECTION : SCVS_NONE),0);
|
||||
SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS,
|
||||
(bVirtualSpaceInRectSelection ? (SCVS_RECTANGULARSELECTION | SCVS_USERACCESSIBLE | SCVS_NOWRAPLINESTART) : SCVS_NONE),0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALCARETSBLINK,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALCARETSVISIBLE,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETMOUSEWHEELCAPTURES,FALSE,0);
|
||||
@ -600,7 +604,7 @@ BOOL EditIsRecodingNeeded(WCHAR* pszText, int cchLen)
|
||||
//
|
||||
|
||||
|
||||
char* EditGetClipboardText(HWND hwnd,BOOL bCheckEncoding) {
|
||||
char* EditGetClipboardText(HWND hwnd,BOOL bCheckEncoding,int* pLineCount) {
|
||||
HANDLE hmem;
|
||||
WCHAR *pwch;
|
||||
char *pmch;
|
||||
@ -648,6 +652,7 @@ char* EditGetClipboardText(HWND hwnd,BOOL bCheckEncoding) {
|
||||
else
|
||||
return (pmch);
|
||||
|
||||
int lineCount = 0;
|
||||
if ((BOOL)SendMessage(hwnd,SCI_GETPASTECONVERTENDINGS,0,0)) {
|
||||
ptmp = LocalAlloc(LPTR,mlen * 2 + 2);
|
||||
if (ptmp) {
|
||||
@ -671,6 +676,7 @@ char* EditGetClipboardText(HWND hwnd,BOOL bCheckEncoding) {
|
||||
s++;
|
||||
}
|
||||
s++;
|
||||
++lineCount;
|
||||
}
|
||||
else {
|
||||
*d++ = *s++;
|
||||
@ -685,10 +691,27 @@ char* EditGetClipboardText(HWND hwnd,BOOL bCheckEncoding) {
|
||||
LocalFree(ptmp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// count lines only
|
||||
char *s = pmch;
|
||||
for (int i = 0; (i <= mlen) && (*s != '\0'); i++) {
|
||||
if (*s == '\n' || *s == '\r') {
|
||||
if ((*s == '\r') && (i + 1 < mlen) && (*(s + 1) == '\n')) {
|
||||
i++;
|
||||
s++;
|
||||
}
|
||||
s++;
|
||||
++lineCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GlobalUnlock(hmem);
|
||||
CloseClipboard();
|
||||
|
||||
if (pLineCount)
|
||||
*pLineCount = lineCount;
|
||||
|
||||
return (pmch);
|
||||
}
|
||||
|
||||
@ -5178,7 +5201,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
// if first time you bring up find/replace dialog, copy content from clipboard to find box
|
||||
if (bFirstTime)
|
||||
{
|
||||
char* pClip = EditGetClipboardText(hwnd,FALSE);
|
||||
char* pClip = EditGetClipboardText(hwnd,FALSE,NULL);
|
||||
if (pClip) {
|
||||
int len = lstrlenA(pClip);
|
||||
if (len > 0 && len < FNDRPL_BUFFER) {
|
||||
@ -5838,7 +5861,7 @@ BOOL EditReplace(HWND hwnd,LPCEDITFINDREPLACE lpefr)
|
||||
|
||||
if (StringCchCompareNA(lpefr->szReplace,FNDRPL_BUFFER,"^c",-1) == 0) {
|
||||
iReplaceMsg = SCI_REPLACETARGET;
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE);
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE,NULL);
|
||||
}
|
||||
else {
|
||||
//lstrcpyA(szReplace2,lpefr->szReplace);
|
||||
@ -6199,7 +6222,7 @@ BOOL EditReplaceAll(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo)
|
||||
|
||||
if (StringCchCompareNA(lpefr->szReplace,FNDRPL_BUFFER,"^c",-1) == 0) {
|
||||
iReplaceMsg = SCI_REPLACETARGET;
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE);
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE,NULL);
|
||||
}
|
||||
else {
|
||||
//lstrcpyA(szReplace2,lpefr->szReplace);
|
||||
@ -6328,7 +6351,7 @@ BOOL EditReplaceAllInSelection(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo
|
||||
|
||||
if (StringCchCompareNA(lpefr->szReplace,FNDRPL_BUFFER,"^c",-1) == 0) {
|
||||
iReplaceMsg = SCI_REPLACETARGET;
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE);
|
||||
pszReplace2 = EditGetClipboardText(hwnd,TRUE,NULL);
|
||||
}
|
||||
else {
|
||||
//lstrcpyA(szReplace2,lpefr->szReplace);
|
||||
|
||||
@ -50,7 +50,7 @@ void EditSetNewText(HWND,char*,DWORD);
|
||||
BOOL EditConvertText(HWND,int,int,BOOL);
|
||||
BOOL EditSetNewEncoding(HWND,int,int,BOOL,BOOL);
|
||||
BOOL EditIsRecodingNeeded(WCHAR*,int);
|
||||
char* EditGetClipboardText(HWND,BOOL);
|
||||
char* EditGetClipboardText(HWND,BOOL,int*);
|
||||
BOOL EditCopyAppend(HWND);
|
||||
int EditDetectEOLMode(HWND,char*,DWORD);
|
||||
BOOL EditLoadFile(HWND,LPCWSTR,BOOL,int*,int*,BOOL*,BOOL*);
|
||||
|
||||
@ -3081,7 +3081,8 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
bSwapClipBoard = TRUE;
|
||||
case IDM_EDIT_PASTE:
|
||||
{
|
||||
char *pClip = EditGetClipboardText(hwndEdit,!bSkipUnicodeDetection);
|
||||
int lineCount = 0;
|
||||
char *pClip = EditGetClipboardText(hwndEdit,!bSkipUnicodeDetection,&lineCount);
|
||||
if (!pClip)
|
||||
break; // recoding canceled
|
||||
|
||||
@ -3089,9 +3090,16 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
if (SendMessage(hwndEdit,SCI_GETSELECTIONEMPTY,0,0))
|
||||
{
|
||||
int iCurPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
int iCurLine = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,(WPARAM)iCurPos,0);
|
||||
int iCurColumn = (int)SendMessage(hwndEdit,SCI_GETCOLUMN,(WPARAM)iCurPos,0);
|
||||
|
||||
SendMessage(hwndEdit, SCI_PASTE, 0, 0);
|
||||
if (bSwapClipBoard)
|
||||
SendMessage(hwndEdit, SCI_COPYTEXT, 0, (LPARAM)NULL);
|
||||
|
||||
EditJumpTo(hwndEdit, iCurLine + lineCount + 1, iCurColumn + 1);
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
@ -4284,7 +4292,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
bVirtualSpaceInRectSelection = (bVirtualSpaceInRectSelection) ? FALSE : TRUE; // toggle
|
||||
//SendMessage(hwndEdit,SCI_CLEARSELECTIONS,0,0);
|
||||
SendMessage(hwndEdit,SCI_SETVIRTUALSPACEOPTIONS,
|
||||
(bVirtualSpaceInRectSelection ? SCVS_RECTANGULARSELECTION : SCVS_NONE),0);
|
||||
(bVirtualSpaceInRectSelection ? (SCVS_RECTANGULARSELECTION | SCVS_USERACCESSIBLE | SCVS_NOWRAPLINESTART) : SCVS_NONE),0);
|
||||
break;
|
||||
|
||||
case IDM_VIEW_MARKOCCURRENCES_OFF:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user