mirror of https://github.com/minexew/Shrine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
729 lines
16 KiB
729 lines
16 KiB
#help_index "DolDoc/Output;StdOut/DolDoc" |
|
|
|
public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) |
|
{//$LK,"PutKey",A="MN:PutKey"$(ch,sc) at doc insert pt, cur_entry. |
|
I64 i,x,y; |
|
CDoc *m; |
|
CDocEntry *doc_ce; |
|
U8 *st,*st2; |
|
Bool unlock; |
|
|
|
if (!doc && !(doc=DocPut) || doc->doc_signature!=DOC_SIGNATURE_VAL) |
|
return; |
|
if (doc->user_put_key && (*doc->user_put_key)(doc,doc->user_put_data,ch,sc)) |
|
return; |
|
unlock=DocLock(doc); |
|
if (!Bt(doldoc.clean_scan_codes,sc.u8[0])) |
|
doc->flags|=DOCF_UNDO_DIRTY; |
|
DocCaptureUndo(doc); |
|
if (Bt(char_bmp_printable,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { |
|
if (sc&SCF_KEY_DESC) { |
|
st=Char2KeyName(ch,FALSE); |
|
KeyDescSet("Char /'%s'",st); |
|
Free(st); |
|
} else |
|
EdCharIns(ch,sc,doc); |
|
} else { |
|
doc_ce=doc->cur_entry; |
|
x=doc->x; y=doc->y; |
|
if (sc&SCF_ALT) |
|
switch (ch) { |
|
case CH_BACKSPACE: //<CTRL-H> |
|
if (!(sc&(SCF_SHIFT|SCF_CTRL))) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Undo"); |
|
else |
|
DocUndoRestore(doc); |
|
} |
|
break; |
|
} |
|
else |
|
switch (ch) { |
|
case 0: |
|
switch (sc.u8[0]) { |
|
case SC_CURSOR_DOWN: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Cursor Down, Sel"); |
|
else |
|
KeyDescSet("Edit/Cursor Down"); |
|
} else |
|
EdLineDown(doc,sc); |
|
break; |
|
} else |
|
sc&=~SCF_CTRL; |
|
//Fall Through to SC_END |
|
case SC_END: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/GoTo Doc End, Sel"); |
|
else |
|
KeyDescSet("Edit/GoTo Doc End"); |
|
} else { |
|
while (doc_ce!=doc) { |
|
BEqu(&doc_ce->type,DOCEt_SEL,sc&SCF_SHIFT); |
|
doc_ce=doc->cur_entry=doc_ce->next; |
|
} |
|
doc->cur_col=doc_ce->min_col; |
|
DocFormBwd(doc); |
|
} |
|
} |
|
break; |
|
case SC_CURSOR_UP: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Cursor Up, Sel"); |
|
else |
|
KeyDescSet("Edit/Cursor Up"); |
|
} else |
|
EdLineUp(doc,sc); |
|
break; |
|
} else |
|
sc&=~SCF_CTRL; |
|
//Fall Through to SC_HOME |
|
case SC_HOME: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/GoTo Top of Doc, Sel"); |
|
else |
|
KeyDescSet("Edit/GoTo Top of Doc"); |
|
} else { |
|
if (doc_ce==doc) doc_ce=doc_ce->last; |
|
while (doc_ce!=doc) { |
|
BEqu(&doc_ce->type,DOCEt_SEL,sc&SCF_SHIFT); |
|
doc_ce=doc->cur_entry=doc_ce->last; |
|
} |
|
doc_ce=doc->cur_entry=doc->head.next; |
|
doc->cur_col=doc_ce->min_col; |
|
DocFormFwd(doc); |
|
} |
|
} |
|
break; |
|
case SC_PAGE_DOWN: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Page Down, Sel"); |
|
else |
|
KeyDescSet("Edit/Page Down"); |
|
} else { |
|
i=doc_ce->y+doc->win_task->win_height-1; |
|
if (doc_ce->type_u8==DOCT_HEX_ED) |
|
i+=doc->cur_col/3/doc_ce->hex_ed_width; |
|
while (doc_ce!=doc && |
|
(doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y<i || |
|
doc_ce->type_u8==DOCT_HEX_ED && |
|
doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width<i)) { |
|
EdLineDown(doc,sc); |
|
//paranoid check for stuck on same node |
|
if (doc->cur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED) |
|
break; |
|
doc_ce=doc->cur_entry; |
|
} |
|
} |
|
} |
|
break; |
|
case SC_PAGE_UP: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Page Up, Sel"); |
|
else |
|
KeyDescSet("Edit/Page Up"); |
|
}else { |
|
i=doc_ce->y-(doc->win_task->win_height-1); |
|
if (doc_ce->type_u8==DOCT_HEX_ED) |
|
i+=doc->cur_col/3/doc_ce->hex_ed_width; |
|
while (doc_ce->last!=doc && |
|
(doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y>i || |
|
doc_ce->type_u8==DOCT_HEX_ED && |
|
doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width>i) && |
|
doc_ce->y!=doc->head.next->y) { |
|
EdLineUp(doc,sc); |
|
//paranoid check for stuck on same node |
|
if (doc->cur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED) |
|
break; |
|
doc_ce=doc->cur_entry; |
|
} |
|
} |
|
} |
|
break; |
|
case SC_CURSOR_LEFT: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_CTRL) |
|
KeyDescSet("Edit/GoTo Start of Line"); |
|
else { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Cursor Left, Sel"); |
|
else |
|
KeyDescSet("Edit/Cursor Left"); |
|
} |
|
} else |
|
EdCursorLeft(doc,sc); |
|
break; |
|
case SC_CURSOR_RIGHT: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_CTRL) |
|
KeyDescSet("Edit/GoTo End of Line"); |
|
else { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Cursor Right, Sel"); |
|
else |
|
KeyDescSet("Edit/Cursor Right"); |
|
} |
|
} else |
|
EdCursorRight(doc,sc); |
|
break; |
|
case SC_DELETE: |
|
if (!(sc&SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Cut To Clip"); |
|
else |
|
KeyDescSet("Char /Delete"); |
|
} else { |
|
if (sc&SCF_SHIFT) |
|
ClipCut(doc); |
|
else |
|
EdCharDel(doc); |
|
} |
|
} |
|
break; |
|
case SC_INS: |
|
if (sc&(SCF_SHIFT|SCF_CTRL)!=(SCF_SHIFT|SCF_CTRL)) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Paste Clip"); |
|
else if (sc&SCF_CTRL) |
|
KeyDescSet("Edit/Copy to Clip"); |
|
else |
|
KeyDescSet("Edit/Toggle Overstrike"); |
|
} else { |
|
if (sc&SCF_SHIFT) |
|
ClipPaste(doc); |
|
else if (sc&SCF_CTRL) |
|
ClipCopy(doc); |
|
else |
|
doc->flags^=DOCF_OVERSTRIKE; |
|
} |
|
} |
|
break; |
|
case SC_F1...SC_F10: |
|
if (sc&SCF_CTRL) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /Src Code of Sym"); |
|
else |
|
KeyDescSet("Edit/Autocomplete Sym"); |
|
} else { |
|
DocUnlock(doc); |
|
if (AutoComplete(ON)) { |
|
if (sc&SCF_SHIFT) |
|
ACMan(sc.u8[0]-SC_F1+1,Fs); |
|
else |
|
ACFillIn(sc.u8[0]-SC_F1+1); |
|
} |
|
DocLock(doc); |
|
} |
|
} else { |
|
switch (sc.u8[0]) { |
|
case SC_F1: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /About"); |
|
else |
|
KeyDescSet("Cmd /Help"); |
|
} else { |
|
if (sc&SCF_SHIFT) |
|
Ed("::/Doc/AboutTempleOS.DD.Z"); |
|
else |
|
Ed("::/Doc/HelpIndex.DD.Z"); |
|
} |
|
break; |
|
case SC_F2: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Play Macro"); |
|
else |
|
KeyDescSet("Edit/Macro"); |
|
} else { |
|
DocUnlock(doc); |
|
if (sc&SCF_SHIFT) { |
|
if (TaskValidate(sys_macro_task)) |
|
PostMsgWait(sys_macro_task, |
|
MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); |
|
SysMacroStripKey(&sys_macro_head,ch,sc); |
|
PlaySysMacro; |
|
} else |
|
EdMacroUtil; |
|
DocLock(doc); |
|
} |
|
break; |
|
case SC_F3: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Edit/Find Last"); |
|
else |
|
KeyDescSet("Edit/Find Next"); |
|
}else { |
|
doc->find_replace->scan_fwd=!(sc&SCF_SHIFT); |
|
EdFindNext(doc); |
|
} |
|
break; |
|
case SC_F4: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /Insert Directory Name"); |
|
else |
|
KeyDescSet("Cmd /Insert FileName"); |
|
} else { |
|
DocUnlock(doc); |
|
if (sc&SCF_SHIFT) |
|
st=PopUpPickDir; |
|
else |
|
st=PopUpPickFile; |
|
DocLock(doc); |
|
if (st) { |
|
DocPrintPartial(doc,"%s",st); |
|
Free(st); |
|
} |
|
} |
|
break; |
|
case SC_F5: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /Adam Include"); |
|
else |
|
KeyDescSet("Cmd /Run (Execute)"); |
|
} else { |
|
if (st2=DocEntryLink(doc,doc_ce)) { |
|
st=DocLinkFile(st2); |
|
Free(st2); |
|
} else { |
|
DocWrite(doc); |
|
st=StrNew(doc->filename.name); |
|
} |
|
if (st2=DirFile(st,"Run","HC.Z")) { |
|
if (FileFind(st2)) { |
|
Free(st); |
|
st=st2; |
|
} else |
|
Free(st2); |
|
} |
|
if (st) { |
|
if (sc&SCF_SHIFT) |
|
AdamFile(st); |
|
else |
|
PopUpFile(st); |
|
Free(st); |
|
} |
|
} |
|
break; |
|
case SC_F6: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /God Doodle"); |
|
else |
|
KeyDescSet("Cmd /God Song"); |
|
} else { |
|
//$LK,"::/Adam/God/HSNotes.DD"$ |
|
if (sc&SCF_SHIFT) { |
|
DocUnlock(doc); |
|
GodDoodle; |
|
DocLock(doc); |
|
} else |
|
GodSong; |
|
} |
|
break; |
|
case SC_F7: |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /God Passage"); |
|
else |
|
KeyDescSet("Cmd /God Word"); |
|
} else { |
|
//$LK,"::/Adam/God/HSNotes.DD"$ |
|
FifoU8Flush(god.fifo); |
|
GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); |
|
if (sc&SCF_SHIFT) |
|
GodBiblePassage; |
|
else |
|
GodWord; |
|
} |
|
break; |
|
} |
|
} |
|
break; |
|
} |
|
break; |
|
case CH_CTRLA: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Save As"); |
|
else if (DocWrite(doc,TRUE)&&(st=FileNameAbs(doc->filename.name))) { |
|
DirContextDel(doc->filename.dirc); |
|
doc->filename.dirc=DirContextNew(st); |
|
Free(st); |
|
} |
|
} |
|
break; |
|
case CH_CTRLB: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Toggle Border"); |
|
else |
|
WinBorder(Bt(&doc->win_task->display_flags, |
|
DISPLAYf_NO_BORDER),doc->win_task); |
|
} |
|
break; |
|
case CH_CTRLC: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Copy to Clip"); |
|
else |
|
ClipCopy(doc); |
|
} |
|
break; |
|
case CH_CTRLD: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /File Manager"); |
|
else { |
|
DocUnlock(doc); |
|
FileMgr; |
|
DocLock(doc); |
|
} |
|
} |
|
break; |
|
case CH_CTRLF: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Search Files"); |
|
else |
|
FindWiz; |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Find & Replace"); |
|
else |
|
EdFindReplace(doc); |
|
} |
|
break; |
|
case CH_CTRLG: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/GoTo Line Num"); |
|
else |
|
EdGoToLine(doc); |
|
} |
|
break; |
|
case CH_BACKSPACE: //<CTRL-H> |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Char /Back Space"); |
|
else { |
|
DocCaptureUndo(doc); |
|
doc_ce=doc->cur_entry; |
|
if (doc->cur_col<=doc_ce->min_col) { |
|
doc_ce=doc->cur_entry=doc_ce->last; |
|
if (doc_ce!=doc && doc_ce->type_u8==DOCT_SOFT_NEW_LINE) |
|
doc_ce=doc->cur_entry=doc_ce->last; |
|
if (doc_ce==doc || doc_ce->type_u8==DOCT_PMT) { |
|
doc_ce=doc->cur_entry=doc_ce->next; |
|
doc->cur_col=doc_ce->min_col; |
|
} else { |
|
doc->cur_col=doc_ce->max_col; |
|
if (doc->cur_col>doc_ce->min_col) |
|
doc->cur_col--; |
|
EdCharDel(doc); |
|
} |
|
} else { |
|
doc->cur_col--; |
|
EdCharDel(doc); |
|
} |
|
} |
|
} |
|
break; |
|
case CH_CTRLI: |
|
if (sc.u8[0]!=SC_TAB) { |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Unindent 2"); |
|
else |
|
DocPrint(doc,"$$ID,-2$$"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Indent 2"); |
|
else |
|
DocPrint(doc,"$$ID,2$$"); |
|
} |
|
} |
|
break; |
|
case '\n': |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Char /Return"); |
|
else |
|
KeyDescSet("Char /Page Break"); |
|
} else |
|
EdCharIns(ch,sc,doc); |
|
break; |
|
case CH_CTRLK: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Blinking Text Off"); |
|
else |
|
DocPrint(doc,"$$BK,0$$"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Blinking Text On"); |
|
else |
|
DocPrint(doc,"$$BK,1$$"); |
|
} |
|
break; |
|
case CH_CTRLL: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Code Tools"); |
|
else { |
|
DocUnlock(doc); |
|
EdCodeTools(doc); |
|
DocLock(doc); |
|
} |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Insert Text Widgets Wizard"); |
|
else { |
|
DocUnlock(doc); |
|
EdInsWidgetWiz; |
|
DocLock(doc); |
|
} |
|
} |
|
break; |
|
case CH_CTRLM: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Personal Notes"); |
|
else |
|
Ed("~/PersonalNotes.DD.Z"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Personal Menu"); |
|
else { |
|
m=DocRead("~/PersonalMenu.DD.Z"); |
|
DocMenu(m); |
|
DocDel(m); |
|
} |
|
} |
|
break; |
|
case CH_CTRLO: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Collapse"); |
|
else |
|
DocCollapse(TRUE,doc); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Uncolapse"); |
|
else |
|
DocCollapse(FALSE,doc); |
|
} |
|
break; |
|
case CH_CTRLP: |
|
if (doc->flags & (DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Toggle Super or Sub script"); |
|
else { |
|
DocPrint(doc,"$$SY,0$$"); |
|
doc->flags&=~(DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE); |
|
} |
|
} else if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Toggle Subscript"); |
|
else { |
|
DocPrint(doc,"$$SY,3$$"); |
|
doc->flags|=DOCF_SUBSCRIPT_MODE; |
|
} |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Toggle Superscript"); |
|
else { |
|
DocPrint(doc,"$$SY,-3$$"); |
|
doc->flags|=DOCF_SUPERSCRIPT_MODE; |
|
} |
|
} |
|
break; |
|
case CH_CTRLQ: |
|
break; |
|
case CH_CTRLR: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Cmd /Sprite Graphic Resource"); |
|
else |
|
if (!(doc->flags&DOCF_FORM) && |
|
!(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS))) { |
|
DocUnlock(doc); |
|
if (doc_ce->type_u8==DOCT_SPRITE) |
|
EdSpriteEd(doc); |
|
else |
|
EdSpriteIns(doc); |
|
DocLock(doc); |
|
} |
|
} |
|
break; |
|
case CH_CTRLS: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Find Misspelled"); |
|
else |
|
ACMisspelledFind(doc); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Save"); |
|
else |
|
DocWrite(doc); |
|
} |
|
break; |
|
case CH_CTRLT: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Single Entry Toggle Plain Text"); |
|
else if (!(doc->flags&DOCF_FORM)) |
|
DocEntryToggle(doc); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Toggle Plain Text Display"); |
|
else if (!(doc->flags&DOCF_FORM)) |
|
DocFlagsToggle(doc,DOCF_PLAIN_TEXT); |
|
} |
|
break; |
|
case CH_CTRLU: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Underline Off"); |
|
else |
|
DocPrint(doc,"$$UL,0$$"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Underline On"); |
|
else |
|
DocPrint(doc,"$$UL,1$$"); |
|
} |
|
break; |
|
case CH_CTRLV: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Paste Clip"); |
|
else |
|
ClipPaste(doc); |
|
} |
|
break; |
|
case CH_CTRLW: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Word Wrap Off"); |
|
else |
|
DocPrint(doc,"$$WW,0$$"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Word Wrap On"); |
|
else |
|
DocPrint(doc,"$$WW,1$$"); |
|
} |
|
break; |
|
case CH_CTRLX: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Cut To Clip"); |
|
else |
|
ClipCut(doc); |
|
} |
|
break; |
|
case CH_CTRLY: |
|
if (!(sc&SCF_SHIFT)) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/Delete Line"); |
|
else |
|
EdLineDel(doc); |
|
} |
|
break; |
|
case CH_CTRLZ: |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Inverted Text Off"); |
|
else |
|
DocPrint(doc,"$$IV,0$$"); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Dol /Inverted Text On"); |
|
else |
|
DocPrint(doc,"$$IV,1$$"); |
|
} |
|
break; |
|
case '0'...'9': |
|
if (sc&SCF_CTRL) { |
|
if (sc&SCF_KEY_DESC) { |
|
if (sc&SCF_SHIFT) |
|
KeyDescSet("Cmd /Word Definition"); |
|
else |
|
KeyDescSet("Edit/Autocomplete Word"); |
|
} else { |
|
if (AutoComplete(ON)) { |
|
DocUnlock(doc); |
|
if (sc&SCF_SHIFT) |
|
ACDDef(ch-'0',Fs); |
|
else |
|
ACDFillin(ch-'0'); |
|
DocLock(doc); |
|
} |
|
} |
|
} |
|
break; |
|
case '[': |
|
if (sc&SCF_CTRL) { |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/GoTo matching brace"); |
|
else |
|
EdFindPaired(doc,'}','{',FALSE); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/GoTo matching bracket"); |
|
else |
|
EdFindPaired(doc,']','[',FALSE); |
|
} |
|
} |
|
break; |
|
case ']': |
|
if (sc&SCF_CTRL) { |
|
if (sc&SCF_SHIFT) { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/GoTo matching brace"); |
|
else |
|
EdFindPaired(doc,'{','}',TRUE); |
|
} else { |
|
if (sc&SCF_KEY_DESC) |
|
KeyDescSet("Edit/GoTo matching bracket"); |
|
else |
|
EdFindPaired(doc,'[',']',TRUE); |
|
} |
|
} |
|
break; |
|
} |
|
} |
|
if (unlock) |
|
DocUnlock(doc); |
|
if (!(doc->flags&DOCF_DONT_SWAP_OUT)) |
|
Yield; |
|
} |
|
|
|
Bool KDDocPutKey(I64 ch,I64 scan_code) |
|
{ |
|
CDoc *doc; |
|
if (doc=DocPut) |
|
DocPutKey(doc,ch,scan_code); |
|
return FALSE; |
|
}
|
|
|