in ext/scintilla/src/Editor.cxx [3680:3931]
int Editor::KeyCommand(unsigned int iMessage) {
switch (iMessage) {
case SCI_LINEDOWN:
CursorUpOrDown(1, Selection::noSel);
break;
case SCI_LINEDOWNEXTEND:
CursorUpOrDown(1, Selection::selStream);
break;
case SCI_LINEDOWNRECTEXTEND:
CursorUpOrDown(1, Selection::selRectangle);
break;
case SCI_PARADOWN:
ParaUpOrDown(1, Selection::noSel);
break;
case SCI_PARADOWNEXTEND:
ParaUpOrDown(1, Selection::selStream);
break;
case SCI_LINESCROLLDOWN:
ScrollTo(topLine + 1);
MoveCaretInsideView(false);
break;
case SCI_LINEUP:
CursorUpOrDown(-1, Selection::noSel);
break;
case SCI_LINEUPEXTEND:
CursorUpOrDown(-1, Selection::selStream);
break;
case SCI_LINEUPRECTEXTEND:
CursorUpOrDown(-1, Selection::selRectangle);
break;
case SCI_PARAUP:
ParaUpOrDown(-1, Selection::noSel);
break;
case SCI_PARAUPEXTEND:
ParaUpOrDown(-1, Selection::selStream);
break;
case SCI_LINESCROLLUP:
ScrollTo(topLine - 1);
MoveCaretInsideView(false);
break;
case SCI_CHARLEFT:
case SCI_CHARLEFTEXTEND:
case SCI_CHARLEFTRECTEXTEND:
case SCI_CHARRIGHT:
case SCI_CHARRIGHTEXTEND:
case SCI_CHARRIGHTRECTEXTEND:
case SCI_WORDLEFT:
case SCI_WORDLEFTEXTEND:
case SCI_WORDRIGHT:
case SCI_WORDRIGHTEXTEND:
case SCI_WORDLEFTEND:
case SCI_WORDLEFTENDEXTEND:
case SCI_WORDRIGHTEND:
case SCI_WORDRIGHTENDEXTEND:
case SCI_WORDPARTLEFT:
case SCI_WORDPARTLEFTEXTEND:
case SCI_WORDPARTRIGHT:
case SCI_WORDPARTRIGHTEXTEND:
case SCI_HOME:
case SCI_HOMEEXTEND:
case SCI_HOMERECTEXTEND:
case SCI_HOMEDISPLAY:
case SCI_HOMEDISPLAYEXTEND:
case SCI_HOMEWRAP:
case SCI_HOMEWRAPEXTEND:
case SCI_VCHOME:
case SCI_VCHOMEEXTEND:
case SCI_VCHOMERECTEXTEND:
case SCI_VCHOMEDISPLAY:
case SCI_VCHOMEDISPLAYEXTEND:
case SCI_VCHOMEWRAP:
case SCI_VCHOMEWRAPEXTEND:
case SCI_LINEEND:
case SCI_LINEENDEXTEND:
case SCI_LINEENDRECTEXTEND:
case SCI_LINEENDDISPLAY:
case SCI_LINEENDDISPLAYEXTEND:
case SCI_LINEENDWRAP:
case SCI_LINEENDWRAPEXTEND:
return HorizontalMove(iMessage);
case SCI_DOCUMENTSTART:
MovePositionTo(0);
SetLastXChosen();
break;
case SCI_DOCUMENTSTARTEXTEND:
MovePositionTo(0, Selection::selStream);
SetLastXChosen();
break;
case SCI_DOCUMENTEND:
MovePositionTo(pdoc->Length());
SetLastXChosen();
break;
case SCI_DOCUMENTENDEXTEND:
MovePositionTo(pdoc->Length(), Selection::selStream);
SetLastXChosen();
break;
case SCI_STUTTEREDPAGEUP:
PageMove(-1, Selection::noSel, true);
break;
case SCI_STUTTEREDPAGEUPEXTEND:
PageMove(-1, Selection::selStream, true);
break;
case SCI_STUTTEREDPAGEDOWN:
PageMove(1, Selection::noSel, true);
break;
case SCI_STUTTEREDPAGEDOWNEXTEND:
PageMove(1, Selection::selStream, true);
break;
case SCI_PAGEUP:
PageMove(-1);
break;
case SCI_PAGEUPEXTEND:
PageMove(-1, Selection::selStream);
break;
case SCI_PAGEUPRECTEXTEND:
PageMove(-1, Selection::selRectangle);
break;
case SCI_PAGEDOWN:
PageMove(1);
break;
case SCI_PAGEDOWNEXTEND:
PageMove(1, Selection::selStream);
break;
case SCI_PAGEDOWNRECTEXTEND:
PageMove(1, Selection::selRectangle);
break;
case SCI_EDITTOGGLEOVERTYPE:
inOverstrike = !inOverstrike;
ContainerNeedsUpdate(SC_UPDATE_SELECTION);
ShowCaretAtCurrentPosition();
SetIdle(true);
break;
case SCI_CANCEL: // Cancel any modes - handled in subclass
// Also unselect text
CancelModes();
if ((sel.Count() > 1) && !sel.IsRectangular()) {
// Drop additional selections
InvalidateWholeSelection();
sel.DropAdditionalRanges();
}
break;
case SCI_DELETEBACK:
DelCharBack(true);
if ((caretSticky == SC_CARETSTICKY_OFF) || (caretSticky == SC_CARETSTICKY_WHITESPACE)) {
SetLastXChosen();
}
EnsureCaretVisible();
break;
case SCI_DELETEBACKNOTLINE:
DelCharBack(false);
if ((caretSticky == SC_CARETSTICKY_OFF) || (caretSticky == SC_CARETSTICKY_WHITESPACE)) {
SetLastXChosen();
}
EnsureCaretVisible();
break;
case SCI_TAB:
Indent(true);
if (caretSticky == SC_CARETSTICKY_OFF) {
SetLastXChosen();
}
EnsureCaretVisible();
ShowCaretAtCurrentPosition(); // Avoid blinking
break;
case SCI_BACKTAB:
Indent(false);
if ((caretSticky == SC_CARETSTICKY_OFF) || (caretSticky == SC_CARETSTICKY_WHITESPACE)) {
SetLastXChosen();
}
EnsureCaretVisible();
ShowCaretAtCurrentPosition(); // Avoid blinking
break;
case SCI_NEWLINE:
NewLine();
break;
case SCI_FORMFEED:
AddChar('\f');
break;
case SCI_ZOOMIN:
if (vs.zoomLevel < 20) {
vs.zoomLevel++;
InvalidateStyleRedraw();
NotifyZoom();
}
break;
case SCI_ZOOMOUT:
if (vs.zoomLevel > -10) {
vs.zoomLevel--;
InvalidateStyleRedraw();
NotifyZoom();
}
break;
case SCI_DELWORDLEFT:
case SCI_DELWORDRIGHT:
case SCI_DELWORDRIGHTEND:
case SCI_DELLINELEFT:
case SCI_DELLINERIGHT:
return DelWordOrLine(iMessage);
case SCI_LINECOPY: {
const Sci::Line lineStart = pdoc->SciLineFromPosition(SelectionStart().Position());
const Sci::Line lineEnd = pdoc->SciLineFromPosition(SelectionEnd().Position());
CopyRangeToClipboard(pdoc->LineStart(lineStart),
pdoc->LineStart(lineEnd + 1));
}
break;
case SCI_LINECUT: {
const Sci::Line lineStart = pdoc->SciLineFromPosition(SelectionStart().Position());
const Sci::Line lineEnd = pdoc->SciLineFromPosition(SelectionEnd().Position());
const Sci::Position start = pdoc->LineStart(lineStart);
const Sci::Position end = pdoc->LineStart(lineEnd + 1);
SetSelection(start, end);
Cut();
SetLastXChosen();
}
break;
case SCI_LINEDELETE: {
const Sci::Line line = pdoc->SciLineFromPosition(sel.MainCaret());
const Sci::Position start = pdoc->LineStart(line);
const Sci::Position end = pdoc->LineStart(line + 1);
pdoc->DeleteChars(start, end - start);
}
break;
case SCI_LINETRANSPOSE:
LineTranspose();
break;
case SCI_LINEREVERSE:
LineReverse();
break;
case SCI_LINEDUPLICATE:
Duplicate(true);
break;
case SCI_SELECTIONDUPLICATE:
Duplicate(false);
break;
case SCI_LOWERCASE:
ChangeCaseOfSelection(cmLower);
break;
case SCI_UPPERCASE:
ChangeCaseOfSelection(cmUpper);
break;
case SCI_SCROLLTOSTART:
ScrollTo(0);
break;
case SCI_SCROLLTOEND:
ScrollTo(MaxScrollPos());
break;
}
return 0;
}