forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathemacs.js
More file actions
1 lines (1 loc) · 11.7 KB
/
Copy pathemacs.js
File metadata and controls
1 lines (1 loc) · 11.7 KB
1
!function(mod){"object"==typeof exports&&"object"==typeof module?mod(require("../lib/codemirror")):"function"==typeof define&&define.amd?define(["../lib/codemirror"],mod):mod(CodeMirror)}(function(CodeMirror){"use strict";var cmds=CodeMirror.commands,Pos=CodeMirror.Pos;function posEq(a,b){return a.line==b.line&&a.ch==b.ch}var killRing=[];function addToRing(str){killRing.push(str),killRing.length>50&&killRing.shift()}function growRingTop(str){if(!killRing.length)return addToRing(str);killRing[killRing.length-1]+=str}function getFromRing(n){return killRing[killRing.length-(n?Math.min(n,1):1)]||""}function popFromRing(){return killRing.length>1&&killRing.pop(),getFromRing()}var lastKill=null;function _kill(cm,from,to,ring,text){null==text&&(text=cm.getRange(from,to)),"grow"==ring&&lastKill&&lastKill.cm==cm&&posEq(from,lastKill.pos)&&cm.isClean(lastKill.gen)?growRingTop(text):!1!==ring&&addToRing(text),cm.replaceRange("",from,to,"+delete"),lastKill="grow"==ring?{cm:cm,pos:from,gen:cm.changeGeneration()}:null}function byChar(cm,pos,dir){return cm.findPosH(pos,dir,"char",!0)}function byWord(cm,pos,dir){return cm.findPosH(pos,dir,"word",!0)}function byLine(cm,pos,dir){return cm.findPosV(pos,dir,"line",cm.doc.sel.goalColumn)}function byPage(cm,pos,dir){return cm.findPosV(pos,dir,"page",cm.doc.sel.goalColumn)}function byParagraph(cm,pos,dir){for(var no=pos.line,line=cm.getLine(no),sawText=/\S/.test(dir<0?line.slice(0,pos.ch):line.slice(pos.ch)),fst=cm.firstLine(),lst=cm.lastLine();;){if((no+=dir)<fst||no>lst)return cm.clipPos(Pos(no-dir,dir<0?0:null));var hasText;if(line=cm.getLine(no),/\S/.test(line))sawText=!0;else if(sawText)return Pos(no,0)}}function bySentence(cm,pos,dir){for(var line=pos.line,ch=pos.ch,text=cm.getLine(pos.line),sawWord=!1;;){var next=text.charAt(ch+(dir<0?-1:0));if(next){if(sawWord&&/[!?.]/.test(next))return Pos(line,ch+(dir>0?1:0));sawWord||(sawWord=/\w/.test(next)),ch+=dir}else{if(line==(dir<0?cm.firstLine():cm.lastLine()))return Pos(line,ch);if(text=cm.getLine(line+dir),!/\S/.test(text))return Pos(line,ch);line+=dir,ch=dir<0?text.length:0}}}function byExpr(cm,pos,dir){var wrap;if(cm.findMatchingBracket&&(wrap=cm.findMatchingBracket(pos,{strict:!0}))&&wrap.match&&(wrap.forward?1:-1)==dir)return dir>0?Pos(wrap.to.line,wrap.to.ch+1):wrap.to;for(var first=!0;;first=!1){var token=cm.getTokenAt(pos),after=Pos(pos.line,dir<0?token.start:token.end);if(!(first&&dir>0&&token.end==pos.ch)&&/\w/.test(token.string))return after;var newPos=cm.findPosH(after,dir,"char");if(posEq(after,newPos))return pos;pos=newPos}}function getPrefix(cm,precise){var digits=cm.state.emacsPrefix;return digits?(clearPrefix(cm),"-"==digits?-1:Number(digits)):precise?null:1}function repeated(cmd){var f="string"==typeof cmd?function(cm){cm.execCommand(cmd)}:cmd;return function(cm){var prefix=getPrefix(cm);f(cm);for(var i=1;i<prefix;++i)f(cm)}}function findEnd(cm,pos,by,dir){var prefix=getPrefix(cm);prefix<0&&(dir=-dir,prefix=-prefix);for(var i=0;i<prefix;++i){var newPos=by(cm,pos,dir);if(posEq(newPos,pos))break;pos=newPos}return pos}function move(by,dir){var f=function(cm){cm.extendSelection(findEnd(cm,cm.getCursor(),by,dir))};return f.motion=!0,f}function killTo(cm,by,dir,ring){for(var selections=cm.listSelections(),cursor,i=selections.length;i--;)_kill(cm,cursor=selections[i].head,findEnd(cm,cursor,by,dir),ring)}function _killRegion(cm,ring){if(cm.somethingSelected()){for(var selections=cm.listSelections(),selection,i=selections.length;i--;)_kill(cm,(selection=selections[i]).anchor,selection.head,ring);return!0}}function addPrefix(cm,digit){cm.state.emacsPrefix?"-"!=digit&&(cm.state.emacsPrefix+=digit):(cm.state.emacsPrefix=digit,cm.on("keyHandled",maybeClearPrefix),cm.on("inputRead",maybeDuplicateInput))}var prefixPreservingKeys={"Alt-G":!0,"Ctrl-X":!0,"Ctrl-Q":!0,"Ctrl-U":!0};function maybeClearPrefix(cm,arg){cm.state.emacsPrefixMap||prefixPreservingKeys.hasOwnProperty(arg)||clearPrefix(cm)}function clearPrefix(cm){cm.state.emacsPrefix=null,cm.off("keyHandled",maybeClearPrefix),cm.off("inputRead",maybeDuplicateInput)}function maybeDuplicateInput(cm,event){var dup=getPrefix(cm);if(dup>1&&"+input"==event.origin){for(var one=event.text.join("\n"),txt="",i=1;i<dup;++i)txt+=one;cm.replaceSelection(txt)}}function maybeRemovePrefixMap(cm,arg){("string"!=typeof arg||!/^\d$/.test(arg)&&"Ctrl-U"!=arg)&&(cm.removeKeyMap(prefixMap),cm.state.emacsPrefixMap=!1,cm.off("keyHandled",maybeRemovePrefixMap),cm.off("inputRead",maybeRemovePrefixMap))}function clearMark(cm){cm.setExtending(!1),cm.setCursor(cm.getCursor())}function makePrompt(msg){var fragment=document.createDocumentFragment(),input=document.createElement("input");return input.setAttribute("type","text"),input.style.width="10em",fragment.appendChild(document.createTextNode(msg+": ")),fragment.appendChild(input),fragment}function getInput(cm,msg,f){cm.openDialog?cm.openDialog(makePrompt(msg),f,{bottom:!0}):f(prompt(msg,""))}function operateOnWord(cm,op){var start=cm.getCursor(),end=cm.findPosH(start,1,"word");cm.replaceRange(op(cm.getRange(start,end)),start,end),cm.setCursor(end)}function toEnclosingExpr(cm){for(var pos=cm.getCursor(),line=pos.line,ch=pos.ch,stack=[];line>=cm.firstLine();){for(var text=cm.getLine(line),i=null==ch?text.length:ch;i>0;){var ch;if(")"==(ch=text.charAt(--i)))stack.push("(");else if("]"==ch)stack.push("[");else if("}"==ch)stack.push("{");else if(/[\(\{\[]/.test(ch)&&(!stack.length||stack.pop()!=ch))return cm.extendSelection(Pos(line,i))}--line,ch=null}}cmds.setMark=function(cm){cm.setCursor(cm.getCursor()),cm.setExtending(!cm.getExtending()),cm.on("change",function(){cm.setExtending(!1)})},cmds.killRegion=function(cm){_kill(cm,cm.getCursor("start"),cm.getCursor("end"),!0)},cmds.killLineEmacs=repeated(function(cm){var start=cm.getCursor(),end=cm.clipPos(Pos(start.line)),text=cm.getRange(start,end);/\S/.test(text)||(text+="\n",end=Pos(start.line+1,0)),_kill(cm,start,end,"grow",text)}),cmds.killRingSave=function(cm){addToRing(cm.getSelection()),clearMark(cm)},cmds.yank=function(cm){var start=cm.getCursor();cm.replaceRange(getFromRing(getPrefix(cm)),start,start,"paste"),cm.setSelection(start,cm.getCursor())},cmds.yankPop=function(cm){cm.replaceSelection(popFromRing(),"around","paste")},cmds.forwardChar=move(byChar,1),cmds.backwardChar=move(byChar,-1),cmds.deleteChar=function(cm){killTo(cm,byChar,1,!1)},cmds.deleteForwardChar=function(cm){_killRegion(cm,!1)||killTo(cm,byChar,1,!1)},cmds.deleteBackwardChar=function(cm){_killRegion(cm,!1)||killTo(cm,byChar,-1,!1)},cmds.forwardWord=move(byWord,1),cmds.backwardWord=move(byWord,-1),cmds.killWord=function(cm){killTo(cm,byWord,1,"grow")},cmds.backwardKillWord=function(cm){killTo(cm,byWord,-1,"grow")},cmds.nextLine=move(byLine,1),cmds.previousLine=move(byLine,-1),cmds.scrollDownCommand=move(byPage,-1),cmds.scrollUpCommand=move(byPage,1),cmds.backwardParagraph=move(byParagraph,-1),cmds.forwardParagraph=move(byParagraph,1),cmds.backwardSentence=move(bySentence,-1),cmds.forwardSentence=move(bySentence,1),cmds.killSentence=function(cm){killTo(cm,bySentence,1,"grow")},cmds.backwardKillSentence=function(cm){_kill(cm,cm.getCursor(),bySentence(cm,cm.getCursor(),1),"grow")},cmds.killSexp=function(cm){killTo(cm,byExpr,1,"grow")},cmds.backwardKillSexp=function(cm){killTo(cm,byExpr,-1,"grow")},cmds.forwardSexp=move(byExpr,1),cmds.backwardSexp=move(byExpr,-1),cmds.markSexp=function(cm){var cursor=cm.getCursor();cm.setSelection(findEnd(cm,cursor,byExpr,1),cursor)},cmds.transposeSexps=function(cm){var leftStart=byExpr(cm,cm.getCursor(),-1),leftEnd=byExpr(cm,leftStart,1),rightEnd=byExpr(cm,leftEnd,1),rightStart=byExpr(cm,rightEnd,-1);cm.replaceRange(cm.getRange(rightStart,rightEnd)+cm.getRange(leftEnd,rightStart)+cm.getRange(leftStart,leftEnd),leftStart,rightEnd)},cmds.backwardUpList=repeated(toEnclosingExpr),cmds.justOneSpace=function(cm){for(var pos=cm.getCursor(),from=pos.ch,to=pos.ch,text=cm.getLine(pos.line);from&&/\s/.test(text.charAt(from-1));)--from;for(;to<text.length&&/\s/.test(text.charAt(to));)++to;cm.replaceRange(" ",Pos(pos.line,from),Pos(pos.line,to))},cmds.openLine=repeated(function(cm){cm.replaceSelection("\n","start")}),cmds.transposeCharsRepeatable=repeated(function(cm){cm.execCommand("transposeChars")}),cmds.capitalizeWord=repeated(function(cm){operateOnWord(cm,function(w){var letter=w.search(/\w/);return-1==letter?w:w.slice(0,letter)+w.charAt(letter).toUpperCase()+w.slice(letter+1).toLowerCase()})}),cmds.upcaseWord=repeated(function(cm){operateOnWord(cm,function(w){return w.toUpperCase()})}),cmds.downcaseWord=repeated(function(cm){operateOnWord(cm,function(w){return w.toLowerCase()})}),cmds.undoRepeatable=repeated("undo"),cmds.keyboardQuit=function(cm){cm.execCommand("clearSearch"),clearMark(cm)},cmds.newline=repeated(function(cm){cm.replaceSelection("\n","end")}),cmds.gotoLine=function(cm){var prefix=getPrefix(cm,!0);if(null!=prefix&&prefix>0)return cm.setCursor(prefix-1);getInput(cm,"Goto line",function(str){var num;str&&!isNaN(num=Number(str))&&num==(0|num)&&num>0&&cm.setCursor(num-1)})},cmds.indentRigidly=function(cm){cm.indentSelection(getPrefix(cm,!0)||cm.getOption("indentUnit"))},cmds.exchangePointAndMark=function(cm){cm.setSelection(cm.getCursor("head"),cm.getCursor("anchor"))},cmds.quotedInsertTab=repeated("insertTab"),cmds.universalArgument=function addPrefixMap(cm){cm.state.emacsPrefixMap=!0,cm.addKeyMap(prefixMap),cm.on("keyHandled",maybeRemovePrefixMap),cm.on("inputRead",maybeRemovePrefixMap)},CodeMirror.emacs={kill:_kill,killRegion:_killRegion,repeated:repeated};var keyMap=CodeMirror.keyMap.emacs=CodeMirror.normalizeKeyMap({"Ctrl-W":"killRegion","Ctrl-K":"killLineEmacs","Alt-W":"killRingSave","Ctrl-Y":"yank","Alt-Y":"yankPop","Ctrl-Space":"setMark","Ctrl-Shift-2":"setMark","Ctrl-F":"forwardChar","Ctrl-B":"backwardChar",Right:"forwardChar",Left:"backwardChar","Ctrl-D":"deleteChar",Delete:"deleteForwardChar","Ctrl-H":"deleteBackwardChar",Backspace:"deleteBackwardChar","Alt-F":"forwardWord","Alt-B":"backwardWord","Alt-Right":"forwardWord","Alt-Left":"backwardWord","Alt-D":"killWord","Alt-Backspace":"backwardKillWord","Ctrl-N":"nextLine","Ctrl-P":"previousLine",Down:"nextLine",Up:"previousLine","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd",End:"goLineEnd",Home:"goLineStart","Alt-V":"scrollDownCommand","Ctrl-V":"scrollUpCommand",PageUp:"scrollDownCommand",PageDown:"scrollUpCommand","Ctrl-Up":"backwardParagraph","Ctrl-Down":"forwardParagraph","Alt-{":"backwardParagraph","Alt-}":"forwardParagraph","Alt-A":"backwardSentence","Alt-E":"forwardSentence","Alt-K":"killSentence","Ctrl-X Delete":"backwardKillSentence","Ctrl-Alt-K":"killSexp","Ctrl-Alt-Backspace":"backwardKillSexp","Ctrl-Alt-F":"forwardSexp","Ctrl-Alt-B":"backwardSexp","Shift-Ctrl-Alt-2":"markSexp","Ctrl-Alt-T":"transposeSexps","Ctrl-Alt-U":"backwardUpList","Alt-Space":"justOneSpace","Ctrl-O":"openLine","Ctrl-T":"transposeCharsRepeatable","Alt-C":"capitalizeWord","Alt-U":"upcaseWord","Alt-L":"downcaseWord","Alt-;":"toggleComment","Ctrl-/":"undoRepeatable","Shift-Ctrl--":"undoRepeatable","Ctrl-Z":"undoRepeatable","Cmd-Z":"undoRepeatable","Ctrl-X U":"undoRepeatable","Shift-Ctrl-Z":"redo","Shift-Alt-,":"goDocStart","Shift-Alt-.":"goDocEnd","Ctrl-S":"findPersistentNext","Ctrl-R":"findPersistentPrev","Ctrl-G":"keyboardQuit","Shift-Alt-5":"replace","Alt-/":"autocomplete",Enter:"newlineAndIndent","Ctrl-J":"newline",Tab:"indentAuto","Alt-G G":"gotoLine","Ctrl-X Tab":"indentRigidly","Ctrl-X Ctrl-X":"exchangePointAndMark","Ctrl-X Ctrl-S":"save","Ctrl-X Ctrl-W":"save","Ctrl-X S":"saveAll","Ctrl-X F":"open","Ctrl-X K":"close","Ctrl-X H":"selectAll","Ctrl-Q Tab":"quotedInsertTab","Ctrl-U":"universalArgument",fallthrough:"default"}),prefixMap={"Ctrl-G":clearPrefix};function regPrefix(d){prefixMap[d]=function(cm){addPrefix(cm,d)},keyMap["Ctrl-"+d]=function(cm){addPrefix(cm,d)},prefixPreservingKeys["Ctrl-"+d]=!0}for(var i=0;i<10;++i)regPrefix(String(i));regPrefix("-")});