diff --git a/ASP/ASP.tmLanguage b/ASP/ASP.tmLanguage
new file mode 100644
index 0000000..b519757
--- /dev/null
+++ b/ASP/ASP.tmLanguage
@@ -0,0 +1,214 @@
+
+
+
+
+ comment
+ ASP SCRIPTING DICTIONARY – By Rich Barton: Version 1.0 (based on PHP Scripting Dictionary by Justin French, Sune Foldager and Allan Odgaard) Note: .asp is handled by asp/html
+ fileTypes
+
+ asa
+
+ foldingStartMarker
+ (?i)^\s*(Public|Private)?\s*(Class|Function|Sub|Property)\s*([a-zA-Z_]\w*)\s*(\(.*\)\s*)?$
+ foldingStopMarker
+ (?i)^\s*End (Class|Function|Sub|Property)\s*$
+ keyEquivalent
+ ^~A
+ name
+ ASP
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.function.asp
+
+ 2
+
+ name
+ entity.name.function.asp
+
+ 3
+
+ name
+ punctuation.definition.parameters.asp
+
+ 4
+
+ name
+ variable.parameter.function.asp
+
+ 5
+
+ name
+ punctuation.definition.parameters.asp
+
+
+ match
+ ^\s*((?i:function|sub))\s*([a-zA-Z_]\w*)\s*(\()([^)]*)(\)).*\n?
+ name
+ meta.function.asp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (').*$\n?
+ name
+ comment.line.apostrophe.asp
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (REM ).*$\n?
+ name
+ comment.line.rem.asp
+
+
+ match
+ (?i:\b(If|Then|Else|ElseIf|End If|While|Wend|For|To|Each|In|Step|Case|Select|End Select|Return|Continue|Do|Until|Loop|Next|With|Exit Do|Exit For|Exit Function|Exit Property|Exit Sub)\b)
+ name
+ keyword.control.asp
+
+
+ match
+ =|>=|<|>|<|<>|\+|-|\*|\^|&|\b(?i:(Mod|And|Not|Or|Xor|Is))\b
+ name
+ keyword.operator.asp
+
+
+ match
+ (?i:\b(Call|Class|Const|Dim|Redim|Function|Sub|Property|End Property|End sub|End Function|Set|Let|Get|New|Randomize|Option Explicit|On Error Resume Next|On Error GoTo)\b)
+ name
+ storage.type.asp
+
+
+ match
+ (?i:\b(Private|Public|Default)\b)
+ name
+ storage.modifier.asp
+
+
+ match
+ (?i:\b(Empty|False|Nothing|Null|True)\b)
+ name
+ constant.language.asp
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.asp
+
+
+ end
+ "(?!")
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.asp
+
+
+ name
+ string.quoted.double.asp
+ patterns
+
+
+ match
+ ""
+ name
+ constant.character.escape.apostrophe.asp
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.variable.asp
+
+
+ match
+ (\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\b
+ name
+ variable.other.asp
+
+
+ match
+ (?i:\b(Application|ObjectContext|Request|Response|Server|Session)\b)
+ name
+ support.class.asp
+
+
+ match
+ (?i:\b(Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables)\b)
+ name
+ support.class.collection.asp
+
+
+ match
+ (?i:\b(TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout)\b)
+ name
+ support.constant.asp
+
+
+ match
+ (?i:\b(Lock|Unlock|SetAbort|SetComplete|BianryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon)\b)
+ name
+ support.function.asp
+
+
+ match
+ (?i:\b(Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart|Class_Initialize|Class_Terminate)\b)
+ name
+ support.function.event.asp
+
+
+ match
+ (?i:\b(Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year)\b)
+ name
+ support.function.vb.asp
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\b
+ name
+ constant.numeric.asp
+
+
+ match
+ (?i:\b(vbtrue|fvbalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray)\b)
+ name
+ support.type.vb.asp
+
+
+ scopeName
+ source.asp
+ uuid
+ 291022B4-6B1D-11D9-90EB-000D93589AF6
+
+
diff --git a/ASP/ASP.tmLanguage.cache b/ASP/ASP.tmLanguage.cache
new file mode 100644
index 0000000..36f24d8
Binary files /dev/null and b/ASP/ASP.tmLanguage.cache differ
diff --git a/ASP/HTML-ASP.tmLanguage b/ASP/HTML-ASP.tmLanguage
new file mode 100644
index 0000000..b2b8aa8
--- /dev/null
+++ b/ASP/HTML-ASP.tmLanguage
@@ -0,0 +1,74 @@
+
+
+
+
+ fileTypes
+
+ asp
+
+ foldingStartMarker
+ (<(?i:(head|table|div|style|script|ul|ol|form|dl))\b.*?>|\{)
+ foldingStopMarker
+ (</(?i:(head|table|div|style|script|ul|ol|form|dl))>|\})
+ keyEquivalent
+ ^~A
+ name
+ HTML (ASP)
+ patterns
+
+
+ begin
+ <%=?
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.asp
+
+
+ end
+ %>
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.asp
+
+
+ name
+ source.asp.embedded.html
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.asp
+
+
+ match
+ (').*?(?=%>)
+ name
+ comment.line.apostrophe.asp
+
+
+ include
+ source.asp
+
+
+
+
+ include
+ text.html.basic
+
+
+ scopeName
+ text.html.asp
+ uuid
+ 27798CC6-6B1D-11D9-B8FA-000D93589AF6
+
+
diff --git a/ASP/HTML-ASP.tmLanguage.cache b/ASP/HTML-ASP.tmLanguage.cache
new file mode 100644
index 0000000..1468442
Binary files /dev/null and b/ASP/HTML-ASP.tmLanguage.cache differ
diff --git a/ActionScript/ActionScript.tmLanguage b/ActionScript/ActionScript.tmLanguage
new file mode 100644
index 0000000..a407771
--- /dev/null
+++ b/ActionScript/ActionScript.tmLanguage
@@ -0,0 +1,267 @@
+
+
+
+
+ fileTypes
+
+ as
+
+ foldingStartMarker
+ (/\*\*|\{\s*$)
+ foldingStopMarker
+ (\*\*/|^\s*\})
+ keyEquivalent
+ ^~A
+ name
+ ActionScript
+ patterns
+
+
+ match
+ \b(R(ecordset|DBMSResolver|adioButton(Group)?)|X(ML(Socket|Node|Connector)?|UpdateResolverDataHolder)|M(M(Save|Execute)|icrophoneMicrophone|o(use|vieClip(Loader)?)|e(nu(Bar)?|dia(Controller|Display|Playback))|ath)|B(yName|inding|utton)|S(haredObject|ystem|crollPane|t(yleSheet|age|ream)|ound|e(ndEvent|rviceObject)|OAPCall|lide)|N(umericStepper|et(stream|S(tream|ervices)|Connection|Debug(Config)?))|C(heckBox|o(ntextMenu(Item)?|okie|lor|m(ponentMixins|boBox))|ustomActions|lient|amera)|T(ypedValue|ext(Snapshot|Input|F(ield|ormat)|Area)|ree|AB)|Object|D(ownload|elta(Item|Packet)?|at(e(Chooser|Field)?|a(G(lue|rid)|Set|Type)))|U(RL|TC|IScrollBar)|P(opUpManager|endingCall|r(intJob|o(duct|gressBar)))|E(ndPoint|rror)|Video|Key|F(RadioButton|GridColumn|MessageBox|BarChart|S(croll(Bar|Pane)|tyleFormat|plitView)|orm|C(heckbox|omboBox|alendar)|unction|T(icker|ooltip(Lite)?|ree(Node)?)|IconButton|D(ataGrid|raggablePane)|P(ieChart|ushButton|ro(gressBar|mptBox))|L(i(stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(indow|SDLURL|ebService(Connector)?)|L(ist|o(calConnection|ad(er|Vars)|g)|a(unch|bel))|A(sBroadcaster|cc(ordion|essibility)|S(Set(Native|PropFlags)|N(ew|ative)|C(onstructor|lamp(2)?)|InstanceOf)|pplication|lert|rray))\b
+ name
+ support.class.actionscript.2
+
+
+ match
+ \b(s(h(ift|ow(GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(ow|ePane))|c(hema|ale(X|Mode|Y|Content)|r(oll(Track|Drag)?|een(Resolution|Color|DPI)))|t(yleSheet|op(Drag|A(nimation|llSounds|gent))?|epSize|a(tus|rt(Drag|A(nimation|gent))?))|i(n|ze|lence(TimeOut|Level))|o(ngname|urce|rt(Items(By)?|On(HeaderRelease)?|able(Columns)?)?)|u(ppressInvalidCalls|bstr(ing)?)|p(li(ce|t)|aceCol(umnsEqually|lumnsEqually))|e(nd(DefaultPushButtonEvent|AndLoad)?|curity|t(R(GB|o(otNode|w(Height|Count))|esizable(Columns)?|a(nge|te))|G(ain|roupName)|X(AxisTitle)?|M(i(n(imum|utes)|lliseconds)|o(nth(Names)?|tionLevel|de)|ultilineMode|e(ssage|nu(ItemEnabled(At)?|EnabledAt)|dia)|a(sk|ximum))|B(u(tton(s|Width)|fferTime)|a(seTabIndex|ndwidthLimit|ckground))|S(howAsDisabled|croll(ing|Speed|Content|Target|P(osition|roperties)|barState|Location)|t(yle(Property)?|opOnFocus|at(us|e))|i(ze|lenceLevel)|ort(able(Columns)?|Function)|p(litterBarPosition|acing)|e(conds|lect(Multiple|ion(Required|Type)?|Style|Color|ed(Node(s)?|Cell|I(nd(ices|ex)|tem(s)?))?|able))|kin|m(oothness|allScroll))|H(ighlight(s|Color)|Scroll|o(urs|rizontal)|eader(Symbol|Height|Text|Property|Format|Width|Location)?|as(Shader|CloseBox))|Y(ear|AxisTitle)?|N(ode(Properties|ExpansionHandler)|ewTextFormat)|C(h(ildNodes|a(ngeHandler|rt(Title|EventHandler)))|o(ntent(Size)?|okie|lumns)|ell(Symbol|Data)|l(i(ckHandler|pboard)|oseHandler)|redentials)|T(ype(dVaule)?|i(tle(barHeight)?|p(Target|Offset)?|me(out(Handler)?)?)|oggle|extFormat|ransform)|I(s(Branch|Open)|n(terval|putProperty)|con(SymbolName)?|te(rator|m(ByKey|Symbol)))|Orientation|D(i(splay(Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(pth(Below|To|Above)|fault(GatewayURL|Mappings|NodeIconSymbolName)|l(iveryMode|ay)|bug(ID)?)|a(yOfWeekNames|t(e(Filter)?|a(Mapping(s)?|Item(Text|Property|Format)|Provider|All(Height|Property|Format|Width))?))|ra(wConnectors|gContent))|U(se(Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(osition|ercentComplete|an(e(M(inimumSize|aximumSize)|Size|Title))?|ro(pert(y(Data)?|iesAt)|gress))|E(nabled|dit(Handler|able)|xpand(NodeTrigger|erSymbolName))|V(Scroll|olume|alue(Source)?)|KeyFrameInterval|Quality|F(i(eld|rst(DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(InLength|OutLength)|rame(Color|Width))|Width|L(ine(Color|Weight)|o(opback|adTarget)|a(rgeScroll|bel(Source|Placement)?))|A(s(Boolean|String|Number)|n(yTypedValue|imation)|ctiv(e(State(Handler)?|Handler)|ateHandler)|utoH(ideScrollBar|eight)))?|paratorBefore|ek|lect(ion(Disabled|Unfocused)?|ed(Node(s)?|Child|I(nd(ices|ex)|tem(s)?)|Dat(e|a))?|able(Ranges)?)|rver(String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(scroll(Policy)?|tml(Text)?|i(t(Test(TextNearPos)?|Area)|de(BuiltInItems|Child)?|ghlight(2D|3D)?)|orizontal|e(ight|ader(Re(nderer|lease)|Height|Text))|P(osition|ageScrollSize)|a(s(childNodes|MP3|S(creen(Broadcast|Playback)|treaming(Video|Audio)|ort)|Next|OwnProperty|Pr(inting|evious)|EmbeddedVideo|VideoEncoder|A(ccesibility|udio(Encoder)?))|ndlerName)|LineScrollSize)|ye(sLabel|ar)|n(o(t|de(Name|Close|Type|Open|Value)|Label)|u(llValue|mChild(S(creens|lides)|ren|Forms))|e(w(Item|line|Value|LocationDialog)|xt(S(cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(s)?)|c(h(ildNodes|eck|a(nge(sPending)?|r(CodeAt|At))|r)|o(s|n(st(ant|ructor)|nect|c(urrency|at)|t(ent(Type|Path)?|ains|rol(Placement|lerPolicy))|denseWhite|version)|py|l(or|umn(Stretch|Name(s)?|Count))|m(p(onent|lete)|ment))|u(stomItems|ePoint(s)?|r(veTo|Value|rent(Slide|ChildSlide|Item|F(ocused(S(creen|lide)|Form)|ps))))|e(il|ll(Renderer|Press|Edit|Focus(In|Out)))|l(i(ck|ents)|o(se(Button|Pane)?|ne(Node)?)|ear(S(haredObjects|treams)|Timeout|Interval)?)|a(ncelLabel|tch|p(tion|abilities)|l(cFields|l(e(e|r))?))|reate(GatewayConnection|Menu|Se(rver|gment)|C(hild(AtDepth)?|l(ient|ass(ChildAtDepth|Object(AtDepth)?))|all)|Text(Node|Field)|Item|Object(AtDepth)?|PopUp|E(lement|mptyMovieClip)))|t(h(is|row)|ype(of|Name)?|i(tle(StyleDeclaration)?|me(out)?)|o(talTime|String|olTipText|p|UpperCase|ggle(HighQuality)?|Lo(caleString|werCase))|e(st|llTarget|xt(RightMargin|Bold|S(ize|elected)|Height|Color|I(ndent|talic)|Disabled|Underline|F(ield|ont)|Width|LeftMargin|Align)?)|a(n|rget(Path)?|b(Stops|Children|Index|Enabled|leName))|r(y|igger|ac(e|k(AsMenu)?)))|i(s(Running|Branch|NaN|Con(soleOpen|nected)|Toggled|Installed|Open|D(own|ebugger)|P(urchased|ro(totypeOf|pertyEnumerable))|Empty|F(inite|ullyPopulated)|Local|Active)|n(s(tall|ertBefore)|cludeDeltaPacketInfo|t|it(ialize|Component|Pod|A(pplication|gent))?|de(nt|terminate|x(InParent(Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(F(ield|unction))?|t(e(ratorScrolled|m(s|RollO(ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(Case|White))|o(s|n(R(ollO(ut|ver)|e(s(ize|ult)|l(ease(Outside)?|aseOutside)))|XML|Mouse(Move|Down|Up|Wheel)|S(ync|croller|tatus|oundComplete|e(tFocus|lect(edItem)?))|N(oticeEvent|etworkChange)|C(hanged|onnect|l(ipEvent|ose))|ID3|D(isconnect|eactivate|ata|ragO(ut|ver))|Un(install|load)|P(aymentResult|ress)|EnterFrame|K(illFocus|ey(Down|Up))|Fault|Lo(ad|g)|A(ctiv(ity|ate)|ppSt(op|art)))?|pe(n|ration)|verLayChildren|kLabel|ldValue|r(d)?)|d(i(s(connect|play(Normal|ed(Month|Year)|Full)|able(Shader|d(Ranges|Days)|CloseBox|Events))|rection)|o(cTypeDecl|tall|Decoding|main|LazyDecoding)|u(plicateMovieClip|ration)|e(stroy(ChildAt|Object)|code|fault(PushButton(Enabled)?|KeydownHandler)?|l(ta(Packet(Changed)?)?|ete(PopUp|All)?)|blocking)|a(shBoardSave|yNames|ta(Provider)?|rkshadow)|r(opdown(Width)?|a(w|gO(ut|ver))))|u(se(Sort|HandCursor|Codepage|EchoSuppression)|n(shift|install|derline|escape|format|watch|lo(ck|ad(Movie(Num)?)?))|pdate(Results|Mode|I(nputProperties|tem(ByIndex)?)|P(acket|roperties)|View|AfterEvent)|rl)|join|p(ixelAspectRatio|o(sition|p|w)|u(sh|rge|blish)|ercen(tComplete|Loaded)|lay(head(Change|Time)|ing|Hidden|erType)?|a(ssword|use|r(se(XML|CSS|Int|Float)|ent(Node|Is(S(creen|lide)|Form))|ams))|r(int(Num|AsBitmap(Num)?)?|o(to(type)?|pert(y|ies)|gress)|e(ss|v(ious(S(ibling|lide)|Value)?|Scene|Frame)|ferred(Height|Width))))|e(scape|n(code(r)?|ter(Frame)?|dFill|able(Shader|d|CloseBox|Events))|dit(able|Field|LocationDialog)|v(ent|al(uate)?)|q|x(tended|p|ec(ute)?|actSettings)|m(phasized(StyleDeclaration)?|bedFonts))|v(i(sible|ewPod)|ScrollPolicy|o(id|lume)|ersion|P(osition|ageScrollSize)|a(l(idat(ionError|e(Property|ActivationKey)?)|ue(Of)?)|riable)|LineScrollSize)|k(ind|ey(Down|Up|Press|FrameInterval))|q(sort|uality)|f(scommand|i(n(d(Text|First|Last)?|ally)|eldInfo|lter(ed|Func)?|rst(Slide|Child|DayOfWeek|VisibleNode)?)|o(nt|cus(In|edCell|Out|Enabled)|r(egroundDisabled|mat(ter)?))|unctionName|ps|l(oor|ush)|ace|romCharCode)|w(i(th|dth)|ordWrap|atch|riteAccess)|l(t|i(st(Owner)?|ne(Style|To))|o(c(k|a(t(ion|eByld)|l(ToGlobal|FileReadDisable)))|opback|ad(Movie(Num)?|S(crollContent|ound)|ed|Variables(Num)?|Application)?|g(Changes)?)|e(ngth|ft(Margin)?|ading)?|a(st(Slide|Child|Index(Of)?)?|nguage|b(el(Placement|F(ield|unction))?|leField)))|a(s(scociate(Controller|Display)|in|pectRatio|function)|nd|c(ceptConnection|tiv(ityLevel|ePlayControl)|os)|t(t(ach(Movie|Sound|Video|Audio)|ributes)|an(2)?)|dd(header|RequestHeader|Menu(Item(At)?|At)?|Sort|Header|No(tice|de(At)?)|C(olumn(At)?|uePoint)|T(oLocalInternetCache|reeNode(At)?)|I(con|tem(s(At)?|At)?)|DeltaItem|P(od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(Size|Play|KeyNav|Load)|pp(endChild|ly(Changes|Updates)?)|vHardwareDisable|fterLoaded|l(ternateRowColors|ign|l(ow(InsecureDomain|Domain)|Transitions(InDone|OutDone))|bum)|r(tist|row|g(uments|List))|gent|bs)|r(ight(Margin)?|o(ot(S(creen|lide)|Form)|und|w(Height|Count)|llO(ut|ver))|e(s(yncDepth|t(orePane|artAnimation|rict)|iz(e|able(Columns)?)|olveDelta|ult(s)?|ponse)|c(o(ncile(Results|Updates)|rd)|eive(Video|Audio))|draw|jectConnection|place(Sel|ItemAt|AllItems)?|ve(al(Child)?|rse)|quest(SizeChange|Payment)?|f(errer|resh(ScrollContent|Destinations|Pane|FromSources)?)|lease(Outside)?|ad(Only|Access)|gister(SkinElement|C(olor(Style|Name)|lass)|InheritingStyle|Proxy)|move(Range|M(ovieClip|enu(Item(At)?|At))|Background|Sort|No(tice|de(sAt|At)?)|C(olum(nAt|At)|uePoints)|T(extField|reeNode(At)?)|Item(At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(C(olumns|uePoints)|Items)?))|a(ndom|te|dioDot))|g(t|oto(Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(Stop|Play))|e(nre|t(R(GB|o(otNode|wCount)|e(sizable|mote))|X(AxisTitle)?|M(i(n(imum(Size)?|utes)|lliseconds)|onth(Names)?|ultilineMode|e(ssage|nu(ItemAt|EnabledAt|At))|aximum(Size)?)|B(ytes(Total|Loaded)|ounds|utton(s|Width)|eginIndex|a(ndwidthLimit|ckground))|S(howAsDisabled|croll(ing|Speed|Content|Position|barState|Location)|t(yle(Names)?|opOnFocus|ate)|ize|o(urce|rtState)|p(litterBarPosition|acing)|e(conds|lect(Multiple|ion(Required|Type)|Style|ed(Node(s)?|Cell|Text|I(nd(ices|ex)|tem(s)?))?)|rvice)|moothness|WFVersion)|H(ighlight(s|Color)|ours|e(ight|ader(Height|Text|Property|Format|Width|Location)?)|as(Shader|CloseBox))|Y(ear|AxisTitle)?|N(o(tices|de(DisplayedAt|At))|um(Children|berAvailable)|e(wTextFormat|xtHighestDepth))|C(h(ild(S(creen|lide)|Nodes|Form|At)|artTitle)|o(n(tent|figInfo)|okie|de|unt|lumn(Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(ll|retIndex))|T(ypedValue|i(tle(barHeight)?|p(Target|Offset)?|me(stamp|zoneOffset|out(State|Handler)|r)?)|oggle|ext(Extent|Format)?|r(ee(NodeAt|Length)|ans(form|actionId)))|I(s(Branch|Open)|n(stanceAtDepth|d(icesByKey|exByKey))|con(SymbolName)?|te(rator|m(sByKey|By(Name|Key)|id|ID|At))|d)|O(utput(Parameter(s|ByName)?|Value(s)?)|peration|ri(entation|ginalCellData))|D(i(s(play(Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(pth|faultNodeIconSymbolName|l(taPacket|ay)|bug(Config|ID)?)|a(y(OfWeekNames)?|t(e|a(Mapping(s)?|Item(Text|Property|Format)|Label|All(Height|Property|Format|Width))?))|rawConnectors)|U(se(Shadow|HandCursor|rInput|Fade)|RL|TC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Da(y|te)|FullYear))|P(o(sition|ds)|ercentComplete|a(n(e(M(inimums|aximums)|Height|Title|Width))?|rentNode)|r(operty(Name|Data)?|efer(ences|red(Height|Width))))|E(n(dIndex|abled)|ditingData|x(panderSymbolName|andNodeTrigger))|V(iewed(Pods|Applications)|olume|ersion|alue(Source)?)|F(i(eld|rst(DayOfWeek|VisibleNode))|o(ntList|cus)|ullYear|ade(InLength|OutLength)|rame(Color|Width))|Width|L(ine(Color|Weight)|o(cal|adTarget)|ength|a(stTabIndex|bel(Source)?))|A(s(cii|Boolean|String|Number)|n(yTypedValue|imation)|ctiv(eState(Handler)?|ateHandler)|utoH(ideScrollBar|eight)|llItems|gent))?)?|lobal(StyleFormat|ToLocal)?|ain|roupName)|x(updatePackety|mlDecl)?|m(y(MethodName|Call)|in(imum)?|o(nthNames|tion(TimeOut|Level)|de(lChanged)?|use(Move|O(ut|ver)|Down(Somewhere|Outside)?|Up(Somewhere)?|WheelEnabled)|ve(To)?)|u(ted|lti(pleS(imultaneousAllowed|elections)|line))|e(ssage|nu(Show|Hide)?|th(od)?|diaType)|a(nufacturer|tch|x(scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(substring|chr|ord|length))|b(ytes(Total|Loaded)|indFormat(Strings|Function)|o(ttom(Scroll)?|ld|rder(Color)?)|u(tton(Height|Width)|iltInItems|ffer(Time|Length)|llet)|e(foreApplyUpdates|gin(GradientFill|Fill))|lockIndent|a(ndwidth|ckground(Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\b
+ name
+ support.function.actionscript.2
+
+
+ match
+ \b(__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\b
+ name
+ support.constant.actionscript.2
+
+
+ match
+ \b(dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\b
+ name
+ keyword.control.actionscript.2
+
+
+ match
+ \b(Boolean|Number|String|Void)\b
+ name
+ storage.type.actionscript.2
+
+
+ match
+ \b(null|undefined|true|false)\b
+ name
+ constant.language.actionscript.2
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\b
+ name
+ constant.numeric.actionscript.2
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.actionscript.2
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.actionscript.2
+
+
+ name
+ string.quoted.double.actionscript.2
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.actionscript.2
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.actionscript.2
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.actionscript.2
+
+
+ name
+ string.quoted.single.actionscript.2
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.actionscript.2
+
+
+
+
+ match
+ \b(BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\b
+ name
+ support.constant.actionscript.2
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.actionscript.2
+
+
+ end
+ \*/
+ name
+ comment.block.actionscript.2
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.actionscript.2
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.actionscript.2
+
+
+ match
+ \b(instanceof)\b
+ name
+ keyword.operator.actionscript.2
+
+
+ match
+ [-!%&*+=/?:]
+ name
+ keyword.operator.symbolic.actionscript.2
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.preprocessor.actionscript.2
+
+
+ match
+ ^[ \t]*(#)[a-zA-Z]+
+ name
+ meta.preprocessor.actionscript.2
+
+
+ begin
+ \b(function)\s+([a-zA-Z_]\w*)\s*(\()
+ captures
+
+ 1
+
+ name
+ storage.type.function.actionscript.2
+
+ 2
+
+ name
+ entity.name.function.actionscript.2
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.actionscript.2
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.end.actionscript.2
+
+
+ name
+ meta.function.actionscript.2
+ patterns
+
+
+ match
+ [^,)\n]+
+ name
+ variable.parameter.function.actionscript.2
+
+
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.class.actionscript.2
+
+ 2
+
+ name
+ entity.name.type.class.actionscript.2
+
+ 3
+
+ name
+ storage.modifier.extends.actionscript.2
+
+ 4
+
+ name
+ entity.other.inherited-class.actionscript.2
+
+
+ match
+ \b(class)\s+([a-zA-Z_](?:\w|\.)*)(?:\s+(extends)\s+([a-zA-Z_](?:\w|\.)*))?
+ name
+ meta.class.actionscript.2
+
+
+ scopeName
+ source.actionscript.2
+ uuid
+ E5A6EC91-6EE4-11D9-BAB4-000D93589AF6
+
+
diff --git a/ActionScript/ActionScript.tmLanguage.cache b/ActionScript/ActionScript.tmLanguage.cache
new file mode 100644
index 0000000..2362757
Binary files /dev/null and b/ActionScript/ActionScript.tmLanguage.cache differ
diff --git a/AppleScript/AppleScript.tmLanguage b/AppleScript/AppleScript.tmLanguage
new file mode 100644
index 0000000..cc8123d
--- /dev/null
+++ b/AppleScript/AppleScript.tmLanguage
@@ -0,0 +1,2142 @@
+
+
+
+
+ fileTypes
+
+ applescript
+ script editor
+
+ firstLineMatch
+ ^#!.*(osascript)
+ foldingStartMarker
+ (?x)
+ ^\s*
+ (
+ tell \s+ (?! .* \b(to)\b) .*
+ |tell\b.*?\bto\ tell \s+ (?! .* \b(to)\b) .*
+ |using \s+ terms \s+ from \s+ .*
+ |if\b .* \bthen\b
+ |repeat\b .*
+ |( on | to )\b (?!\s+ error) .*
+ |try\b
+ |with \s+ timeout\b .*
+ |script\b .*
+ |( considering | ignoring )\b .*
+ )\s*(--.*?)?$
+
+ foldingStopMarker
+ ^\s*end\b.*$
+ keyEquivalent
+ ^~A
+ name
+ AppleScript
+ patterns
+
+
+ include
+ #blocks
+
+
+ include
+ #inline
+
+
+ repository
+
+ attributes.considering-ignoring
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.array.attributes.applescript
+
+
+ match
+ \b(and)\b
+ name
+ keyword.control.attributes.and.applescript
+
+
+ match
+ \b(?i:case|diacriticals|hyphens|numeric\s+strings|punctuation|white\s+space)\b
+ name
+ constant.other.attributes.text.applescript
+
+
+ match
+ \b(?i:application\s+responses)\b
+ name
+ constant.other.attributes.application.applescript
+
+
+
+ blocks
+
+ patterns
+
+
+ begin
+ ^\s*(script)\s+(\w+)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.script.applescript
+
+ 2
+
+ name
+ entity.name.type.script-object.applescript
+
+
+ end
+ ^\s*(end(?:\s+script)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.script.applescript
+
+
+ name
+ meta.block.script.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (\() # opening paren
+ ((?:[\s,:\{\}]*(?:\w+)?)*) # parameters
+ (\)) # closing paren
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+ 3
+
+ name
+ punctuation.definition.parameters.applescript
+
+ 4
+
+ name
+ variable.parameter.handler.applescript
+
+ 5
+
+ name
+ punctuation.definition.parameters.applescript
+
+
+ comment
+
+ This is not a very well-designed rule. For now,
+ we can leave it like this though, as it sorta works.
+
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.positional.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (?:\s+
+ (of|in)\s+ # "of" or "in"
+ (\w+) # direct parameter
+ )?
+ (?=\s+(above|against|apart\s+from|around|aside\s+from|at|below|beneath|beside|between|by|for|from|instead\s+of|into|on|onto|out\s+of|over|thru|under)\b)
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+ 3
+
+ name
+ keyword.control.function.applescript
+
+ 4
+
+ name
+ variable.parameter.handler.direct.applescript
+
+
+ comment
+ TODO: match `given` parameters
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.prepositional.applescript
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.preposition.applescript
+
+ 2
+
+ name
+ variable.parameter.handler.applescript
+
+
+ match
+ \b(?i:above|against|apart\s+from|around|aside\s+from|at|below|beneath|beside|between|by|for|from|instead\s+of|into|on|onto|out\s+of|over|thru|under)\s+(\w+)\b
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^(?x)
+ \s*(to|on)\s+ # "on" or "to"
+ (\w+) # function name
+ (?=\s*(--.*?)?$) # nothing else
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+ 2
+
+ name
+ entity.name.function.handler.applescript
+
+
+ end
+ ^\s*(end)(?:\s+(\2))?(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.function.applescript
+
+
+ name
+ meta.function.parameterless.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ include
+ #blocks.tell
+
+
+ include
+ #blocks.repeat
+
+
+ include
+ #blocks.statement
+
+
+ include
+ #blocks.other
+
+
+
+ blocks.other
+
+ patterns
+
+
+ begin
+ ^\s*(considering)\b
+ end
+ ^\s*(end(?:\s+considering)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.considering.applescript
+ patterns
+
+
+ begin
+ (?<=considering)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.considering.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ begin
+ (?<=ignoring)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.ignoring.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ match
+ \b(but)\b
+ name
+ keyword.control.but.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(ignoring)\b
+ end
+ ^\s*(end(?:\s+ignoring)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.ignoring.applescript
+ patterns
+
+
+ begin
+ (?<=considering)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.considering.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ begin
+ (?<=ignoring)
+ end
+ (?<!¬)$
+ name
+ meta.array.attributes.ignoring.applescript
+ patterns
+
+
+ include
+ #attributes.considering-ignoring
+
+
+
+
+ match
+ \b(but)\b
+ name
+ keyword.control.but.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(if)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.applescript
+
+
+ end
+ ^\s*(end(?:\s+if)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.if.applescript
+ patterns
+
+
+ match
+ \b(then)\b
+ name
+ keyword.control.then.applescript
+
+
+ match
+ \b(else\s+if)\b
+ name
+ keyword.control.else-if.applescript
+
+
+ match
+ \b(else)\b
+ name
+ keyword.control.else.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(try)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.try.applescript
+
+
+ end
+ ^\s*(end(?:\s+(try|error))?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.try.applescript
+ patterns
+
+
+ begin
+ ^\s*(on\s+error)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.exception.on-error.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.property.error.applescript
+ patterns
+
+
+ match
+ \b(?i:number|partial|from|to)\b
+ name
+ keyword.control.exception.modifier.applescript
+
+
+ include
+ #inline
+
+
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(using\s+terms\s+from)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.terms.applescript
+
+
+ end
+ ^\s*(end(?:\s+using\s+terms\s+from)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.terms.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(with\s+timeout(\s+of)?)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.timeout.applescript
+
+
+ end
+ ^\s*(end(?:\s+timeout)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.timeout.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(with\s+transaction(\s+of)?)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.transaction.applescript
+
+
+ end
+ ^\s*(end(?:\s+transaction)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.transaction.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ blocks.repeat
+
+ patterns
+
+
+ begin
+ ^\s*(repeat)\s+(until)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.until.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.until.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\s+(while)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.while.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.while.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\s+(with)\s+(\w+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+ 2
+
+ name
+ keyword.control.until.applescript
+
+ 3
+
+ name
+ variable.parameter.loop.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.with.applescript
+ patterns
+
+
+ match
+ \b(from|to|by)\b
+ name
+ keyword.control.modifier.range.applescript
+
+
+ match
+ \b(in)\b
+ name
+ keyword.control.modifier.list.applescript
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\b(?=\s*(--.*?)?$)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.forever.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(repeat)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.repeat.applescript
+
+
+ end
+ ^\s*(end(?:\s+repeat)?)(?=\s*(--.*?)?$)
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.applescript
+
+
+ name
+ meta.block.repeat.times.applescript
+ patterns
+
+
+ match
+ \b(times)\b
+ name
+ keyword.control.times.applescript
+
+
+ include
+ $self
+
+
+
+
+
+ blocks.statement
+
+ patterns
+
+
+ begin
+ \b(prop(?:erty)?)\s+(\w+)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.property.applescript
+
+ 2
+
+ name
+ variable.other.property.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.property.applescript
+ patterns
+
+
+ match
+ :
+ name
+ punctuation.separator.key-value.property.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(set)\s+(\w+)\s+(to)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.set.applescript
+
+ 2
+
+ name
+ variable.other.readwrite.set.applescript
+
+ 3
+
+ name
+ keyword.control.def.set.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.set.applescript
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(local)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.local.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.local.applescript
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.variables.local.applescript
+
+
+ match
+ \b\w+
+ name
+ variable.other.readwrite.local.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(global)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.def.global.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.global.applescript
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.variables.global.applescript
+
+
+ match
+ \b\w+
+ name
+ variable.other.readwrite.global.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(error)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.exception.error.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.error.applescript
+ patterns
+
+
+ match
+ \b(number|partial|from|to)\b
+ name
+ keyword.control.exception.modifier.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ \b(if)\b(?=.*\bthen\b(?!\s*(--.*?)?$))
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.applescript
+
+
+ end
+ (?<!¬)$
+ name
+ meta.statement.if-then.applescript
+ patterns
+
+
+ include
+ #inline
+
+
+
+
+
+ blocks.tell
+
+ patterns
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:textmate)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell Textmate
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.textmate.applescript
+ patterns
+
+
+ include
+ #textmate
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:finder)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell Finder
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.finder.applescript
+ patterns
+
+
+ include
+ #finder
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:system events)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell System Events
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.system-events.applescript
+ patterns
+
+
+ include
+ #system-events
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+"(?i:itunes)")(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell iTunes
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.itunes.applescript
+ patterns
+
+
+ include
+ #itunes
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\s+process\b)(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell generic application process
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application-process.generic.applescript
+ patterns
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=app(lication)?\b)(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell generic application
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.application.generic.applescript
+ patterns
+
+
+ include
+ #standard-suite
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?!.*\bto(?!\s+tell)\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ generic tell block
+ end
+ ^\s*(end(?:\s+tell)?)(?=\s*(--.*?)?$)
+ name
+ meta.block.tell.generic.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+ begin
+ ^\s*(tell)\s+(?=.*\bto\b)
+ captures
+
+ 1
+
+ name
+ keyword.control.tell.applescript
+
+
+ comment
+ tell … to statement
+ end
+ (?<!¬)$
+ name
+ meta.block.tell.generic.applescript
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+ built-in
+
+ patterns
+
+
+ include
+ #built-in.constant
+
+
+ include
+ #built-in.keyword
+
+
+ include
+ #built-in.support
+
+
+ include
+ #built-in.punctuation
+
+
+
+ built-in.constant
+
+ patterns
+
+
+ comment
+ yes/no can’t always be used as booleans, e.g. in an if() expression. But they work e.g. for boolean arguments.
+ match
+ \b(?i:true|false|yes|no)\b
+ name
+ constant.language.boolean.applescript
+
+
+ match
+ \b(?i:null|missing\s+value)\b
+ name
+ constant.language.null.applescript
+
+
+ match
+ -?\b\d+((\.(\d+\b)?)?(?i:e\+?\d*\b)?|\b)
+ name
+ constant.numeric.applescript
+
+
+ match
+ \b(?i:space|tab|return|linefeed|quote)\b
+ name
+ constant.other.text.applescript
+
+
+ match
+ \b(?i:all\s+(caps|lowercase)|bold|condensed|expanded|hidden|italic|outline|plain|shadow|small\s+caps|strikethrough|(sub|super)script|underline)\b
+ name
+ constant.other.styles.applescript
+
+
+ match
+ \b(?i:Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\b
+ name
+ constant.other.time.month.applescript
+
+
+ match
+ \b(?i:Mon(day)?|Tue(sday)?|Wed(nesday)?|Thu(rsday)?|Fri(day)?|Sat(urday)?|Sun(day)?)\b
+ name
+ constant.other.time.weekday.applescript
+
+
+ match
+ \b(?i:AppleScript|pi|result|version|current\s+application|its?|m[ey])\b
+ name
+ constant.other.miscellaneous.applescript
+
+
+ match
+ \b(?i:text\s+item\s+delimiters|print\s+(length|depth))\b
+ name
+ variable.language.applescript
+
+
+
+ built-in.keyword
+
+ patterns
+
+
+ match
+ (&|\*|\+|-|/|÷|\^)
+ name
+ keyword.operator.arithmetic.applescript
+
+
+ match
+ (=|≠|>|<|≥|>=|≤|<=)
+ name
+ keyword.operator.comparison.applescript
+
+
+ match
+ (?ix)\b
+ (and|or|div|mod|as|not
+ |(a\s+)?(ref(\s+to)?|reference\s+to)
+ |equal(s|\s+to)|contains?|comes\s+(after|before)|(start|begin|end)s?\s+with
+ )
+ \b
+ name
+ keyword.operator.word.applescript
+
+
+ comment
+ In double quotes so we can use a single quote in the keywords.
+ match
+ (?ix)\b
+ (is(n't|\s+not)?(\s+(equal(\s+to)?|(less|greater)\s+than(\s+or\s+equal(\s+to)?)?|in|contained\s+by))?
+ |does(n't|\s+not)\s+(equal|come\s+(before|after)|contain)
+ )
+ \b
+ name
+ keyword.operator.word.applescript
+
+
+ match
+ \b(?i:some|every|whose|where|that|id|index|\d+(st|nd|rd|th)|first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|last|front|back|middle|named|beginning|end|from|to|thr(u|ough)|before|(front|back|beginning|end)\s+of|after|behind|in\s+(front|back|beginning|end)\s+of)\b
+ name
+ keyword.operator.reference.applescript
+
+
+ match
+ \b(?i:continue|return|exit(\s+repeat)?)\b
+ name
+ keyword.control.loop.applescript
+
+
+ match
+ \b(?i:about|above|after|against|and|apart\s+from|around|as|aside\s+from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|contain|contains|contains|copy|div|does|eighth|else|end|equal|equals|error|every|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead\s+of|into|is|it|its|last|local|me|middle|mod|my|ninth|not|of|on|onto|or|out\s+of|over|prop|property|put|ref|reference|repeat|returning|script|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b
+ name
+ keyword.other.applescript
+
+
+
+ built-in.punctuation
+
+ patterns
+
+
+ match
+ ¬
+ name
+ punctuation.separator.continuation.line.applescript
+
+
+ comment
+ the : in property assignments
+ match
+ :
+ name
+ punctuation.separator.key-value.property.applescript
+
+
+ comment
+ the parentheses in groups
+ match
+ [()]
+ name
+ punctuation.section.group.applescript
+
+
+
+ built-in.support
+
+ patterns
+
+
+ match
+ \b(?i:POSIX\s+path|frontmost|id|name|running|version|days?|weekdays?|months?|years?|time|date\s+string|time\s+string|length|rest|reverse|items?|contents|quoted\s+form|characters?|paragraphs?|words?)\b
+ name
+ support.function.built-in.property.applescript
+
+
+ match
+ \b(?i:activate|log|clipboard\s+info|set\s+the\s+clipboard\s+to|the\s+clipboard|info\s+for|list\s+(disks|folder)|mount\s+volume|path\s+to(\s+resource)?|close\s+access|get\s+eof|open\s+for\s+access|read|set\s+eof|write|open\s+location|current\s+date|do\s+shell\s+script|get\s+volume\s+settings|random\s+number|round|set\s+volume|system\s+(attribute|info)|time\s+to\s+GMT|load\s+script|run\s+script|scripting\s+components|store\s+script|copy|count|get|launch|run|set|ASCII\s+(character|number)|localized\s+string|offset|summarize|beep|choose\s+(application|color|file(\s+name)?|folder|from\s+list|remote\s+application|URL)|delay|display\s+(alert|dialog)|say)\b
+ name
+ support.function.built-in.command.applescript
+
+
+ match
+ \b(?i:get|run)\b
+ name
+ support.function.built-in.applescript
+
+
+ match
+ \b(?i:anything|data|text|upper\s+case|propert(y|ies))\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ \b(?i:alias|class)(es)?\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ \b(?i:app(lication)?|boolean|character|constant|date|event|file(\s+specification)?|handler|integer|item|keystroke|linked\s+list|list|machine|number|picture|preposition|POSIX\s+file|real|record|reference(\s+form)?|RGB\s+color|script|sound|text\s+item|type\s+class|vector|writing\s+code(\s+info)?|zone|((international|styled(\s+(Clipboard|Unicode))?|Unicode)\s+)?text|((C|encoded|Pascal)\s+)?string)s?\b
+ name
+ support.class.built-in.applescript
+
+
+ match
+ (?ix)\b
+ ( (cubic\s+(centi)?|square\s+(kilo)?|centi|kilo)met(er|re)s
+ | square\s+(yards|feet|miles)|cubic\s+(yards|feet|inches)|miles|inches
+ | lit(re|er)s|gallons|quarts
+ | (kilo)?grams|ounces|pounds
+ | degrees\s+(Celsius|Fahrenheit|Kelvin)
+ )
+ \b
+ name
+ support.class.built-in.unit.applescript
+
+
+ match
+ \b(?i:seconds|minutes|hours|days)\b
+ name
+ support.class.built-in.time.applescript
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ match
+ ^\s*(#!).*$\n?
+ name
+ comment.line.number-sign.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ match
+ (--).*$\n?
+ name
+ comment.line.double-dash.applescript
+
+
+ begin
+ \(\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ end
+ \*\)
+ name
+ comment.block.applescript
+ patterns
+
+
+ include
+ #comments.nested
+
+
+
+
+
+ comments.nested
+
+ patterns
+
+
+ begin
+ \(\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.applescript
+
+
+ end
+ \*\)
+ name
+ comment.block.applescript
+ patterns
+
+
+ include
+ #comments.nested
+
+
+
+
+
+ data-structures
+
+ patterns
+
+
+ begin
+ (\{)
+ captures
+
+ 1
+
+ name
+ punctuation.section.array.applescript
+
+
+ comment
+ We cannot necessarily distinguish "records" from "arrays", and so this could be either.
+ end
+ (\})
+ name
+ meta.array.applescript
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.applescript
+
+ 2
+
+ name
+ meta.identifier.applescript
+
+ 3
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 4
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 5
+
+ name
+ punctuation.separator.key-value.applescript
+
+
+ match
+ (\w+|((\|)[^|\n]*(\|)))\s*(:)
+
+
+ match
+ :
+ name
+ punctuation.separator.key-value.applescript
+
+
+ match
+ ,
+ name
+ punctuation.separator.array.applescript
+
+
+ include
+ #inline
+
+
+
+
+ begin
+ (?:(?<=application )|(?<=app ))(")
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.applescript
+
+
+ end
+ (")
+ name
+ string.quoted.double.application-name.applescript
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.applescript
+
+
+
+
+ begin
+ (")
+ captures
+
+ 1
+
+ name
+ punctuation.definition.string.applescript
+
+
+ end
+ (")
+ name
+ string.quoted.double.applescript
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.applescript
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.identifier.applescript
+
+ 2
+
+ name
+ punctuation.definition.identifier.applescript
+
+
+ match
+ (\|)[^|\n]*(\|)
+ name
+ meta.identifier.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ support.class.built-in.applescript
+
+ 3
+
+ name
+ storage.type.utxt.applescript
+
+ 4
+
+ name
+ string.unquoted.data.applescript
+
+ 5
+
+ name
+ punctuation.definition.data.applescript
+
+ 6
+
+ name
+ keyword.operator.applescript
+
+ 7
+
+ name
+ support.class.built-in.applescript
+
+
+ match
+ («)(data) (utxt|utf8)([[:xdigit:]]*)(»)(?:\s+(as)\s+(?i:Unicode\s+text))?
+ name
+ constant.other.data.utxt.applescript
+
+
+ begin
+ («)(\w+)\b(?=\s)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ support.class.built-in.applescript
+
+
+ end
+ (»)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+
+ name
+ constant.other.data.raw.applescript
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.data.applescript
+
+ 2
+
+ name
+ punctuation.definition.data.applescript
+
+
+ match
+ («)[^»]*(»)
+ name
+ invalid.illegal.data.applescript
+
+
+
+ finder
+
+ patterns
+
+
+ match
+ \b(item|container|(computer|disk|trash)-object|disk|folder|((alias|application|document|internet location) )?file|clipping|package)s?\b
+ name
+ support.class.finder.items.applescript
+
+
+ match
+ \b((Finder|desktop|information|preferences|clipping) )windows?\b
+ name
+ support.class.finder.window-classes.applescript
+
+
+ match
+ \b(preferences|(icon|column|list) view options|(label|column|alias list)s?)\b
+ name
+ support.class.finder.type-definitions.applescript
+
+
+ match
+ \b(copy|find|sort|clean up|eject|empty( trash)|erase|reveal|update)\b
+ name
+ support.function.finder.items.applescript
+
+
+ match
+ \b(insertion location|product version|startup disk|desktop|trash|home|computer container|finder preferences)\b
+ name
+ support.constant.finder.applescript
+
+
+ match
+ \b(visible)\b
+ name
+ support.variable.finder.applescript
+
+
+
+ inline
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #data-structures
+
+
+ include
+ #built-in
+
+
+ include
+ #standardadditions
+
+
+
+ itunes
+
+ patterns
+
+
+ match
+ \b(artwork|application|encoder|EQ preset|item|source|visual|(EQ |browser )?window|((audio CD|device|shared|URL|file) )?track|playlist window|((audio CD|device|radio tuner|library|folder|user) )?playlist)s?\b
+ name
+ support.class.itunes.applescript
+
+
+ match
+ \b(add|back track|convert|fast forward|(next|previous) track|pause|play(pause)?|refresh|resume|rewind|search|stop|update|eject|subscribe|update(Podcast|AllPodcasts)|download)\b
+ name
+ support.function.itunes.applescript
+
+
+ match
+ \b(current (playlist|stream (title|URL)|track)|player state)\b
+ name
+ support.constant.itunes.applescript
+
+
+ match
+ \b(current (encoder|EQ preset|visual)|EQ enabled|fixed indexing|full screen|mute|player position|sound volume|visuals enabled|visual size)\b
+ name
+ support.variable.itunes.applescript
+
+
+
+ standard-suite
+
+ patterns
+
+
+ match
+ \b(colors?|documents?|items?|windows?)\b
+ name
+ support.class.standard-suite.applescript
+
+
+ match
+ \b(close|count|delete|duplicate|exists|make|move|open|print|quit|save|activate|select|data size)\b
+ name
+ support.function.standard-suite.applescript
+
+
+ match
+ \b(name|frontmost|version)\b
+ name
+ support.constant.standard-suite.applescript
+
+
+ match
+ \b(selection)\b
+ name
+ support.variable.standard-suite.applescript
+
+
+ match
+ \b(attachments?|attribute runs?|characters?|paragraphs?|texts?|words?)\b
+ name
+ support.class.text-suite.applescript
+
+
+
+ standardadditions
+
+ patterns
+
+
+ match
+ \b((alert|dialog) reply)\b
+ name
+ support.class.standardadditions.user-interaction.applescript
+
+
+ match
+ \b(file information)\b
+ name
+ support.class.standardadditions.file.applescript
+
+
+ match
+ \b(POSIX files?|system information|volume settings)\b
+ name
+ support.class.standardadditions.miscellaneous.applescript
+
+
+ match
+ \b(URLs?|internet address(es)?|web pages?|FTP items?)\b
+ name
+ support.class.standardadditions.internet.applescript
+
+
+ match
+ \b(info for|list (disks|folder)|mount volume|path to( resource)?)\b
+ name
+ support.function.standardadditions.file.applescript
+
+
+ match
+ \b(beep|choose (application|color|file( name)?|folder|from list|remote application|URL)|delay|display (alert|dialog)|say)\b
+ name
+ support.function.standardadditions.user-interaction.applescript
+
+
+ match
+ \b(ASCII (character|number)|localized string|offset|summarize)\b
+ name
+ support.function.standardadditions.string.applescript
+
+
+ match
+ \b(set the clipboard to|the clipboard|clipboard info)\b
+ name
+ support.function.standardadditions.clipboard.applescript
+
+
+ match
+ \b(open for access|close access|read|write|get eof|set eof)\b
+ name
+ support.function.standardadditions.file-i-o.applescript
+
+
+ match
+ \b((load|store|run) script|scripting components)\b
+ name
+ support.function.standardadditions.scripting.applescript
+
+
+ match
+ \b(current date|do shell script|get volume settings|random number|round|set volume|system attribute|system info|time to GMT)\b
+ name
+ support.function.standardadditions.miscellaneous.applescript
+
+
+ match
+ \b(opening folder|(closing|moving) folder window for|adding folder items to|removing folder items from)\b
+ name
+ support.function.standardadditions.folder-actions.applescript
+
+
+ match
+ \b(open location|handle CGI request)\b
+ name
+ support.function.standardadditions.internet.applescript
+
+
+
+ system-events
+
+ patterns
+
+
+ match
+ \b(audio (data|file))\b
+ name
+ support.class.system-events.audio-file.applescript
+
+
+ match
+ \b(alias(es)?|(Classic|local|network|system|user) domain objects?|disk( item)?s?|domains?|file( package)?s?|folders?|items?)\b
+ name
+ support.class.system-events.disk-folder-file.applescript
+
+
+ match
+ \b(delete|open|move)\b
+ name
+ support.function.system-events.disk-folder-file.applescript
+
+
+ match
+ \b(folder actions?|scripts?)\b
+ name
+ support.class.system-events.folder-actions.applescript
+
+
+ match
+ \b(attach action to|attached scripts|edit action of|remove action from)\b
+ name
+ support.function.system-events.folder-actions.applescript
+
+
+ match
+ \b(movie data|movie file)\b
+ name
+ support.class.system-events.movie-file.applescript
+
+
+ match
+ \b(log out|restart|shut down|sleep)\b
+ name
+ support.function.system-events.power.applescript
+
+
+ match
+ \b(((application |desk accessory )?process|(check|combo )?box)(es)?|(action|attribute|browser|(busy|progress|relevance) indicator|color well|column|drawer|group|grow area|image|incrementor|list|menu( bar)?( item)?|(menu |pop up |radio )?button|outline|(radio|tab|splitter) group|row|scroll (area|bar)|sheet|slider|splitter|static text|table|text (area|field)|tool bar|UI element|window)s?)\b
+ name
+ support.class.system-events.processes.applescript
+
+
+ match
+ \b(click|key code|keystroke|perform|select)\b
+ name
+ support.function.system-events.processes.applescript
+
+
+ match
+ \b(property list (file|item))\b
+ name
+ support.class.system-events.property-list.applescript
+
+
+ match
+ \b(annotation|QuickTime (data|file)|track)s?\b
+ name
+ support.class.system-events.quicktime-file.applescript
+
+
+ match
+ \b((abort|begin|end) transaction)\b
+ name
+ support.function.system-events.system-events.applescript
+
+
+ match
+ \b(XML (attribute|data|element|file)s?)\b
+ name
+ support.class.system-events.xml.applescript
+
+
+ match
+ \b(print settings|users?|login items?)\b
+ name
+ support.class.sytem-events.other.applescript
+
+
+
+ textmate
+
+ patterns
+
+
+ match
+ \b(print settings)\b
+ name
+ support.class.textmate.applescript
+
+
+ match
+ \b(get url|insert|reload bundles)\b
+ name
+ support.function.textmate.applescript
+
+
+
+
+ scopeName
+ source.applescript
+ uuid
+ 777CF925-14B9-428E-B07B-17FAAB8FA27E
+
+
diff --git a/AppleScript/AppleScript.tmLanguage.cache b/AppleScript/AppleScript.tmLanguage.cache
new file mode 100644
index 0000000..f8402af
Binary files /dev/null and b/AppleScript/AppleScript.tmLanguage.cache differ
diff --git a/Batch File/Batch File.tmLanguage b/Batch File/Batch File.tmLanguage
new file mode 100644
index 0000000..2a7752e
--- /dev/null
+++ b/Batch File/Batch File.tmLanguage
@@ -0,0 +1,111 @@
+
+
+
+
+ uuid
+ E07EC438-7B75-4437-8AA1-DA94C1E6EACC
+ patterns
+
+
+ name
+ keyword.command.dosbatch
+ match
+ \b(?i)(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|rem|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\b
+
+
+ name
+ keyword.control.statement.dosbatch
+ match
+ \b(?i)(?:goto|call|exit)\b
+
+
+ name
+ keyword.control.conditional.if.dosbatch
+ match
+ \b(?i)if\s+((not)\s+)(exist|defined|errorlevel|cmdextversion)\b
+
+
+ name
+ keyword.control.conditional.dosbatch
+ match
+ \b(?i)(?:if|else)\b
+
+
+ name
+ keyword.control.repeat.dosbatch
+ match
+ \b(?i)for\b
+
+
+ name
+ keyword.operator.dosbatch
+ match
+ \b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\b
+
+
+ captures
+
+ 1
+
+ name
+ keyword.command.rem.dosbatch
+
+
+ name
+ comment.line.rem.dosbatch
+ match
+ (?:^|\s)((?i)rem)(?:$|\s.*$)
+
+
+ name
+ comment.line.colons.dosbatch
+ match
+ \s*:\s*:.*$
+
+
+ begin
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.shell
+
+
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.shell
+
+
+ name
+ string.quoted.double.dosbatch
+ end
+ "
+
+
+ name
+ keyword.operator.pipe.dosbatch
+ match
+ [|]
+
+
+ name
+ keyword.operator.redirect.shell
+ match
+ &>|\d*>&\d*|\d*(>>|>|<)|\d*<&|\d*<>
+
+
+ name
+ Batch File
+ scopeName
+ source.dosbatch
+ fileTypes
+
+ bat
+
+
+
\ No newline at end of file
diff --git a/Batch File/Batch File.tmLanguage.cache b/Batch File/Batch File.tmLanguage.cache
new file mode 100644
index 0000000..1f6790a
Binary files /dev/null and b/Batch File/Batch File.tmLanguage.cache differ
diff --git a/C#/Build.tmLanguage b/C#/Build.tmLanguage
new file mode 100644
index 0000000..55191b4
--- /dev/null
+++ b/C#/Build.tmLanguage
@@ -0,0 +1,142 @@
+
+
+
+
+ fileTypes
+
+ build
+
+ foldingStartMarker
+ <[^!?/>]+|<!--
+ foldingStopMarker
+ />|</[^?>]+|-->
+ name
+ NAnt Build File
+ patterns
+
+
+ begin
+ <!--
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.nant
+
+
+ end
+ -->
+ name
+ comment.block.nant
+
+
+ begin
+ (</?)([-_a-zA-Z0-9:]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.nant
+
+ 2
+
+ name
+ entity.name.tag.nant
+
+
+ end
+ (/?>)
+ name
+ meta.tag.nant
+ patterns
+
+
+ match
+ ([a-zA-Z-]+)
+ name
+ entity.other.attribute-name.nant
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.nant
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.nant
+
+
+ name
+ string.quoted.double.nant
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.nant
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.nant
+
+
+ name
+ string.quoted.single.nant
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.nant
+
+ 3
+
+ name
+ punctuation.definition.constant.nant
+
+
+ match
+ (&)([a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
+ name
+ constant.character.entity.nant
+
+
+ match
+ &
+ name
+ invalid.illegal.bad-ampersand.nant
+
+
+ scopeName
+ source.nant-build
+ uuid
+ 1BA72668-707C-11D9-A928-000D93589AF6
+
+
diff --git a/C#/Build.tmLanguage.cache b/C#/Build.tmLanguage.cache
new file mode 100644
index 0000000..e59ca49
Binary files /dev/null and b/C#/Build.tmLanguage.cache differ
diff --git a/C#/C#.tmLanguage b/C#/C#.tmLanguage
new file mode 100644
index 0000000..4d6bd9b
--- /dev/null
+++ b/C#/C#.tmLanguage
@@ -0,0 +1,530 @@
+
+
+
+
+ fileTypes
+
+ cs
+
+ foldingStartMarker
+ ^\s*/\*|^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ ^\s*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C#
+ patterns
+
+
+ begin
+ ///
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ end
+ $\n?
+ name
+ comment.block.documentation.source.cs
+ patterns
+
+
+ begin
+ (</?)(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]+)
+ captures
+
+ 1
+
+ name
+ punctuation.definition.tag.source.cs
+
+ 2
+
+ name
+ entity.name.tag.namespace.source.cs
+
+ 3
+
+ name
+ entity.name.tag.source.cs
+
+ 4
+
+ name
+ punctuation.separator.namespace.source.cs
+
+ 5
+
+ name
+ entity.name.tag.localname.source.cs
+
+
+ end
+ (/?>)
+ name
+ keyword.other.documentation.source.cs
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.namespace.source.cs
+
+ 2
+
+ name
+ entity.other.attribute-name.source.cs
+
+ 3
+
+ name
+ punctuation.separator.namespace.source.cs
+
+ 4
+
+ name
+ entity.other.attribute-name.localname.source.cs
+
+
+ match
+ (?:([-_a-zA-Z0-9]+)((:)))?([_a-zA-Z-]+)=
+
+
+ include
+ #doubleQuotedString
+
+
+ include
+ #singleQuotedString
+
+
+
+
+
+
+ include
+ #comments
+
+
+ begin
+ (?x)^\s*
+((?:\b(?:new|public|protected|internal|private|abstract|sealed|static)\b\s)*)
+(class)\s+
+([A-Za-z_]\w+)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.source.cs
+
+ 2
+
+ name
+ storage.type.source.cs
+
+ 3
+
+ name
+ entity.name.type.class.source.cs
+
+
+ end
+ {
+ name
+ meta.definition.class.source.cs
+ patterns
+
+
+ include
+ #classInheritance
+
+
+
+
+
+
+ match
+ \b(true|false|null|this|base)\b
+ name
+ constant.language.source.cs
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b
+ name
+ constant.numeric.source.cs
+
+
+ match
+ \b(if|else|while|for|foreach|do|return|continue|break|switch|case|default|goto|throw|try|catch|finally|lock|yield)\b
+ name
+ keyword.control.source.cs
+
+
+ match
+ \b(new|is|checked|unchecked|typeof|sizeof|override|in|out|ref|readonly|params|stackalloc|as)\b
+ name
+ keyword.operator.source.cs
+
+
+ match
+ \b(event|delegate|explicit|implicit|in|set|get)\b
+ name
+ keyword.other.source.cs
+
+
+ match
+ \b(internal|public|protected|private|static|const|new|sealed|abstract|override|extern|unsafe|readonly|volatile|operator)\b
+ name
+ storage.modifier.source.cs
+
+
+ include
+ #doubleQuotedStringLiteral
+
+
+ include
+ #doubleQuotedString
+
+
+ include
+ #singleQuotedString
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.using.source.cs
+
+ 2
+
+ name
+ entity.name.type.package.source.cs
+
+
+ match
+ ^\s*(using)\s+([^ ;]*);
+ name
+ meta.keyword.using.source.cs
+
+
+ include
+ #builtinTypes
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.namespace.source.cs
+
+ 2
+
+ name
+ entity.name.type.namespace.source.cs
+
+
+ match
+ ^\s*(namespace)\s+([^ ]+)(?:\s*{)?$
+ name
+ meta.keyword.namespace.source.cs
+
+
+ captures
+
+ 2
+
+ name
+ keyword.control.import.source.cs
+
+
+ match
+ ^(#)\s*(if|else|elif|endif|define|undef|warning|error|line|region|endregion)\b
+ name
+ meta.preprocessor.source.cs
+
+
+ repository
+
+ builtinTypes
+
+ patterns
+
+
+ match
+ \b(bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|class|struct|enum|interface)\b
+ name
+ storage.type.source.cs
+
+
+
+ classInheritance
+
+ patterns
+
+
+ begin
+ :
+ end
+ (?={)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.source.cs
+
+
+ match
+ \s*,?([A-Za-z_]\w*)\b
+
+
+
+
+
+ comments
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ end
+ \*/\n?
+ name
+ comment.block.source.cs
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.source.cs
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.source.cs
+
+
+
+ doubleQuotedString
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.source.cs
+
+
+ name
+ string.quoted.double.source.cs
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.source.cs
+
+
+
+ doubleQuotedStringLiteral
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ match
+ @"([^"]|"")*"
+ name
+ string.quoted.double.literal.source.cs
+
+ singleQuotedString
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.source.cs
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.source.cs
+
+
+ name
+ string.quoted.single.xml
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.source.cs
+
+
+
+ statementRemainder
+
+ patterns
+
+
+ begin
+ \(
+ end
+ (?=\))
+ name
+ meta.definition.param-list.source.cs
+ patterns
+
+
+ include
+ #builtinTypes
+
+
+
+
+
+
+ scopeName
+ source.cs
+ uuid
+ 1BA75B32-707C-11D9-A928-000D93589AF6
+
+
diff --git a/C#/C#.tmLanguage.cache b/C#/C#.tmLanguage.cache
new file mode 100644
index 0000000..20c4f2f
Binary files /dev/null and b/C#/C#.tmLanguage.cache differ
diff --git a/C++/#ifndef-#define-#endif.sublime-snippet b/C++/#ifndef-#define-#endif.sublime-snippet
new file mode 100644
index 0000000..bdf483b
--- /dev/null
+++ b/C++/#ifndef-#define-#endif.sublime-snippet
@@ -0,0 +1,8 @@
+
+ #ifndef … #define … #endif
+
+ def
+ source.c, source.c++, source.objc, source.objc++
+
diff --git a/C++/#include-(inc angle).sublime-snippet b/C++/#include-(inc angle).sublime-snippet
new file mode 100644
index 0000000..27b9b75
--- /dev/null
+++ b/C++/#include-(inc angle).sublime-snippet
@@ -0,0 +1,6 @@
+
+ #include <…>
+ ]]>
+ Inc
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/#include-(inc).sublime-snippet b/C++/#include-(inc).sublime-snippet
new file mode 100644
index 0000000..098dde9
--- /dev/null
+++ b/C++/#include-(inc).sublime-snippet
@@ -0,0 +1,6 @@
+
+ #include "…"
+
+ inc
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/$1.begin()-$1.end()-(beginend).sublime-snippet b/C++/$1.begin()-$1.end()-(beginend).sublime-snippet
new file mode 100644
index 0000000..a5bb6c3
--- /dev/null
+++ b/C++/$1.begin()-$1.end()-(beginend).sublime-snippet
@@ -0,0 +1,6 @@
+
+ $1.begin(), $1.end()
+ )?$/(?2::(?1:>:.))/}begin(), ${1:v}${1/^.*?(-)?(>)?$/(?2::(?1:>:.))/}end()]]>
+ beginend
+ source.c++, source.objc++
+
diff --git a/C++/010-main()-(main).sublime-snippet b/C++/010-main()-(main).sublime-snippet
new file mode 100644
index 0000000..511c95c
--- /dev/null
+++ b/C++/010-main()-(main).sublime-snippet
@@ -0,0 +1,10 @@
+
+ main()
+
+ main
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/030-for-int-loop-(fori).sublime-snippet b/C++/030-for-int-loop-(fori).sublime-snippet
new file mode 100644
index 0000000..30a674b
--- /dev/null
+++ b/C++/030-for-int-loop-(fori).sublime-snippet
@@ -0,0 +1,9 @@
+
+ For Loop
+
+ for
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/C++.sublime-build b/C++/C++.sublime-build
new file mode 100644
index 0000000..f4f7d4f
--- /dev/null
+++ b/C++/C++.sublime-build
@@ -0,0 +1,14 @@
+{
+ "cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"],
+ "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
+ "working_dir": "${file_path}",
+ "selector": "source.c, source.c++",
+
+ "variants":
+ [
+ {
+ "name": "Run",
+ "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
+ }
+ ]
+}
diff --git a/C++/C++.sublime-settings b/C++/C++.sublime-settings
new file mode 100644
index 0000000..d78414e
--- /dev/null
+++ b/C++/C++.sublime-settings
@@ -0,0 +1,3 @@
+{
+ "extensions": ["cpp", "cc", "cxx", "c++", "h", "hpp", "hxx", "h++", "inl", "ipp"]
+}
diff --git a/C++/C++.tmLanguage b/C++/C++.tmLanguage
new file mode 100644
index 0000000..e6647c1
--- /dev/null
+++ b/C++/C++.tmLanguage
@@ -0,0 +1,491 @@
+
+
+
+
+ comment
+ I don't think anyone uses .hp. .cp tends to be paired with .h. (I could be wrong. :) -- chris
+ fileTypes
+
+ cpp
+ cc
+ cp
+ cxx
+ c++
+ C
+ h
+ hh
+ hpp
+ hxx
+ h++
+ inl
+ ipp
+
+ firstLineMatch
+ -\*- C\+\+ -\*-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C++
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ source.c
+
+
+ match
+ \b(friend|explicit|virtual)\b
+ name
+ storage.modifier.c++
+
+
+ match
+ \b(private:|protected:|public:)
+ name
+ storage.modifier.c++
+
+
+ match
+ \b(catch|operator|try|throw|using)\b
+ name
+ keyword.control.c++
+
+
+ match
+ \bdelete\b(\s*\[\])?|\bnew\b(?!])
+ name
+ keyword.control.c++
+
+
+ comment
+ common C++ instance var naming idiom -- fMemberName
+ match
+ \b(f|m)[A-Z]\w*\b
+ name
+ variable.other.readwrite.member.c++
+
+
+ match
+ \b(this)\b
+ name
+ variable.language.c++
+
+
+ match
+ \btemplate\b\s*
+ name
+ storage.type.template.c++
+
+
+ match
+ \b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\b\s*
+ name
+ keyword.operator.cast.c++
+
+
+ match
+ \b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq)\b
+ name
+ keyword.operator.c++
+
+
+ match
+ \b(class|wchar_t)\b
+ name
+ storage.type.c++
+
+
+ match
+ \b(export|mutable|typename)\b
+ name
+ storage.modifier.c++
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.destructor.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name
+ \s*(\() # terminating semi-colon
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.destructor.prototype.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ repository
+
+ angle_brackets
+
+ begin
+ <
+ end
+ >
+ name
+ meta.angle-brackets.c++
+ patterns
+
+
+ include
+ #angle_brackets
+
+
+ include
+ $base
+
+
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.c++
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ support.function.any-method.c
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x)
+ (
+ (?!while|for|do|if|else|switch|catch|enumerate|return|r?iterate)(?: \b[A-Za-z_][A-Za-z0-9_]*+\b | :: )*+ # actual name
+ )
+ \s*(\()
+ name
+ meta.function-call.c
+
+
+ include
+ $base
+
+
+
+ constructor
+
+ patterns
+
+
+ begin
+ (?x)
+ (?: ^\s*) # begin-of-line
+ ((?!while|for|do|if|else|switch|catch|enumerate|r?iterate)[A-Za-z_][A-Za-z0-9_:]*) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.c++
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.c
+
+
+ name
+ meta.function.constructor.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (:) # begin-of-line
+ ((?=\s*[A-Za-z_][A-Za-z0-9_:]* # actual name
+ \s*(\())) # start bracket or end-of-line
+
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?=\{)
+ name
+ meta.function.constructor.initializer-list.c++
+ patterns
+
+
+ include
+ $base
+
+
+
+
+
+ special_block
+
+ patterns
+
+
+ begin
+ \b(namespace)\s+([A-Za-z_][_A-Za-z0-9:]*\b)?+(?!\s*?(;|=|,))
+ end
+ (?<=\})
+ name
+ meta.namespace-block.c++
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ #constructor
+
+
+ include
+ $base
+
+
+
+
+
+
+ begin
+ \b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b)
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.c++
+
+ 2
+
+ name
+ entity.name.type.c++
+
+
+ end
+ (?<=\})|(?=(;|,|\(|\)|>|\[|\]))
+ name
+ meta.class-struct-block.c++
+ patterns
+
+
+ include
+ #angle_brackets
+
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.scope.c++
+
+
+ end
+ (\})(\s*\n)?
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.invalid.c++
+
+ 2
+
+ name
+ invalid.illegal.you-forgot-semicolon.c++
+
+
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ #constructor
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+ begin
+ \b(extern)(?=\s*")
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.c++
+
+
+ end
+ (?<=\})|(?=\w)
+ name
+ meta.extern-block.c++
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ patterns
+
+
+ include
+ #special_block
+
+
+ include
+ $base
+
+
+
+
+ include
+ $base
+
+
+
+
+
+
+ scopeName
+ source.c++
+ uuid
+ 26251B18-6B1D-11D9-AFDB-000D93589AF6
+
+
diff --git a/C++/C++.tmLanguage.cache b/C++/C++.tmLanguage.cache
new file mode 100644
index 0000000..0f736c2
Binary files /dev/null and b/C++/C++.tmLanguage.cache differ
diff --git a/C++/C.tmLanguage b/C++/C.tmLanguage
new file mode 100644
index 0000000..925a864
--- /dev/null
+++ b/C++/C.tmLanguage
@@ -0,0 +1,1126 @@
+
+
+
+
+ fileTypes
+
+ c
+ h
+
+ firstLineMatch
+ -[*]-( Mode:)? C -[*]-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*)
+ |^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ C
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled
+
+
+ include
+ #preprocessor-rule-disabled
+
+
+ include
+ #preprocessor-rule-other
+
+
+ include
+ #comments
+
+
+ match
+ \b(break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while)\b
+ name
+ keyword.control.c
+
+
+ match
+ \b(asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\b
+ name
+ storage.type.c
+
+
+ match
+ \b(const|extern|register|restrict|static|volatile|inline)\b
+ name
+ storage.modifier.c
+
+
+ comment
+ common C constant naming idiom -- kConstantVariable
+ match
+ \bk[A-Z]\w*\b
+ name
+ constant.other.variable.mac-classic.c
+
+
+ match
+ \bg[A-Z]\w*\b
+ name
+ variable.other.readwrite.global.mac-classic.c
+
+
+ match
+ \bs[A-Z]\w*\b
+ name
+ variable.other.readwrite.static.mac-classic.c
+
+
+ match
+ \b(NULL|true|false|TRUE|FALSE)\b
+ name
+ constant.language.c
+
+
+ include
+ #sizeof
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b
+ name
+ constant.numeric.c
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.double.c
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+ include
+ #string_placeholder
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.single.c
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ (?x)
+ ^\s*\#\s*(define)\s+ # define
+ ((?<id>[a-zA-Z_][a-zA-Z0-9_]*)) # macro name
+ (?: # and optionally:
+ (\() # an open parenthesis
+ (
+ \s* \g<id> \s* # first argument
+ ((,) \s* \g<id> \s*)* # additional arguments
+ (?:\.\.\.)? # varargs ellipsis?
+ )
+ (\)) # a close parenthesis
+ )?
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.import.define.c
+
+ 2
+
+ name
+ entity.name.function.preprocessor.c
+
+ 4
+
+ name
+ punctuation.definition.parameters.c
+
+ 5
+
+ name
+ variable.parameter.preprocessor.c
+
+ 7
+
+ name
+ punctuation.separator.parameters.c
+
+ 8
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.macro.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+ include
+ $base
+
+
+
+
+ begin
+ ^\s*#\s*(error|warning)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.import.error.c
+
+
+ end
+ $
+ name
+ meta.preprocessor.diagnostic.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+
+
+ begin
+ ^\s*#\s*(include|import)\b\s+
+ captures
+
+ 1
+
+ name
+ keyword.control.import.include.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.c.include
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.double.include.c
+
+
+ begin
+ <
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.c
+
+
+ end
+ >
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.c
+
+
+ name
+ string.quoted.other.lt-gt.include.c
+
+
+
+
+ include
+ #pragma-mark
+
+
+ begin
+ ^\s*#\s*(define|defined|elif|else|if|ifdef|ifndef|line|pragma|undef)\b
+ captures
+
+ 1
+
+ name
+ keyword.control.import.c
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.c
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c
+
+
+
+
+ match
+ \b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\b
+ name
+ support.type.sys-types.c
+
+
+ match
+ \b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\b
+ name
+ support.type.pthread.c
+
+
+ match
+ \b(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)\b
+ name
+ support.type.stdint.c
+
+
+ match
+ \b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\b
+ name
+ support.constant.mac-classic.c
+
+
+ match
+ \b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\b
+ name
+ support.type.mac-classic.c
+
+
+ include
+ #block
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ |
+ (?: (?= \s ) (?<!else|new|return) (?<=\w) # or word + space before name
+ | (?= \s*[A-Za-z_] ) (?<!&&) (?<=[*&>]) # or type modifier before name
+ )
+ )
+ (\s*) (?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\s*\()
+ (
+ (?: [A-Za-z_][A-Za-z0-9_]*+ | :: )++ | # actual name
+ (?: (?<=operator) (?: [-*&<>=+!]+ | \(\) | \[\] ) ) # if it is a C++ operator
+ )
+ \s*(?=\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.whitespace.function.leading.c
+
+ 3
+
+ name
+ entity.name.function.c
+
+ 4
+
+ name
+ punctuation.definition.parameters.c
+
+
+ end
+ (?<=\})|(?=#)|(;)
+ name
+ meta.function.c
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #parens
+
+
+ match
+ \bconst\b
+ name
+ storage.modifier.c
+
+
+ include
+ #block
+
+
+
+
+ repository
+
+ access
+
+ match
+ \.[a-zA-Z_][a-zA-Z_0-9]*\b(?!\s*\()
+ name
+ variable.other.dot-access.c
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.c
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ block_innards
+
+ patterns
+
+
+ include
+ #preprocessor-rule-enabled-block
+
+
+ include
+ #preprocessor-rule-disabled-block
+
+
+ include
+ #preprocessor-rule-other-block
+
+
+ include
+ #sizeof
+
+
+ include
+ #access
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.c
+
+ 2
+
+ name
+ support.function.C99.c
+
+
+ match
+ (\s*)\b(hypot(f|l)?|s(scanf|ystem|nprintf|ca(nf|lb(n(f|l)?|ln(f|l)?))|i(n(h(f|l)?|f|l)?|gn(al|bit))|tr(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(jmp|vbuf|locale|buf)|qrt(f|l)?|w(scanf|printf)|rand)|n(e(arbyint(f|l)?|xt(toward(f|l)?|after(f|l)?))|an(f|l)?)|c(s(in(h(f|l)?|f|l)?|qrt(f|l)?)|cos(h(f)?|f|l)?|imag(f|l)?|t(ime|an(h(f|l)?|f|l)?)|o(s(h(f|l)?|f|l)?|nj(f|l)?|pysign(f|l)?)|p(ow(f|l)?|roj(f|l)?)|e(il(f|l)?|xp(f|l)?)|l(o(ck|g(f|l)?)|earerr)|a(sin(h(f|l)?|f|l)?|cos(h(f|l)?|f|l)?|tan(h(f|l)?|f|l)?|lloc|rg(f|l)?|bs(f|l)?)|real(f|l)?|brt(f|l)?)|t(ime|o(upper|lower)|an(h(f|l)?|f|l)?|runc(f|l)?|gamma(f|l)?|mp(nam|file))|i(s(space|n(ormal|an)|cntrl|inf|digit|u(nordered|pper)|p(unct|rint)|finite|w(space|c(ntrl|type)|digit|upper|p(unct|rint)|lower|al(num|pha)|graph|xdigit|blank)|l(ower|ess(equal|greater)?)|al(num|pha)|gr(eater(equal)?|aph)|xdigit|blank)|logb(f|l)?|max(div|abs))|di(v|fftime)|_Exit|unget(c|wc)|p(ow(f|l)?|ut(s|c(har)?|wc(har)?)|error|rintf)|e(rf(c(f|l)?|f|l)?|x(it|p(2(f|l)?|f|l|m1(f|l)?)?))|v(s(scanf|nprintf|canf|printf|w(scanf|printf))|printf|f(scanf|printf|w(scanf|printf))|w(scanf|printf)|a_(start|copy|end|arg))|qsort|f(s(canf|e(tpos|ek))|close|tell|open|dim(f|l)?|p(classify|ut(s|c|w(s|c))|rintf)|e(holdexcept|set(e(nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(aiseexcept|ror)|get(e(nv|xceptflag)|round))|flush|w(scanf|ide|printf|rite)|loor(f|l)?|abs(f|l)?|get(s|c|pos|w(s|c))|re(open|e|ad|xp(f|l)?)|m(in(f|l)?|od(f|l)?|a(f|l|x(f|l)?)?))|l(d(iv|exp(f|l)?)|o(ngjmp|cal(time|econv)|g(1(p(f|l)?|0(f|l)?)|2(f|l)?|f|l|b(f|l)?)?)|abs|l(div|abs|r(int(f|l)?|ound(f|l)?))|r(int(f|l)?|ound(f|l)?)|gamma(f|l)?)|w(scanf|c(s(s(tr|pn)|nc(py|at|mp)|c(spn|hr|oll|py|at|mp)|to(imax|d|u(l(l)?|max)|k|f|l(d|l)?|mbs)|pbrk|ftime|len|r(chr|tombs)|xfrm)|to(b|mb)|rtomb)|printf|mem(set|c(hr|py|mp)|move))|a(s(sert|ctime|in(h(f|l)?|f|l)?)|cos(h(f|l)?|f|l)?|t(o(i|f|l(l)?)|exit|an(h(f|l)?|2(f|l)?|f|l)?)|b(s|ort))|g(et(s|c(har)?|env|wc(har)?)|mtime)|r(int(f|l)?|ound(f|l)?|e(name|alloc|wind|m(ove|quo(f|l)?|ainder(f|l)?))|a(nd|ise))|b(search|towc)|m(odf(f|l)?|em(set|c(hr|py|mp)|move)|ktime|alloc|b(s(init|towcs|rtowcs)|towc|len|r(towc|len))))\b
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.function-call.leading.c
+
+ 2
+
+ name
+ support.function.any-method.c
+
+ 3
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x) (?: (?= \s ) (?:(?<=else|new|return) | (?<!\w)) (\s+))?
+ (\b
+ (?!(while|for|do|if|else|switch|catch|enumerate|return|r?iterate)\s*\()(?:(?!NS)[A-Za-z_][A-Za-z0-9_]*+\b | :: )++ # actual name
+ )
+ \s*(\()
+ name
+ meta.function-call.c
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.c
+
+ 2
+
+ name
+ punctuation.definition.parameters.c
+
+
+ match
+ (?x)
+ (?x)
+ (?:
+ (?: (?= \s ) (?<!else|new|return) (?<=\w)\s+ # or word + space before name
+ )
+ )
+ (
+ (?: [A-Za-z_][A-Za-z0-9_]*+ | :: )++ | # actual name
+ (?: (?<=operator) (?: [-*&<>=+!]+ | \(\) | \[\] ) )? # if it is a C++ operator
+ )
+ \s*(\()
+ name
+ meta.initialization.c
+
+
+ include
+ #block
+
+
+ include
+ $base
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.block.c
+
+
+ match
+ ^/\* =(\s*.*?)\s*= \*/$\n?
+ name
+ comment.block.c
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.c
+
+
+ end
+ \*/
+ name
+ comment.block.c
+
+
+ match
+ \*/.*\n
+ name
+ invalid.illegal.stray-comment-end.c
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.line.c
+
+
+ match
+ ^// =(\s*.*?)\s*=\s*$\n?
+ name
+ comment.line.banner.c++
+
+
+ begin
+ //
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.c
+
+
+ end
+ $\n?
+ name
+ comment.line.double-slash.c++
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.c++
+
+
+
+
+
+ disabled
+
+ begin
+ ^\s*#\s*if(n?def)?\b.*$
+ comment
+ eat nested preprocessor if(def)s
+ end
+ ^\s*#\s*endif\b.*$
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+ parens
+
+ begin
+ \(
+ end
+ \)
+ name
+ meta.parens.c
+ patterns
+
+
+ include
+ $base
+
+
+
+ pragma-mark
+
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.pragma.c
+
+ 3
+
+ name
+ meta.toc-list.pragma-mark.c
+
+
+ match
+ ^\s*(#\s*(pragma\s+mark)\s+(.*))
+ name
+ meta.section
+
+ preprocessor-rule-disabled
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ name
+ comment.block.preprocessor.if-branch
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-disabled-block
+
+ begin
+ ^\s*(#(if)\s+(0)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ name
+ comment.block.preprocessor.if-branch.in-block
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+
+ preprocessor-rule-enabled
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ patterns
+
+
+ include
+ $base
+
+
+
+
+
+ preprocessor-rule-enabled-block
+
+ begin
+ ^\s*(#(if)\s+(0*1)\b)
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.if.c
+
+ 3
+
+ name
+ constant.numeric.preprocessor.c
+
+
+ end
+ ^\s*(#\s*(endif)\b)
+ patterns
+
+
+ begin
+ ^\s*(#\s*(else)\b).*
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.else.c
+
+
+ contentName
+ comment.block.preprocessor.else-branch.in-block
+ end
+ (?=^\s*#\s*endif\b.*$)
+ patterns
+
+
+ include
+ #disabled
+
+
+ include
+ #pragma-mark
+
+
+
+
+ begin
+
+ end
+ (?=^\s*#\s*(else|endif)\b.*$)
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+
+
+ preprocessor-rule-other
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*$
+ patterns
+
+
+ include
+ $base
+
+
+
+ preprocessor-rule-other-block
+
+ begin
+ ^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))
+ captures
+
+ 1
+
+ name
+ meta.preprocessor.c
+
+ 2
+
+ name
+ keyword.control.import.c
+
+
+ end
+ ^\s*(#\s*(endif)\b).*$
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ sizeof
+
+ match
+ \b(sizeof)\b
+ name
+ keyword.operator.sizeof.c
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abefnprtv'"?]|[0-3]\d{,2}|[4-7]\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8})
+ name
+ constant.character.escape.c
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.c
+
+
+
+ string_placeholder
+
+ patterns
+
+
+ match
+ (?x)%
+ (\d+\$)? # field (argument #)
+ [#0\- +']* # flags
+ [,;:_]? # separator character (AltiVec)
+ ((-?\d+)|\*(-?\d+\$)?)? # minimum field width
+ (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
+ (hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier
+ [diouxXDOUeEfFgGaACcSspn%] # conversion type
+
+ name
+ constant.other.placeholder.c
+
+
+ match
+ %
+ name
+ invalid.illegal.placeholder.c
+
+
+
+
+ scopeName
+ source.c
+ uuid
+ 25066DC2-6B1D-11D9-9D5B-000D93589AF6
+
+
diff --git a/C++/C.tmLanguage.cache b/C++/C.tmLanguage.cache
new file mode 100644
index 0000000..7be32fd
Binary files /dev/null and b/C++/C.tmLanguage.cache differ
diff --git a/C++/Comments (C++).tmPreferences b/C++/Comments (C++).tmPreferences
new file mode 100644
index 0000000..c0a43b9
--- /dev/null
+++ b/C++/Comments (C++).tmPreferences
@@ -0,0 +1,42 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.c, source.c++, source.objc, source.objc++
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ //
+
+
+ name
+ TM_COMMENT_START_2
+ value
+ /*
+
+
+ name
+ TM_COMMENT_END_2
+ value
+ */
+
+
+ name
+ TM_COMMENT_DISABLE_INDENT_2
+ value
+ yes
+
+
+
+ uuid
+ 38DBCCE5-2005-410C-B7D7-013097751AC8
+
+
diff --git a/C++/Comments (C++).tmPreferences.cache b/C++/Comments (C++).tmPreferences.cache
new file mode 100644
index 0000000..e7560eb
Binary files /dev/null and b/C++/Comments (C++).tmPreferences.cache differ
diff --git a/C++/Completion Rules.tmPreferences b/C++/Completion Rules.tmPreferences
new file mode 100644
index 0000000..1e9bb1e
--- /dev/null
+++ b/C++/Completion Rules.tmPreferences
@@ -0,0 +1,13 @@
+
+
+
+
+ scope
+ source.c, source.c++, source.objc, source.objc++
+ settings
+
+ cancelCompletion
+ ^\s*(\}?\s*(else|try|do)|(class|struct|enum|namespace)\s*[a-zA-Z_0-9]+*)$
+
+
+
diff --git a/C++/Completion Rules.tmPreferences.cache b/C++/Completion Rules.tmPreferences.cache
new file mode 100644
index 0000000..8cda632
Binary files /dev/null and b/C++/Completion Rules.tmPreferences.cache differ
diff --git a/C++/Enumeration.sublime-snippet b/C++/Enumeration.sublime-snippet
new file mode 100644
index 0000000..c5357ec
--- /dev/null
+++ b/C++/Enumeration.sublime-snippet
@@ -0,0 +1,6 @@
+
+ Enumeration
+
+ enum
+ source.c++, source.objc++
+
diff --git a/C++/Indentation Rules.tmPreferences b/C++/Indentation Rules.tmPreferences
new file mode 100644
index 0000000..3543cd3
--- /dev/null
+++ b/C++/Indentation Rules.tmPreferences
@@ -0,0 +1,40 @@
+
+
+
+
+ name
+ Indentation Rules
+ scope
+ source.c, source.c++, source.objc, source.objc++
+ settings
+
+ decreaseIndentPattern
+ (?x)
+ ^ (.*\*/)? \s* \} .* $
+ | ^ \s* (public|private|protected): \s* $
+ | ^ \s* @(public|private|protected) \s* $
+
+ increaseIndentPattern
+ (?x)
+ ^ .* \{ [^}"']* $
+ | ^ \s* (public|private|protected): \s* $
+ | ^ \s* @(public|private|protected) \s* $
+
+
+ bracketIndentNextLinePattern
+ (?x)
+ ^ \s* \b(if|while|else)\b [^;]* $
+ | ^ \s* \b(for)\b .* $
+
+
+ unIndentedLinePattern
+ ^\s*((/\*|.*\*/|//|#|template\b.*?>(?!\(.*\))|@protocol|@interface(?!.*\{)|@implementation|@end).*)?$
+
+ indentSquareBrackets
+
+
+
+ uuid
+ 02EB44C6-9203-4F4C-BFCB-7E3360B12812
+
+
diff --git a/C++/Indentation Rules.tmPreferences.cache b/C++/Indentation Rules.tmPreferences.cache
new file mode 100644
index 0000000..1011e1a
Binary files /dev/null and b/C++/Indentation Rules.tmPreferences.cache differ
diff --git a/C++/Symbol List - Indent Class Methods.tmPreferences b/C++/Symbol List - Indent Class Methods.tmPreferences
new file mode 100644
index 0000000..45f2a4c
--- /dev/null
+++ b/C++/Symbol List - Indent Class Methods.tmPreferences
@@ -0,0 +1,20 @@
+
+
+
+
+ bundleUUID
+ 4675A940-6227-11D9-BFB1-000D93589AF6
+ name
+ Symbol List: Indent Class Methods
+ scope
+ meta.class-struct-block.c++ entity.name.function
+ settings
+
+ symbolTransformation
+
+ s/^\s*/ /; # pad
+
+ uuid
+ B2B97E23-E686-4410-991D-A92AF3A9FC95
+
+
diff --git a/C++/Symbol List - Indent Class Methods.tmPreferences.cache b/C++/Symbol List - Indent Class Methods.tmPreferences.cache
new file mode 100644
index 0000000..c1d1400
Binary files /dev/null and b/C++/Symbol List - Indent Class Methods.tmPreferences.cache differ
diff --git a/C++/Symbol List - Prefix Banner Items.tmPreferences b/C++/Symbol List - Prefix Banner Items.tmPreferences
new file mode 100644
index 0000000..9fef596
--- /dev/null
+++ b/C++/Symbol List - Prefix Banner Items.tmPreferences
@@ -0,0 +1,20 @@
+
+
+
+
+ name
+ Symbol List: Prefix Banner Items
+ scope
+ meta.toc-list.banner
+ settings
+
+ symbolTransformation
+
+ s/^\s+/# /;
+ s/^=+$/-/;
+
+
+ uuid
+ A8E4E48A-81F3-4DB7-A7A2-88662C06E011
+
+
diff --git a/C++/Symbol List - Prefix Banner Items.tmPreferences.cache b/C++/Symbol List - Prefix Banner Items.tmPreferences.cache
new file mode 100644
index 0000000..9d8799e
Binary files /dev/null and b/C++/Symbol List - Prefix Banner Items.tmPreferences.cache differ
diff --git a/C++/Typedef.sublime-snippet b/C++/Typedef.sublime-snippet
new file mode 100644
index 0000000..351bea3
--- /dev/null
+++ b/C++/Typedef.sublime-snippet
@@ -0,0 +1,6 @@
+
+ Typedef
+
+ td
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/class-..-(class).sublime-snippet b/C++/class-..-(class).sublime-snippet
new file mode 100644
index 0000000..64a09f2
--- /dev/null
+++ b/C++/class-..-(class).sublime-snippet
@@ -0,0 +1,13 @@
+
+ Class
+
+ class
+ source.c++, source.objc++
+
diff --git a/C++/do...while-loop-(do).sublime-snippet b/C++/do...while-loop-(do).sublime-snippet
new file mode 100644
index 0000000..01dddb4
--- /dev/null
+++ b/C++/do...while-loop-(do).sublime-snippet
@@ -0,0 +1,9 @@
+
+ Do While Loop
+
+ do
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/forv.sublime-snippet b/C++/forv.sublime-snippet
new file mode 100644
index 0000000..4a15023
--- /dev/null
+++ b/C++/forv.sublime-snippet
@@ -0,0 +1,9 @@
+
+ Vector For Loop
+ ::iterator ${3:i} = $2.begin(); $3 != $2.end(); ++$3)
+{
+ $0
+}]]>
+ forv
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/fprintf.sublime-snippet b/C++/fprintf.sublime-snippet
new file mode 100644
index 0000000..983dee0
--- /dev/null
+++ b/C++/fprintf.sublime-snippet
@@ -0,0 +1,6 @@
+
+ fprintf …
+
+ fprintf
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/if-..-(if).sublime-snippet b/C++/if-..-(if).sublime-snippet
new file mode 100644
index 0000000..18830ee
--- /dev/null
+++ b/C++/if-..-(if).sublime-snippet
@@ -0,0 +1,9 @@
+
+ If Condition
+
+ if
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/namespace-..-(namespace).sublime-snippet b/C++/namespace-..-(namespace).sublime-snippet
new file mode 100644
index 0000000..2029803
--- /dev/null
+++ b/C++/namespace-..-(namespace).sublime-snippet
@@ -0,0 +1,10 @@
+
+ Namespace
+
+ ns
+ source.c++, source.objc++
+
diff --git a/C++/printf-..-(printf).sublime-snippet b/C++/printf-..-(printf).sublime-snippet
new file mode 100644
index 0000000..5f8bb28
--- /dev/null
+++ b/C++/printf-..-(printf).sublime-snippet
@@ -0,0 +1,6 @@
+
+ printf …
+
+ printf
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/read-file-(readF).sublime-snippet b/C++/read-file-(readF).sublime-snippet
new file mode 100644
index 0000000..9023c5a
--- /dev/null
+++ b/C++/read-file-(readF).sublime-snippet
@@ -0,0 +1,13 @@
+
+ Read File Into Vector
+ v;
+if (FILE${TM_C_POINTER: *}fp = fopen(${1:"filename"}, "r"))
+{
+ char buf[1024];
+ while (size_t len = fread(buf, 1, sizeof(buf), fp))
+ v.insert(v.end(), buf, buf + len);
+ fclose(fp);
+}]]>
+ readfile
+ source.c++, source.objc++
+
diff --git a/C++/std-map-(map).sublime-snippet b/C++/std-map-(map).sublime-snippet
new file mode 100644
index 0000000..3848a74
--- /dev/null
+++ b/C++/std-map-(map).sublime-snippet
@@ -0,0 +1,6 @@
+
+ std::map
+ map$0;]]>
+ map
+ source.c++, source.objc++
+
diff --git a/C++/std-vector-(v).sublime-snippet b/C++/std-vector-(v).sublime-snippet
new file mode 100644
index 0000000..ff9663f
--- /dev/null
+++ b/C++/std-vector-(v).sublime-snippet
@@ -0,0 +1,6 @@
+
+ std::vector
+ v$0;]]>
+ vector
+ source.c++, source.objc++
+
diff --git a/C++/struct.sublime-snippet b/C++/struct.sublime-snippet
new file mode 100644
index 0000000..8ead93b
--- /dev/null
+++ b/C++/struct.sublime-snippet
@@ -0,0 +1,9 @@
+
+ Struct
+
+ struct
+ source.c, source.objc, source.c++, source.objc++
+
diff --git a/C++/template-typename-..-(template).sublime-snippet b/C++/template-typename-..-(template).sublime-snippet
new file mode 100644
index 0000000..ed28d46
--- /dev/null
+++ b/C++/template-typename-..-(template).sublime-snippet
@@ -0,0 +1,6 @@
+
+ template <typename ${1:_InputIter}>
+ ]]>
+ tp
+ source.c++, source.objc++
+
diff --git a/CSS/CSS.tmLanguage b/CSS/CSS.tmLanguage
new file mode 100644
index 0000000..926773c
--- /dev/null
+++ b/CSS/CSS.tmLanguage
@@ -0,0 +1,1010 @@
+
+
+
+
+ comment
+
+ fileTypes
+
+ css
+ css.erb
+
+ foldingStartMarker
+ /\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~C
+ name
+ CSS
+ patterns
+
+
+ include
+ #comment-block
+
+
+ include
+ #selector
+
+
+ begin
+ \s*((@)charset\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.charset.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*((?=;|$))
+ name
+ meta.at-rule.charset.css
+ patterns
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+
+
+ begin
+ \s*((@)import\b)\s*
+ captures
+
+ 1
+
+ name
+ keyword.control.at-rule.import.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*((?=;|\}))
+ name
+ meta.at-rule.import.css
+ patterns
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+ begin
+ \s*(url)\s*(\()\s*
+ beginCaptures
+
+ 1
+
+ name
+ support.function.url.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ \s*(\))\s*
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ match
+ [^'") \t]+
+ name
+ variable.parameter.url.css
+
+
+ include
+ #string-single
+
+
+ include
+ #string-double
+
+
+
+
+ include
+ #media-query-list
+
+
+
+
+ begin
+ ^\s*((@)font-face)\s*(?=\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.at-rule.font-face.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+
+ end
+ \s*(\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ name
+ meta.at-rule.font-face.css
+ patterns
+
+
+ include
+ #rule-list
+
+
+
+
+ begin
+ (?=^\s*@media\s*.*?\{)
+ end
+ \s*(\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ patterns
+
+
+ begin
+ ^\s*((@)media)(?=.*?\{)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.at-rule.media.css
+
+ 2
+
+ name
+ punctuation.definition.keyword.css
+
+ 3
+
+ name
+ support.constant.media.css
+
+
+ end
+ \s*(?=\{)
+ name
+ meta.at-rule.media.css
+ patterns
+
+
+ include
+ #media-query-list
+
+
+
+
+ begin
+ \s*(\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ end
+ (?=\})
+ patterns
+
+
+ include
+ $self
+
+
+
+
+
+
+ begin
+ (?=\{)
+ end
+ \}
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.property-list.css
+
+
+ patterns
+
+
+ include
+ #rule-list
+
+
+
+
+ repository
+
+ color-values
+
+ patterns
+
+
+ comment
+ http://www.w3.org/TR/CSS21/syndata.html#value-def-color
+ match
+ \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b
+ name
+ support.constant.color.w3c-standard-color-name.css
+
+
+ comment
+ These colours are mostly recognised but will not validate. ref: http://www.w3schools.com/css/css_colornames.asp
+ match
+ \b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\b
+ name
+ invalid.deprecated.color.w3c-non-standard-color-name.css
+
+
+ begin
+ (hsla?|rgba?)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ match
+ (?x)\b
+ (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*){2}
+ (0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\b)
+ (\s*,\s*((0?\.[0-9]+)|[0-1]))?
+
+ name
+ constant.other.color.rgb-value.css
+
+
+ match
+ \b([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%
+ name
+ constant.other.color.rgb-percentage.css
+
+
+ include
+ #numeric-values
+
+
+
+
+
+ comment-block
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.css
+
+
+ end
+ \*/
+ name
+ comment.block.css
+
+ media-query
+
+ begin
+ (?i)\s*(only|not)?\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.logic.media.css
+
+ 2
+
+ name
+ support.constant.media.css
+
+
+ end
+ \s*(?:(,)|(?=[{;]))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.arbitrary-repitition.css
+
+
+ patterns
+
+
+ begin
+ \s*(and)?\s*(\()\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.logic.media.css
+
+
+ end
+ \)
+ patterns
+
+
+ begin
+ (?x)
+ (
+ ((min|max)-)?
+ (
+ ((device-)?(height|width|aspect-ratio))|
+ (color(-index)?)|monochrome|resolution
+ )
+ )|grid|scan|orientation
+ \s*(?=[:)])
+ beginCaptures
+
+ 0
+
+ name
+ support.type.property-name.media.css
+
+
+ end
+ (:)|(?=\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.key-value.css
+
+
+
+
+ match
+ \b(portrait|landscape|progressive|interlace)
+ name
+ support.constant.property-value.css
+
+
+ captures
+
+ 1
+
+ name
+ constant.numeric.css
+
+ 2
+
+ name
+ keyword.operator.arithmetic.css
+
+ 3
+
+ name
+ constant.numeric.css
+
+
+ match
+ \s*(\d+)(/)(\d+)
+
+
+ include
+ #numeric-values
+
+
+
+
+
+ media-query-list
+
+ begin
+ \s*(?=[^{;])
+ end
+ \s*(?=[{;])
+ patterns
+
+
+ include
+ #media-query
+
+
+
+ numeric-values
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.constant.css
+
+
+ match
+ (#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b
+ name
+ constant.other.color.rgb-value.css
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.unit.css
+
+
+ match
+ (?x)
+ (?:-|\+)?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))
+ ((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|s)\b|%)?
+
+ name
+ constant.numeric.css
+
+
+
+ property-values
+
+ patterns
+
+
+ match
+ \b(absolute|all(-scroll)?|always|armenian|auto|avoid|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|geometricPrecision|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|optimize(Legibility|Quality|Speed)|outset|outside|overline|pointer|pre(-(wrap|line))?|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|sub|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical(-(ideographic|text))?|visible(Painted|Fill|Stroke)?|w-resize|wait|whitespace|zero|smaller|larger|((xx?-)?(small|large))|painted|fill|stroke)\b
+ name
+ support.constant.property-value.css
+
+
+ match
+ (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b)
+ name
+ support.constant.font-name.css
+
+
+ include
+ #numeric-values
+
+
+ include
+ #color-values
+
+
+ include
+ #string-double
+
+
+ include
+ #string-single
+
+
+ begin
+ (rect)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #numeric-values
+
+
+
+
+ begin
+ (format|local|url|attr|counter|counters)\s*(\()
+ beginCaptures
+
+ 1
+
+ name
+ support.function.misc.css
+
+ 2
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #string-single
+
+
+ include
+ #string-double
+
+
+ match
+ [^'") \t]+
+ name
+ variable.parameter.misc.css
+
+
+
+
+ match
+ \!\s*important
+ name
+ keyword.other.important.css
+
+
+
+ rule-list
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.property-list.css
+
+
+ end
+ (?=\s*\})
+ name
+ meta.property-list.css
+ patterns
+
+
+ include
+ #comment-block
+
+
+ begin
+ (?<![-a-z])(?=[-a-z])
+ end
+ $|(?![-a-z])
+ name
+ meta.property-name.css
+ patterns
+
+
+ match
+ \b(azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|box-shadow|border-radius|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|image-rendering|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow(-[xy])?|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|src|stress|table-layout|text-(align|decoration|indent|rendering|shadow|transform)|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-(spacing|wrap)|zoom|z-index)\b
+ name
+ support.type.property-name.css
+
+
+
+
+ begin
+ (:)\s*
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.separator.key-value.css
+
+
+ end
+ \s*(;|(?=\}))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.rule.css
+
+
+ name
+ meta.property-value.css
+ patterns
+
+
+ include
+ #property-values
+
+
+
+
+
+ selector
+
+ begin
+ \s*(?=[:.*#a-zA-Z])
+ end
+ (?=[/@{)])
+ name
+ meta.selector.css
+ patterns
+
+
+ match
+ \b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\b
+ name
+ entity.name.tag.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (\.)[a-zA-Z0-9_-]+
+ name
+ entity.other.attribute-name.class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (#)[a-zA-Z][a-zA-Z0-9_-]*
+ name
+ entity.other.attribute-name.id.css
+
+
+ match
+ \*
+ name
+ entity.name.tag.wildcard.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:+)(after|before|first-letter|first-line|selection)\b
+ name
+ entity.other.attribute-name.pseudo-element.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\b
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\b
+ name
+ entity.other.attribute-name.pseudo-class.ui-state.css
+
+
+ begin
+ ((:)not)(\()
+ beginCaptures
+
+ 1
+
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+ 2
+
+ name
+ punctuation.definition.entity.css
+
+ 3
+
+ name
+ punctuation.section.function.css
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.function.css
+
+
+ patterns
+
+
+ include
+ #selector
+
+
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+ 2
+
+ name
+ punctuation.definition.entity.css
+
+ 3
+
+ name
+ punctuation.section.function.css
+
+ 4
+
+ name
+ constant.numeric.css
+
+ 5
+
+ name
+ punctuation.section.function.css
+
+
+ match
+ ((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\()(\-?(?:\d+n?|n)(?:\+\d+)?|even|odd)(\))
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+
+ match
+ (:)(active|hover|link|visited|focus)\b
+ name
+ entity.other.attribute-name.pseudo-class.css
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.entity.css
+
+ 2
+
+ name
+ entity.other.attribute-name.attribute.css
+
+ 3
+
+ name
+ punctuation.separator.operator.css
+
+ 4
+
+ name
+ string.unquoted.attribute-value.css
+
+ 5
+
+ name
+ string.quoted.double.attribute-value.css
+
+ 6
+
+ name
+ punctuation.definition.string.begin.css
+
+ 7
+
+ name
+ punctuation.definition.string.end.css
+
+
+ match
+ (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\])
+ name
+ meta.attribute-selector.css
+
+
+
+ string-double
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.css
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.css
+
+
+ name
+ string.quoted.double.css
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.css
+
+
+
+ string-single
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.css
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.css
+
+
+ name
+ string.quoted.single.css
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.css
+
+
+
+
+ scopeName
+ source.css
+ uuid
+ 69AA0917-B7BB-11D9-A7E2-000D93C8BE28
+
+
diff --git a/CSS/CSS.tmLanguage.cache b/CSS/CSS.tmLanguage.cache
new file mode 100644
index 0000000..2b0351b
Binary files /dev/null and b/CSS/CSS.tmLanguage.cache differ
diff --git a/CSS/Comments.tmPreferences b/CSS/Comments.tmPreferences
new file mode 100644
index 0000000..6de289f
--- /dev/null
+++ b/CSS/Comments.tmPreferences
@@ -0,0 +1,36 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.css
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ /*
+
+
+ name
+ TM_COMMENT_END
+ value
+ */
+
+
+ name
+ TM_COMMENT_DISABLE_INDENT
+ value
+ yes
+
+
+
+ uuid
+ 375CF370-8A7B-450A-895C-FD18B47957E2
+
+
diff --git a/CSS/Comments.tmPreferences.cache b/CSS/Comments.tmPreferences.cache
new file mode 100644
index 0000000..a427449
Binary files /dev/null and b/CSS/Comments.tmPreferences.cache differ
diff --git a/CSS/Default (Linux).sublime-keymap b/CSS/Default (Linux).sublime-keymap
new file mode 100644
index 0000000..7c840ea
--- /dev/null
+++ b/CSS/Default (Linux).sublime-keymap
@@ -0,0 +1,27 @@
+[
+ { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0;"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": [";"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": ":$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ }
+]
diff --git a/CSS/Default (OSX).sublime-keymap b/CSS/Default (OSX).sublime-keymap
new file mode 100644
index 0000000..7c840ea
--- /dev/null
+++ b/CSS/Default (OSX).sublime-keymap
@@ -0,0 +1,27 @@
+[
+ { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0;"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": [";"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": ":$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ }
+]
diff --git a/CSS/Default (Windows).sublime-keymap b/CSS/Default (Windows).sublime-keymap
new file mode 100644
index 0000000..7c840ea
--- /dev/null
+++ b/CSS/Default (Windows).sublime-keymap
@@ -0,0 +1,27 @@
+[
+ { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0;"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": [";"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "source.css - meta.selector.css", "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": ":$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^;", "match_all": true }
+ ]
+ }
+]
diff --git a/CSS/Symbol List Group.tmPreferences b/CSS/Symbol List Group.tmPreferences
new file mode 100644
index 0000000..82ef163
--- /dev/null
+++ b/CSS/Symbol List Group.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Symbol List: Group
+ scope
+ source.css comment.block.css -source.css.embedded
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s/\/\*\*\s*(.*?)\s*\*\//** $1 **/; s/\/\*.*?\*\*\//./; s/\/\*[^\*].*?[^\*]\*\///
+
+ uuid
+ 096894D8-6A5A-4F1D-B68C-782F0A850E52
+
+
diff --git a/CSS/Symbol List Group.tmPreferences.cache b/CSS/Symbol List Group.tmPreferences.cache
new file mode 100644
index 0000000..aa5b5c7
Binary files /dev/null and b/CSS/Symbol List Group.tmPreferences.cache differ
diff --git a/CSS/Symbol List.tmPreferences b/CSS/Symbol List.tmPreferences
new file mode 100644
index 0000000..3aa3c7f
--- /dev/null
+++ b/CSS/Symbol List.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Symbol List: Selector
+ scope
+ source.css meta.selector
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s/^\s*/CSS: /; s/\s+/ /g
+
+ uuid
+ 17B2DD5B-D2EA-4DC5-9C7D-B09B505156C5
+
+
diff --git a/CSS/Symbol List.tmPreferences.cache b/CSS/Symbol List.tmPreferences.cache
new file mode 100644
index 0000000..8433e12
Binary files /dev/null and b/CSS/Symbol List.tmPreferences.cache differ
diff --git a/CSS/css_completions.py b/CSS/css_completions.py
new file mode 100644
index 0000000..94bc668
--- /dev/null
+++ b/CSS/css_completions.py
@@ -0,0 +1,194 @@
+import sublime, sublime_plugin
+import re
+
+
+common = { "color": ["rgb($1)", "rgba($1)", "hsl($1)", "hsla($1)", "transparent"],
+ "uri": ["url($1)"],
+ "border-style": ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"],
+ "border-width": ["thin", "medium", "thick"],
+ "shape": ["rect($1)"],
+ "generic-family": ["serif", "sans-serif", "cursive", "fantasy", "monospace"] }
+
+css_data = """
+"background-attachment"=scroll | fixed | inherit
+"background-color"= | inherit
+"background-image"= | none | inherit
+"background-position"=left | center | right | top | bottom | inherit
+"background-repeat"=repeat | repeat-x | repeat-y | no-repeat | inherit
+"background"= | | repeat | repeat-x | repeat-y | no-repeat | scroll | fixed | left | center | right | top | bottom | inherit
+"border-collapse"=collapse | separate | inherit
+"border-color"= | inherit
+"border-spacing"=inherit
+"border-style"= | inherit
+"border-top" "border-right" "border-bottom" "border-left"= | | | inherit
+"border-top-color" "border-right-color" "border-bottom-color" "border-left-color"= | inherit
+"border-top-style" "border-right-style" "border-bottom-style" "border-left-style"= | inherit
+"border-top-width" "border-right-width" "border-bottom-width" "border-left-width"= | inherit
+"border-width"= | inherit
+"border"= | | | inherit
+"bottom"= | | auto | inherit
+"caption-side"=top | bottom | inherit
+"clear"=none | left | right | both | inherit
+"clip"= | auto | inherit
+"color"= | inherit
+"content"=normal | none | | open-quote | close-quote | no-open-quote | no-close-quote | inherit
+"counter-increment"=none | inherit
+"counter-reset"=none | inherit
+"cursor"= | auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | text | wait | help | progress | inherit
+"direction"=ltr | rtl | inherit
+"display"=inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit
+"empty-cells"=show | hide | inherit
+"float"=left | right | none | inherit
+"font-family"=| inherit
+"font-size"=inherit
+"font-style"=normal | italic | oblique | inherit
+"font-variant"=normal | small-caps | inherit
+"font-weight"=normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
+"font"=normal | italic | oblique | normal | small-caps | normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | normal | | caption | icon | menu | message-box | small-caption | status-bar | inherit
+"height"= | | auto | inherit
+"left"= | | auto | inherit
+"letter-spacing"=normal | | inherit
+"line-height"=normal | | | | inherit
+"list-style-image"= | none | inherit
+"list-style-position"=inside | outside | inherit
+"list-style-type"=disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit
+"list-style"=disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inside | outside | | inherit
+"margin-right" "margin-left"= | inherit
+"margin-top" "margin-bottom"= | inherit
+"margin"= | inherit
+"max-height"= | | none | inherit
+"max-width"= | | none | inherit
+"min-height"= | | inherit
+"min-width"= | | inherit
+"opacity"= | inherit
+"orphans"= | inherit
+"outline-color"= | invert | inherit
+"outline-style"= | inherit
+"outline-width"= | inherit
+"outline"= | | | inherit
+"overflow"=visible | hidden | scroll | auto | inherit
+"padding-top" "padding-right" "padding-bottom" "padding-left"= | inherit
+"padding"= | inherit
+"page-break-after"=auto | always | avoid | left | right | inherit
+"page-break-before"=auto | always | avoid | left | right | inherit
+"page-break-inside"=avoid | auto | inherit
+"position"=static | relative | absolute | fixed | inherit
+"quotes"=none | inherit
+"right"= | | auto | inherit
+"table-layout"=auto | fixed | inherit
+"text-align"=left | right | center | justify | inherit
+"text-decoration"=none | underline | overline | line-through | blink | inherit | none
+"text-indent"= | | inherit
+"text-transform"=capitalize | uppercase | lowercase | none | inherit
+"top"= | | auto | inherit
+"unicode-bidi"=normal | embed | bidi-override | inherit
+"vertical-align"=baseline | sub | super | top | text-top | middle | bottom | text-bottom | | | inherit
+"visibility"=visible | hidden | collapse | inherit
+"white-space"=normal | pre | nowrap | pre-wrap | pre-line | inherit
+"widows"= | inherit
+"width"= | | auto | inherit
+"word-spacing"=normal | | inherit
+"z-index"=auto | | inherit
+
+
+"background-clip"=
+"background-origin"=
+"background-size"=
+"border"= | |
+"border-color"=
+"border-image"= | | | | |
+"border-image-outset"= |
+"border-image-repeat"=stretch | repeat | round | space
+"border-image-slice"= |
+"border-image-source"=none |
+"border-image-width"= | | | auto
+"border-radius"= |
+"border-style"=
+"border-top" "border-right" "border-bottom" "border-left"= | |
+"border-top-color" "border-right-color" "border-bottom-color" "border-left-color"=
+"border-top-left-radius" "border-top-right-radius" "border-bottom-right-radius" "border-bottom-left-radius"= |
+"border-top-style" "border-right-style" "border-bottom-style" "border-left-style"=
+"border-top-width" "border-right-width" "border-bottom-width" "border-left-width"=
+"border-width"=
+"box-decoration-break"=slice | clone
+"box-shadow"=none | | none
+"""
+
+def parse_css_data(data):
+ props = {}
+ for l in data.splitlines():
+ if l == "":
+ continue
+
+ names, values = l.split('=')
+
+ allowed_values = []
+ for v in values.split('|'):
+ v = v.strip()
+ if v[0] == '<' and v[-1] == '>':
+ key = v[1:-1]
+ if key in common:
+ allowed_values += common[key]
+ else:
+ allowed_values.append(v)
+
+ for e in names.split():
+ if e[0] == '"':
+ props[e[1:-1]] = sorted(allowed_values)
+ else:
+ break
+
+ return props
+
+class CSSCompletions(sublime_plugin.EventListener):
+ props = None
+ rex = None
+
+ def on_query_completions(self, view, prefix, locations):
+ if not view.match_selector(locations[0], "source.css - meta.selector.css"):
+ return []
+
+ if not self.props:
+ self.props = parse_css_data(css_data)
+ self.rex = re.compile("([a-zA-Z-]+):\s*$")
+
+ l = []
+ if (view.match_selector(locations[0], "meta.property-value.css") or
+ # This will catch scenarios like .foo {font-style: |}
+ view.match_selector(locations[0] - 1, "meta.property-value.css")):
+ loc = locations[0] - len(prefix)
+ line = view.substr(sublime.Region(view.line(loc).begin(), loc))
+
+ m = re.search(self.rex, line)
+ if m:
+ prop_name = m.group(1)
+ if prop_name in self.props:
+ values = self.props[prop_name]
+
+ add_semi_colon = view.substr(sublime.Region(locations[0], locations[0] + 1)) != ';'
+
+ for v in values:
+ desc = v
+ snippet = v
+
+ if add_semi_colon:
+ snippet += ";"
+
+ if snippet.find("$1") != -1:
+ desc = desc.replace("$1", "")
+
+ l.append((desc, snippet))
+
+ return (l, sublime.INHIBIT_WORD_COMPLETIONS)
+
+ return None
+ else:
+ add_colon = not view.match_selector(locations[0], "meta.property-name.css")
+
+ for p in self.props:
+ if add_colon:
+ l.append((p, p + ": "))
+ else:
+ l.append((p, p))
+
+ return (l, sublime.INHIBIT_WORD_COMPLETIONS)
diff --git a/CSS/css_completions.pyc b/CSS/css_completions.pyc
new file mode 100644
index 0000000..5cb4634
Binary files /dev/null and b/CSS/css_completions.pyc differ
diff --git a/Clojure/Clojure.tmLanguage b/Clojure/Clojure.tmLanguage
new file mode 100644
index 0000000..8cb89e7
--- /dev/null
+++ b/Clojure/Clojure.tmLanguage
@@ -0,0 +1,3415 @@
+
+
+
+
+ comment
+ Symbol pattern : [a-zA-Z+!\-_?0-9*~#@'`/.$=]
+ fileTypes
+
+ clj
+
+ foldingStartMarker
+ (?x)^ [ \t]* \(
+ (?<par>
+ ( [^()\n]++ | \( \g<par> \)? )*+
+ )
+ $
+ foldingStopMarker
+ ^\s*$
+ keyEquivalent
+ ^~C
+ name
+ Clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #macro
+
+
+ include
+ #namespace
+
+
+ include
+ #sexpr
+
+
+ repository
+
+ all
+
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #comment
+
+
+ include
+ #expr
+
+
+ include
+ #sexpr
+
+
+
+ binding
+
+ comment
+ consume bindings to the end, dual recursive with binding_exp
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ comment
+ TODO: merge with parameters ??
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.parameters.vector.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ comment
+ TODO: merge with map ??
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.function.parameters.map.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ match
+ (:as|:or|:keys|:strs|:syms)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ (:let|:when|:while)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding.symbolargs.clojure
+ patterns
+
+
+ include
+ #binding_exp
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\])
+ name
+ meta.structure.binding.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\])
+ patterns
+
+
+ include
+ #binding_exp
+
+
+
+
+
+
+ begin
+ [^\s]
+ end
+ [^\]]
+ name
+ invalid.illegal.bindings.clojure
+
+
+
+ binding_exp
+
+ comment
+ consume bindings to the end, dual recursive with binding
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #operator_special
+
+
+ begin
+ (\(\)|{}|\[\]|#{})
+ beginCaptures
+
+ 1
+
+ name
+ constant.language.clojure
+
+
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.constant.language.clojure
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=#?\()
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.sexp.clojure
+ patterns
+
+
+ begin
+ (?=#?\()
+ end
+ (?<=\))
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #sexpr
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (\[)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ comment
+ TODO: merge with vector
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (\{)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ comment
+ TODO: merge with map
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=#\{)
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.set.clojure
+ patterns
+
+
+ include
+ #set
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=")|(?=\\)|(?=\:)|(?=\#")
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.string.clojure
+ patterns
+
+
+ include
+ #string
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\])
+ name
+ meta.structure.binding_exp.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\])
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+
+
+ begin
+ [^\s]
+ end
+ [^\]]
+ name
+ invalid.illegal.bindings.clojure
+
+
+
+ bindings_form
+
+ begin
+ \[
+ comment
+ bindings followed by all
+ end
+ (?=\))
+ name
+ meta.structure.bindings.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ end
+ \]
+ patterns
+
+
+ include
+ #binding
+
+
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+ comment
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;;).*(;;)$\n?
+ name
+ comment.line.semicolon.double.banner.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;;).*$\n?
+ name
+ comment.line.semicolon.double.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ ^(;).*$\n?
+ name
+ comment.line.semicolon.start.clojure
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.clojure
+
+
+ match
+ (;).*$\n?
+ name
+ comment.line.semicolon.clojure
+
+
+
+ expr
+
+ name
+ meta.expr.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #string
+
+
+ include
+ #vector
+
+
+ include
+ #map
+
+
+ include
+ #set
+
+
+ include
+ #metadata
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+ function
+
+ begin
+ \(\s*(defn\-?)\s
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.function.clojure
+
+
+ name
+ meta.function.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+ function_body
+
+ patterns
+
+
+ begin
+ \(\s*(?=\[)
+ end
+ \)
+ name
+ meta.function.body.code.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ name
+ meta.function.body.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+ function_body_comment
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ string.quoted.double.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ string.quoted.double.end.clojure
+
+
+ name
+ string.docstring.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ meta.metadata.map.clojure
+ patterns
+
+
+ include
+ #metadata_patterns
+
+
+
+
+ include
+ #function_body
+
+
+
+ function_multi_method
+
+ begin
+ \(\s*(defmethod\-?)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.multi_method.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.function.multi_method.name.clojure
+ patterns
+
+
+ include
+ #function_name
+
+
+
+
+ begin
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #operator_special
+
+
+ begin
+ (\(\)|{}|\[\]|#{})
+ beginCaptures
+
+ 1
+
+ name
+ constant.language.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.constant.language.clojure
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=#?\()
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.sexp.clojure
+ patterns
+
+
+ begin
+ (?=#?\()
+ end
+ (?<=\))
+ patterns
+
+
+ include
+ #function
+
+
+ include
+ #function_multi_method
+
+
+ include
+ #lambda
+
+
+ include
+ #macro
+
+
+ include
+ #sexpr
+
+
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (\[)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.vector.clojure
+ patterns
+
+
+ begin
+ (?<=\[)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ comment
+ TODO: merge with vector
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\])\s*
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+
+ begin
+ (\{)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.map.clojure
+ patterns
+
+
+ begin
+ (?<=\{)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ comment
+ TODO: merge with map
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=#\{)
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.set.clojure
+ patterns
+
+
+ include
+ #set
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=")|(?=\\)|(?=\:)|(?=\#")
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.string.clojure
+ patterns
+
+
+ include
+ #string
+
+
+ include
+ #parameters_body
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?=\))
+ name
+ meta.structure.multi_method_exp.symbole.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?<=[a-zA-Z+!\-_?0-9*~#@'`/.$=])(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #parameters_body
+
+
+
+
+
+
+
+
+
+
+ comment
+ Need to match a single expression like binding-exp
+
+
+
+ function_name
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ symbol matching
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.function.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ begin
+ -(?=[a-zA-Z+!\-_?*~#@'`/.$=])
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.prefix.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #symbol
+
+
+
+ genclass_parameters
+
+ patterns
+
+
+ include
+ #gencommon_parameters
+
+
+ begin
+ (:extends)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.other.genclass.extends.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+
+
+ begin
+ (:implements)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.implements.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (:constructors)\s+(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \}
+ name
+ meta.other.genclass.constructors.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.constructor.signature.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ TODO: make a rule java Class (storage)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (:exposes)\s+(\{)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \}
+ name
+ meta.other.genclass.exposes.clojure
+ patterns
+
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.other.genclass.exposes.get_set.clojure
+ patterns
+
+
+ match
+ :(get|set)
+ name
+ support.other.keyword.genclass.clojure
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ captures
+
+ 0
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ match
+ :(init|main|factory|state|prefix|load-impl-ns|implements|constructors|exposes|impl-ns|exposes-methods|methods)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+
+
+ include
+ #all
+
+
+
+ gencommon_parameters
+
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (:name)\s+(?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ meta.other.genclass.name.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.namespace.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+
+
+ begin
+ (:methods)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.methods.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.method.signature.clojure
+ patterns
+
+
+ begin
+ \[
+ end
+ \]
+ name
+ meta.other.genclass.method.args.signature.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ comment
+ TODO: make a rule java Class (storage)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=]+\s*])
+ end
+ .|$
+ name
+ storage.type.java.genclass.return_type.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+
+ geninterface_parameters
+
+ patterns
+
+
+ include
+ #gencommon_parameters
+
+
+ begin
+ (:extends)\s+(\[)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \]
+ name
+ meta.other.genclass.implements.clojure
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+
+ keyword
+
+ patterns
+
+
+ match
+ (?<![*+!_?\-])\b((if-not|if|cond|do|let|loop|recur|throw|try|catch|finally|new|trampoline)\b|(set!|swap!|compare-and-set!))(?![*+!_?\-])
+ name
+ keyword.control.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(monitor-enter|monitor-exit|assoc|touch|drop|take|concat|prn|into|cons|first|flatten|rest|frest|rrest|second|lazy-cat|lazy-cons|conj|await|range|iterate)\b(?![*+!_?\-])
+ name
+ keyword.other.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(str|print(ln)?|eval|def|defmacro|defn|quote|var|fn|defmulti|defmethod|map|list|hash-map|vector|agent|declare|intern|macroexpand|macroexpand-1)\b(?![*+!_?\-])
+ name
+ storage.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(->|\.\.|amap|and|areduce|assert|binding|comment|cond|definline|(def[a-z\-]*)|defmatch|defmethod|defmulti|defn|defn-|defonce|defstruct|delay|doc|doseq|dosync|dotimes|doto|fn|for|if-let|lazy-cons|let|locking|loop|memfn|ns|or|prefer-method|proxy-super|proxy|refer-clojure|remove-method|sync|time|when-first|when-let|when-not|when|while|with-in-str|with-local-vars|with-open|with-out-str|with-precision|memoize)\b(?![*+!_?\-])
+ name
+ support.function.match.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(rational|associative|branch|class|coll|contains|decimal|delay|distinct|empty|end|even|every|false|float|fn|identical|instance|integer|isa|keyword|list|map|neg|nil|not-any|not-every|number|odd|pos|ratio|reversible|seq|sequential|set|sorted|special-symbol|string|symbol|true|var|zero|vector|ifn)(\?)(?![*+!_?\-])
+ name
+ support.function.tester.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+ 3
+
+ name
+ keyword.other.mark.clojure
+
+ 4
+
+ name
+ keyword.other.mark.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(not(=)|list(\*)|io(!))(?![*+!_?\-])
+ name
+ support.function.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(zipper|zipmap|xml-zip|xml-seq|with-meta|vector-zip|vector|vec|var-set|var-get|vals|val|use|update-proxy|update-in|up|union|underive|unchecked-subtract|unchecked-negate|unchecked-multiply|unchecked-inc|unchecked-divide|unchecked-dec|unchecked-add|tree-seq|to-array-2d|to-array|test|take-while|take-nth|symbol|supers|subvec|subseq|subs|struct-map|struct|str|split-with|split-at|sorted-set|sorted-map-by|sorted-map|sort-by|sort|some|slurp|shutdown-agents|short|set-validator|set|seque|seq-zip|seq|send-off|send|select-keys|select|rsubseq|rseq|root|rights|right|rfirst|reverse|resultset-seq|resolve|require|replicate|replace|repeatedly|repeat|rename-keys|rename|remove-ns|remove|rem|refer|ref-set|ref|reduce|read-string|read-line|read|re-seq|re-pattern|re-matches|re-matcher|re-groups|re-find|rationalize|rand-int|rand|quot|pvec|psummary|psort|proxy-mappings|project|prn-str|println-str|println|printf|print-str|print|preduce|pr-str|pr|pop|pmin|pmax|pmap|pfilter-nils|pfilter-dupes|peek|pdistinct|path|partition|partial|parse|parents|par|pany|num|nthrest|nth|ns-unmap|ns-unalias|ns-resolve|ns-refers|ns-publics|ns-name|ns-map|ns-interns|ns-imports|ns-aliases|not=|not-empty|not|node|next|newline|namespace|name|min-key|min|meta|merge-with|merge|max-key|max|matchexpand-1|matchexpand|mapcat|map-invert|map|make-node|make-hierarchy|make-array|long-array|long|loaded-libs|load-string|load-reader|load-file|load|list*|list|line-seq|lefts|left|last|keyword|keys|key|join|iterator-seq|into-array|intersection|interpose|interleave|int-array|int|inspect-tree|inspect-table|insert-right|insert-left|insert-child|index|inc|in-ns|import|identity|hash-set|hash-map|hash|get-validator|get-proxy-class|get-in|get|gensym|gen-class|gen-interface|gen-and-save-class|gen-and-load-class|format|force|fnseq|flush|float-array|float|find-var|find-ns|find-doc|find|filter|file-seq|ffirst|eval|enumeration-seq|ensure|empty|edit|drop-while|drop-last|down|double-array|double|dorun|doall|distinct|dissoc|disj|difference|descendants|derive|deref|dec|cycle|create-struct|create-ns|count|construct-proxy|constantly|conj|complement|compare|comparator|comp|commute|clojure.set|clojure.parallel|clojure.inspector|clear-agent-errors|class|children|char|cast|cache-seq|byte|butlast|boolean|bit-xor|bit-test|bit-shift-right|bit-shift-left|bit-set|bit-or|bit-not|bit-flip|bit-clear|bit-and-not|bit-and|bigint|bigdec|bean|bases|await-for|assoc-in|aset-short|aset-long|aset-int|aset-float|aset-double|aset-char|aset-byte|aset-boolean|aset|array-map|apply|append-child|ancestors|alter-var-root|alter|all-ns|alias|alength|aget|agent-errors|agent|add-classpath|aclone|accessor|compile|longs|doubles|ints|floats|atom)\b(?![*+!_?\-])
+ name
+ support.function.clojure
+
+
+ match
+ (?<![*+!_?\-])\b(true|false|nil)\b(?![*+!_?\-])
+ name
+ constant.language.clojure
+
+
+ match
+ (\(\)|{}|\[\]|#{})
+ name
+ constant.language.clojure
+
+
+ comment
+ TODO : clean this ?
+ match
+ (?<![*+!_?\-])\b:(private|doc|test|tag)\b(?![*+!_?\-])
+ name
+ storage.modifier.clojure
+
+
+ comment
+ TODO : clean this ?
+ match
+ (?<![*+!_?\-])\b:(file|line|name|ns|match|argslist)\b(?![*+!_?\-])
+ name
+ support.variable.clojure
+
+
+ match
+ (?<![*+!_?\-])\*(agent|allow-unresolved-vars|command-line-args|compile-files|compile-path|err|file|flush-on-newline|in|macro-meta|math-context|ns|out|print-dup|print-length|print-level|print-meta|print-readably|proxy-classes|use-context-classloader|warn-on-reflection)\*(?![*+!_?\-])
+ name
+ support.variable.global.clojure
+
+
+
+ lambda
+
+ patterns
+
+
+ begin
+ \(\s*(fn)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.lambda.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body
+
+
+
+
+ begin
+ (#)\(
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.lambda.clojure
+ patterns
+
+
+ include
+ #sexpr_special
+
+
+ include
+ #all
+
+
+
+
+
+ macro
+
+ begin
+ \(\s*(\b(defmacro\-?))\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.function.type.clojure
+
+
+ end
+ \)
+ name
+ meta.function.macro.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+ map
+
+ begin
+ {(?!})
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ (?<!{)}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.expression.map.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+ metadata
+
+ patterns
+
+
+ begin
+ #?\^{
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ punctuation.metadata.map.clojure
+ patterns
+
+
+ include
+ #metadata_patterns
+
+
+
+
+ begin
+ #?\^"
+ beginCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ comment.punctuation.definition.metadata.end.clojure
+
+
+ name
+ string.metadata.clojure
+
+
+ captures
+
+ 1
+
+ name
+ comment.punctuation.definition.metadata.begin.clojure
+
+ 2
+
+ name
+ storage.type.java.clojure
+
+
+ match
+ (#?\^)([a-zA-Z+!\-_?0-9*/.$=]+)
+ name
+ punctuation.metadata.class.clojure
+
+
+
+ metadata_patterns
+
+ patterns
+
+
+ match
+ (:tag|:doc|:arglists|:private|:macro|:name|:ns|:inline-arities|:inline|:line|:file)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ support.other.keyword.namespace.clojure
+
+
+ match
+ (?<=:tag)\s+([a-zA-Z+!\-_?0-9*/.$=]+)
+ name
+ storage.type.java.clojure
+
+
+ begin
+ (?<=:doc)\s+"
+ beginCaptures
+
+ 0
+
+ name
+ string.quoted.double.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ string.quoted.double.end.clojure
+
+
+ name
+ string.docstring.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ include
+ #all
+
+
+
+ namespace
+
+ begin
+ \(\s*(ns)\b
+ beginCaptures
+
+ 1
+
+ name
+ support.function.namespace.clojure
+
+
+ end
+ \)
+ name
+ meta.function.namespace.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ entity.name.namespace.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #namespace_body
+
+
+
+ namespace_body
+
+ patterns
+
+
+ match
+ (:refer-clojure|:require|:use|:import|:load|:exclude|:as|:only)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ support.other.keyword.namespace.clojure
+
+
+ begin
+ \(\s*(:gen-class)
+ beginCaptures
+
+ 1
+
+ name
+ support.other.keyword.genclass.clojure
+
+
+ end
+ \)
+ name
+ meta.function.genclass_form.clojure
+ patterns
+
+
+ include
+ #genclass_parameters
+
+
+
+
+ include
+ #symbol
+
+
+ include
+ #string
+
+
+ begin
+ \(
+ end
+ \)
+ patterns
+
+
+ include
+ #namespace_body
+
+
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ include
+ #namespace_body
+
+
+
+
+
+ number
+
+ patterns
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.ratio.clojure
+
+
+ match
+ (-|\+)?\b[0-9]+(/)[0-9]+\b
+ name
+ constant.numeric.float.ratio.clojure
+
+
+ match
+ [-+]?\b[0-9]+((\.[0-9]+([eE][-+]?[0-9]+)?)|((\.[0-9]+)?[eE][-+]?[0-9]+))?\b
+ name
+ constant.numeric.float.clojure
+
+
+ match
+ [-+]?\b[0-9]+(((\.[0-9])?+([eE][-+]?[0-9]+)?)|((\.[0-9]+)?[eE][-+]?[0-9]+))[M]?\b
+ name
+ constant.numeric.big_decimal.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.octal.clojure
+
+ 4
+
+ name
+ invalid.illegal.integer.octal.clojure
+
+ 5
+
+ name
+ invalid.illegal.integer.octal.clojure
+
+
+ match
+ (-|\+)?\b(0)([0-7]+|([89]))([0-9]*)\b
+ name
+ constant.numeric.integer.octal.clojure
+
+
+ match
+ (-|\+)?\b[0-9]+\b
+ name
+ constant.numeric.integer.clojure
+
+
+ captures
+
+ 2
+
+ name
+ keyword.operator.arithmetic.hexa.clojure
+
+
+ match
+ (-|\+)?\b(0[xX])[0-9A-Fa-f]+\b
+ name
+ constant.numeric.integer.hexa.clojure
+
+
+
+ operator
+
+ patterns
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(\*|/|\<|\<=|=|==|\>|\>=|-\>)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.clojure
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(-|\+)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.clojure
+
+
+ match
+ (?<![a-zA-Z0-9*+!_?\-])(\.|\.\.)(?![a-zA-Z0-9*+!_?\-])
+ name
+ keyword.operator.class.clojure
+
+
+ match
+ %(\d+|&)?
+ name
+ variable.parameter.literal.clojure
+
+
+ include
+ #operator_special
+
+
+
+ operator_special
+
+ patterns
+
+
+ match
+ `|~@|~
+ name
+ keyword.control.operator.clojure
+
+
+ match
+ #'|@
+ name
+ storage.type.function.type.clojure
+
+
+ match
+ '
+ name
+ constant.other.quote
+
+
+ match
+ \^
+ name
+ constant.other.metadata.read.clojure
+
+
+
+ parameters
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.parameters.vector.clojure
+ patterns
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+
+ parameters_body
+
+ name
+ meta.function.body
+ patterns
+
+
+ include
+ #parameters_function
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ name
+ meta.function.body.code.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+ parameters_function
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.function.parameters.vector.clojure
+ patterns
+
+
+ match
+ \&
+ name
+ keyword.operator.varargs.clojure
+
+
+ match
+ (:as)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #comment
+
+
+ include
+ #metadata
+
+
+ include
+ #parameters_variable
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+
+ parameters_map
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.begin.clojure
+
+
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.map.end.clojure
+
+
+ name
+ meta.function.parameters.map.clojure
+ patterns
+
+
+ include
+ #parameters_variable
+
+
+ match
+ (:as|:or|:keys|:strs|:syms)(?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ keyword.operator.symbolargs.clojure
+
+
+ include
+ #parameters
+
+
+ include
+ #parameters_map
+
+
+ include
+ #all
+
+
+
+ parameters_variable
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~@'`/.$=])
+ comment
+ symbol matching TODO:operator number => error ?
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #keyword
+
+
+ include
+ #operator
+
+
+ include
+ #number
+
+
+ include
+ #symbol
+
+
+
+ set
+
+ begin
+ #{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.set.begin.clojure
+
+
+ end
+ }
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.set.end.clojure
+
+
+ name
+ meta.expression.set.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+ sexpr
+
+ begin
+ \((?!\))
+ end
+ (?<!\()\)
+ name
+ meta.sexpr.clojure
+ patterns
+
+
+ include
+ #sexpr_special
+
+
+ include
+ #all
+
+
+
+ sexpr_special
+
+ patterns
+
+
+ begin
+ (?<=\()\s*(let|loop|doseq|dotimes|binding|for|if-let|when-let|with-local-vars|with-open)\s+(?=\[)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.let_form.clojure
+ patterns
+
+
+ include
+ #bindings_form
+
+
+
+
+ begin
+ (?<=\()\s*(def|declare|defstruct|defonce|defmulti)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.variable.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.def_form.clojure
+ patterns
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ begin
+ (?<=$|.)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+
+
+ begin
+ (?<=\()\s*(prefer-method)\s+
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.variable.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.def_form.clojure
+ patterns
+
+
+ include
+ #metadata
+
+
+ match
+ \s*
+
+
+ include
+ #function_name
+
+
+ begin
+ (?<=$|.)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+ include
+ #all
+
+
+
+
+
+
+ begin
+ (?<=\()\s*(instance(\?))\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.tester.clojure
+
+ 2
+
+ name
+ keyword.other.mark.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.isInstance_form.clojure
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ (?<=\()\s*(cast)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.cast_form.clojure
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ (?<=\()\s*((new)\s+|(?=[a-zA-Z][a-zA-Z.]*\.(\s+|$|\))))
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.new_form.clojure
+ patterns
+
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*((\.\.?)\s+(?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?))
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.member_access_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(gen-class)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.genclass_form.clojure
+ patterns
+
+
+ include
+ #genclass_parameters
+
+
+
+
+ begin
+ (?<=\()\s*(gen-interface)\s+
+ beginCaptures
+
+ 1
+
+ name
+ support.function.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.geninterface_form.clojure
+ patterns
+
+
+ include
+ #geninterface_parameters
+
+
+
+
+ begin
+ (?<=\()\s*((catch)\s+)
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.catch_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_class_form_body
+
+
+
+
+ begin
+ \s+(?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(((set|swap|compare-and-set)(\!))\s+)
+ beginCaptures
+
+ 2
+
+ name
+ keyword.control.clojure
+
+ 3
+
+ name
+ keyword.other.mark.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.setvar_form.clojure
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ variable.parameter.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\()\s*(proxy)\s+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.clojure
+
+
+ end
+ (?=\))
+ name
+ meta.function.proxy_form.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ \[
+ end
+ \]
+ patterns
+
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*)
+ end
+ (?![a-zA-Z.])
+ name
+ entity.other.inherited-class.java.proxy.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ include
+ #all
+
+
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ (?=\[)
+ end
+ (?=\))
+ name
+ meta.function.body.proxy_form.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #parameters
+
+
+ begin
+ (?<=\])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #comment
+
+
+ begin
+ \(\s*
+ end
+ \)
+ name
+ meta.function.proxy.method.clojure
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #function_name
+
+
+ include
+ #function_body_comment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ string
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.clojure
+
+
+ name
+ string.quoted.double.clojure
+ patterns
+
+
+ include
+ #string_escape
+
+
+
+
+ match
+ \\(u[0-9a-fA-F]{4}|newline|tab|space|backspace|formfeed|return|[^\s])
+ name
+ constant.character.escape.clojure
+
+
+ begin
+ (\:{1,2})(?=[a-zA-Z+!\-_?0-9*/.$=])
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.symbole.clojure
+
+
+ comment
+ . is OK in symbol ?
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ name
+ constant.string.symbole.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+
+ begin
+ #"
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.clojure
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.clojure
+
+
+ name
+ string.regexp.clojure
+ patterns
+
+
+ include
+ source.regexp.oniguruma
+
+
+
+
+
+ string_escape
+
+ captures
+
+ 2
+
+ name
+ invalid.illegal.escape.string.clojure
+
+
+ match
+ \\(u[0-9a-fA-F]{4}|b|t|n|f|r|"|'|\\|[0-3]?[0-7]{1,2}|(.))
+ name
+ constant.character.escape.clojure
+
+ symbol
+
+ patterns
+
+
+ match
+ \b[A-Z_]{2,}\b
+ name
+ constant.other.java.clojure
+
+
+ match
+ (?<![a-zA-Z+!\-_?0-9*])\*[a-z\-]{2,}\*(?![a-zA-Z+!\-_?0-9*])
+ name
+ source.symbol.global.clojure
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*=])
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+ name
+ source.symbol.clojure
+ patterns
+
+
+ begin
+ [0-9]
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+ name
+ invalid.illegal.symbol.clojure
+
+
+ begin
+ [a-zA-Z]
+ end
+ ([+!\-_?*=#])?(?![a-zA-Z+!\-_?0-9*=])
+ endCaptures
+
+ 1
+
+ name
+ keyword.other.mark.clojure
+
+
+
+
+ begin
+ [+!\-_?*=]
+ end
+ (?![a-zA-Z+!\-_?0-9*=])
+
+
+
+
+ match
+ (?<=[a-zA-Z+!\-_?0-9*])\.(?=[a-zA-Z+!\-_?0-9*])
+ name
+ keyword.operator.classpath.clojure
+
+
+ match
+ (?<=[a-zA-Z+!\-_?0-9*])(/|\$)(?=[a-zA-Z+!\-_?0-9*])
+ name
+ keyword.operator.qualified.clojure
+
+
+
+ symbol_java_class
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ comment
+ TODO : use it
+ end
+ (?![a-zA-Z.$])
+ name
+ storage.type.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+ symbol_java_class_form_body
+
+ patterns
+
+
+ begin
+ (?=[a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ patterns
+
+
+ include
+ #symbol_java_inherited_class
+
+
+
+
+ begin
+ (?![a-zA-Z+!\-_?0-9*~#@'`/.$=])
+ end
+ (?=\))
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ include
+ #all
+
+
+
+ symbol_java_inherited_class
+
+ begin
+ (?=([a-z]+\.)*[A-Z][a-zA-Z]*(\$[A-Z][a-zA-Z]*)?)
+ end
+ (?![a-zA-Z.$])
+ name
+ entity.other.inherited-class.java.clojure
+ patterns
+
+
+ include
+ #symbol
+
+
+
+ vector
+
+ begin
+ \[(?!\])
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.begin.clojure
+
+
+ end
+ (?<!\[)\]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.vector.end.clojure
+
+
+ name
+ meta.expression.vector.clojure
+ patterns
+
+
+ include
+ #all
+
+
+
+
+ scopeName
+ source.clojure
+ uuid
+ 6A87759F-F746-4E84-B788-965B46363202
+
+
diff --git a/Clojure/Clojure.tmLanguage.cache b/Clojure/Clojure.tmLanguage.cache
new file mode 100644
index 0000000..ef0def6
Binary files /dev/null and b/Clojure/Clojure.tmLanguage.cache differ
diff --git a/Clojure/Comment.tmPreferences b/Clojure/Comment.tmPreferences
new file mode 100644
index 0000000..0623946
--- /dev/null
+++ b/Clojure/Comment.tmPreferences
@@ -0,0 +1,24 @@
+
+
+
+
+ name
+ Comment
+ scope
+ source.clojure
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ ;
+
+
+
+ uuid
+ 40910C79-E8F5-4930-8493-EC63AC6AAF0F
+
+
diff --git a/Clojure/Comment.tmPreferences.cache b/Clojure/Comment.tmPreferences.cache
new file mode 100644
index 0000000..cd17b91
Binary files /dev/null and b/Clojure/Comment.tmPreferences.cache differ
diff --git a/Clojure/Symbol List.tmPreferences b/Clojure/Symbol List.tmPreferences
new file mode 100644
index 0000000..0b69f1c
--- /dev/null
+++ b/Clojure/Symbol List.tmPreferences
@@ -0,0 +1,17 @@
+
+
+
+
+ name
+ Symbol List
+ scope
+ entity.global.clojure
+ settings
+
+ showInSymbolList
+ 1
+
+ uuid
+ 3C7566E1-E339-4F14-813D-12B3EA6A38BD
+
+
diff --git a/Clojure/Symbol List.tmPreferences.cache b/Clojure/Symbol List.tmPreferences.cache
new file mode 100644
index 0000000..768595b
Binary files /dev/null and b/Clojure/Symbol List.tmPreferences.cache differ
diff --git a/Color Scheme - Default/All Hallow's Eve.tmTheme b/Color Scheme - Default/All Hallow's Eve.tmTheme
new file mode 100644
index 0000000..47a6797
--- /dev/null
+++ b/Color Scheme - Default/All Hallow's Eve.tmTheme
@@ -0,0 +1,277 @@
+
+
+
+
+ author
+ David Heinemeier Hansson
+ name
+ All Hallow's Eve
+ settings
+
+
+ settings
+
+ background
+ #000000
+ caret
+ #FFFFFF
+ foreground
+ #FFFFFF
+ invisibles
+ #404040
+ lineHighlight
+ #333300
+ selection
+ #73597EE0
+
+
+
+ name
+ Text base
+ scope
+ text
+ settings
+
+ background
+ #434242
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Source base
+ scope
+ source
+ settings
+
+ background
+ #000000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #9933CC
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #3387CC
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #CC7833
+
+
+
+ name
+ Pre-processor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #D0D0FF
+
+
+
+ name
+ Pre-processor Directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Block comment
+ scope
+ source comment.block
+ settings
+
+ background
+ #9B9B9B
+ foreground
+ #FFFFFF
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #66CC33
+
+
+
+ name
+ String escapes
+ scope
+ string constant.character.escape
+ settings
+
+ foreground
+ #AAAAAA
+
+
+
+ name
+ String (executed)
+ scope
+ string.interpolated
+ settings
+
+ background
+ #CCCC33
+ foreground
+ #000000
+
+
+
+ name
+ Regular expression
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #CCCC33
+
+
+
+ name
+ String (literal)
+ scope
+ string.literal
+ settings
+
+ foreground
+ #CCCC33
+
+
+
+ name
+ String escapes (executed)
+ scope
+ string.interpolated constant.character.escape
+ settings
+
+ foreground
+ #555555
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Class inheritance
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Support function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #C83730
+
+
+
+ uuid
+ 37F22BDC-B2F4-11D9-850C-000A95A89C98
+
+
diff --git a/Color Scheme - Default/All Hallow's Eve.tmTheme.cache b/Color Scheme - Default/All Hallow's Eve.tmTheme.cache
new file mode 100644
index 0000000..abb927d
Binary files /dev/null and b/Color Scheme - Default/All Hallow's Eve.tmTheme.cache differ
diff --git a/Color Scheme - Default/Amy.tmTheme b/Color Scheme - Default/Amy.tmTheme
new file mode 100644
index 0000000..b3258c4
--- /dev/null
+++ b/Color Scheme - Default/Amy.tmTheme
@@ -0,0 +1,557 @@
+
+
+
+
+ name
+ Amy
+ author
+ William D. Neumann
+ settings
+
+
+ settings
+
+ background
+ #200020
+ caret
+ #7070FF
+ foreground
+ #D0D0FF
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #80000040
+ selection
+ #80000080
+
+
+
+ name
+ Comment
+ scope
+ comment.block
+ settings
+
+ background
+ #200020
+ fontStyle
+ italic
+ foreground
+ #404080
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #999999
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #707090
+
+
+
+ name
+ Integer
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #7090B0
+
+
+
+ name
+ Int32 constant
+ scope
+ constant.numeric.integer.int32
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Int64 constant
+ scope
+ constant.numeric.integer.int64
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Nativeint constant
+ scope
+ constant.numeric.integer.nativeint
+ settings
+
+ fontStyle
+ bold italic
+
+
+
+ name
+ Floating-point constant
+ scope
+ constant.numeric.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Character constant
+ scope
+ constant.character
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ Boolean constant
+ scope
+ constant.language.boolean
+ settings
+
+ foreground
+ #8080A0
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #008080
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #A080FF
+
+
+
+ name
+ Keyword operator
+ scope
+ keyword.operator
+ settings
+
+ foreground
+ #A0A0FF
+
+
+
+ name
+ Keyword decorator
+ scope
+ keyword.other.decorator
+ settings
+
+ foreground
+ #D0D0FF
+
+
+
+ name
+ Floating-point infix operator
+ scope
+ keyword.operator.infix.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Floating-point prefix operator
+ scope
+ keyword.operator.prefix.floating-point.ocaml
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Compiler directives
+ scope
+ keyword.other.directive
+ settings
+
+ fontStyle
+
+ foreground
+ #C080C0
+
+
+
+ name
+ Line-number directives
+ scope
+ keyword.other.directive.line-number
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #C080C0
+
+
+
+ name
+ Control keyword
+ scope
+ keyword.control
+ settings
+
+ foreground
+ #80A0FF
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #B0FFF0
+
+
+
+ name
+ Variants
+ scope
+ entity.name.type.variant
+ settings
+
+ foreground
+ #60B0FF
+
+
+
+ name
+ Polymorphic variants
+ scope
+ storage.type.variant.polymorphic, entity.name.type.variant.polymorphic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #60B0FF
+
+
+
+ name
+ Module definitions
+ scope
+ entity.name.type.module
+ settings
+
+ foreground
+ #B000B0
+
+
+
+ name
+ Module type definitions
+ scope
+ entity.name.type.module-type.ocaml
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #B000B0
+
+
+
+ name
+ Support modules
+ scope
+ support.other
+ settings
+
+ foreground
+ #A00050
+
+
+
+ name
+ Class name
+ scope
+ entity.name.type.class
+ settings
+
+ foreground
+ #70E080
+
+
+
+ name
+ Class type
+ scope
+ entity.name.type.class-type
+ settings
+
+ fontStyle
+
+ foreground
+ #70E0A0
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #50A0A0
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ foreground
+ #80B0B0
+
+
+
+ name
+ Token definition (ocamlyacc)
+ scope
+ entity.name.type.token
+ settings
+
+ fontStyle
+
+ foreground
+ #3080A0
+
+
+
+ name
+ Token reference (ocamlyacc)
+ scope
+ entity.name.type.token.reference
+ settings
+
+ fontStyle
+
+ foreground
+ #3CB0D0
+
+
+
+ name
+ Non-terminal definition (ocamlyacc)
+ scope
+ entity.name.function.non-terminal
+ settings
+
+ foreground
+ #90E0E0
+
+
+
+ name
+ Non-terminal reference (ocamlyacc)
+ scope
+ entity.name.function.non-terminal.reference
+ settings
+
+ foreground
+ #C0F0F0
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #009090
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ settings
+
+ background
+ #200020
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ background
+ #200020
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid - illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #FFFF00
+ fontStyle
+ bold
+ foreground
+ #400080
+
+
+
+ name
+ Invalid - depricated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #CC66FF
+ foreground
+ #200020
+
+
+
+ name
+ Camlp4 code
+ scope
+ source.camlp4.embedded
+ settings
+
+ background
+ #40008054
+
+
+
+ name
+ Camlp4 temp (parser)
+ scope
+ source.camlp4.embedded.parser.ocaml
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation
+ settings
+
+ foreground
+ #805080
+
+
+
+ uuid
+ 3C01FADD-7592-49DD-B7A5-1B82CA4E57B5
+
+
diff --git a/Color Scheme - Default/Amy.tmTheme.cache b/Color Scheme - Default/Amy.tmTheme.cache
new file mode 100644
index 0000000..0d2a4a7
Binary files /dev/null and b/Color Scheme - Default/Amy.tmTheme.cache differ
diff --git a/Color Scheme - Default/Blackboard.tmTheme b/Color Scheme - Default/Blackboard.tmTheme
new file mode 100644
index 0000000..18bb72e
--- /dev/null
+++ b/Color Scheme - Default/Blackboard.tmTheme
@@ -0,0 +1,350 @@
+
+
+
+
+ name
+ Blackboard
+ author
+ Domenico Carbotta
+ settings
+
+
+ settings
+
+ background
+ #0C1021
+ caret
+ #FFFFFFA6
+ foreground
+ #F8F8F8
+ invisibles
+ #FFFFFF40
+ lineHighlight
+ #FFFFFF0F
+ selection
+ #253B76
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #AEAEAE
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #D8FA3C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #FF6400
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ String
+ scope
+ string, meta.verbatim
+ settings
+
+ fontStyle
+
+ foreground
+ #61CE3C
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #AB2A1D
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #9D1E15
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Superclass
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FF6400
+
+
+
+ name
+ String interpolation
+ scope
+ string constant.other.placeholder
+ settings
+
+ fontStyle
+
+ foreground
+ #FF6400
+
+
+
+ name
+ meta.function-call.py
+ scope
+ meta.function-call.py
+ settings
+
+ fontStyle
+
+ foreground
+ #BECDE6
+
+
+
+ name
+ meta.tag
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #7F90AA
+
+
+
+ name
+ entity.name.section
+ scope
+ entity.name.section
+ settings
+
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ OCaml variant
+ scope
+ keyword.type.variant
+ settings
+
+ foreground
+ #D5E0F3
+
+
+
+ name
+ OCaml operator
+ scope
+ source.ocaml keyword.operator.symbol
+ settings
+
+ foreground
+ #F8F8F8
+
+
+
+ name
+ OCaml infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ OCaml prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix
+ settings
+
+ fontStyle
+
+ foreground
+ #8DA6CE
+
+
+
+ name
+ OCaml f-p infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p constant
+ scope
+ source.ocaml constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ LaTeX environment
+ scope
+ text.tex.latex meta.function.environment
+ settings
+
+ background
+ #FFFFFF08
+
+
+
+ name
+ LaTeX environment (nested)
+ scope
+ text.tex.latex meta.function.environment meta.function.environment
+ settings
+
+ background
+ #7A96FA08
+
+
+
+ name
+ Latex support
+ scope
+ text.tex.latex support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FBDE2D
+
+
+
+ name
+ PList unquoted string
+ scope
+ source.plist string.unquoted, source.plist keyword.operator
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ uuid
+ A2C6BAA7-90D0-4147-BBF5-96B0CD92D109
+
+
diff --git a/Color Scheme - Default/Blackboard.tmTheme.cache b/Color Scheme - Default/Blackboard.tmTheme.cache
new file mode 100644
index 0000000..00a892e
Binary files /dev/null and b/Color Scheme - Default/Blackboard.tmTheme.cache differ
diff --git a/Color Scheme - Default/Cobalt.tmTheme b/Color Scheme - Default/Cobalt.tmTheme
new file mode 100644
index 0000000..9790358
--- /dev/null
+++ b/Color Scheme - Default/Cobalt.tmTheme
@@ -0,0 +1,559 @@
+
+
+
+
+ comment
+ Created by Jacob Rus. Based on ‘Slate’ by Wilson Miner
+ author
+ Jacob Rus
+ name
+ Cobalt
+ settings
+
+
+ settings
+
+ background
+ #002240
+ caret
+ #FFFFFF
+ foreground
+ #FFFFFF
+ invisibles
+ #FFFFFF26
+ lineHighlight
+ #00000059
+ selection
+ #B36539BF
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation - (punctuation.definition.string || punctuation.definition.comment)
+ settings
+
+ fontStyle
+
+ foreground
+ #E1EFFF
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #FF628C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #FFDD00
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #FF9D00
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FFEE80
+
+
+
+ name
+ String
+ scope
+ string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string
+ settings
+
+ fontStyle
+
+ foreground
+ #3AD900
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0088FF
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #80FFBB
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+ foreground
+ #CCCCCC
+
+
+
+ name
+ Lang Variable
+ scope
+ variable.language
+ settings
+
+ fontStyle
+
+ foreground
+ #FF80E1
+
+
+
+ name
+ Function Call
+ scope
+ meta.function-call
+ settings
+
+ foreground
+ #FFEE80
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #800F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Embedded Source
+ scope
+ text source, string.unquoted.heredoc, source source
+ settings
+
+ background
+ #223545
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #80FCFF
+
+
+
+ name
+ String embedded-source
+ scope
+ string.quoted source
+ settings
+
+ fontStyle
+
+ foreground
+ #9EFF80
+
+
+
+ name
+ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #80FF82
+
+
+
+ name
+ String.regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #80FFC2
+
+
+
+ name
+ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #EDEF7D
+
+
+
+ name
+ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FFB054
+
+
+
+ name
+ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #EB939A
+
+
+
+ name
+ Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #FF1E00
+
+
+
+ name
+ C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ Doctype/XML Processing
+ scope
+ meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string
+ settings
+
+ foreground
+ #73817D
+
+
+
+ name
+ Meta.tag.A
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #9EFFFF
+
+
+
+ name
+ css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #9EFFFF
+
+
+
+ name
+ css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #FFB454
+
+
+
+ name
+ css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #5FE461
+
+
+
+ name
+ css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #9DF39F
+
+
+
+ name
+ css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F6F080
+
+
+
+ name
+ css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #F6AA11
+
+
+
+ name
+ css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #EDF080
+
+
+
+ name
+ css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #EB939A
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #000E1A
+ fontStyle
+
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #4C0900
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #806F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #154F00
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Raw Markup
+ scope
+ markup.raw
+ settings
+
+ background
+ #8FDDF630
+
+
+
+ name
+ Block Quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #004480
+
+
+
+ name
+ List
+ scope
+ markup.list
+ settings
+
+ background
+ #130D26
+
+
+
+ name
+ Bold Markup
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C1AFFF
+
+
+
+ name
+ Italic Markup
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #B8FFD9
+
+
+
+ name
+ Heading Markup
+ scope
+ markup.heading
+ settings
+
+ background
+ #001221
+ fontStyle
+ bold
+ foreground
+ #C8E4FD
+
+
+
+ uuid
+ 06CD1FB2-A00A-4F8C-97B2-60E131980454
+
+
diff --git a/Color Scheme - Default/Cobalt.tmTheme.cache b/Color Scheme - Default/Cobalt.tmTheme.cache
new file mode 100644
index 0000000..564dd66
Binary files /dev/null and b/Color Scheme - Default/Cobalt.tmTheme.cache differ
diff --git a/Color Scheme - Default/Dawn.tmTheme b/Color Scheme - Default/Dawn.tmTheme
new file mode 100644
index 0000000..a09a3bf
--- /dev/null
+++ b/Color Scheme - Default/Dawn.tmTheme
@@ -0,0 +1,441 @@
+
+
+
+
+ author
+ David Powers
+ comment
+ Dawn
+ name
+ Dawn
+ settings
+
+
+ settings
+
+ background
+ #F9F9F9
+ caret
+ #000000
+ foreground
+ #080808
+ invisibles
+ #4B4B7E80
+ lineHighlight
+ #2463B41F
+ selection
+ #275FFF4D
+ shadow
+ #808080
+ shadowWidth
+ 6
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #5A525F
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #811F24
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #BF4F24
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #794938
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #A71D5D
+
+
+
+ name
+ String
+ scope
+ string | punctuation.definition.string
+ settings
+
+ fontStyle
+
+ foreground
+ #0B6125
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #691C97
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ Punctuation.separator
+ scope
+ punctuation.separator
+ settings
+
+ foreground
+ #794938
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ bold italic underline
+ foreground
+ #B52A1D
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #B52A1D
+ fontStyle
+ italic underline
+ foreground
+ #F8F8F8
+
+
+
+ name
+ String embedded-source
+ scope
+ string source
+ settings
+
+ background
+ #6F8BBA26
+ fontStyle
+
+ foreground
+ #080808
+
+
+
+ name
+ String constant
+ scope
+ string constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #696969
+
+
+
+ name
+ String variable
+ scope
+ string variable
+ settings
+
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ String.regexp
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #CF5628
+
+
+
+ name
+ String.regexp.«special»
+ scope
+ string.regexp.character-class, string.regexp constant.character.escaped, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ fontStyle
+ bold italic
+ foreground
+ #CF5628
+
+
+
+ name
+ String.regexp constant.character.escape
+ scope
+ string.regexp constant.character.escape
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #811F24
+
+
+
+ name
+ Embedded Source
+ scope
+ text source
+ settings
+
+ background
+ #6F8BBA26
+
+
+
+ name
+ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #693A17
+
+
+
+ name
+ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #B4371F
+
+
+
+ name
+ Support.variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.list
+ scope
+ markup.list
+ settings
+
+ foreground
+ #693A17
+
+
+
+ name
+ Markup.heading
+ scope
+ markup.heading | markup.heading entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #19356D
+
+
+
+ name
+ Markup.quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #BBBBBB30
+ fontStyle
+ italic
+ foreground
+ #0B6125
+
+
+
+ name
+ Markup.italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #080808
+
+
+
+ name
+ Markup.bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #080808
+
+
+
+ name
+ Markup.underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #080808
+
+
+
+ name
+ Markup.link
+ scope
+ markup.link
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #BBBBBB30
+ fontStyle
+
+ foreground
+ #234A97
+
+
+
+ name
+ Markup.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #B52A1D
+
+
+
+ name
+ Meta.separator
+ scope
+ meta.separator
+ settings
+
+ background
+ #DCDCDC
+ fontStyle
+ bold
+ foreground
+ #19356D
+
+
+
+ uuid
+ E7E82498-F9EA-49A6-A0D8-12327EA46B01
+
+
diff --git a/Color Scheme - Default/Dawn.tmTheme.cache b/Color Scheme - Default/Dawn.tmTheme.cache
new file mode 100644
index 0000000..178612f
Binary files /dev/null and b/Color Scheme - Default/Dawn.tmTheme.cache differ
diff --git a/Color Scheme - Default/Eiffel.tmTheme b/Color Scheme - Default/Eiffel.tmTheme
new file mode 100644
index 0000000..1e8160c
--- /dev/null
+++ b/Color Scheme - Default/Eiffel.tmTheme
@@ -0,0 +1,439 @@
+
+
+
+
+ name
+ Eiffel
+ author
+ Ian Joyner
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #C3DCFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #00B418
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0206FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0100B6
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #CD0000
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #C5060B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #585CF6
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #D80800
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #26B31A
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C450D
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, keyword.other.name-of-parameter.objc
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000A2
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #70727E
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3C4C72
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #06960E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #21439C
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #427FF530
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.xml-processing, declaration.xml-processing
+ settings
+
+ fontStyle
+
+ foreground
+ #68685B
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.doctype, declaration.doctype
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ meta.doctype.DTD, declaration.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #1C02FF
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C07FF
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #000000
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #B90690
+
+
+
+ uuid
+ ADD7FDE7-C6BE-454B-A71A-7951ED54FB04
+
+
diff --git a/Color Scheme - Default/Espresso Libre.tmTheme b/Color Scheme - Default/Espresso Libre.tmTheme
new file mode 100644
index 0000000..2ccae64
--- /dev/null
+++ b/Color Scheme - Default/Espresso Libre.tmTheme
@@ -0,0 +1,402 @@
+
+
+
+
+ author
+ Chris Thomas
+ name
+ Espresso Libre
+ settings
+
+
+ settings
+
+ background
+ #2A211C
+ caret
+ #889AFF
+ foreground
+ #BDAE9D
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #3A312C
+ selection
+ #C3DCFF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #43A8ED
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #44AA43
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C5656B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #585CF6
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #318495
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #049B0A
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #2FE420
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #9AFF87
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, keyword.other.name-of-parameter.objc
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FF9358
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #8B8E9C
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #7290D9
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #00AF0E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #2F5FE0
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #F5AA7730
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ fontStyle
+
+ foreground
+ #8F7E65
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.tag.sgml.doctype
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #43A8ED
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ uuid
+ 6B90703E-4E4B-43C8-9D32-921BEDF6D725
+
+
diff --git a/Color Scheme - Default/IDLE.tmTheme b/Color Scheme - Default/IDLE.tmTheme
new file mode 100644
index 0000000..704296f
--- /dev/null
+++ b/Color Scheme - Default/IDLE.tmTheme
@@ -0,0 +1,235 @@
+
+
+
+
+ author
+ Domenico Carbotta
+ name
+ IDLE
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #BAD6FD
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #919191
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #00A33F
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #FF5600
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #FF5600
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ foreground
+ #21439C
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #21439C
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #A535AE
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ String interpolation
+ scope
+ constant.other.placeholder.py
+ settings
+
+ fontStyle
+
+ foreground
+ #990000
+
+
+
+ uuid
+ DDC0CBE1-442B-4CB5-80E4-26E4CFB3A277
+
+
diff --git a/Color Scheme - Default/LAZY.tmTheme b/Color Scheme - Default/LAZY.tmTheme
new file mode 100644
index 0000000..09ff511
--- /dev/null
+++ b/Color Scheme - Default/LAZY.tmTheme
@@ -0,0 +1,291 @@
+
+
+
+
+ author
+ Domenico Carbotta
+ name
+ LAZY
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #7C7C7C
+ foreground
+ #000000
+ invisibles
+ #B6B6B6
+ lineHighlight
+ #EFFCA68F
+ selection
+ #E3FC8D
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #8C868F
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Latex Entity
+ scope
+ text.tex.latex entity
+ settings
+
+ fontStyle
+
+ foreground
+ #D62A28
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+
+ foreground
+ #FF7800
+
+
+
+ name
+ String
+ scope
+ string, meta.verbatim
+ settings
+
+ fontStyle
+
+ foreground
+ #409B1C
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #990000
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #9D1E15
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Superclass
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3B5BB5
+
+
+
+ name
+ String interpolation
+ scope
+ string constant.other.placeholder
+ settings
+
+ fontStyle
+
+ foreground
+ #671EBB
+
+
+
+ name
+ meta.function-call.py
+ scope
+ meta.function-call.py
+ settings
+
+ fontStyle
+
+ foreground
+ #3E4558
+
+
+
+ name
+ meta.tag
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #3A4A64
+
+
+
+ name
+ OCaml variant
+ scope
+ keyword.type.variant
+ settings
+
+ fontStyle
+
+ foreground
+ #7F90AA
+
+
+
+ name
+ OCaml operator
+ scope
+ source.ocaml keyword.operator
+ settings
+
+ foreground
+ #000000
+
+
+
+ name
+ OCaml infix operator
+ scope
+ source.ocaml keyword.operator.symbol.infix
+ settings
+
+ fontStyle
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ OCaml prefix operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix
+ settings
+
+ foreground
+ #3B5BB5
+
+
+
+ name
+ OCaml infix f-p operator
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml prefix f-p operator
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml f-p constant
+ scope
+ source.ocaml constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ uuid
+ A1E55FCB-3CD2-4811-9E73-D9B87419443A
+
+
diff --git a/Color Scheme - Default/Mac Classic.tmTheme b/Color Scheme - Default/Mac Classic.tmTheme
new file mode 100644
index 0000000..4b789df
--- /dev/null
+++ b/Color Scheme - Default/Mac Classic.tmTheme
@@ -0,0 +1,450 @@
+
+
+
+
+ author
+ Chris Thomas
+ name
+ Mac Classic
+ settings
+
+
+ settings
+
+ background
+ #FFFFFF
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #4D97FF54
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Keyword
+ scope
+ keyword, storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000FF
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #0000CD
+
+
+
+ name
+ User-defined constant
+ scope
+ constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C5060B
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #585CF6
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ fontStyle
+
+ foreground
+ #318495
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #036A07
+
+
+
+ name
+ String interpolation
+ scope
+ constant.character.escape, string source
+ settings
+
+ fontStyle
+
+ foreground
+ #26B31A
+
+
+
+ name
+ Preprocessor line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #1A921C
+
+
+
+ name
+ Preprocessor directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C450D
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function, support.function.any-method
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000A2
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited class name
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function parameter
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function argument and result types
+ scope
+ storage.type.method
+ settings
+
+ fontStyle
+
+ foreground
+ #70727E
+
+
+
+ name
+ Section
+ scope
+ meta.section entity.name.section, declaration.section entity.name.section
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3C4C72
+
+
+
+ name
+ Library object
+ scope
+ support.class, support.type
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6D79DE
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #06960E
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #21439C
+
+
+
+ name
+ JS: Operator
+ scope
+ keyword.operator.js
+ settings
+
+ foreground
+ #687687
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #990000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Invalid trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Embedded source
+ scope
+ text source, string.unquoted
+ settings
+
+ background
+ #0000000D
+
+
+
+ name
+ Embedded embedded source
+ scope
+ text source string.unquoted, text source text source
+ settings
+
+ background
+ #0000000F
+
+
+
+ name
+ Markup XML declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ fontStyle
+
+ foreground
+ #68685B
+
+
+
+ name
+ Markup DOCTYPE
+ scope
+ meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string
+ settings
+
+ fontStyle
+
+ foreground
+ #888888
+
+
+
+ name
+ Markup DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #1C02FF
+
+
+
+ name
+ Markup name of tag
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Markup tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0C07FF
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #000000
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #B90690
+
+
+
+ uuid
+ 71D40D9D-AE48-11D9-920A-000D93589AF6
+
+
diff --git a/Color Scheme - Default/Mac Classic.tmTheme.cache b/Color Scheme - Default/Mac Classic.tmTheme.cache
new file mode 100644
index 0000000..0645345
Binary files /dev/null and b/Color Scheme - Default/Mac Classic.tmTheme.cache differ
diff --git a/Color Scheme - Default/MagicWB (Amiga).tmTheme b/Color Scheme - Default/MagicWB (Amiga).tmTheme
new file mode 100644
index 0000000..7897886
--- /dev/null
+++ b/Color Scheme - Default/MagicWB (Amiga).tmTheme
@@ -0,0 +1,376 @@
+
+
+
+
+ author
+ Allan Odgaard
+ comment
+ Inspired by the original 8 MagicWB colors from Martin Huttenloher
+ name
+ MagicWB (Amiga)
+ settings
+
+
+ settings
+
+ background
+ #969696
+ caret
+ #FFFFFF
+ foreground
+ #000000
+ invisibles
+ #FF38FF
+ lineHighlight
+ #00000012
+ selection
+ #B1B1B1
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #8D2E75
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ background
+ #FF000033
+ fontStyle
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Constant: Built-in
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFA995
+
+
+
+ name
+ Constant: User-defined
+ scope
+ constant.character, constant.other
+ settings
+
+ background
+ #0000FF33
+ fontStyle
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3A68A3
+
+
+
+ name
+ Type Name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Inherited Class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Function Name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Function Argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Entity Name
+ scope
+ entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #0000FF
+
+
+
+ name
+ Tag Attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3A68A3
+
+
+
+ name
+ Library Function
+ scope
+ support.function
+ settings
+
+ foreground
+ #E5B3FF
+
+
+
+ name
+ Objective-C Method Call
+ scope
+ support.function.any-method
+ settings
+
+ fontStyle
+
+ foreground
+ #000000
+
+
+
+ name
+ Objective-C Method Call - :
+ scope
+ support.function.any-method - punctuation
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Library Constant
+ scope
+ support.constant
+ settings
+
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Library Class/Type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #FFA995
+
+
+
+ name
+ Library Variable
+ scope
+ support.variable
+ settings
+
+ foreground
+ #3A68A3
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #797979
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Include <system>
+ scope
+ string.quoted.other.lt-gt.include
+ settings
+
+ background
+ #969696
+ fontStyle
+ italic
+ foreground
+ #FFA995
+
+
+
+ name
+ Include "user"
+ scope
+ string.quoted.double.include
+ settings
+
+ background
+ #969696
+ foreground
+ #FFA995
+
+
+
+ name
+ Markup: List Item
+ scope
+ markup.list
+ settings
+
+ foreground
+ #4D4E60
+
+
+
+ name
+ Markup: Raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #0000FF
+ foreground
+ #FFFFFF
+
+
+
+ name
+ Markup: Quote (Email)
+ scope
+ markup.quote
+ settings
+
+ foreground
+ #00F0C9
+
+
+
+ name
+ Markup: Quote Double (Email)
+ scope
+ markup.quote markup.quote
+ settings
+
+ fontStyle
+
+ foreground
+ #4C457E
+
+
+
+ name
+ Embedded Source
+ scope
+ text.html source
+ settings
+
+ background
+ #8A9ECB
+
+
+
+ uuid
+ B0A18BAA-6220-481C-9914-F6D3E51B5410
+
+
diff --git a/Color Scheme - Default/Monokai Bright.tmTheme b/Color Scheme - Default/Monokai Bright.tmTheme
new file mode 100644
index 0000000..3b53e4e
--- /dev/null
+++ b/Color Scheme - Default/Monokai Bright.tmTheme
@@ -0,0 +1,390 @@
+
+
+
+
+ name
+ Monokai Bright
+ settings
+
+
+ settings
+
+ background
+ #272822
+ caret
+ #F8F8F0
+ foreground
+ #F8F8F2
+ invisibles
+ #3B3A32
+ lineHighlight
+ #3E3D32
+ selection
+ #9D550F
+ selectionForeground
+ #fffff8
+ inactiveSelection
+ #bbbbbb
+ inactiveSelectionForeground
+ #222222
+ findHighlight
+ #FFE792
+ findHighlightForeground
+ #000000
+ activeGuide
+ #9D550FB0
+
+ bracketsForeground
+ #F8F8F2A5
+ bracketsOptions
+ underline
+
+ bracketContentsForeground
+ #F8F8F2A5
+ bracketContentsOptions
+ underline
+
+ tagsOptions
+ stippled_underline
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FD971F
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #F92672
+ fontStyle
+
+ foreground
+ #F8F8F0
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #AE81FF
+ foreground
+ #F8F8F0
+
+
+
+ name
+ JSON String
+ scope
+ meta.structure.dictionary.json string.quoted.double.json
+ settings
+
+ foreground
+ #CFCFC2
+
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ scope
+ constant.numeric.line-number.find-in-files - match
+ settings
+
+ foreground
+ #AE81FFA0
+
+
+
+ scope
+ entity.name.filename.find-in-files
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ uuid
+ D8D5E82E-3D5B-46B5-B38E-8C841C21347E
+
+
diff --git a/Color Scheme - Default/Monokai.tmTheme b/Color Scheme - Default/Monokai.tmTheme
new file mode 100644
index 0000000..c179cbe
--- /dev/null
+++ b/Color Scheme - Default/Monokai.tmTheme
@@ -0,0 +1,387 @@
+
+
+
+
+ name
+ Monokai
+ settings
+
+
+ settings
+
+ background
+ #272822
+ caret
+ #F8F8F0
+ foreground
+ #F8F8F2
+ invisibles
+ #3B3A32
+ lineHighlight
+ #3E3D32
+ selection
+ #49483E
+ findHighlight
+ #FFE792
+ findHighlightForeground
+ #000000
+ selectionBorder
+ #222218
+ activeGuide
+ #9D550FB0
+
+ bracketsForeground
+ #F8F8F2A5
+ bracketsOptions
+ underline
+
+ bracketContentsForeground
+ #F8F8F2A5
+ bracketContentsOptions
+ underline
+
+ tagsOptions
+ stippled_underline
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #AE81FF
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #FD971F
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #F92672
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #66D9EF
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #F92672
+ fontStyle
+
+ foreground
+ #F8F8F0
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #AE81FF
+ foreground
+ #F8F8F0
+
+
+
+ name
+ JSON String
+ scope
+ meta.structure.dictionary.json string.quoted.double.json
+ settings
+
+ foreground
+ #CFCFC2
+
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ foreground
+ #75715E
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #F92672
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ foreground
+ #A6E22E
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ scope
+ constant.numeric.line-number.find-in-files - match
+ settings
+
+ foreground
+ #AE81FFA0
+
+
+
+ scope
+ entity.name.filename.find-in-files
+ settings
+
+ foreground
+ #E6DB74
+
+
+
+
+ uuid
+ D8D5E82E-3D5B-46B5-B38E-8C841C21347D
+
+
diff --git a/Color Scheme - Default/Monokai.tmTheme.cache b/Color Scheme - Default/Monokai.tmTheme.cache
new file mode 100644
index 0000000..ee41eb2
Binary files /dev/null and b/Color Scheme - Default/Monokai.tmTheme.cache differ
diff --git a/Color Scheme - Default/Pastels on Dark.tmTheme b/Color Scheme - Default/Pastels on Dark.tmTheme
new file mode 100644
index 0000000..e392860
--- /dev/null
+++ b/Color Scheme - Default/Pastels on Dark.tmTheme
@@ -0,0 +1,701 @@
+
+
+
+
+ author
+ Mats Persson
+ name
+ Pastels on Dark
+ settings
+
+
+ settings
+
+ background
+ #211E1E
+ caret
+ #FFFFFF
+ foreground
+ #DADADA
+ invisibles
+ #4F4D4D
+ lineHighlight
+ #353030
+ selection
+ #73597E80
+
+
+
+ name
+ Comments
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #555555
+
+
+
+ name
+ Comments Block
+ scope
+ comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #555555
+
+
+
+ name
+ Strings
+ scope
+ string
+ settings
+
+ foreground
+ #AD9361
+
+
+
+ name
+ Numbers
+ scope
+ constant.numeric
+ settings
+
+ fontStyle
+
+ foreground
+ #CCCCCC
+
+
+
+ name
+ Keywords
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #A1A1FF
+
+
+
+ name
+ Preprocessor Line
+ scope
+ meta.preprocessor
+ settings
+
+ fontStyle
+
+ foreground
+ #2F006E
+
+
+
+ name
+ Preprocessor Directive
+ scope
+ keyword.control.import
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Functions
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #A1A1FF
+
+
+
+ name
+ Function result
+ scope
+ declaration.function function-result
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Function name
+ scope
+ declaration.function function-name
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Function argument name
+ scope
+ declaration.function argument-name
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Function argument type
+ scope
+ declaration.function function-arg-type
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Function argument variable
+ scope
+ declaration.function function-argument
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Class name
+ scope
+ declaration.class class-name
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Class inheritance
+ scope
+ declaration.class class-inheritance
+ settings
+
+ fontStyle
+ italic underline
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #FF0000
+ fontStyle
+ bold
+ foreground
+ #FFF9F9
+
+
+
+ name
+ Invalid Trailing Whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #FFD0D0
+
+
+
+ name
+ Section
+ scope
+ declaration.section section-name
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Interpolation
+ scope
+ string.interpolation
+ settings
+
+ foreground
+ #C10006
+
+
+
+ name
+ Regular Expressions
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #666666
+
+
+
+ name
+ Variables
+ scope
+ variable
+ settings
+
+ foreground
+ #C1C144
+
+
+
+ name
+ Constants
+ scope
+ constant
+ settings
+
+ foreground
+ #6782D3
+
+
+
+ name
+ Character Constants
+ scope
+ constant.character
+ settings
+
+ fontStyle
+
+ foreground
+ #AFA472
+
+
+
+ name
+ Language Constants
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E30
+
+
+
+ name
+ Embedded Code
+ scope
+ embedded
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Tag name
+ scope
+ keyword.markup.element-name
+ settings
+
+ fontStyle
+
+ foreground
+ #858EF4
+
+
+
+ name
+ Attribute name
+ scope
+ keyword.markup.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #9B456F
+
+
+
+ name
+ Attribute with Value
+ scope
+ meta.attribute-with-value
+ settings
+
+ fontStyle
+
+ foreground
+ #9B456F
+
+
+
+ name
+ Exceptions
+ scope
+ keyword.exception
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #C82255
+
+
+
+ name
+ Operators
+ scope
+ keyword.operator
+ settings
+
+ fontStyle
+
+ foreground
+ #47B8D6
+
+
+
+ name
+ Control Structures
+ scope
+ keyword.control
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #6969FA
+
+
+
+ name
+ HTML: DocInfo XML
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ foreground
+ #68685B
+
+
+
+ name
+ HTML: DocType
+ scope
+ meta.tag.sgml.doctype
+ settings
+
+ foreground
+ #888888
+
+
+
+ name
+ HTML: DocInfo DTD
+ scope
+ string.quoted.docinfo.doctype.DTD
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: ServerSide Includes
+ scope
+ comment.other.server-side-include.xhtml, comment.other.server-side-include.html
+ settings
+
+ foreground
+ #909090
+
+
+
+ name
+ HTML: Tag
+ scope
+ text.html declaration.tag, text.html meta.tag, text.html entity.name.tag.xhtml
+ settings
+
+ foreground
+ #858EF4
+
+
+
+ name
+ HTML: attribute=""
+ scope
+ keyword.markup.attribute-name
+ settings
+
+ foreground
+ #9B456F
+
+
+
+ name
+ PHP: PHPdocs
+ scope
+ keyword.other.phpdoc.php
+ settings
+
+ foreground
+ #777777
+
+
+
+ name
+ PHP: Include() & Require()
+ scope
+ keyword.other.include.php
+ settings
+
+ foreground
+ #C82255
+
+
+
+ name
+ PHP: Constants Core Predefined
+ scope
+ support.constant.core.php
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E20
+
+
+
+ name
+ PHP: Constants Standard Predefined
+ scope
+ support.constant.std.php
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #DE8E10
+
+
+
+ name
+ PHP: Variables Globals
+ scope
+ variable.other.global.php
+ settings
+
+ foreground
+ #B72E1D
+
+
+
+ name
+ PHP: Variables Safer Globals
+ scope
+ variable.other.global.safer.php
+ settings
+
+ foreground
+ #00FF00
+
+
+
+ name
+ PHP: Strings Single-Quoted
+ scope
+ string.quoted.single.php
+ settings
+
+ foreground
+ #BFA36D
+
+
+
+ name
+ PHP: Keywords Storage
+ scope
+ keyword.storage.php
+ settings
+
+ foreground
+ #6969FA
+
+
+
+ name
+ PHP: Strings Double-Quoted
+ scope
+ string.quoted.double.php
+ settings
+
+ foreground
+ #AD9361
+
+
+
+ name
+ CSS: Selectors #ID
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ foreground
+ #EC9E00
+
+
+
+ name
+ CSS: Selectors <Elements>
+ scope
+ entity.name.tag.css
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #B8CD06
+
+
+
+ name
+ CSS: Selectors .ClassName
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ foreground
+ #EDCA06
+
+
+
+ name
+ CSS: Selectors :PseudoClass
+ scope
+ entity.other.attribute-name.pseudo-class.css
+ settings
+
+ foreground
+ #2E759C
+
+
+
+ name
+ CSS: Invalid Comma
+ scope
+ invalid.bad-comma.css
+ settings
+
+ background
+ #FF0000
+ foreground
+ #FFFFFF
+
+
+
+ name
+ CSS: Property Value
+ scope
+ support.constant.property-value.css
+ settings
+
+ foreground
+ #9B2E4D
+
+
+
+ name
+ CSS: Property Keyword
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #E1C96B
+
+
+
+ name
+ CSS: Property Colours
+ scope
+ constant.other.rgb-value.css
+ settings
+
+ foreground
+ #666633
+
+
+
+ name
+ CSS: Font Names
+ scope
+ support.constant.font-name.css
+ settings
+
+ foreground
+ #666633
+
+
+
+ name
+ TMLangDef: Keys
+ scope
+ support.constant.tm-language-def, support.constant.name.tm-language-def
+ settings
+
+ foreground
+ #7171F3
+
+
+
+ name
+ CSS: Units
+ scope
+ keyword.other.unit.css
+ settings
+
+ foreground
+ #6969FA
+
+
+
+ uuid
+ 343011CC-B7DF-11D9-B5C6-000D93C8BE28
+
+
diff --git a/Color Scheme - Default/Slush & Poppies.tmTheme b/Color Scheme - Default/Slush & Poppies.tmTheme
new file mode 100644
index 0000000..02ecbcb
--- /dev/null
+++ b/Color Scheme - Default/Slush & Poppies.tmTheme
@@ -0,0 +1,336 @@
+
+
+
+
+ author
+ William D. Neumann
+ name
+ Slush & Poppies
+ settings
+
+
+ settings
+
+ background
+ #F1F1F1
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000026
+ selection
+ #B0B0FF
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #406040
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #C03030
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #0080A0
+
+
+
+ name
+ OCaml floating-point constants
+ scope
+ source.ocaml constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Character constants
+ scope
+ constant.character
+ settings
+
+ foreground
+ #800000
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.parameter, variable.other
+ settings
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #2060A0
+
+
+
+ name
+ Operators
+ scope
+ keyword.operator
+ settings
+
+ fontStyle
+
+ foreground
+ #2060A0
+
+
+
+ name
+ OCaml prefix f-p operators
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ OCaml infix f-p operators
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Module Keyword
+ scope
+ entity.name.module, support.other.module
+ settings
+
+ fontStyle
+
+ foreground
+ #0080FF
+
+
+
+ name
+ Storage types
+ scope
+ storage.type
+ settings
+
+ foreground
+ #A08000
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #008080
+
+
+
+ name
+ Variant types
+ scope
+ entity.name.class.variant
+ settings
+
+ foreground
+ #C08060
+
+
+
+ name
+ Directives
+ scope
+ keyword.other.directive
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Line-number directives
+ scope
+ source.ocaml keyword.other.directive.line-number
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+
+ foreground
+ #800000
+
+
+
+ name
+ Type name
+ scope
+ storage.type.user-defined
+ settings
+
+ foreground
+ #800080
+
+
+
+ name
+ Class type name
+ scope
+ entity.name.type.class.type
+ settings
+
+ foreground
+ #8000C0
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ uuid
+ D68685B8-1CFE-4C10-99C4-E21CBC892376
+
+
diff --git a/Color Scheme - Default/Solarized (Dark).tmTheme b/Color Scheme - Default/Solarized (Dark).tmTheme
new file mode 100644
index 0000000..51aa484
--- /dev/null
+++ b/Color Scheme - Default/Solarized (Dark).tmTheme
@@ -0,0 +1,1897 @@
+
+
+
+
+ name
+ Solarized (dark)
+ settings
+
+
+ settings
+
+ background
+ #042029
+ caret
+ #819090
+ foreground
+ #839496
+ invisibles
+ #0A2933
+ lineHighlight
+ #0A2933
+ selection
+ #0A2933
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ StringNumber
+ scope
+ string
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #D33682
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #738A05
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name.type.class
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Variable start
+ scope
+ punctuation.definition.variable
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Embedded code markers
+ scope
+ punctuation.section.embedded.begin, punctuation.section.embedded.end
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language, meta.preprocessor
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Support.construct
+ scope
+ support.function.construct, keyword.other.new
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ Tag start/end
+ scope
+ punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Continuation
+ scope
+ punctuation.separator.continuation
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Library Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Special
+ scope
+ keyword.other.special-method
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ name
+ Quoted String
+ scope
+ string.quoted.double, string.quoted.single
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Quotes
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #C60000
+
+
+
+ name
+ CSS: Property
+ scope
+ entity.name.tag.css, support.type.property-name.css, meta.property-name.css
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ CSS: @font-face
+ scope
+ source.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Selector
+ scope
+ meta.selector.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS: {}
+ scope
+ punctuation.section.property-list.css
+ settings
+
+ foreground
+ #5A74CF
+
+
+
+ name
+ CSS: Numeric Value
+ scope
+ meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Value
+ scope
+ meta.property-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: !Important
+ scope
+ keyword.other.important.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Standard Value
+ scope
+ support.constant.color
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Tag
+ scope
+ entity.name.tag.css
+ settings
+
+ foreground
+ #738A13
+
+
+
+ name
+ CSS: : ,
+ scope
+ punctuation.separator.key-value.css, punctuation.terminator.rule.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS .class
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ CSS :pseudo
+ scope
+ entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ CSS: #id
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Function Name
+ scope
+ meta.function.js, entity.name.function.js, support.function.dom.js
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Source
+ scope
+ text.html.basic source.js.embedded.html
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Function
+ scope
+ storage.type.function.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Numeric Constant
+ scope
+ constant.numeric.js
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ JS: []
+ scope
+ meta.brace.square.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Storage Type
+ scope
+ storage.type.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ ()
+ scope
+ meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ {}
+ scope
+ meta.brace.curly.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: Doctype
+ scope
+ entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #899090
+
+
+
+ name
+ HTML: Comment Block
+ scope
+ comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #839496
+
+
+
+ name
+ HTML: Script
+ scope
+ entity.name.tag.script.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: Style
+ scope
+ source.css.embedded.html string.quoted.double.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: Text
+ scope
+ text.html.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #BD3800
+
+
+
+ name
+ HTML: =
+ scope
+ text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
+ settings
+
+ fontStyle
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: something=
+ scope
+ text.html.basic entity.other.attribute-name.html
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: "
+ scope
+ text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: <tag>
+ scope
+ entity.name.tag.block.any.html
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: style
+ scope
+ source.css.embedded.html entity.name.tag.style.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: <style>
+ scope
+ entity.name.tag.style.html
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: {}
+ scope
+ text.html.basic punctuation.section.property-list.css
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: Embeddable
+ scope
+ source.css.embedded.html, comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: Variable definition
+ scope
+ punctuation.definition.variable.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Function Name
+ scope
+ meta.function.method.with-arguments.ruby
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ Ruby: Variable
+ scope
+ variable.language.ruby
+ settings
+
+ foreground
+ #469186
+
+
+
+ name
+ Ruby: Function
+ scope
+ entity.name.function.ruby
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Keyword Control
+ scope
+ keyword.control.ruby, keyword.control.def.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #738A05
+
+
+
+ name
+ Ruby: Class
+ scope
+ keyword.control.class.ruby, meta.class.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Class Name
+ scope
+ entity.name.type.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Keyword
+ scope
+ keyword.control.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Support Class
+ scope
+ support.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Constant
+ scope
+ constant.language.ruby, constant.numeric.ruby
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Constant Other
+ scope
+ variable.other.constant.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: :symbol
+ scope
+ constant.other.symbol.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Punctuation Section ''
+ scope
+ punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ PHP: Include
+ scope
+ keyword.control.import.include.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Ruby: erb =
+ scope
+ text.html.ruby meta.tag.inline.any.html
+ settings
+
+ fontStyle
+
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: erb ""
+ scope
+ text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: Quoted Single
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Class Names
+ scope
+ support.class.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: []
+ scope
+ keyword.operator.index-start.php, keyword.operator.index-end.php
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Array
+ scope
+ meta.array.php
+ settings
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Array()
+ scope
+ meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Begin
+ scope
+ punctuation.definition.array.begin, punctuation.definition.array.end
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Numeric Constant
+ scope
+ constant.numeric.php
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: New
+ scope
+ keyword.other.new.php
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ PHP: ::
+ scope
+ keyword.operator.class
+ settings
+
+ fontStyle
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Other Property
+ scope
+ variable.other.property.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Class
+ scope
+ storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Class Function
+ settings
+
+
+
+ name
+ PHP: Semicolon
+ scope
+ punctuation.terminator.expression.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Inherited Class
+ scope
+ meta.other.inherited-class.php
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Storage Type
+ scope
+ storage.type.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function
+ scope
+ entity.name.function.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Function Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function Call
+ scope
+ entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Comment
+ scope
+ keyword.other.phpdoc
+ settings
+
+ fontStyle
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Source Emebedded
+ scope
+ source.php.embedded.block.html
+ settings
+
+ foreground
+ #BD3613
+
+
+
+ name
+ PHP: Storage Type Function
+ scope
+ storage.type.function.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ C: constant
+ scope
+ constant.numeric.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Meta Preprocessor
+ scope
+ meta.preprocessor.c.include, meta.preprocessor.macro.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Keyword
+ scope
+ keyword.control.import.define.c, keyword.control.import.include.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Function Preprocessor
+ scope
+ entity.name.function.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: include <something.c>
+ scope
+ meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Function
+ scope
+ support.function.C99.c, support.function.any-method.c, entity.name.function.c
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ C: "
+ scope
+ punctuation.definition.string.begin.c, punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Storage Type
+ scope
+ storage.type.c
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ diff: header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #A57706
+ fontStyle
+ italic
+ foreground
+ #E0EDDD
+
+
+
+ name
+ diff: deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ diff: changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #BF3904
+
+
+
+ name
+ diff: inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #EAE3CA
+ foreground
+ #219186
+
+
+
+ name
+ Markdown: Linebreak
+ scope
+ text.html.markdown meta.dummy.line-break
+ settings
+
+ background
+ #A57706
+ foreground
+ #E0EDDD
+
+
+
+ name
+ Markdown: Raw
+ scope
+ text.html.markdown markup.raw.inline
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ reST raw
+ scope
+ text.restructuredtext markup.raw
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Other: Removal
+ scope
+ other.package.exclude, other.remove
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Other: Add
+ scope
+ other.add
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: {}
+ scope
+ punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #B81D1C
+
+
+
+ name
+ Tex: {text}
+ scope
+ meta.group.braces.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: Other Math
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: {var}
+ scope
+ variable.parameter.function.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Math \\
+ scope
+ punctuation.definition.constant.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Constant Math
+ scope
+ text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Other Math String
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Tex: $
+ scope
+ punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Tex: \label
+ scope
+ keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: \label { }
+ scope
+ variable.parameter.definition.label.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Function
+ scope
+ support.function.be.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Tex: Support Function Section
+ scope
+ support.function.section.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Support Function
+ scope
+ support.function.general.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Comment
+ scope
+ punctuation.definition.comment.tex, comment.line.percentage.tex
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Tex: Reference Label
+ scope
+ keyword.control.ref.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Python: storage
+ scope
+ storage.type.class.python, storage.type.function.python, storage.modifier.global.python
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Python: import
+ scope
+ keyword.control.import.python, keyword.control.import.from.python
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Python: Support.exception
+ scope
+ support.type.exception.python
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ Shell: builtin
+ scope
+ support.function.builtin.shell
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: variable
+ scope
+ variable.other.normal.shell
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Shell: DOT_FILES
+ scope
+ source.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Shell: meta scope in loop
+ scope
+ meta.scope.for-in-loop.shell, variable.other.loop.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: ""
+ scope
+ punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: Meta Block
+ scope
+ meta.scope.case-block.shell, meta.scope.case-body.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: []
+ scope
+ punctuation.definition.logical-expression.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #CD1E1D
+
+
+
+ name
+ Shell: Comment
+ scope
+ comment.line.number-sign.shell
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Java: import
+ scope
+ keyword.other.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Java: meta-import
+ scope
+ storage.modifier.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ Java: Class
+ scope
+ meta.class.java storage.modifier.java
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Java: /* comment */
+ scope
+ source.java comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Java: /* @param */
+ scope
+ comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Perl: variables
+ scope
+ punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Perl: functions
+ scope
+ support.function.perl
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Perl: comments
+ scope
+ comment.line.number-sign.perl
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #586E75
+
+
+
+ name
+ Perl: quotes
+ scope
+ punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ Perl: \char
+ scope
+ constant.character.escape.perl
+ settings
+
+ foreground
+ #DC322F
+
+
+
+ uuid
+ A4299D9B-1DE5-4BC4-87F6-A757E71B1597
+ license
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
diff --git a/Color Scheme - Default/Solarized (Light).tmTheme b/Color Scheme - Default/Solarized (Light).tmTheme
new file mode 100644
index 0000000..a34bef0
--- /dev/null
+++ b/Color Scheme - Default/Solarized (Light).tmTheme
@@ -0,0 +1,1875 @@
+
+
+
+
+ name
+ Solarized (light)
+ settings
+
+
+ settings
+
+ background
+ #FDF6E3
+ caret
+ #000000
+ foreground
+ #586E75
+ invisibles
+ #EAE3C9
+ lineHighlight
+ #EEE8D5
+ selection
+ #073642
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ StringNumber
+ scope
+ string
+ settings
+
+ foreground
+ #586E75
+
+
+
+ name
+ Regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #D33682
+
+
+
+ name
+ Variable
+ scope
+ variable.language, variable.other
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #073642
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name.type.class
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Variable start
+ scope
+ punctuation.definition.variable
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Embedded code markers
+ scope
+ punctuation.section.embedded.begin, punctuation.section.embedded.end
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language, meta.preprocessor
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Support.construct
+ scope
+ support.function.construct, keyword.other.new
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ Tag start/end
+ scope
+ punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Continuation
+ scope
+ punctuation.separator.continuation
+ settings
+
+ foreground
+ #D30102
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Library Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Special
+ scope
+ keyword.other.special-method
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ name
+ Quoted String
+ scope
+ string.quoted.double, string.quoted.single
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Quotes
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #C60000
+
+
+
+ name
+ CSS: Property
+ scope
+ entity.name.tag.css, support.type.property-name.css, meta.property-name.css
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ CSS: @font-face
+ scope
+ source.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Selector
+ scope
+ meta.selector.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS: {}
+ scope
+ punctuation.section.property-list.css
+ settings
+
+ foreground
+ #5A74CF
+
+
+
+ name
+ CSS: Numeric Value
+ scope
+ meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Value
+ scope
+ meta.property-value.css
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: !Important
+ scope
+ keyword.other.important.css
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ CSS: Standard Value
+ scope
+ support.constant.color
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ CSS: Tag
+ scope
+ entity.name.tag.css
+ settings
+
+ foreground
+ #738A13
+
+
+
+ name
+ CSS: : ,
+ scope
+ punctuation.separator.key-value.css, punctuation.terminator.rule.css
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ CSS .class
+ scope
+ entity.other.attribute-name.class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ CSS :pseudo
+ scope
+ entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ CSS: #id
+ scope
+ entity.other.attribute-name.id.css
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Function Name
+ scope
+ meta.function.js, entity.name.function.js, support.function.dom.js
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Source
+ scope
+ text.html.basic source.js.embedded.html
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ JS: Function
+ scope
+ storage.type.function.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Numeric Constant
+ scope
+ constant.numeric.js
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ JS: []
+ scope
+ meta.brace.square.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ JS: Storage Type
+ scope
+ storage.type.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ ()
+ scope
+ meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
+ settings
+
+ foreground
+ #93A1A1
+
+
+
+ name
+ {}
+ scope
+ meta.brace.curly.js
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: Doctype
+ scope
+ entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #899090
+
+
+
+ name
+ HTML: Comment Block
+ scope
+ comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #839496
+
+
+
+ name
+ HTML: Script
+ scope
+ entity.name.tag.script.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: Style
+ scope
+ source.css.embedded.html string.quoted.double.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: Text
+ scope
+ text.html.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #BD3800
+
+
+
+ name
+ HTML: =
+ scope
+ text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
+ settings
+
+ fontStyle
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: something=
+ scope
+ text.html.basic entity.other.attribute-name.html
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ HTML: "
+ scope
+ text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ HTML: <tag>
+ scope
+ entity.name.tag.block.any.html
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #268BD2
+
+
+
+ name
+ HTML: style
+ scope
+ source.css.embedded.html entity.name.tag.style.html
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ HTML: <style>
+ scope
+ entity.name.tag.style.html
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: {}
+ scope
+ text.html.basic punctuation.section.property-list.css
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ HTML: Embeddable
+ scope
+ source.css.embedded.html, comment.block.html
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: Variable definition
+ scope
+ punctuation.definition.variable.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Function Name
+ scope
+ meta.function.method.with-arguments.ruby
+ settings
+
+ foreground
+ #708284
+
+
+
+ name
+ Ruby: Variable
+ scope
+ variable.language.ruby
+ settings
+
+ foreground
+ #469186
+
+
+
+ name
+ Ruby: Function
+ scope
+ entity.name.function.ruby
+ settings
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Ruby: Keyword Control
+ scope
+ keyword.control.ruby, keyword.control.def.ruby
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #738A05
+
+
+
+ name
+ Ruby: Class
+ scope
+ keyword.control.class.ruby, meta.class.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Class Name
+ scope
+ entity.name.type.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Keyword
+ scope
+ keyword.control.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Support Class
+ scope
+ support.class.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Ruby: Constant
+ scope
+ constant.language.ruby, constant.numeric.ruby
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Constant Other
+ scope
+ variable.other.constant.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Ruby: :symbol
+ scope
+ constant.other.symbol.ruby
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Ruby: Punctuation Section ''
+ scope
+ punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
+ settings
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Ruby: Special Method
+ scope
+ keyword.other.special-method.ruby
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ PHP: Include
+ scope
+ keyword.control.import.include.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Ruby: erb =
+ scope
+ text.html.ruby meta.tag.inline.any.html
+ settings
+
+ fontStyle
+
+ foreground
+ #819090
+
+
+
+ name
+ Ruby: erb ""
+ scope
+ text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: Quoted Single
+ scope
+ punctuation.definition.string.begin, punctuation.definition.string.end
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: []
+ scope
+ keyword.operator.index-start.php, keyword.operator.index-end.php
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Array
+ scope
+ meta.array.php
+ settings
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Array()
+ scope
+ meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Array Begin
+ scope
+ punctuation.definition.array.begin, punctuation.definition.array.end
+ settings
+
+ foreground
+ #D31E1E
+
+
+
+ name
+ PHP: Numeric Constant
+ scope
+ constant.numeric.php
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ PHP: New
+ scope
+ keyword.other.new.php
+ settings
+
+ foreground
+ #CB4B16
+
+
+
+ name
+ PHP: ::
+ scope
+ support.class.php, keyword.operator.class
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Other Property
+ scope
+ variable.other.property.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Class
+ scope
+ storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ PHP: Class Function
+ settings
+
+
+
+ name
+ PHP: Inherited Class
+ scope
+ meta.other.inherited-class.php
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ PHP: Storage Type
+ scope
+ storage.type.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function
+ scope
+ entity.name.function.php
+ settings
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Function Construct
+ scope
+ support.function.construct.php
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ PHP: Function Call
+ scope
+ entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
+ settings
+
+ foreground
+ #839496
+
+
+
+ name
+ PHP: Comment
+ scope
+ keyword.other.phpdoc
+ settings
+
+ fontStyle
+
+ foreground
+ #899090
+
+
+
+ name
+ PHP: Source Emebedded
+ scope
+ source.php.embedded.block.html
+ settings
+
+ foreground
+ #BD3613
+
+
+
+ name
+ PHP: Storage Type Function
+ scope
+ storage.type.function.php
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ C: constant
+ scope
+ constant.numeric.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Meta Preprocessor
+ scope
+ meta.preprocessor.c.include, meta.preprocessor.macro.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Keyword
+ scope
+ keyword.control.import.define.c, keyword.control.import.include.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: Function Preprocessor
+ scope
+ entity.name.function.preprocessor.c
+ settings
+
+ fontStyle
+
+ foreground
+ #BB3700
+
+
+
+ name
+ C: include <something.c>
+ scope
+ meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Function
+ scope
+ support.function.C99.c, support.function.any-method.c, entity.name.function.c
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ C: "
+ scope
+ punctuation.definition.string.begin.c, punctuation.definition.string.end.c
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ C: Storage Type
+ scope
+ storage.type.c
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ diff: header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #A57706
+ fontStyle
+ italic
+ foreground
+ #E0EDDD
+
+
+
+ name
+ diff: deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ diff: changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #EAE3CA
+ fontStyle
+
+ foreground
+ #BF3904
+
+
+
+ name
+ diff: inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #EAE3CA
+ foreground
+ #219186
+
+
+
+ name
+ Markdown: Linebreak
+ scope
+ text.html.markdown meta.dummy.line-break
+ settings
+
+ background
+ #A57706
+ foreground
+ #E0EDDD
+
+
+
+ name
+ Markdown: Raw
+ scope
+ text.html.markdown markup.raw.inline
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ reST raw
+ scope
+ text.restructuredtext markup.raw
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Other: Removal
+ scope
+ other.package.exclude, other.remove
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Other: Add
+ scope
+ other.add
+ settings
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: {}
+ scope
+ punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #B81D1C
+
+
+
+ name
+ Tex: {text}
+ scope
+ meta.group.braces.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: Other Math
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57705
+
+
+
+ name
+ Tex: {var}
+ scope
+ variable.parameter.function.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Math \\
+ scope
+ punctuation.definition.constant.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Constant Math
+ scope
+ text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Other Math String
+ scope
+ string.other.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Tex: $
+ scope
+ punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #D3201F
+
+
+
+ name
+ Tex: \label
+ scope
+ keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: \label { }
+ scope
+ variable.parameter.definition.label.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #D01F1E
+
+
+
+ name
+ Tex: Function
+ scope
+ support.function.be.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Tex: Support Function Section
+ scope
+ support.function.section.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Tex: Support Function
+ scope
+ support.function.general.tex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Tex: Comment
+ scope
+ punctuation.definition.comment.tex, comment.line.percentage.tex
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Tex: Reference Label
+ scope
+ keyword.control.ref.latex
+ settings
+
+ fontStyle
+
+ foreground
+ #269186
+
+
+
+ name
+ Python: storage
+ scope
+ storage.type.class.python, storage.type.function.python, storage.modifier.global.python
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Python: import
+ scope
+ keyword.control.import.python, keyword.control.import.from.python
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Python: Support.exception
+ scope
+ support.type.exception.python
+ settings
+
+ foreground
+ #A57800
+
+
+
+ name
+ Shell: builtin
+ scope
+ support.function.builtin.shell
+ settings
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: variable
+ scope
+ variable.other.normal.shell
+ settings
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Shell: DOT_FILES
+ scope
+ source.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #268BD2
+
+
+
+ name
+ Shell: meta scope in loop
+ scope
+ meta.scope.for-in-loop.shell, variable.other.loop.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: ""
+ scope
+ punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #748B00
+
+
+
+ name
+ Shell: Meta Block
+ scope
+ meta.scope.case-block.shell, meta.scope.case-body.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Shell: []
+ scope
+ punctuation.definition.logical-expression.shell
+ settings
+
+ fontStyle
+
+ foreground
+ #CD1E1D
+
+
+
+ name
+ Shell: Comment
+ scope
+ comment.line.number-sign.shell
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Java: import
+ scope
+ keyword.other.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #BD3800
+
+
+
+ name
+ Java: meta-import
+ scope
+ storage.modifier.import.java
+ settings
+
+ fontStyle
+
+ foreground
+ #586E75
+
+
+
+ name
+ Java: Class
+ scope
+ meta.class.java storage.modifier.java
+ settings
+
+ fontStyle
+
+ foreground
+ #A57800
+
+
+
+ name
+ Java: /* comment */
+ scope
+ source.java comment.block
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Java: /* @param */
+ scope
+ comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
+ settings
+
+ fontStyle
+
+ foreground
+ #536871
+
+
+
+ name
+ Perl: variables
+ scope
+ punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
+ settings
+
+ foreground
+ #B58900
+
+
+
+ name
+ Perl: functions
+ scope
+ support.function.perl
+ settings
+
+ foreground
+ #859900
+
+
+
+ name
+ Perl: comments
+ scope
+ comment.line.number-sign.perl
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #586E75
+
+
+
+ name
+ Perl: quotes
+ scope
+ punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
+ settings
+
+ foreground
+ #2AA198
+
+
+
+ name
+ Perl: \char
+ scope
+ constant.character.escape.perl
+ settings
+
+ foreground
+ #DC322F
+
+
+
+ uuid
+ 38E819D9-AE02-452F-9231-ECC3B204AFD7
+ license
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
diff --git a/Color Scheme - Default/Solarized (Light).tmTheme.cache b/Color Scheme - Default/Solarized (Light).tmTheme.cache
new file mode 100644
index 0000000..decab86
Binary files /dev/null and b/Color Scheme - Default/Solarized (Light).tmTheme.cache differ
diff --git a/Color Scheme - Default/SpaceCadet.tmTheme b/Color Scheme - Default/SpaceCadet.tmTheme
new file mode 100644
index 0000000..156f43d
--- /dev/null
+++ b/Color Scheme - Default/SpaceCadet.tmTheme
@@ -0,0 +1,212 @@
+
+
+
+
+ author
+ Alex Ross
+ comment
+ Created by Alex Ross
+ name
+ SpaceCadet
+ settings
+
+
+ settings
+
+ background
+ #0D0D0D
+ caret
+ #7F005D
+ foreground
+ #DDE6CF
+ invisibles
+ #BFBFBF
+ lineHighlight
+ #00000012
+ selection
+ #40002F
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ foreground
+ #473C45
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #805978
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #A8885A
+
+
+
+ name
+ Variable
+ scope
+ variable.parameter, variable.other
+ settings
+
+ foreground
+ #596380
+
+
+
+ name
+ Keyword
+ scope
+ keyword - keyword.operator, keyword.operator.logical
+ settings
+
+ foreground
+ #728059
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ foreground
+ #9EBF60
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ foreground
+ #6078BF
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ foreground
+ #8A4B66
+
+
+
+ name
+ Exception
+ scope
+ support.type.exception
+ settings
+
+ foreground
+ #893062
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #5F0047
+
+
+
+ name
+ - Meta
+ settings
+
+
+
+ name
+ function.section
+ scope
+ meta.function.section
+ settings
+
+ background
+ #371D28
+
+
+
+ uuid
+ 2C24E84F-F9FE-4C2E-92D2-F52198BA7E41
+
+
diff --git a/Color Scheme - Default/Sunburst.tmTheme b/Color Scheme - Default/Sunburst.tmTheme
new file mode 100644
index 0000000..c48337b
--- /dev/null
+++ b/Color Scheme - Default/Sunburst.tmTheme
@@ -0,0 +1,665 @@
+
+
+
+
+ author
+ Stanley Rost
+ comment
+ (π) Soryu, 2005
+ name
+ Sunburst
+ settings
+
+
+ settings
+
+ background
+ #000000
+ caret
+ #A7A7A7
+ foreground
+ #F8F8F8
+ invisibles
+ #CAE2FB3D
+ lineHighlight
+ #FFFFFF0D
+ selection
+ #DDF0FF33
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #AEAEAE
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #3387CC
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #89BDFF
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #E28964
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #99CF50
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #65B042
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #9B859D
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ foreground
+ #3E87E3
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #FD5FF1
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #562D56BF
+ foreground
+ #FD5FF1
+
+
+
+ name
+ -----------------------------------
+ settings
+
+
+
+ name
+ ♦ Embedded Source (Bright)
+ scope
+ text source
+ settings
+
+ background
+ #B1B3BA08
+
+
+
+ name
+ ♦ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #9B5C2E
+
+
+
+ name
+ ♦ String embedded-source
+ scope
+ string.quoted source
+ settings
+
+ fontStyle
+
+ foreground
+ #DAEFA3
+
+
+
+ name
+ ♦ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #DDF2A4
+
+
+
+ name
+ ♦ String.regexp
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #E9C062
+
+
+
+ name
+ ♦ String.regexp.«special»
+ scope
+ string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ foreground
+ #CF7D34
+
+
+
+ name
+ ♦ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #8A9A95
+
+
+
+ name
+ ♦ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #DAD085
+
+
+
+ name
+ ♦ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ c C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ c C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ j Entity Name Type
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ j Cast
+ scope
+ meta.cast
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #676767
+
+
+
+ name
+ ✘ Doctype/XML Processing
+ scope
+ meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string
+ settings
+
+ foreground
+ #494949
+
+
+
+ name
+ ✘ Meta.tag.«all»
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #89BDFF
+
+
+
+ name
+ ✘ Meta.tag.inline
+ scope
+ source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity
+ settings
+
+ foreground
+ #E0C589
+
+
+
+ name
+ ✘ Namespaces
+ scope
+ entity.name.tag.namespace, entity.other.attribute-name.namespace
+ settings
+
+ foreground
+ #E18964
+
+
+
+ name
+ § css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #CDA869
+
+
+
+ name
+ § css:pseudo-class
+ scope
+ meta.selector.css entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ § css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #8B98AB
+
+
+
+ name
+ § css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #9B703F
+
+
+
+ name
+ § css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #C5AF75
+
+
+
+ name
+ § css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ § css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #8693A5
+
+
+
+ name
+ § css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #DD7B3B
+
+
+
+ name
+ § css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ ⎇ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ background
+ #0E2231
+ fontStyle
+ italic
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #420E09
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #4A410D
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #253B22
+ foreground
+ #F8F8F8
+
+
+
+ name
+ --------------------------------
+ settings
+
+
+
+ name
+ Markup: Italic
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #E9C062
+
+
+
+ name
+ Markup: Bold
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #E9C062
+
+
+
+ name
+ Markup: Underline
+ scope
+ markup.underline
+ settings
+
+ fontStyle
+ underline
+ foreground
+ #E18964
+
+
+
+ name
+ Markup: Quote
+ scope
+ markup.quote
+ settings
+
+ background
+ #FEE09C12
+ fontStyle
+ italic
+ foreground
+ #E1D4B9
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading, markup.heading entity
+ settings
+
+ background
+ #632D04
+ fontStyle
+
+ foreground
+ #FEDCC5
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #E1D4B9
+
+
+
+ name
+ Markup: Raw
+ scope
+ markup.raw
+ settings
+
+ background
+ #B1B3BA08
+ fontStyle
+
+ foreground
+ #578BB3
+
+
+
+ name
+ Markup: Comment
+ scope
+ markup comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #F67B37
+
+
+
+ name
+ Markup: Separator
+ scope
+ meta.separator
+ settings
+
+ background
+ #242424
+ foreground
+ #60A633
+
+
+
+ name
+ Log Entry
+ scope
+ meta.line.entry.logfile, meta.line.exit.logfile
+ settings
+
+ background
+ #EEEEEE29
+
+
+
+ name
+ Log Entry Error
+ scope
+ meta.line.error.logfile
+ settings
+
+ background
+ #751012
+
+
+
+ uuid
+ C8C58F9A-35FE-44A4-9BC2-2F3C343DC81D
+
+
diff --git a/Color Scheme - Default/Twilight.tmTheme b/Color Scheme - Default/Twilight.tmTheme
new file mode 100644
index 0000000..a83f7ec
--- /dev/null
+++ b/Color Scheme - Default/Twilight.tmTheme
@@ -0,0 +1,514 @@
+
+
+
+
+ author
+ Michael Sheets
+ name
+ Twilight
+ settings
+
+
+ settings
+
+ background
+ #141414
+ caret
+ #A7A7A7
+ foreground
+ #F8F8F8
+ invisibles
+ #FFFFFF40
+ lineHighlight
+ #FFFFFF08
+ selection
+ #DDF0FF33
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #5F5A60
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #9B703F
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ fontStyle
+
+ foreground
+ #CDA869
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ fontStyle
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #9B859D
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ foreground
+ #7587A6
+
+
+
+ name
+ Invalid – Deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ fontStyle
+ italic underline
+ foreground
+ #D2A8A1
+
+
+
+ name
+ Invalid – Illegal
+ scope
+ invalid.illegal
+ settings
+
+ background
+ #562D56BF
+ foreground
+ #F8F8F8
+
+
+
+ name
+ -----------------------------------
+ settings
+
+
+
+ name
+ ♦ Embedded Source
+ scope
+ text source
+ settings
+
+ background
+ #B0B3BA14
+
+
+
+ name
+ ♦ Embedded Source (Bright)
+ scope
+ text.html.ruby source
+ settings
+
+ background
+ #B1B3BA21
+
+
+
+ name
+ ♦ Entity inherited-class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #9B5C2E
+
+
+
+ name
+ ♦ String embedded-source
+ scope
+ string source
+ settings
+
+ fontStyle
+
+ foreground
+ #DAEFA3
+
+
+
+ name
+ ♦ String constant
+ scope
+ string constant
+ settings
+
+ foreground
+ #DDF2A4
+
+
+
+ name
+ ♦ String.regexp
+ scope
+ string.regexp
+ settings
+
+ fontStyle
+
+ foreground
+ #E9C062
+
+
+
+ name
+ ♦ String.regexp.«special»
+ scope
+ string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition
+ settings
+
+ foreground
+ #CF7D34
+
+
+
+ name
+ ♦ String variable
+ scope
+ string variable
+ settings
+
+ foreground
+ #8A9A95
+
+
+
+ name
+ ♦ Support.function
+ scope
+ support.function
+ settings
+
+ fontStyle
+
+ foreground
+ #DAD085
+
+
+
+ name
+ ♦ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #CF6A4C
+
+
+
+ name
+ c C/C++ Preprocessor Line
+ scope
+ meta.preprocessor.c
+ settings
+
+ foreground
+ #8996A8
+
+
+
+ name
+ c C/C++ Preprocessor Directive
+ scope
+ meta.preprocessor.c keyword
+ settings
+
+ foreground
+ #AFC4DB
+
+
+
+ name
+ ✘ Doctype/XML Processing
+ scope
+ meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string
+ settings
+
+ foreground
+ #494949
+
+
+
+ name
+ ✘ Meta.tag.«all»
+ scope
+ declaration.tag, declaration.tag entity, meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #AC885B
+
+
+
+ name
+ ✘ Meta.tag.inline
+ scope
+ declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity
+ settings
+
+ foreground
+ #E0C589
+
+
+
+ name
+ § css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #CDA869
+
+
+
+ name
+ § css:pseudo-class
+ scope
+ meta.selector.css entity.other.attribute-name.tag.pseudo-class
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ § css#id
+ scope
+ meta.selector.css entity.other.attribute-name.id
+ settings
+
+ foreground
+ #8B98AB
+
+
+
+ name
+ § css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #9B703F
+
+
+
+ name
+ § css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #C5AF75
+
+
+
+ name
+ § css property-value;
+ scope
+ meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ § css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #8693A5
+
+
+
+ name
+ § css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css, meta.property-value constant
+ settings
+
+ foreground
+ #CA7840
+
+
+
+ name
+ § css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #8F9D6A
+
+
+
+ name
+ ⎇ diff.header
+ scope
+ meta.diff, meta.diff.header, meta.separator
+ settings
+
+ background
+ #0E2231
+ fontStyle
+ italic
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ background
+ #420E09
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.changed
+ scope
+ markup.changed
+ settings
+
+ background
+ #4A410D
+ foreground
+ #F8F8F8
+
+
+
+ name
+ ⎇ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ background
+ #253B22
+ foreground
+ #F8F8F8
+
+
+
+ name
+ Markup: List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #F9EE98
+
+
+
+ name
+ Markup: Heading
+ scope
+ markup.heading
+ settings
+
+ foreground
+ #CF6A4C
+
+
+
+ uuid
+ 766026CB-703D-4610-B070-8DE07D967C5F
+
+
diff --git a/Color Scheme - Default/Zenburnesque.tmTheme b/Color Scheme - Default/Zenburnesque.tmTheme
new file mode 100644
index 0000000..8631f98
--- /dev/null
+++ b/Color Scheme - Default/Zenburnesque.tmTheme
@@ -0,0 +1,343 @@
+
+
+
+
+ author
+ William D. Neumann
+ name
+ Zenburnesque
+ settings
+
+
+ settings
+
+ background
+ #404040
+ caret
+ #FFFF66
+ foreground
+ #DEDEDE
+ invisibles
+ #A8A8A8
+ lineHighlight
+ #A0804026
+ selection
+ #A0A0C0
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #709070
+
+
+
+ name
+ Directive
+ scope
+ keyword.other.directive
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Line-number directives
+ scope
+ keyword.other.directive.line-number
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Characters
+ scope
+ constant.character
+ settings
+
+ foreground
+ #FF8080
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #FF2020
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #22C0FF
+
+
+
+ name
+ Floating-point numbers
+ scope
+ constant.numeric.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+
+
+ name
+ Variable
+ scope
+ variable.parameter, variable.other
+ settings
+
+
+
+ name
+ Language Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #FFFFA0
+
+
+
+ name
+ Module Keyword
+ scope
+ entity.name.module, support.other.module
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FF8000
+
+
+
+ name
+ Operators
+ scope
+ keyword.operator
+ settings
+
+ foreground
+ #FFFFA0
+
+
+
+ name
+ Floating-point infix operators
+ scope
+ source.ocaml keyword.operator.symbol.infix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Floating-point prefix operators
+ scope
+ source.ocaml keyword.operator.symbol.prefix.floating-point
+ settings
+
+ fontStyle
+ underline
+
+
+
+ name
+ Storage Types
+ scope
+ storage.type
+ settings
+
+ foreground
+ #6080FF
+
+
+
+ name
+ Variant Types
+ scope
+ entity.name.class.variant
+ settings
+
+ foreground
+ #4080A0
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ foreground
+ #F09040
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #FFCC66
+
+
+
+ name
+ Type name
+ scope
+ storage.type.user-defined
+ settings
+
+ foreground
+ #FFE000
+
+
+
+ name
+ Class type name
+ scope
+ entity.name.type.class.type
+ settings
+
+ foreground
+ #F4A020
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+
+
+ name
+ Library variable
+ scope
+ support.variable
+ settings
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+
+
+ uuid
+ 8D4988B9-ADD8-436F-B388-BC1360F8504B
+
+
diff --git a/Color Scheme - Default/iPlastic.tmTheme b/Color Scheme - Default/iPlastic.tmTheme
new file mode 100644
index 0000000..7253df6
--- /dev/null
+++ b/Color Scheme - Default/iPlastic.tmTheme
@@ -0,0 +1,286 @@
+
+
+
+
+ author
+ Jeroen van der Ham
+ name
+ iPlastic
+ settings
+
+
+ settings
+
+ background
+ #EEEEEEEB
+ caret
+ #000000
+ foreground
+ #000000
+ invisibles
+ #B3B3B3F4
+ lineHighlight
+ #0000001A
+ selection
+ #BAD6FD
+
+
+
+ name
+ String
+ scope
+ string
+ settings
+
+ foreground
+ #009933
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #0066FF
+
+
+
+ name
+ Regular expression
+ scope
+ string.regexp
+ settings
+
+ foreground
+ #FF0080
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #0000FF
+
+
+
+ name
+ Identifier
+ scope
+ constant.language
+ settings
+
+ foreground
+ #9700CC
+
+
+
+ name
+ Exception
+ scope
+ support.class.exception
+ settings
+
+ foreground
+ #990000
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ foreground
+ #FF8000
+
+
+
+ name
+ Type name
+ scope
+ entity.name.type
+ settings
+
+ fontStyle
+ bold underline
+
+
+
+ name
+ Arguments
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #0066FF
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #E71A114D
+ foreground
+ #FF0000
+
+
+
+ name
+ Trailing whitespace
+ scope
+ invalid.deprecated.trailing-whitespace
+ settings
+
+ background
+ #E71A1100
+
+
+
+ name
+ Embedded source
+ scope
+ text source
+ settings
+
+ background
+ #FAFAFAFC
+ foreground
+ #000000
+
+
+
+ name
+ Tag
+ scope
+ meta.tag, declaration.tag
+ settings
+
+ foreground
+ #0033CC
+
+
+
+ name
+ Constant
+ scope
+ constant, support.constant
+ settings
+
+ foreground
+ #6782D3
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3333FF
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Section name
+ scope
+ entity.name.section
+ settings
+
+ fontStyle
+ bold underline
+
+
+
+ name
+ Frame title
+ scope
+ entity.name.function.frame
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #000000
+
+
+
+ name
+ XML Declaration
+ scope
+ meta.tag.preprocessor.xml
+ settings
+
+ foreground
+ #333333
+
+
+
+ name
+ Tag Attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3366CC
+
+
+
+ name
+ Tag Name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+
+
+
+ uuid
+ 4FCFA210-B247-11D9-9D00-000D93347A42
+
+
diff --git a/D/Comments.tmPreferences b/D/Comments.tmPreferences
new file mode 100644
index 0000000..768d055
--- /dev/null
+++ b/D/Comments.tmPreferences
@@ -0,0 +1,66 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.d
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ /*
+
+
+ name
+ TM_COMMENT_END
+ value
+ */
+
+
+ name
+ TM_COMMENT_MODE
+ value
+ block
+
+
+ name
+ TM_COMMENT_DISABLE_INDENT
+ value
+ yes
+
+
+ name
+ TM_COMMENT_START_2
+ value
+ //
+
+
+ name
+ TM_COMMENT_START_3
+ value
+ /+
+
+
+ name
+ TM_COMMENT_END_3
+ value
+ +/
+
+
+ name
+ TM_COMMENT_MODE_3
+ value
+ block
+
+
+
+ uuid
+ 4A7C08E3-CF6E-47AC-B5C4-F177BC6F2653
+
+
diff --git a/D/Comments.tmPreferences.cache b/D/Comments.tmPreferences.cache
new file mode 100644
index 0000000..1cf889a
Binary files /dev/null and b/D/Comments.tmPreferences.cache differ
diff --git a/D/D.sublime-build b/D/D.sublime-build
new file mode 100644
index 0000000..19f3835
--- /dev/null
+++ b/D/D.sublime-build
@@ -0,0 +1,5 @@
+{
+ "cmd": ["dmd", "$file"],
+ "file_regex": "^(.*?)\\(([0-9]+)\\)",
+ "selector": "source.d"
+}
diff --git a/D/D.tmLanguage b/D/D.tmLanguage
new file mode 100644
index 0000000..c7233a2
--- /dev/null
+++ b/D/D.tmLanguage
@@ -0,0 +1,908 @@
+
+
+
+
+ comment
+ D language
+ fileTypes
+
+ d
+ di
+
+ firstLineMatch
+ ^#!.*\bg?dmd\b.
+ foldingStartMarker
+ (?x)/\*\*(?!\*)|^(?![^{]*?//|[^{]*?/\*(?!.*?\*/.*?\{)).*?\{\s*($|//|/\*(?!.*?\*/.*\S))
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*\}
+ keyEquivalent
+ ^~D
+ name
+ D
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.d
+
+
+ include
+ text.html.javadoc
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|export)\b\s*)*) # modifier
+ (class|interface)\s+
+ (\w+)\s* # identifier
+ (?:\(\s*([^\)]+)\s*\)|)\s* # Template type
+ (?:
+ \s*(:)\s*
+ (\w+)
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ (?:\s*,\s*(\w+))?
+ )? # super class
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 10
+
+ name
+ entity.other.inherited-class.d
+
+ 11
+
+ name
+ entity.other.inherited-class.d
+
+ 12
+
+ name
+ entity.other.inherited-class.d
+
+ 13
+
+ name
+ entity.other.inherited-class.d
+
+ 3
+
+ name
+ storage.type.structure.d
+
+ 4
+
+ name
+ entity.name.type.class.d
+
+ 5
+
+ name
+ storage.type.template.d
+
+ 6
+
+ name
+ punctuation.separator.inheritance.d
+
+ 7
+
+ name
+ entity.other.inherited-class.d
+
+ 8
+
+ name
+ entity.other.inherited-class.d
+
+ 9
+
+ name
+ entity.other.inherited-class.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.d
+ patterns
+
+
+ begin
+ \b(_|:)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.extends.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|export)\b\s*)*) # modifier
+ (struct)\s+
+ (\w+)\s* # identifier
+ (?:\(\s*([^\)]+)\s*\)|)\s* # Template type
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 3
+
+ name
+ storage.type.structure.d
+
+ 4
+
+ name
+ entity.name.type.struct.d
+
+ 5
+
+ name
+ storage.type.template.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.struct.d
+ patterns
+
+
+ begin
+ \b(_|:)\b
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.class.extends.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (\b(this))\s* # identifier
+ (?!.*;) # abort if line has a ;
+ (?=\()
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 3
+
+ name
+ entity.name.function.constructor.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.constructor.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)
+ (?: ^ # begin-of-line
+ | (?: (?<!else|new|=) ) # or word + space before name
+ )
+ ((?:\b(?:public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (~this) # actual name
+ \s*(\() # start bracket or end-of-line
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 2
+
+ name
+ entity.name.function.destructor.d
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.d
+
+
+ name
+ meta.definition.destructor.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ begin
+ (?x)^\s*
+ ((?:\b(?:public|private|protected|static|final|native|lazy|synchronized|abstract|threadsafe|transient|export)\b\s*)*) # modifier
+ (\b(?:void|boolean|byte|char|short|int|float|long|double|[\w_]+[\w0-9_]*|(?:\w+\.)*[A-Z]\w+)\b(?:<(?:(?:(?:\w+\.)*[A-Z]\w+)(?:\s*,\s*)?)+>|(?:\[\s*\])*)?)\s* # type
+ (\w+)\s* # identifier
+ (?!.*;) # abort if line has a ;
+ (?=\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.d
+
+ 2
+
+ name
+ storage.type.structure.d
+
+ 3
+
+ name
+ entity.name.function.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.method.d
+ patterns
+
+
+ include
+ $base
+
+
+
+
+ match
+ \b([A-Z][A-Z0-9_]+)\b
+ name
+ constant.other.d
+
+
+ include
+ #comments
+
+
+ include
+ #all-types
+
+
+ match
+ \b(private|protected|public|export)\b
+ name
+ storage.modifier.access-control.d
+
+
+ match
+ \b(auto|static|override|final|const|abstract|volatile|synchronized|lazy)\b
+ name
+ storage.modifier.d
+
+
+ match
+ \b(template|interface|class|enum|struct|union)\b
+ name
+ storage.type.structure.d
+
+
+ match
+ \b(ushort|int|uint|long|ulong|float|void|byte|ubyte|double|bit|char|wchar|ucent|cent|short|bool|dchar|real|ireal|ifloat|idouble|creal|cfloat|cdouble|lazy)\b
+ name
+ storage.type.d
+
+
+ match
+ \b(try|catch|finally|throw)\b
+ name
+ keyword.control.exception.d
+
+
+ match
+ \b(return|break|case|continue|default|do|while|for|switch|if|else)\b
+ name
+ keyword.control.d
+
+
+ match
+ \b(if|else|switch|iftype)\b
+ name
+ keyword.control.conditional.d
+
+
+ match
+ \b(goto|break|continue)\b
+ name
+ keyword.control.branch.d
+
+
+ match
+ \b(while|for|do|foreach(_reverse)?)\b
+ name
+ keyword.control.repeat.d
+
+
+ match
+ \b(version|return|with|invariant|body|scope|in|out|inout|asm|mixin|function|delegate)\b
+ name
+ keyword.control.statement.d
+
+
+ match
+ \b(pragma)\b
+ name
+ keyword.control.pragma.d
+
+
+ match
+ \b(alias|typedef)\b
+ name
+ keyword.control.alias.d
+
+
+ match
+ \b(import)\b
+ name
+ keyword.control.import.d
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.module.d
+
+ 2
+
+ name
+ entity.name.function.package.d
+
+
+ match
+ ^\s*(module)\s+([^ ;]+?);
+ name
+ meta.module.d
+
+
+ match
+ \b(true|false)\b
+ name
+ constant.language.boolean.d
+
+
+ match
+ \b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|null)\b
+ name
+ constant.language.d
+
+
+ match
+ \b(this|super)\b
+ name
+ variable.language.d
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.d
+
+
+ include
+ #string_escaped_char
+
+
+ include
+ #strings
+
+
+ match
+ (==|!=|<=|>=|<>|<|>)
+ name
+ keyword.operator.comparison.d
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.d
+
+
+ match
+ (\-|\+|\*|\/|~|%)
+ name
+ keyword.operator.arithmetic.d
+
+
+ match
+ (!|&&|\|\|)
+ name
+ keyword.operator.logical.d
+
+
+ match
+ \b(opNeg|opCom|opPostInc|opPostDec|opCast|opAdd|opSub|opSub_r|opMul|opDiv|opDiv_r|opMod|opMod_r|opAnd|opOr|opXor|opShl|opShl_r|opShr|opShr_r|opUShr|opUShr_r|opCat|opCat_r|opEquals|opEquals|opCmp|opCmp|opCmp|opCmp|opAddAssign|opSubAssign|opMulAssign|opDivAssign|opModAssign|opAndAssign|opOrAssign|opXorAssign|opShlAssign|opShrAssign|opUShrAssign|opCatAssign|opIndex|opIndexAssign|opCall|opSlice|opSliceAssign|opPos|opAdd_r|opMul_r|opAnd_r|opOr_r|opXor_r)\b
+ name
+ keyword.operator.overload.d
+
+
+ match
+ \b(new|delete|typeof|typeid|cast|align|is)\b
+ name
+ keyword.operator.d
+
+
+ match
+ \b(new|throws)\b
+ name
+ keyword.other.class-fns.d
+
+
+ match
+ \b(package|extern)\b
+ name
+ keyword.other.external.d
+
+
+ match
+ \b(deprecated|unittest|debug)\b
+ name
+ keyword.other.debug.d
+
+
+ match
+ \b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\b
+ name
+ support.type.sys-types.c
+
+
+ match
+ \b(pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t)\b
+ name
+ support.type.pthread.c
+
+
+ match
+ \b(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)\b
+ name
+ support.type.stdint.c
+
+
+ repository
+
+ all-types
+
+ patterns
+
+
+ include
+ #support-type-built-ins-d
+
+
+ include
+ #support-type-d
+
+
+ include
+ #storage-type-d
+
+
+
+ comments
+
+ patterns
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ end
+ \*/
+ name
+ comment.block.d
+
+
+ begin
+ /\+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.d
+
+
+ end
+ \+/
+ name
+ comment.block.nested.d
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.d
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.d
+
+
+
+ constant_placeholder
+
+ match
+ (?i:%(\([a-z_]+\))?#?0?\-?[ ]?\+?([0-9]*|\*)(\.([0-9]*|\*))?[hL]?[a-z%])
+ name
+ constant.other.placeholder.d
+
+ regular_expressions
+
+ comment
+ Change disabled to 1 to turn off syntax highlighting in “r” strings.
+ disabled
+ 1
+ patterns
+
+
+ include
+ source.regexp.python
+
+
+
+ statement-remainder
+
+ patterns
+
+
+ begin
+ \(
+ end
+ (?=\))
+ name
+ meta.definition.param-list.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+ begin
+ (throws)
+ captures
+
+ 1
+
+ name
+ keyword.other.class-fns.d
+
+
+ end
+ (?={)
+ name
+ meta.definition.throws.d
+ patterns
+
+
+ include
+ #all-types
+
+
+
+
+
+ storage-type-d
+
+ match
+ \b(void|byte|short|char|int|long|float|double|boolean|([a-z]\w+\.)*[A-Z]\w+)\b
+ name
+ storage.type.d
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abefnprtv'"?]|[0-3]\d{,2}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)
+ name
+ constant.character.escape.d
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.d
+
+
+
+ strings
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.d
+
+
+ name
+ string.quoted.double.d
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ (r)(")
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.string.d
+
+ 2
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ ((?<=")(")|")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.d
+
+ 2
+
+ name
+ meta.empty-string.double.d
+
+
+ name
+ string.quoted.double.raw.d
+ patterns
+
+
+ include
+ #regular_expressions
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ ((?<=`)(`)|`)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.d
+
+ 2
+
+ name
+ meta.empty-string.double.d
+
+
+ name
+ string.quoted.double.raw.backtick.d
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.d
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.d
+
+
+ name
+ string.quoted.single.d
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+
+ support-type-built-ins-classes-d
+
+ match
+ \b(AbstractServer|ArchiveMember|ArgParser|Barrier|BomSniffer|Buffer|BufferInput|BufferOutput|BufferSlice|BufferedFile|BufferedStream|BzipInput|BzipOutput|CFile|CacheInvalidatee|CacheInvalidator|CacheServer|CacheThread|Certificate|CertificateStore|CertificateStoreCtx|ChunkInput|ChunkOutput|ClassInfo|Cluster|ClusterCache|ClusterQueue|ClusterThread|CmdParser|ComObject|Compress|Condition|Conduit|Cookie|CookieParser|CookieStack|CounterInput|CounterOutput|DataFileInput|DataFileOutput|DataInput|DataOutput|Database|DatagramConduit|DeviceConduit|DigestInput|DigestOutput|DocPrinter|Document|DummyInputStream|DummyOutputStream|EndianInput|EndianOutput|EndianProtocol|EndianStream|EventSeekInputStream|EventSeekOutputStream|FTPConnection|Fiber|Field|File|FileConduit|FileFolder|FileGroup|FileInput|FileOutput|FilePath|FileScan|FilterStream|Foo|FormatOutput|GreedyInput|GreedyOutput|Gregorian|GrowBuffer|HeapCopy|HeapSlice|Hierarchy|HttpClient|HttpCookies|HttpCookiesView|HttpGet|HttpHeaders|HttpHeadersView|HttpParams|HttpPost|HttpStack|HttpTokens|HttpTriplet|IPv4Address|IUnknown|InputFilter|InternetAddress|InternetHost|Layout|LineInput|LineIterator|LinkedFolder|Log|MapInput|MapOutput|MappedBuffer|Md2|Md4|MemoryQueue|MemoryStream|MmFile|MmFileStream|ModuleInfo|MulticastConduit|Mutex|NativeProtocol|NetCall|NetHost|NetworkAlert|NetworkCache|NetworkCall|NetworkClient|NetworkCombo|NetworkMessage|NetworkQueue|NetworkRegistry|NetworkTask|NotImplemented|Object|Observer|OutBuffer|OutputFilter|PersistQueue|Pipe|PipeConduit|Print|PrivateKey|Process|Properties|Protocol|ProtocolReader|ProtocolWriter|PublicKey|PullParser|QueueFile|QueueServer|QueueThread|QueuedCache|QuoteIterator|Random|Range|ReadWriteMutex|Reader|Record|RegExp|RegExpT|RegexIterator|RollCall|SSLCtx|SSLServerSocket|SSLSocketConduit|SaxParser|SelectionKey|Semaphore|ServerSocket|ServerThread|Service|SimpleIterator|SliceInputStream|SliceSeekInputStream|SliceSeekOutputStream|SliceStream|SnoopInput|SnoopOutput|Socket|SocketConduit|SocketListener|SocketSet|SocketStream|Sprint|Stream|StreamIterator|TArrayStream|TaskServer|TaskThread|TcpSocket|Telnet|TempFile|Text|TextFileInput|TextFileOutput|TextView|Thread|ThreadGroup|ThreadLocal|ThreadPool|Token|TypeInfo|TypeInfo_AC|TypeInfo_Aa|TypeInfo_Ab|TypeInfo_Ac|TypeInfo_Ad|TypeInfo_Ae|TypeInfo_Af|TypeInfo_Ag|TypeInfo_Ah|TypeInfo_Ai|TypeInfo_Aj|TypeInfo_Ak|TypeInfo_Al|TypeInfo_Am|TypeInfo_Ao|TypeInfo_Ap|TypeInfo_Aq|TypeInfo_Ar|TypeInfo_Array|TypeInfo_As|TypeInfo_AssociativeArray|TypeInfo_At|TypeInfo_Au|TypeInfo_Av|TypeInfo_Aw|TypeInfo_C|TypeInfo_Class|TypeInfo_D|TypeInfo_Delegate|TypeInfo_Enum|TypeInfo_Function|TypeInfo_Interface|TypeInfo_P|TypeInfo_Pointer|TypeInfo_StaticArray|TypeInfo_Struct|TypeInfo_Tuple|TypeInfo_Typedef|TypeInfo_a|TypeInfo_b|TypeInfo_c|TypeInfo_d|TypeInfo_e|TypeInfo_f|TypeInfo_g|TypeInfo_h|TypeInfo_i|TypeInfo_j|TypeInfo_k|TypeInfo_l|TypeInfo_m|TypeInfo_o|TypeInfo_p|TypeInfo_q|TypeInfo_r|TypeInfo_s|TypeInfo_t|TypeInfo_u|TypeInfo_v|TypeInfo_w|TypedInput|TypedOutput|URIerror|UdpSocket|UnCompress|UniText|UnicodeBom|UnicodeFile|UnknownAddress|Uri|UtfInput|UtfOutput|VirtualFolder|WrapSeekInputStream|WrapSeekOutputStream|Writer|XmlPrinter|ZipArchive|ZipBlockReader|ZipBlockWriter|ZipEntry|ZipEntryVerifier|ZipFile|ZipFileGroup|ZipFolder|ZipSubFolder|ZipSubFolderEntry|ZipSubFolderGroup|ZlibInput|ZlibOutput)\b
+ name
+ support.type.built-ins.classes.d
+
+ support-type-built-ins-d
+
+ patterns
+
+
+ include
+ #support-type-built-ins-exceptions-d
+
+
+ include
+ #support-type-built-ins-classes-d
+
+
+ include
+ #support-type-built-ins-interfaces-d
+
+
+ include
+ #support-type-built-ins-structs-d
+
+
+
+ support-type-built-ins-exceptions-d
+
+ match
+ \b(AddressException|ArrayBoundsError|ArrayBoundsException|AssertError|AssertException|Base64CharException|Base64Exception|BzipClosedException|BzipException|ClusterEmptyException|ClusterFullException|ConvError|ConvOverflowError|ConversionException|CorruptedIteratorException|DatabaseException|DateParseError|Exception|FTPException|FiberException|FileException|FinalizeException|FormatError|HostException|IOException|IllegalArgumentException|IllegalElementException|InvalidKeyException|InvalidTypeException|LocaleException|ModuleCtorError|NoSuchElementException|OpenException|OpenRJException|OutOfMemoryException|PlatformException|ProcessCreateException|ProcessException|ProcessForkException|ProcessKillException|ProcessWaitException|ReadException|RegExpException|RegexException|RegistryException|SeekException|SharedLibException|SocketAcceptException|SocketException|StdioException|StreamException|StreamFileException|StringException|SwitchError|SwitchException|SyncException|TextException|ThreadError|ThreadException|UnboxException|UnicodeException|UtfException|VariantTypeMismatchException|Win32Exception|WriteException|XmlException|ZipChecksumException|ZipException|ZipExhaustedException|ZipNotSupportedException|ZlibClosedException|ZlibException|OurUnwindException|SysError)\b
+ name
+ support.type.built-ins.exceptions.d
+
+ support-type-built-ins-interfaces-d
+
+ match
+ \b(Buffered|HttpParamsView|ICache|IChannel|IClassFactory|ICluster|IConduit|IConsumer|IEvent|IHierarchy|ILevel|IListener|IMessage|IMessageLoader|IOStream|IReadable|ISelectable|ISelectionSet|ISelector|IServer|IUnknown|IWritable|IXmlPrinter|InputStream|OutputStream|PathView|VfsFile|VfsFiles|VfsFolder|VfsFolderEntry|VfsFolders|VfsHost|VfsSync|ZipReader|ZipWriter)\b
+ name
+ support.type.built-ins.interfaces.d
+
+ support-type-built-ins-structs-d
+
+ match
+ \b(ABC|ABCFLOAT|ACCEL|ACCESSTIMEOUT|ACCESS_ALLOWED_ACE|ACCESS_DENIED_ACE|ACE_HEADER|ACL|ACL_REVISION_INFORMATION|ACL_SIZE_INFORMATION|ACTION_HEADER|ADAPTER_STATUS|ADDJOB_INFO_1|ANIMATIONINFO|APPBARDATA|Argument|Atomic|Attribute|BITMAP|BITMAPCOREHEADER|BITMAPCOREINFO|BITMAPINFO|BITMAPINFOHEADER|BITMAPV4HEADER|BLOB|BROWSEINFO|BY_HANDLE_FILE_INFORMATION|Bar|Baz|BitArray|Box|BracketResult|ByteSwap|CANDIDATEFORM|CANDIDATELIST|CBTACTIVATESTRUCT|CBT_CREATEWND|CHARFORMAT|CHARRANGE|CHARSET|CHARSETINFO|CHAR_INFO|CIDA|CIEXYZ|CIEXYZTRIPLE|CLIENTCREATESTRUCT|CMINVOKECOMMANDINFO|COLORADJUSTMENT|COLORMAP|COMMCONFIG|COMMPROP|COMMTIMEOUTS|COMPAREITEMSTRUCT|COMPCOLOR|COMPOSITIONFORM|COMSTAT|CONNECTDLGSTRUCT|CONSOLE_CURSOR_INFO|CONTEXT|CONVCONTEXT|CONVINFO|COORD|COPYDATASTRUCT|CPINFO|CPLINFO|CREATESTRUCT|CREATE_PROCESS_DEBUG_INFO|CREATE_THREAD_DEBUG_INFO|CRITICAL_SECTION|CRITICAL_SECTION_DEBUG|CURRENCYFMT|CURSORSHAPE|CWPRETSTRUCT|CWPSTRUCT|CharClass|CharRange|Clock|CodePage|Console|DATATYPES_INFO_1|DCB|DDEACK|DDEADVISE|DDEDATA|DDELN|DDEML_MSG_HOOK_DATA|DDEPOKE|DDEUP|DEBUGHOOKINFO|DEBUG_EVENT|DELETEITEMSTRUCT|DEVMODE|DEVNAMES|DEV_BROADCAST_HDR|DEV_BROADCAST_OEM|DEV_BROADCAST_PORT|DEV_BROADCAST_VOLUME|DIBSECTION|DIR|DISCDLGSTRUCT|DISK_GEOMETRY|DISK_PERFORMANCE|DOCINFO|DOC_INFO_1|DOC_INFO_2|DRAGLISTINFO|DRAWITEMSTRUCT|DRAWTEXTPARAMS|DRIVER_INFO_1|DRIVER_INFO_2|DRIVER_INFO_3|DRIVE_LAYOUT_INFORMATION|Date|DateParse|DateTime|DirEntry|DynArg|EDITSTREAM|EMPTYRECORD|EMR|EMRABORTPATH|EMRANGLEARC|EMRARC|EMRBITBLT|EMRCREATEBRUSHINDIRECT|EMRCREATECOLORSPACE|EMRCREATEDIBPATTERNBRUSHPT|EMRCREATEMONOBRUSH|EMRCREATEPALETTE|EMRCREATEPEN|EMRELLIPSE|EMREOF|EMREXCLUDECLIPRECT|EMREXTCREATEFONTINDIRECTW|EMREXTCREATEPEN|EMREXTFLOODFILL|EMREXTSELECTCLIPRGN|EMREXTTEXTOUTA|EMRFILLPATH|EMRFILLRGN|EMRFORMAT|EMRFRAMERGN|EMRGDICOMMENT|EMRINVERTRGN|EMRLINETO|EMRMASKBLT|EMRMODIFYWORLDTRANSFORM|EMROFFSETCLIPRGN|EMRPLGBLT|EMRPOLYDRAW|EMRPOLYDRAW16|EMRPOLYLINE|EMRPOLYLINE16|EMRPOLYPOLYLINE|EMRPOLYPOLYLINE16|EMRPOLYTEXTOUTA|EMRRESIZEPALETTE|EMRRESTOREDC|EMRROUNDRECT|EMRSCALEVIEWPORTEXTEX|EMRSELECTCLIPPATH|EMRSELECTCOLORSPACE|EMRSELECTOBJECT|EMRSELECTPALETTE|EMRSETARCDIRECTION|EMRSETBKCOLOR|EMRSETCOLORADJUSTMENT|EMRSETDIBITSTODEVICE|EMRSETMAPPERFLAGS|EMRSETMITERLIMIT|EMRSETPALETTEENTRIES|EMRSETPIXELV|EMRSETVIEWPORTEXTEX|EMRSETVIEWPORTORGEX|EMRSETWORLDTRANSFORM|EMRSTRETCHBLT|EMRSTRETCHDIBITS|EMRTEXT|ENCORRECTTEXT|ENDROPFILES|ENHMETAHEADER|ENHMETARECORD|ENOLEOPFAILED|ENPROTECTED|ENSAVECLIPBOARD|ENUMLOGFONT|ENUMLOGFONTEX|ENUM_SERVICE_STATUS|EVENTLOGRECORD|EVENTMSG|EXCEPTION_DEBUG_INFO|EXCEPTION_POINTERS|EXCEPTION_RECORD|EXIT_PROCESS_DEBUG_INFO|EXIT_THREAD_DEBUG_INFO|EXTLOGFONT|EXTLOGPEN|EXT_BUTTON|EmptySlot|EndOfCDRecord|Environment|FILETIME|FILTERKEYS|FINDREPLACE|FINDTEXTEX|FIND_NAME_BUFFER|FIND_NAME_HEADER|FIXED|FLOATING_SAVE_AREA|FMS_GETDRIVEINFO|FMS_GETFILESEL|FMS_LOAD|FMS_TOOLBARLOAD|FOCUS_EVENT_RECORD|FONTSIGNATURE|FORMATRANGE|FORMAT_PARAMETERS|FORM_INFO_1|FileConst|FileHeader|FileRoots|FileSystem|FoldingCaseData|Foo|FtpConnectionDetail|FtpFeature|FtpFileInfo|FtpResponse|GC|GCP_RESULTS|GCStats|GENERIC_MAPPING|GLYPHMETRICS|GLYPHMETRICSFLOAT|GROUP_INFO_2|GUID|HANDLETABLE|HD_HITTESTINFO|HD_ITEM|HD_LAYOUT|HD_NOTIFY|HELPINFO|HELPWININFO|HIGHCONTRAST|HSZPAIR|HeaderElement|HttpConst|HttpHeader|HttpHeaderName|HttpResponses|HttpStatus|HttpToken|ICONINFO|ICONMETRICS|IMAGEINFO|IMAGE_DOS_HEADER|INPUT_RECORD|ITEMIDLIST|IeeeFlags|Interface|JOB_INFO_1|JOB_INFO_2|KERNINGPAIR|LANA_ENUM|LAYERPLANEDESCRIPTOR|LDT_ENTRY|LIST_ENTRY|LOAD_DLL_DEBUG_INFO|LOCALESIGNATURE|LOCALGROUP_INFO_0|LOCALGROUP_MEMBERS_INFO_0|LOCALGROUP_MEMBERS_INFO_3|LOGBRUSH|LOGCOLORSPACE|LOGFONT|LOGFONTA|LOGFONTW|LOGPALETTE|LOGPEN|LUID_AND_ATTRIBUTES|LV_COLUMN|LV_DISPINFO|LV_FINDINFO|LV_HITTESTINFO|LV_ITEM|LV_KEYDOWN|LocalFileHeader|MAT2|MD5_CTX|MDICREATESTRUCT|MEASUREITEMSTRUCT|MEMORYSTATUS|MEMORY_BASIC_INFORMATION|MENUEX_TEMPLATE_HEADER|MENUEX_TEMPLATE_ITEM|MENUITEMINFO|MENUITEMTEMPLATE|MENUITEMTEMPLATEHEADER|MENUTEMPLATE|MENU_EVENT_RECORD|METAFILEPICT|METARECORD|MINIMIZEDMETRICS|MINMAXINFO|MODEMDEVCAPS|MODEMSETTINGS|MONCBSTRUCT|MONCONVSTRUCT|MONERRSTRUCT|MONHSZSTRUCT|MONITOR_INFO_1|MONITOR_INFO_2|MONLINKSTRUCT|MONMSGSTRUCT|MOUSEHOOKSTRUCT|MOUSEKEYS|MOUSE_EVENT_RECORD|MSG|MSGBOXPARAMS|MSGFILTER|MULTIKEYHELP|NAME_BUFFER|NCB|NCCALCSIZE_PARAMS|NDDESHAREINFO|NETCONNECTINFOSTRUCT|NETINFOSTRUCT|NETRESOURCE|NEWCPLINFO|NEWTEXTMETRIC|NEWTEXTMETRICEX|NMHDR|NM_LISTVIEW|NM_TREEVIEW|NM_UPDOWNW|NONCLIENTMETRICS|NS_SERVICE_INFO|NUMBERFMT|OFNOTIFY|OFSTRUCT|OPENFILENAME|OPENFILENAMEA|OPENFILENAMEW|OSVERSIONINFO|OUTLINETEXTMETRIC|OUTPUT_DEBUG_STRING_INFO|OVERLAPPED|OffsetTypeInfo|PAINTSTRUCT|PALETTEENTRY|PANOSE|PARAFORMAT|PARTITION_INFORMATION|PERF_COUNTER_BLOCK|PERF_COUNTER_DEFINITION|PERF_DATA_BLOCK|PERF_INSTANCE_DEFINITION|PERF_OBJECT_TYPE|PIXELFORMATDESCRIPTOR|POINT|POINTFLOAT|POINTFX|POINTL|POINTS|POLYTEXT|PORT_INFO_1|PORT_INFO_2|PREVENT_MEDIA_REMOVAL|PRINTER_DEFAULTS|PRINTER_INFO_1|PRINTER_INFO_2|PRINTER_INFO_3|PRINTER_INFO_4|PRINTER_INFO_5|PRINTER_NOTIFY_INFO|PRINTER_NOTIFY_INFO_DATA|PRINTER_NOTIFY_OPTIONS|PRINTER_NOTIFY_OPTIONS_TYPE|PRINTPROCESSOR_INFO_1|PRIVILEGE_SET|PROCESS_HEAPENTRY|PROCESS_INFORMATION|PROPSHEETHEADER|PROPSHEETHEADER_U1|PROPSHEETHEADER_U2|PROPSHEETHEADER_U3|PROPSHEETPAGE|PROPSHEETPAGE_U1|PROPSHEETPAGE_U2|PROTOCOL_INFO|PROVIDOR_INFO_1|PSHNOTIFY|PUNCTUATION|PassByCopy|PassByRef|Phase1Info|PropertyConfigurator|QUERY_SERVICE_CONFIG|QUERY_SERVICE_LOCK_STATUS|RASAMB|RASCONN|RASCONNSTATUS|RASDIALEXTENSIONS|RASDIALPARAMS|RASENTRYNAME|RASPPPIP|RASPPPIPX|RASPPPNBF|RASTERIZER_STATUS|REASSIGN_BLOCKS|RECT|RECTL|REMOTE_NAME_INFO|REPASTESPECIAL|REQRESIZE|RGBQUAD|RGBTRIPLE|RGNDATA|RGNDATAHEADER|RIP_INFO|Runtime|SCROLLINFO|SECURITY_ATTRIBUTES|SECURITY_DESCRIPTOR|SECURITY_QUALITY_OF_SERVICE|SELCHANGE|SERIALKEYS|SERVICE_ADDRESS|SERVICE_ADDRESSES|SERVICE_INFO|SERVICE_STATUS|SERVICE_TABLE_ENTRY|SERVICE_TYPE_INFO_ABS|SERVICE_TYPE_VALUE_ABS|SESSION_BUFFER|SESSION_HEADER|SET_PARTITION_INFORMATION|SHFILEINFO|SHFILEOPSTRUCT|SHITEMID|SHNAMEMAPPING|SID|SID_AND_ATTRIBUTES|SID_IDENTIFIER_AUTHORITY|SINGLE_LIST_ENTRY|SIZE|SMALL_RECT|SOUNDSENTRY|STARTUPINFO|STICKYKEYS|STRRET|STYLEBUF|STYLESTRUCT|SYSTEMTIME|SYSTEM_AUDIT_ACE|SYSTEM_INFO|SYSTEM_INFO_U|SYSTEM_POWER_STATUS|Signal|SjLj_Function_Context|SpecialCaseData|TAPE_ERASE|TAPE_GET_DRIVE_PARAMETERS|TAPE_GET_MEDIA_PARAMETERS|TAPE_GET_POSITION|TAPE_PREPARE|TAPE_SET_DRIVE_PARAMETERS|TAPE_SET_MEDIA_PARAMETERS|TAPE_SET_POSITION|TAPE_WRITE_MARKS|TBADDBITMAP|TBBUTTON|TBNOTIFY|TBSAVEPARAMS|TCHOOSECOLOR|TCHOOSEFONT|TC_HITTESTINFO|TC_ITEM|TC_ITEMHEADER|TC_KEYDOWN|TEXTMETRIC|TEXTMETRICA|TEXTRANGE|TFINDTEXT|TIME_ZONE_INFORMATION|TOGGLEKEYS|TOKEN_CONTROL|TOKEN_DEFAULT_DACL|TOKEN_GROUPS|TOKEN_OWNER|TOKEN_PRIMARY_GROUP|TOKEN_PRIVILEGES|TOKEN_SOURCE|TOKEN_STATISTICS|TOKEN_USER|TOOLINFO|TOOLTIPTEXT|TPAGESETUPDLG|TPMPARAMS|TRANSMIT_FILE_BUFFERS|TREEITEM|TSMALLPOINT|TTHITTESTINFO|TTPOLYCURVE|TTPOLYGONHEADER|TVARIANT|TV_DISPINFO|TV_HITTESTINFO|TV_INSERTSTRUCT|TV_ITEM|TV_KEYDOWN|TV_SORTCB|Time|TimeOfDay|TimeSpan|Tuple|UDACCEL|ULARGE_INTEGER|UNIVERSAL_NAME_INFO|UNLOAD_DLL_DEBUG_INFO|USEROBJECTFLAGS|USER_INFO_0|USER_INFO_2|USER_INFO_3|UnicodeData|VALENT|VA_LIST|VERIFY_INFORMATION|VS_FIXEDFILEINFO|Variant|VfsFilterInfo|WIN32_FILE_ATTRIBUTE_DATA|WIN32_FIND_DATA|WIN32_FIND_DATAW|WIN32_STREAM_ID|WINDOWINFO|WINDOWPLACEMENT|WINDOWPOS|WINDOW_BUFFER_SIZE_RECORD|WNDCLASS|WNDCLASSA|WNDCLASSEX|WNDCLASSEXA|WSADATA|WallClock|XFORM|ZipEntryInfo)\b
+ name
+ support.type.built-ins.structs.d
+
+ support-type-d
+
+ match
+ \b((?:tango|std)\.[\w\.]+)\b
+ name
+ support.type.d
+
+
+ scopeName
+ source.d
+ uuid
+ D7C3A109-0466-4C28-9ECF-10753300FF46
+
+
diff --git a/D/D.tmLanguage.cache b/D/D.tmLanguage.cache
new file mode 100644
index 0000000..b7c7618
Binary files /dev/null and b/D/D.tmLanguage.cache differ
diff --git a/D/Indentation Rules.tmPreferences b/D/Indentation Rules.tmPreferences
new file mode 100644
index 0000000..38675e4
--- /dev/null
+++ b/D/Indentation Rules.tmPreferences
@@ -0,0 +1,26 @@
+
+
+
+
+ name
+ Indentation Rules
+ scope
+ source.d
+ settings
+
+ decreaseIndentPattern
+ ^(.*\*/)?\s*\}([^}{"']*\{)?[;\s]*(//.*|/\*.*\*/\s*)?$|^\s*(public|private|protected):\s*$
+ increaseIndentPattern
+ ^.*\{[^}"']*$|^\s*(public|private|protected):\s*$
+
+ bracketIndentNextLinePattern
+ (?x)
+ ^ \s* \b(if|while|else|foreach)\b [^;]* $
+ | ^ \s* \b(for)\b .* $
+
+
+
+ uuid
+ 7C8F9C84-7DCC-4DD7-B32E-A638F322199F
+
+
diff --git a/D/Indentation Rules.tmPreferences.cache b/D/Indentation Rules.tmPreferences.cache
new file mode 100644
index 0000000..353f5f7
Binary files /dev/null and b/D/Indentation Rules.tmPreferences.cache differ
diff --git a/D/Symbol List-Method-Constructor.tmPreferences b/D/Symbol List-Method-Constructor.tmPreferences
new file mode 100644
index 0000000..c4e34d6
--- /dev/null
+++ b/D/Symbol List-Method-Constructor.tmPreferences
@@ -0,0 +1,20 @@
+
+
+
+
+ name
+ Symbol List: Method / Constructor
+ scope
+ source.d meta.definition.method, source.d meta.definition.constructor, source.d meta.definition.destructor
+ settings
+
+ showInSymbolList
+ 0
+ symbolTransformation
+
+ s/^\s*([^\)]+)/ $1/; # pad
+
+ uuid
+ A6BCFD4A-B6CC-49C6-93F9-FEB979CC679E
+
+
diff --git a/D/Symbol List-Method-Constructor.tmPreferences.cache b/D/Symbol List-Method-Constructor.tmPreferences.cache
new file mode 100644
index 0000000..73b4f15
Binary files /dev/null and b/D/Symbol List-Method-Constructor.tmPreferences.cache differ
diff --git a/D/class.sublime-snippet b/D/class.sublime-snippet
new file mode 100644
index 0000000..0e09406
--- /dev/null
+++ b/D/class.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ class
+ source.d
+ class … { … }
+
diff --git a/D/constant.sublime-snippet b/D/constant.sublime-snippet
new file mode 100644
index 0000000..54e771d
--- /dev/null
+++ b/D/constant.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ps
+ source.d
+ constant (private static final)
+
diff --git a/D/debug.sublime-snippet b/D/debug.sublime-snippet
new file mode 100644
index 0000000..3080cda
--- /dev/null
+++ b/D/debug.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ debug
+ source.d
+ debug { … }
+
diff --git a/D/debugm.sublime-snippet b/D/debugm.sublime-snippet
new file mode 100644
index 0000000..999e21b
--- /dev/null
+++ b/D/debugm.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ debugm
+ source.d
+ debug(module) { … }
+
diff --git a/D/enum.sublime-snippet b/D/enum.sublime-snippet
new file mode 100644
index 0000000..2881392
--- /dev/null
+++ b/D/enum.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ en
+ source.d
+ enum … { … }
+
diff --git a/D/err-format.sublime-snippet b/D/err-format.sublime-snippet
new file mode 100644
index 0000000..5fa0b09
--- /dev/null
+++ b/D/err-format.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ errf
+ source.d
+ Stderr(format, …)
+
diff --git a/D/err.sublime-snippet b/D/err.sublime-snippet
new file mode 100644
index 0000000..0d14ec4
--- /dev/null
+++ b/D/err.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ err
+ source.d
+ Stderr(…)
+
diff --git a/D/foreach-reverse.sublime-snippet b/D/foreach-reverse.sublime-snippet
new file mode 100644
index 0000000..c1540f6
--- /dev/null
+++ b/D/foreach-reverse.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ fer
+ source.d
+ foreach_reverse(e; …) { … }
+
diff --git a/D/foreach.sublime-snippet b/D/foreach.sublime-snippet
new file mode 100644
index 0000000..fb27ed6
--- /dev/null
+++ b/D/foreach.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ fe
+ source.d
+ foreach(e; …) { … }
+
diff --git a/D/if-else.sublime-snippet b/D/if-else.sublime-snippet
new file mode 100644
index 0000000..35c46d2
--- /dev/null
+++ b/D/if-else.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ ife
+ source.d
+ if … else
+
diff --git a/D/if.sublime-snippet b/D/if.sublime-snippet
new file mode 100644
index 0000000..d4ae982
--- /dev/null
+++ b/D/if.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ if
+ source.d
+ if …
+
diff --git a/D/import.sublime-snippet b/D/import.sublime-snippet
new file mode 100644
index 0000000..af96748
--- /dev/null
+++ b/D/import.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ im
+ source.d
+ import …
+
diff --git a/D/log-error.sublime-snippet b/D/log-error.sublime-snippet
new file mode 100644
index 0000000..11259e1
--- /dev/null
+++ b/D/log-error.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ loge
+ source.d
+ log.error(…)
+
diff --git a/D/log-fatal.sublime-snippet b/D/log-fatal.sublime-snippet
new file mode 100644
index 0000000..4a07803
--- /dev/null
+++ b/D/log-fatal.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ logf
+ source.d
+ log.fatal(…)
+
diff --git a/D/log-info.sublime-snippet b/D/log-info.sublime-snippet
new file mode 100644
index 0000000..99c8604
--- /dev/null
+++ b/D/log-info.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ log
+ source.d
+ log.info(…)
+
diff --git a/D/log-trace.sublime-snippet b/D/log-trace.sublime-snippet
new file mode 100644
index 0000000..aecb1df
--- /dev/null
+++ b/D/log-trace.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ logt
+ source.d
+ log.trace(…)
+
diff --git a/D/log-warn.sublime-snippet b/D/log-warn.sublime-snippet
new file mode 100644
index 0000000..facb866
--- /dev/null
+++ b/D/log-warn.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ logw
+ source.d
+ log.warn(…)
+
diff --git a/D/logger.sublime-snippet b/D/logger.sublime-snippet
new file mode 100644
index 0000000..718f184
--- /dev/null
+++ b/D/logger.sublime-snippet
@@ -0,0 +1,12 @@
+
+
+ logger
+ source.d
+ Logger for Module
+
diff --git a/D/main-with-args.sublime-snippet b/D/main-with-args.sublime-snippet
new file mode 100644
index 0000000..5e3c44a
--- /dev/null
+++ b/D/main-with-args.sublime-snippet
@@ -0,0 +1,9 @@
+
+
+ maina
+ source.d
+ int main(char[][] args) { … }
+
diff --git a/D/main.sublime-snippet b/D/main.sublime-snippet
new file mode 100644
index 0000000..d0a6e06
--- /dev/null
+++ b/D/main.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ main
+ source.d
+ void main() { … }
+
diff --git a/D/method.sublime-snippet b/D/method.sublime-snippet
new file mode 100644
index 0000000..8aa4bc2
--- /dev/null
+++ b/D/method.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ me
+ source.d
+ method … { … }
+
diff --git a/D/out-format.sublime-snippet b/D/out-format.sublime-snippet
new file mode 100644
index 0000000..11f0902
--- /dev/null
+++ b/D/out-format.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ outf
+ source.d
+ Stdout(format, …)
+
diff --git a/D/out.sublime-snippet b/D/out.sublime-snippet
new file mode 100644
index 0000000..a7ce510
--- /dev/null
+++ b/D/out.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ out
+ source.d
+ Stdout(…)
+
diff --git a/D/return.sublime-snippet b/D/return.sublime-snippet
new file mode 100644
index 0000000..de39779
--- /dev/null
+++ b/D/return.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ r
+ source.d
+ return …
+
diff --git a/D/struct.sublime-snippet b/D/struct.sublime-snippet
new file mode 100644
index 0000000..662b953
--- /dev/null
+++ b/D/struct.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ st
+ source.d
+ struct … { … }
+
diff --git a/D/try-catch-finally.sublime-snippet b/D/try-catch-finally.sublime-snippet
new file mode 100644
index 0000000..867aeb6
--- /dev/null
+++ b/D/try-catch-finally.sublime-snippet
@@ -0,0 +1,12 @@
+
+
+ tcf
+ source.d
+ try … catch … finally
+
diff --git a/D/try-catch.sublime-snippet b/D/try-catch.sublime-snippet
new file mode 100644
index 0000000..7aeb61e
--- /dev/null
+++ b/D/try-catch.sublime-snippet
@@ -0,0 +1,10 @@
+
+
+ tc
+ source.d
+ try … catch
+
diff --git a/D/try-finally.sublime-snippet b/D/try-finally.sublime-snippet
new file mode 100644
index 0000000..f2b1a2e
--- /dev/null
+++ b/D/try-finally.sublime-snippet
@@ -0,0 +1,10 @@
+
+
+ tf
+ source.d
+ try … finally
+
diff --git a/D/unittest.sublime-snippet b/D/unittest.sublime-snippet
new file mode 100644
index 0000000..3826af1
--- /dev/null
+++ b/D/unittest.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ unit
+ source.d
+ unittest { … }
+
diff --git a/D/version.sublime-snippet b/D/version.sublime-snippet
new file mode 100644
index 0000000..f0c9b7a
--- /dev/null
+++ b/D/version.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ ver
+ source.d
+ version(ident) { … }
+
diff --git a/D/while.sublime-snippet b/D/while.sublime-snippet
new file mode 100644
index 0000000..5210951
--- /dev/null
+++ b/D/while.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ while
+ source.d
+ while(…) { … }
+
diff --git a/Default/Add Line Before.sublime-macro b/Default/Add Line Before.sublime-macro
new file mode 100644
index 0000000..a1164e7
--- /dev/null
+++ b/Default/Add Line Before.sublime-macro
@@ -0,0 +1,6 @@
+[
+ {"command": "move_to", "args": {"to": "hardbol"}},
+ {"command": "insert", "args": {"characters": "\n"}},
+ {"command": "move", "args": {"by": "lines", "forward": false}},
+ {"command": "reindent", "args": {"force_indent": false}}
+]
diff --git a/Default/Add Line in Braces.sublime-macro b/Default/Add Line in Braces.sublime-macro
new file mode 100644
index 0000000..aaf8218
--- /dev/null
+++ b/Default/Add Line in Braces.sublime-macro
@@ -0,0 +1,6 @@
+[
+ {"command": "insert", "args": {"characters": "\n\n"} },
+ {"command": "move", "args": {"by": "lines", "forward": false} },
+ {"command": "move_to", "args": {"to": "hardeol", "extend": false} },
+ {"command": "reindent", "args": {"single_line": true} }
+]
diff --git a/Default/Add Line.sublime-macro b/Default/Add Line.sublime-macro
new file mode 100644
index 0000000..6d746e7
--- /dev/null
+++ b/Default/Add Line.sublime-macro
@@ -0,0 +1,4 @@
+[
+ {"command": "move_to", "args": {"to": "hardeol"}},
+ {"command": "insert", "args": {"characters": "\n"}}
+]
diff --git a/Default/Context.sublime-menu b/Default/Context.sublime-menu
new file mode 100644
index 0000000..61a9de2
--- /dev/null
+++ b/Default/Context.sublime-menu
@@ -0,0 +1,13 @@
+[
+ { "command": "copy" },
+ { "command": "cut" },
+ { "command": "paste" },
+ { "caption": "-", "id": "selection" },
+ { "command": "select_all" },
+ { "caption": "-", "id": "file" },
+ { "command": "open_in_browser", "caption": "Open in Browser" },
+ { "command": "open_dir", "args": {"dir": "$file_path", "file": "$file_name"}, "caption": "Open Containing Folder…" },
+ { "command": "copy_path", "caption": "Copy File Path" },
+ { "command": "reveal_in_side_bar", "caption": "Reveal in Side Bar" },
+ { "caption": "-", "id": "end" }
+]
diff --git a/Default/Default (Linux).sublime-keymap b/Default/Default (Linux).sublime-keymap
new file mode 100644
index 0000000..0903204
--- /dev/null
+++ b/Default/Default (Linux).sublime-keymap
@@ -0,0 +1,650 @@
+[
+ { "keys": ["ctrl+q"], "command": "exit" },
+
+ { "keys": ["ctrl+shift+n"], "command": "new_window" },
+ { "keys": ["ctrl+shift+w"], "command": "close_window" },
+ { "keys": ["ctrl+o"], "command": "prompt_open_file" },
+ { "keys": ["ctrl+shift+t"], "command": "reopen_last_file" },
+ { "keys": ["alt+o"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm"]} },
+ { "keys": ["ctrl+n"], "command": "new_file" },
+ { "keys": ["ctrl+s"], "command": "save" },
+ { "keys": ["ctrl+shift+s"], "command": "prompt_save_as" },
+ { "keys": ["ctrl+f4"], "command": "close_file" },
+ { "keys": ["ctrl+w"], "command": "close" },
+
+ { "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" },
+ { "keys": ["f11"], "command": "toggle_full_screen" },
+ { "keys": ["shift+f11"], "command": "toggle_distraction_free" },
+
+ { "keys": ["backspace"], "command": "left_delete" },
+ { "keys": ["shift+backspace"], "command": "left_delete" },
+ { "keys": ["ctrl+shift+backspace"], "command": "left_delete" },
+ { "keys": ["delete"], "command": "right_delete" },
+ { "keys": ["enter"], "command": "insert", "args": {"characters": "\n"} },
+ { "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\n"} },
+ { "keys": ["keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
+ { "keys": ["shift+keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
+
+ { "keys": ["ctrl+z"], "command": "undo" },
+ { "keys": ["ctrl+shift+z"], "command": "redo" },
+ { "keys": ["ctrl+y"], "command": "redo_or_repeat" },
+ { "keys": ["ctrl+u"], "command": "soft_undo" },
+ { "keys": ["ctrl+shift+u"], "command": "soft_redo" },
+
+ { "keys": ["shift+delete"], "command": "cut" },
+ { "keys": ["ctrl+insert"], "command": "copy" },
+ { "keys": ["shift+insert"], "command": "paste" },
+
+ // These two key bindings should replace the above three if you'd prefer
+ // the traditional X11 behavior of shift+insert pasting from the primary
+ // selection. The above CUA keys are the default, to match most GTK
+ // applications.
+ //{ "keys": ["shift+insert"], "command": "paste", "args": {"clipboard": "selection"} },
+ //{ "keys": ["shift+delete"], "command": "right_delete" },
+
+ { "keys": ["ctrl+x"], "command": "cut" },
+ { "keys": ["ctrl+c"], "command": "copy" },
+ { "keys": ["ctrl+v"], "command": "paste" },
+ { "keys": ["ctrl+shift+v"], "command": "paste_and_indent" },
+
+ { "keys": ["left"], "command": "move", "args": {"by": "characters", "forward": false} },
+ { "keys": ["right"], "command": "move", "args": {"by": "characters", "forward": true} },
+ { "keys": ["up"], "command": "move", "args": {"by": "lines", "forward": false} },
+ { "keys": ["down"], "command": "move", "args": {"by": "lines", "forward": true} },
+ { "keys": ["shift+left"], "command": "move", "args": {"by": "characters", "forward": false, "extend": true} },
+ { "keys": ["shift+right"], "command": "move", "args": {"by": "characters", "forward": true, "extend": true} },
+ { "keys": ["shift+up"], "command": "move", "args": {"by": "lines", "forward": false, "extend": true} },
+ { "keys": ["shift+down"], "command": "move", "args": {"by": "lines", "forward": true, "extend": true} },
+
+ { "keys": ["ctrl+left"], "command": "move", "args": {"by": "words", "forward": false} },
+ { "keys": ["ctrl+right"], "command": "move", "args": {"by": "word_ends", "forward": true} },
+ { "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "words", "forward": false, "extend": true} },
+ { "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "word_ends", "forward": true, "extend": true} },
+
+ { "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
+ { "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
+ { "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
+ { "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
+
+ { "keys": ["alt+shift+up"], "command": "select_lines", "args": {"forward": false} },
+ { "keys": ["alt+shift+down"], "command": "select_lines", "args": {"forward": true} },
+
+ { "keys": ["pageup"], "command": "move", "args": {"by": "pages", "forward": false} },
+ { "keys": ["pagedown"], "command": "move", "args": {"by": "pages", "forward": true} },
+ { "keys": ["shift+pageup"], "command": "move", "args": {"by": "pages", "forward": false, "extend": true} },
+ { "keys": ["shift+pagedown"], "command": "move", "args": {"by": "pages", "forward": true, "extend": true} },
+
+ { "keys": ["home"], "command": "move_to", "args": {"to": "bol", "extend": false} },
+ { "keys": ["end"], "command": "move_to", "args": {"to": "eol", "extend": false} },
+ { "keys": ["shift+home"], "command": "move_to", "args": {"to": "bol", "extend": true} },
+ { "keys": ["shift+end"], "command": "move_to", "args": {"to": "eol", "extend": true} },
+ { "keys": ["ctrl+home"], "command": "move_to", "args": {"to": "bof", "extend": false} },
+ { "keys": ["ctrl+end"], "command": "move_to", "args": {"to": "eof", "extend": false} },
+ { "keys": ["ctrl+shift+home"], "command": "move_to", "args": {"to": "bof", "extend": true} },
+ { "keys": ["ctrl+shift+end"], "command": "move_to", "args": {"to": "eof", "extend": true} },
+
+ { "keys": ["ctrl+up"], "command": "scroll_lines", "args": {"amount": 1.0 } },
+ { "keys": ["ctrl+down"], "command": "scroll_lines", "args": {"amount": -1.0 } },
+
+ { "keys": ["ctrl+pagedown"], "command": "next_view" },
+ { "keys": ["ctrl+pageup"], "command": "prev_view" },
+
+ { "keys": ["ctrl+tab"], "command": "next_view_in_stack" },
+ { "keys": ["ctrl+shift+tab"], "command": "prev_view_in_stack" },
+
+ { "keys": ["ctrl+a"], "command": "select_all" },
+ { "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },
+ { "keys": ["escape"], "command": "single_selection", "context":
+ [
+ { "key": "num_selections", "operator": "not_equal", "operand": 1 }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
+ "context":
+ [
+ { "key": "panel_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_overlay", "context":
+ [
+ { "key": "overlay_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_auto_complete", "context":
+ [
+ { "key": "auto_complete_visible", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
+ "context":
+ [
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "reindent", "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
+ { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "indent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["tab"], "command": "next_field", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab" }
+ ]
+ },
+
+ { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "prev_field", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["ctrl+]"], "command": "indent" },
+ { "keys": ["ctrl+["], "command": "unindent" },
+
+ { "keys": ["insert"], "command": "toggle_overwrite" },
+
+ { "keys": ["ctrl+l"], "command": "expand_selection", "args": {"to": "line"} },
+ { "keys": ["ctrl+d"], "command": "find_under_expand" },
+ { "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
+ { "keys": ["ctrl+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
+ { "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
+ { "keys": ["ctrl+m"], "command": "move_to", "args": {"to": "brackets"} },
+ { "keys": ["ctrl+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
+ { "keys": ["ctrl+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
+
+ { "keys": ["alt+."], "command": "close_tag" },
+
+ { "keys": ["ctrl+alt+q"], "command": "toggle_record_macro" },
+ { "keys": ["ctrl+alt+shift+q"], "command": "run_macro" },
+
+ { "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line.sublime-macro"} },
+ { "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line Before.sublime-macro"} },
+ { "keys": ["enter"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab", "operand": false }
+ ]
+ },
+
+ { "keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
+ { "keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
+ { "keys": ["ctrl+alt+p"], "command": "prompt_select_project" },
+ { "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
+ { "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
+ { "keys": ["ctrl+;"], "command": "show_overlay", "args": {"overlay": "goto", "text": "#"} },
+
+ { "keys": ["ctrl+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":false} },
+ { "keys": ["ctrl+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":true} },
+ { "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "find"} },
+ { "keys": ["ctrl+h"], "command": "show_panel", "args": {"panel": "replace"} },
+ { "keys": ["ctrl+shift+h"], "command": "replace_next" },
+ { "keys": ["f3"], "command": "find_next" },
+ { "keys": ["shift+f3"], "command": "find_prev" },
+ { "keys": ["ctrl+f3"], "command": "find_under" },
+ { "keys": ["ctrl+shift+f3"], "command": "find_under_prev" },
+ { "keys": ["alt+f3"], "command": "find_all_under" },
+ { "keys": ["ctrl+e"], "command": "slurp_find_string" },
+ { "keys": ["ctrl+shift+e"], "command": "slurp_replace_string" },
+ { "keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
+ { "keys": ["f4"], "command": "next_result" },
+ { "keys": ["shift+f4"], "command": "prev_result" },
+
+ { "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
+ { "keys": ["ctrl+f6"], "command": "next_misspelling" },
+ { "keys": ["ctrl+shift+f6"], "command": "prev_misspelling" },
+
+ { "keys": ["ctrl+shift+up"], "command": "swap_line_up" },
+ { "keys": ["ctrl+shift+down"], "command": "swap_line_down" },
+
+ { "keys": ["ctrl+backspace"], "command": "delete_word", "args": { "forward": false } },
+ { "keys": ["ctrl+shift+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+
+ { "keys": ["ctrl+delete"], "command": "delete_word", "args": { "forward": true } },
+ { "keys": ["ctrl+shift+delete"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+
+ { "keys": ["ctrl+/"], "command": "toggle_comment", "args": { "block": false } },
+ { "keys": ["ctrl+shift+/"], "command": "toggle_comment", "args": { "block": true } },
+
+ { "keys": ["ctrl+j"], "command": "join_lines" },
+ { "keys": ["ctrl+shift+d"], "command": "duplicate_line" },
+
+ { "keys": ["ctrl+`"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
+
+ { "keys": ["alt+/"], "command": "auto_complete" },
+ { "keys": ["alt+/"], "command": "replace_completion_with_auto_complete", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "auto_complete_visible", "operator": "equal", "operand": false },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["ctrl+alt+shift+p"], "command": "show_scope_name" },
+
+ { "keys": ["f7"], "command": "build" },
+ { "keys": ["ctrl+b"], "command": "build" },
+ { "keys": ["ctrl+shift+b"], "command": "build", "args": {"variant": "Run"} },
+ { "keys": ["ctrl+break"], "command": "exec", "args": {"kill": true} },
+
+ { "keys": ["ctrl+t"], "command": "transpose" },
+
+ { "keys": ["f9"], "command": "sort_lines", "args": {"case_sensitive": false} },
+ { "keys": ["ctrl+f9"], "command": "sort_lines", "args": {"case_sensitive": true} },
+
+ // Auto-pair quotes
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double", "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+
+ // Auto-pair single quotes
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single", "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+
+ // Auto-pair brackets
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+
+ // Auto-pair square brackets
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+
+ // Auto-pair curly brackets
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ {
+ "keys": ["alt+shift+1"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+2"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+3"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.33, 0.66, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+4"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.25, 0.5, 0.75, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+8"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
+ }
+ },
+ {
+ "keys": ["alt+shift+9"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.33, 0.66, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
+ }
+ },
+ {
+ "keys": ["alt+shift+5"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells":
+ [
+ [0, 0, 1, 1], [1, 0, 2, 1],
+ [0, 1, 1, 2], [1, 1, 2, 2]
+ ]
+ }
+ },
+ { "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+0"], "command": "focus_side_bar" },
+
+ { "keys": ["alt+1"], "command": "select_by_index", "args": { "index": 0 } },
+ { "keys": ["alt+2"], "command": "select_by_index", "args": { "index": 1 } },
+ { "keys": ["alt+3"], "command": "select_by_index", "args": { "index": 2 } },
+ { "keys": ["alt+4"], "command": "select_by_index", "args": { "index": 3 } },
+ { "keys": ["alt+5"], "command": "select_by_index", "args": { "index": 4 } },
+ { "keys": ["alt+6"], "command": "select_by_index", "args": { "index": 5 } },
+ { "keys": ["alt+7"], "command": "select_by_index", "args": { "index": 6 } },
+ { "keys": ["alt+8"], "command": "select_by_index", "args": { "index": 7 } },
+ { "keys": ["alt+9"], "command": "select_by_index", "args": { "index": 8 } },
+ { "keys": ["alt+0"], "command": "select_by_index", "args": { "index": 9 } },
+
+ { "keys": ["f2"], "command": "next_bookmark" },
+ { "keys": ["shift+f2"], "command": "prev_bookmark" },
+ { "keys": ["ctrl+f2"], "command": "toggle_bookmark" },
+ { "keys": ["ctrl+shift+f2"], "command": "clear_bookmarks" },
+ { "keys": ["alt+f2"], "command": "select_all_bookmarks" },
+
+ { "keys": ["ctrl+shift+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} },
+
+ { "keys": ["alt+q"], "command": "wrap_lines" },
+
+ { "keys": ["ctrl+k", "ctrl+u"], "command": "upper_case" },
+ { "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },
+
+ { "keys": ["ctrl+k", "ctrl+space"], "command": "set_mark" },
+ { "keys": ["ctrl+k", "ctrl+a"], "command": "select_to_mark" },
+ { "keys": ["ctrl+k", "ctrl+w"], "command": "delete_to_mark" },
+ { "keys": ["ctrl+k", "ctrl+x"], "command": "swap_with_mark" },
+ { "keys": ["ctrl+k", "ctrl+y"], "command": "yank" },
+ { "keys": ["ctrl+k", "ctrl+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+ { "keys": ["ctrl+k", "ctrl+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+ { "keys": ["ctrl+k", "ctrl+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
+ { "keys": ["ctrl+k", "ctrl+c"], "command": "show_at_center" },
+
+ { "keys": ["ctrl++"], "command": "increase_font_size" },
+ { "keys": ["ctrl+="], "command": "increase_font_size" },
+ { "keys": ["ctrl+-"], "command": "decrease_font_size" },
+
+ { "keys": ["alt+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } },
+
+ { "keys": ["ctrl+shift+["], "command": "fold" },
+ { "keys": ["ctrl+shift+]"], "command": "unfold" },
+ { "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
+ { "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
+ { "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
+ { "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
+ { "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
+ { "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
+ { "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
+ { "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
+ { "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
+ { "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
+ { "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
+ { "keys": ["ctrl+k", "ctrl+t"], "command": "fold_tag_attributes" },
+
+ { "keys": ["context_menu"], "command": "context_menu" },
+
+ { "keys": ["alt+c"], "command": "toggle_case_sensitive", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+r"], "command": "toggle_regex", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+w"], "command": "toggle_whole_word", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+a"], "command": "toggle_preserve_case", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+
+ // Find panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+
+ // Replace panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["ctrl+alt+enter"], "command": "replace_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+
+ // Incremental find panel key bindings
+ { "keys": ["enter"], "command": "hide_panel", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ }
+]
diff --git a/Default/Default (Linux).sublime-mousemap b/Default/Default (Linux).sublime-mousemap
new file mode 100644
index 0000000..44bed1f
--- /dev/null
+++ b/Default/Default (Linux).sublime-mousemap
@@ -0,0 +1,100 @@
+[
+ // Basic drag select
+ {
+ "button": "button1", "count": 1,
+ "press_command": "drag_select"
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"additive": true}
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"subtractive": true}
+ },
+
+ // Select between selection and click location
+ {
+ "button": "button1", "modifiers": ["shift"],
+ "press_command": "drag_select",
+ "press_args": {"extend": true}
+ },
+ {
+ "button": "button1", "modifiers": ["shift", "ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"additive": true, "extend": true}
+ },
+ {
+ "button": "button1", "modifiers": ["shift", "alt"],
+ "press_command": "drag_select",
+ "press_args": {"subtractive": true, "extend": true}
+ },
+
+ // Drag select by words
+ {
+ "button": "button1", "count": 2,
+ "press_command": "drag_select",
+ "press_args": {"by": "words"}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "additive": true}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "subtractive": true}
+ },
+
+ // Drag select by lines
+ {
+ "button": "button1", "count": 3,
+ "press_command": "drag_select",
+ "press_args": {"by": "lines"}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "additive": true}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "subtractive": true}
+ },
+
+ // Column select
+ {
+ "button": "button2", "modifiers": ["shift"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns"}
+ },
+ {
+ "button": "button2", "modifiers": ["shift", "ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "additive": true}
+ },
+ {
+ "button": "button2", "modifiers": ["shift", "alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "subtractive": true}
+ },
+
+ // Middle click paste
+ { "button": "button3", "command": "paste_selection_clipboard" },
+
+ // Switch files with buttons 4 and 5, as well as 8 and 9
+ { "button": "button4", "modifiers": [], "command": "prev_view" },
+ { "button": "button5", "modifiers": [], "command": "next_view" },
+ { "button": "button8", "modifiers": [], "command": "prev_view" },
+ { "button": "button9", "modifiers": [], "command": "next_view" },
+
+ // Change font size with ctrl+scroll wheel
+ { "button": "scroll_down", "modifiers": ["ctrl"], "command": "decrease_font_size" },
+ { "button": "scroll_up", "modifiers": ["ctrl"], "command": "increase_font_size" },
+
+ { "button": "button2", "modifiers": [], "press_command": "context_menu" }
+]
diff --git a/Default/Default (OSX).sublime-keymap b/Default/Default (OSX).sublime-keymap
new file mode 100644
index 0000000..52cecb5
--- /dev/null
+++ b/Default/Default (OSX).sublime-keymap
@@ -0,0 +1,624 @@
+/*
+On OS X, basic text manipulations (left, right, command+left, etc) make use of the system key bindings,
+and don't need to be repeated here. Anything listed here will take precedence, however.
+*/
+[
+ { "keys": ["super+shift+n"], "command": "new_window" },
+ { "keys": ["super+shift+w"], "command": "close_window" },
+ { "keys": ["super+o"], "command": "prompt_open" },
+ { "keys": ["super+shift+t"], "command": "reopen_last_file" },
+ { "keys": ["super+alt+up"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm"]} },
+ { "keys": ["super+n"], "command": "new_file" },
+ { "keys": ["super+s"], "command": "save" },
+ { "keys": ["super+shift+s"], "command": "prompt_save_as" },
+ { "keys": ["super+alt+s"], "command": "save_all" },
+ { "keys": ["super+w"], "command": "close" },
+
+ { "keys": ["super+k", "super+b"], "command": "toggle_side_bar" },
+ { "keys": ["super+ctrl+f"], "command": "toggle_full_screen" },
+ { "keys": ["super+ctrl+shift+f"], "command": "toggle_distraction_free" },
+
+ { "keys": ["super+z"], "command": "undo" },
+ { "keys": ["super+shift+z"], "command": "redo" },
+ { "keys": ["super+y"], "command": "redo_or_repeat" },
+ { "keys": ["super+u"], "command": "soft_undo" },
+ { "keys": ["super+shift+u"], "command": "soft_redo" },
+
+ { "keys": ["super+x"], "command": "cut" },
+ { "keys": ["super+c"], "command": "copy" },
+ { "keys": ["super+v"], "command": "paste" },
+ { "keys": ["super+shift+v"], "command": "paste_and_indent" },
+
+ { "keys": ["ctrl+alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
+ { "keys": ["ctrl+alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
+ { "keys": ["ctrl+alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
+ { "keys": ["ctrl+alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
+
+ { "keys": ["ctrl+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
+ { "keys": ["ctrl+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
+ { "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
+ { "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
+
+ { "keys": ["ctrl+alt+up"], "command": "scroll_lines", "args": {"amount": 1.0} },
+ { "keys": ["ctrl+alt+down"], "command": "scroll_lines", "args": {"amount": -1.0} },
+
+ { "keys": ["ctrl+shift+up"], "command": "select_lines", "args": {"forward": false} },
+ { "keys": ["ctrl+shift+down"], "command": "select_lines", "args": {"forward": true} },
+
+ { "keys": ["super+shift+["], "command": "prev_view" },
+ { "keys": ["super+shift+]"], "command": "next_view" },
+ { "keys": ["super+alt+left"], "command": "prev_view" },
+ { "keys": ["super+alt+right"], "command": "next_view" },
+
+ { "keys": ["ctrl+tab"], "command": "next_view_in_stack" },
+ { "keys": ["ctrl+shift+tab"], "command": "prev_view_in_stack" },
+
+ { "keys": ["super+a"], "command": "select_all" },
+ { "keys": ["super+shift+l"], "command": "split_selection_into_lines" },
+ { "keys": ["escape"], "command": "single_selection", "context":
+ [
+ { "key": "num_selections", "operator": "not_equal", "operand": 1 }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
+ "context":
+ [
+ { "key": "panel_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_overlay", "context":
+ [
+ { "key": "overlay_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_auto_complete", "context":
+ [
+ { "key": "auto_complete_visible", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["super+]"], "command": "indent" },
+ { "keys": ["super+["], "command": "unindent" },
+
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
+ "context":
+ [
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "reindent", "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
+ { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "indent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["tab"], "command": "next_field", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab" }
+ ]
+ },
+
+ { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "prev_field", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["super+l"], "command": "expand_selection", "args": {"to": "line"} },
+ { "keys": ["super+d"], "command": "find_under_expand" },
+ { "keys": ["super+k", "super+d"], "command": "find_under_expand_skip" },
+ { "keys": ["super+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
+ { "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
+ { "keys": ["ctrl+m"], "command": "move_to", "args": {"to": "brackets"} },
+ { "keys": ["super+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
+ { "keys": ["super+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
+
+ { "keys": ["super+alt+."], "command": "close_tag" },
+
+ { "keys": ["ctrl+q"], "command": "toggle_record_macro" },
+ { "keys": ["ctrl+shift+q"], "command": "run_macro" },
+
+ { "keys": ["super+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line.sublime-macro"} },
+ { "keys": ["super+shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line Before.sublime-macro"} },
+ { "keys": ["enter"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab", "operand": false }
+ ]
+ },
+
+ { "keys": ["super+t"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
+ { "keys": ["super+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
+ { "keys": ["super+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
+ { "keys": ["super+ctrl+p"], "command": "prompt_select_project" },
+ { "keys": ["super+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
+ { "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
+
+ { "keys": ["super+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":false} },
+ { "keys": ["super+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":true} },
+ { "keys": ["super+f"], "command": "show_panel", "args": {"panel": "find"} },
+ { "keys": ["super+alt+f"], "command": "show_panel", "args": {"panel": "replace"} },
+ { "keys": ["super+alt+e"], "command": "replace_next" },
+ { "keys": ["super+g"], "command": "find_next" },
+ { "keys": ["super+shift+g"], "command": "find_prev" },
+ { "keys": ["super+e"], "command": "slurp_find_string" },
+ { "keys": ["super+shift+e"], "command": "slurp_replace_string" },
+
+ { "keys": ["alt+super+g"], "command": "find_under" },
+ { "keys": ["shift+alt+super+g"], "command": "find_under_prev" },
+ { "keys": ["ctrl+super+g"], "command": "find_all_under" },
+
+ { "keys": ["super+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
+ { "keys": ["f4"], "command": "next_result" },
+ { "keys": ["shift+f4"], "command": "prev_result" },
+
+ { "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
+ { "keys": ["ctrl+f6"], "command": "next_misspelling" },
+ { "keys": ["ctrl+shift+f6"], "command": "prev_misspelling" },
+
+ { "keys": ["ctrl+super+up"], "command": "swap_line_up" },
+ { "keys": ["ctrl+super+down"], "command": "swap_line_down" },
+
+ { "keys": ["ctrl+backspace"], "command": "delete_word", "args": { "forward": false, "sub_words": true } },
+ { "keys": ["ctrl+delete"], "command": "delete_word", "args": { "forward": true, "sub_words": true } },
+
+ { "keys": ["super+forward_slash"], "command": "toggle_comment", "args": { "block": false } },
+ { "keys": ["super+alt+forward_slash"], "command": "toggle_comment", "args": { "block": true } },
+
+ { "keys": ["super+j"], "command": "join_lines" },
+ { "keys": ["super+shift+d"], "command": "duplicate_line" },
+
+ { "keys": ["ctrl+backquote"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
+
+ { "keys": ["ctrl+space"], "command": "auto_complete" },
+ { "keys": ["ctrl+space"], "command": "replace_completion_with_auto_complete", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "auto_complete_visible", "operator": "equal", "operand": false },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["super+alt+p"], "command": "show_scope_name" },
+ { "keys": ["ctrl+shift+p"], "command": "show_scope_name" },
+
+ { "keys": ["f7"], "command": "build" },
+ { "keys": ["super+b"], "command": "build" },
+ { "keys": ["super+shift+b"], "command": "build", "args": {"variant": "Run"} },
+
+ { "keys": ["ctrl+t"], "command": "transpose" },
+
+ { "keys": ["f5"], "command": "sort_lines", "args": {"case_sensitive": false} },
+ { "keys": ["ctrl+f5"], "command": "sort_lines", "args": {"case_sensitive": true} },
+
+ // Auto-pair quotes
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double", "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+
+ // Auto-pair single quotes
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single", "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+
+ // Auto-pair brackets
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+
+ // Auto-pair square brackets
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+
+ // Auto-pair curly brackets
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ {
+ "keys": ["super+alt+1"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1]]
+ }
+ },
+ {
+ "keys": ["super+alt+2"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
+ }
+ },
+ {
+ "keys": ["super+alt+3"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.33, 0.66, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
+ }
+ },
+ {
+ "keys": ["super+alt+4"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.25, 0.5, 0.75, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
+ }
+ },
+ {
+ "keys": ["super+alt+shift+2"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
+ }
+ },
+ {
+ "keys": ["super+alt+shift+3"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.33, 0.66, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
+ }
+ },
+ {
+ "keys": ["super+alt+5"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells":
+ [
+ [0, 0, 1, 1], [1, 0, 2, 1],
+ [0, 1, 1, 2], [1, 1, 2, 2]
+ ]
+ }
+ },
+ { "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+0"], "command": "focus_side_bar" },
+
+ { "keys": ["super+1"], "command": "select_by_index", "args": { "index": 0 } },
+ { "keys": ["super+2"], "command": "select_by_index", "args": { "index": 1 } },
+ { "keys": ["super+3"], "command": "select_by_index", "args": { "index": 2 } },
+ { "keys": ["super+4"], "command": "select_by_index", "args": { "index": 3 } },
+ { "keys": ["super+5"], "command": "select_by_index", "args": { "index": 4 } },
+ { "keys": ["super+6"], "command": "select_by_index", "args": { "index": 5 } },
+ { "keys": ["super+7"], "command": "select_by_index", "args": { "index": 6 } },
+ { "keys": ["super+8"], "command": "select_by_index", "args": { "index": 7 } },
+ { "keys": ["super+9"], "command": "select_by_index", "args": { "index": 8 } },
+ { "keys": ["super+0"], "command": "select_by_index", "args": { "index": 9 } },
+
+ { "keys": ["f2"], "command": "next_bookmark" },
+ { "keys": ["shift+f2"], "command": "prev_bookmark" },
+ { "keys": ["super+f2"], "command": "toggle_bookmark" },
+ { "keys": ["super+shift+f2"], "command": "clear_bookmarks" },
+ { "keys": ["alt+f2"], "command": "select_all_bookmarks" },
+
+ { "keys": ["super+k", "super+u"], "command": "upper_case" },
+ { "keys": ["super+k", "super+l"], "command": "lower_case" },
+ { "keys": ["super+k", "super+space"], "command": "set_mark" },
+ { "keys": ["super+k", "super+a"], "command": "select_to_mark" },
+ { "keys": ["super+k", "super+w"], "command": "delete_to_mark" },
+ { "keys": ["super+k", "super+x"], "command": "swap_with_mark" },
+ { "keys": ["super+k", "super+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
+
+ { "keys": ["super+plus"], "command": "increase_font_size" },
+ { "keys": ["super+equals"], "command": "increase_font_size" },
+ { "keys": ["super+minus"], "command": "decrease_font_size" },
+
+ { "keys": ["ctrl+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } },
+
+ { "keys": ["ctrl+shift+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} },
+
+ { "keys": ["super+alt+q"], "command": "wrap_lines" },
+
+ { "keys": ["super+alt+["], "command": "fold" },
+ { "keys": ["super+alt+]"], "command": "unfold" },
+ { "keys": ["super+k", "super+1"], "command": "fold_by_level", "args": {"level": 1} },
+ { "keys": ["super+k", "super+2"], "command": "fold_by_level", "args": {"level": 2} },
+ { "keys": ["super+k", "super+3"], "command": "fold_by_level", "args": {"level": 3} },
+ { "keys": ["super+k", "super+4"], "command": "fold_by_level", "args": {"level": 4} },
+ { "keys": ["super+k", "super+5"], "command": "fold_by_level", "args": {"level": 5} },
+ { "keys": ["super+k", "super+6"], "command": "fold_by_level", "args": {"level": 6} },
+ { "keys": ["super+k", "super+7"], "command": "fold_by_level", "args": {"level": 7} },
+ { "keys": ["super+k", "super+8"], "command": "fold_by_level", "args": {"level": 8} },
+ { "keys": ["super+k", "super+9"], "command": "fold_by_level", "args": {"level": 9} },
+ { "keys": ["super+k", "super+0"], "command": "unfold_all" },
+ { "keys": ["super+k", "super+j"], "command": "unfold_all" },
+ { "keys": ["super+k", "super+t"], "command": "fold_tag_attributes" },
+
+ { "keys": ["super+alt+o"], "command": "toggle_overwrite" },
+
+ { "keys": ["alt+f2"], "command": "context_menu" },
+
+ { "keys": ["super+alt+c"], "command": "toggle_case_sensitive", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["super+alt+r"], "command": "toggle_regex", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["super+alt+w"], "command": "toggle_whole_word", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["super+alt+a"], "command": "toggle_preserve_case", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+
+ // Find panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+
+ // Replace panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["ctrl+alt+enter"], "command": "replace_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+
+ // Incremental find panel key bindings
+ { "keys": ["enter"], "command": "hide_panel", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+
+ { "keys": ["super+,"], "command": "open_file", "args": {"file": "${packages}/User/Preferences.sublime-settings"} },
+
+ { "keys": ["super+k", "super+y"], "command": "yank" },
+ { "keys": ["super+k", "super+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+ { "keys": ["super+k", "super+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+ { "keys": ["super+k", "super+c"], "command": "show_at_center" },
+
+ // These are OS X built in commands, and don't need to be listed here, but
+ // doing so lets them show up in the menu
+ { "keys": ["ctrl+y"], "command": "yank" },
+ { "keys": ["super+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+ // super+delete isn't a built in command, but makes sense anyway
+ { "keys": ["super+delete"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+ { "keys": ["ctrl+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+ { "keys": ["ctrl+l"], "command": "show_at_center" },
+ { "keys": ["ctrl+o"], "command": "insert_snippet", "args": { "contents": "$0\n" } },
+ { "keys": ["ctrl+super+d"], "command": "noop" },
+ { "keys": ["ctrl+super+shift+d"], "command": "noop" }
+]
diff --git a/Default/Default (OSX).sublime-mousemap b/Default/Default (OSX).sublime-mousemap
new file mode 100644
index 0000000..d08b14d
--- /dev/null
+++ b/Default/Default (OSX).sublime-mousemap
@@ -0,0 +1,98 @@
+[
+ // Basic drag select
+ {
+ "button": "button1", "count": 1,
+ "press_command": "drag_select"
+ },
+ {
+ // Select between selection and click location
+ "button": "button1", "modifiers": ["shift"],
+ "press_command": "drag_select",
+ "press_args": {"extend": true}
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["super"],
+ "press_command": "drag_select",
+ "press_args": {"additive": true}
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["shift", "super"],
+ "press_command": "drag_select",
+ "press_args": {"subtractive": true}
+ },
+
+ // Drag select by words
+ {
+ "button": "button1", "count": 2,
+ "press_command": "drag_select",
+ "press_args": {"by": "words"}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "additive": true}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["shift", "super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "subtractive": true}
+ },
+
+ // Drag select by lines
+ {
+ "button": "button1", "count": 3,
+ "press_command": "drag_select",
+ "press_args": {"by": "lines"}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "additive": true}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["shift", "super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "subtractive": true}
+ },
+
+ // Alt + Mouse 1 Column select
+ {
+ "button": "button1", "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns"}
+ },
+ {
+ "button": "button1", "modifiers": ["alt", "super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "additive": true}
+ },
+ {
+ "button": "button1", "modifiers": ["alt", "shift", "super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "subtractive": true}
+ },
+
+ // Mouse 3 column select
+ {
+ "button": "button3",
+ "press_command": "drag_select",
+ "press_args": {"by": "columns"}
+ },
+ {
+ "button": "button3", "modifiers": ["super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "additive": true}
+ },
+ {
+ "button": "button3", "modifiers": ["shift", "super"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "subtractive": true}
+ },
+
+ // Switch files with buttons 4 and 5
+ { "button": "button4", "modifiers": [], "command": "prev_view" },
+ { "button": "button5", "modifiers": [], "command": "next_view" },
+
+ { "button": "button2", "modifiers": [], "press_command": "context_menu" },
+ { "button": "button1", "count": 1, "modifiers": ["ctrl"], "press_command": "context_menu" }
+]
diff --git a/Default/Default (Windows).sublime-keymap b/Default/Default (Windows).sublime-keymap
new file mode 100644
index 0000000..5bde08e
--- /dev/null
+++ b/Default/Default (Windows).sublime-keymap
@@ -0,0 +1,641 @@
+[
+ { "keys": ["ctrl+shift+n"], "command": "new_window" },
+ { "keys": ["ctrl+shift+w"], "command": "close_window" },
+ { "keys": ["ctrl+o"], "command": "prompt_open_file" },
+ { "keys": ["ctrl+shift+t"], "command": "reopen_last_file" },
+ { "keys": ["alt+o"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm"]} },
+ { "keys": ["ctrl+n"], "command": "new_file" },
+ { "keys": ["ctrl+s"], "command": "save" },
+ { "keys": ["ctrl+shift+s"], "command": "prompt_save_as" },
+ { "keys": ["ctrl+f4"], "command": "close_file" },
+ { "keys": ["ctrl+w"], "command": "close" },
+
+ { "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" },
+ { "keys": ["f11"], "command": "toggle_full_screen" },
+ { "keys": ["shift+f11"], "command": "toggle_distraction_free" },
+
+ { "keys": ["backspace"], "command": "left_delete" },
+ { "keys": ["shift+backspace"], "command": "left_delete" },
+ { "keys": ["ctrl+shift+backspace"], "command": "left_delete" },
+ { "keys": ["delete"], "command": "right_delete" },
+ { "keys": ["enter"], "command": "insert", "args": {"characters": "\n"} },
+ { "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\n"} },
+
+ { "keys": ["ctrl+z"], "command": "undo" },
+ { "keys": ["ctrl+shift+z"], "command": "redo" },
+ { "keys": ["ctrl+y"], "command": "redo_or_repeat" },
+ { "keys": ["ctrl+u"], "command": "soft_undo" },
+ { "keys": ["ctrl+shift+u"], "command": "soft_redo" },
+
+ { "keys": ["ctrl+shift+v"], "command": "paste_and_indent" },
+ { "keys": ["shift+delete"], "command": "cut" },
+ { "keys": ["ctrl+insert"], "command": "copy" },
+ { "keys": ["shift+insert"], "command": "paste" },
+ { "keys": ["ctrl+x"], "command": "cut" },
+ { "keys": ["ctrl+c"], "command": "copy" },
+ { "keys": ["ctrl+v"], "command": "paste" },
+
+ { "keys": ["left"], "command": "move", "args": {"by": "characters", "forward": false} },
+ { "keys": ["right"], "command": "move", "args": {"by": "characters", "forward": true} },
+ { "keys": ["up"], "command": "move", "args": {"by": "lines", "forward": false} },
+ { "keys": ["down"], "command": "move", "args": {"by": "lines", "forward": true} },
+ { "keys": ["shift+left"], "command": "move", "args": {"by": "characters", "forward": false, "extend": true} },
+ { "keys": ["shift+right"], "command": "move", "args": {"by": "characters", "forward": true, "extend": true} },
+ { "keys": ["shift+up"], "command": "move", "args": {"by": "lines", "forward": false, "extend": true} },
+ { "keys": ["shift+down"], "command": "move", "args": {"by": "lines", "forward": true, "extend": true} },
+
+ { "keys": ["ctrl+left"], "command": "move", "args": {"by": "words", "forward": false} },
+ { "keys": ["ctrl+right"], "command": "move", "args": {"by": "word_ends", "forward": true} },
+ { "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "words", "forward": false, "extend": true} },
+ { "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "word_ends", "forward": true, "extend": true} },
+
+ { "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
+ { "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
+ { "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
+ { "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
+
+ { "keys": ["ctrl+alt+up"], "command": "select_lines", "args": {"forward": false} },
+ { "keys": ["ctrl+alt+down"], "command": "select_lines", "args": {"forward": true} },
+
+ { "keys": ["pageup"], "command": "move", "args": {"by": "pages", "forward": false} },
+ { "keys": ["pagedown"], "command": "move", "args": {"by": "pages", "forward": true} },
+ { "keys": ["shift+pageup"], "command": "move", "args": {"by": "pages", "forward": false, "extend": true} },
+ { "keys": ["shift+pagedown"], "command": "move", "args": {"by": "pages", "forward": true, "extend": true} },
+
+ { "keys": ["home"], "command": "move_to", "args": {"to": "bol", "extend": false} },
+ { "keys": ["end"], "command": "move_to", "args": {"to": "eol", "extend": false} },
+ { "keys": ["shift+home"], "command": "move_to", "args": {"to": "bol", "extend": true} },
+ { "keys": ["shift+end"], "command": "move_to", "args": {"to": "eol", "extend": true} },
+ { "keys": ["ctrl+home"], "command": "move_to", "args": {"to": "bof", "extend": false} },
+ { "keys": ["ctrl+end"], "command": "move_to", "args": {"to": "eof", "extend": false} },
+ { "keys": ["ctrl+shift+home"], "command": "move_to", "args": {"to": "bof", "extend": true} },
+ { "keys": ["ctrl+shift+end"], "command": "move_to", "args": {"to": "eof", "extend": true} },
+
+
+ { "keys": ["ctrl+up"], "command": "scroll_lines", "args": {"amount": 1.0 } },
+ { "keys": ["ctrl+down"], "command": "scroll_lines", "args": {"amount": -1.0 } },
+
+ { "keys": ["ctrl+pagedown"], "command": "next_view" },
+ { "keys": ["ctrl+pageup"], "command": "prev_view" },
+
+ { "keys": ["ctrl+tab"], "command": "next_view_in_stack" },
+ { "keys": ["ctrl+shift+tab"], "command": "prev_view_in_stack" },
+
+ { "keys": ["ctrl+a"], "command": "select_all" },
+ { "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },
+ { "keys": ["escape"], "command": "single_selection", "context":
+ [
+ { "key": "num_selections", "operator": "not_equal", "operand": 1 }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "clear_fields", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_panel", "args": {"cancel": true},
+ "context":
+ [
+ { "key": "panel_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_overlay", "context":
+ [
+ { "key": "overlay_visible", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["escape"], "command": "hide_auto_complete", "context":
+ [
+ { "key": "auto_complete_visible", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
+ { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
+ "context":
+ [
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "replace_completion_with_next_completion", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "reindent", "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
+ { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "indent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["tab"], "command": "next_field", "context":
+ [
+ { "key": "has_next_field", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["tab"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab" }
+ ]
+ },
+
+ { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "unindent", "context":
+ [
+ { "key": "text", "operator": "regex_contains", "operand": "\n" }
+ ]
+ },
+ { "keys": ["shift+tab"], "command": "prev_field", "context":
+ [
+ { "key": "has_prev_field", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["ctrl+]"], "command": "indent" },
+ { "keys": ["ctrl+["], "command": "unindent" },
+
+ { "keys": ["insert"], "command": "toggle_overwrite" },
+
+ { "keys": ["ctrl+l"], "command": "expand_selection", "args": {"to": "line"} },
+ { "keys": ["ctrl+d"], "command": "find_under_expand" },
+ { "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
+ { "keys": ["ctrl+shift+space"], "command": "expand_selection", "args": {"to": "scope"} },
+ { "keys": ["ctrl+shift+m"], "command": "expand_selection", "args": {"to": "brackets"} },
+ { "keys": ["ctrl+m"], "command": "move_to", "args": {"to": "brackets"} },
+ { "keys": ["ctrl+shift+j"], "command": "expand_selection", "args": {"to": "indentation"} },
+ { "keys": ["ctrl+shift+a"], "command": "expand_selection", "args": {"to": "tag"} },
+
+ { "keys": ["alt+."], "command": "close_tag" },
+
+ { "keys": ["ctrl+q"], "command": "toggle_record_macro" },
+ { "keys": ["ctrl+shift+q"], "command": "run_macro" },
+
+ { "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line.sublime-macro"} },
+ { "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line Before.sublime-macro"} },
+ { "keys": ["enter"], "command": "commit_completion", "context":
+ [
+ { "key": "auto_complete_visible" },
+ { "key": "setting.auto_complete_commit_on_tab", "operand": false }
+ ]
+ },
+
+ { "keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} },
+ { "keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
+ { "keys": ["ctrl+alt+p"], "command": "prompt_select_project" },
+ { "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
+ { "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
+ { "keys": ["ctrl+;"], "command": "show_overlay", "args": {"overlay": "goto", "text": "#"} },
+
+ { "keys": ["ctrl+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":false} },
+ { "keys": ["ctrl+shift+i"], "command": "show_panel", "args": {"panel": "incremental_find", "reverse":true} },
+ { "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "find"} },
+ { "keys": ["ctrl+h"], "command": "show_panel", "args": {"panel": "replace"} },
+ { "keys": ["ctrl+shift+h"], "command": "replace_next" },
+ { "keys": ["f3"], "command": "find_next" },
+ { "keys": ["shift+f3"], "command": "find_prev" },
+ { "keys": ["ctrl+f3"], "command": "find_under" },
+ { "keys": ["ctrl+shift+f3"], "command": "find_under_prev" },
+ { "keys": ["alt+f3"], "command": "find_all_under" },
+ { "keys": ["ctrl+e"], "command": "slurp_find_string" },
+ { "keys": ["ctrl+shift+e"], "command": "slurp_replace_string" },
+ { "keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
+ { "keys": ["f4"], "command": "next_result" },
+ { "keys": ["shift+f4"], "command": "prev_result" },
+
+ { "keys": ["f6"], "command": "toggle_setting", "args": {"setting": "spell_check"} },
+ { "keys": ["ctrl+f6"], "command": "next_misspelling" },
+ { "keys": ["ctrl+shift+f6"], "command": "prev_misspelling" },
+
+ { "keys": ["ctrl+shift+up"], "command": "swap_line_up" },
+ { "keys": ["ctrl+shift+down"], "command": "swap_line_down" },
+
+ { "keys": ["ctrl+backspace"], "command": "delete_word", "args": { "forward": false } },
+ { "keys": ["ctrl+shift+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+
+ { "keys": ["ctrl+delete"], "command": "delete_word", "args": { "forward": true } },
+ { "keys": ["ctrl+shift+delete"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+
+ { "keys": ["ctrl+/"], "command": "toggle_comment", "args": { "block": false } },
+ { "keys": ["ctrl+shift+/"], "command": "toggle_comment", "args": { "block": true } },
+
+ { "keys": ["ctrl+j"], "command": "join_lines" },
+ { "keys": ["ctrl+shift+d"], "command": "duplicate_line" },
+
+ { "keys": ["ctrl+`"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
+
+ { "keys": ["ctrl+space"], "command": "auto_complete" },
+ { "keys": ["ctrl+space"], "command": "replace_completion_with_auto_complete", "context":
+ [
+ { "key": "last_command", "operator": "equal", "operand": "insert_best_completion" },
+ { "key": "auto_complete_visible", "operator": "equal", "operand": false },
+ { "key": "setting.tab_completion", "operator": "equal", "operand": true }
+ ]
+ },
+
+ { "keys": ["ctrl+alt+shift+p"], "command": "show_scope_name" },
+
+ { "keys": ["f7"], "command": "build" },
+ { "keys": ["ctrl+b"], "command": "build" },
+ { "keys": ["ctrl+shift+b"], "command": "build", "args": {"variant": "Run"} },
+ { "keys": ["ctrl+break"], "command": "exec", "args": {"kill": true} },
+
+ { "keys": ["ctrl+t"], "command": "transpose" },
+
+ { "keys": ["f9"], "command": "sort_lines", "args": {"case_sensitive": false} },
+ { "keys": ["ctrl+f9"], "command": "sort_lines", "args": {"case_sensitive": true} },
+
+ // Auto-pair quotes
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double", "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["\""], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\"$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }
+ ]
+ },
+
+ // Auto-pair single quotes
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
+ { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
+ { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single", "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
+ ]
+ },
+
+ // Auto-pair brackets
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "($0)"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["("], "command": "insert_snippet", "args": {"contents": "(${0:$SELECTION})"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
+ ]
+ },
+
+ // Auto-pair square brackets
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[$0]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["["], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["]"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
+ ]
+ },
+
+ // Auto-pair curly brackets
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
+ ]
+ },
+ { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
+ ]
+ },
+ { "keys": ["}"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+ { "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line in Braces.sublime-macro"}, "context":
+ [
+ { "key": "setting.auto_indent", "operator": "equal", "operand": true },
+ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
+ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
+ { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
+ ]
+ },
+
+ {
+ "keys": ["alt+shift+1"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+2"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+3"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.33, 0.66, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+4"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.25, 0.5, 0.75, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
+ }
+ },
+ {
+ "keys": ["alt+shift+8"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
+ }
+ },
+ {
+ "keys": ["alt+shift+9"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.33, 0.66, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
+ }
+ },
+ {
+ "keys": ["alt+shift+5"],
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells":
+ [
+ [0, 0, 1, 1], [1, 0, 2, 1],
+ [0, 1, 1, 2], [1, 1, 2, 2]
+ ]
+ }
+ },
+ { "keys": ["ctrl+1"], "command": "focus_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+2"], "command": "focus_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+3"], "command": "focus_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+4"], "command": "focus_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+shift+1"], "command": "move_to_group", "args": { "group": 0 } },
+ { "keys": ["ctrl+shift+2"], "command": "move_to_group", "args": { "group": 1 } },
+ { "keys": ["ctrl+shift+3"], "command": "move_to_group", "args": { "group": 2 } },
+ { "keys": ["ctrl+shift+4"], "command": "move_to_group", "args": { "group": 3 } },
+ { "keys": ["ctrl+0"], "command": "focus_side_bar" },
+
+ { "keys": ["alt+1"], "command": "select_by_index", "args": { "index": 0 } },
+ { "keys": ["alt+2"], "command": "select_by_index", "args": { "index": 1 } },
+ { "keys": ["alt+3"], "command": "select_by_index", "args": { "index": 2 } },
+ { "keys": ["alt+4"], "command": "select_by_index", "args": { "index": 3 } },
+ { "keys": ["alt+5"], "command": "select_by_index", "args": { "index": 4 } },
+ { "keys": ["alt+6"], "command": "select_by_index", "args": { "index": 5 } },
+ { "keys": ["alt+7"], "command": "select_by_index", "args": { "index": 6 } },
+ { "keys": ["alt+8"], "command": "select_by_index", "args": { "index": 7 } },
+ { "keys": ["alt+9"], "command": "select_by_index", "args": { "index": 8 } },
+ { "keys": ["alt+0"], "command": "select_by_index", "args": { "index": 9 } },
+
+ { "keys": ["f2"], "command": "next_bookmark" },
+ { "keys": ["shift+f2"], "command": "prev_bookmark" },
+ { "keys": ["ctrl+f2"], "command": "toggle_bookmark" },
+ { "keys": ["ctrl+shift+f2"], "command": "clear_bookmarks" },
+ { "keys": ["alt+f2"], "command": "select_all_bookmarks" },
+
+ { "keys": ["ctrl+shift+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} },
+
+ { "keys": ["alt+q"], "command": "wrap_lines" },
+
+ { "keys": ["ctrl+k", "ctrl+u"], "command": "upper_case" },
+ { "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },
+
+ { "keys": ["ctrl+k", "ctrl+space"], "command": "set_mark" },
+ { "keys": ["ctrl+k", "ctrl+a"], "command": "select_to_mark" },
+ { "keys": ["ctrl+k", "ctrl+w"], "command": "delete_to_mark" },
+ { "keys": ["ctrl+k", "ctrl+x"], "command": "swap_with_mark" },
+ { "keys": ["ctrl+k", "ctrl+y"], "command": "yank" },
+ { "keys": ["ctrl+k", "ctrl+k"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },
+ { "keys": ["ctrl+k", "ctrl+backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"} },
+ { "keys": ["ctrl+k", "ctrl+g"], "command": "clear_bookmarks", "args": {"name": "mark"} },
+ { "keys": ["ctrl+k", "ctrl+c"], "command": "show_at_center" },
+
+ { "keys": ["ctrl++"], "command": "increase_font_size" },
+ { "keys": ["ctrl+="], "command": "increase_font_size" },
+ { "keys": ["ctrl+keypad_plus"], "command": "increase_font_size" },
+ { "keys": ["ctrl+-"], "command": "decrease_font_size" },
+ { "keys": ["ctrl+keypad_minus"], "command": "decrease_font_size" },
+
+ { "keys": ["alt+shift+w"], "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } },
+
+ { "keys": ["ctrl+shift+["], "command": "fold" },
+ { "keys": ["ctrl+shift+]"], "command": "unfold" },
+ { "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
+ { "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
+ { "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
+ { "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
+ { "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
+ { "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
+ { "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
+ { "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
+ { "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
+ { "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
+ { "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
+ { "keys": ["ctrl+k", "ctrl+t"], "command": "fold_tag_attributes" },
+
+ { "keys": ["context_menu"], "command": "context_menu" },
+
+ { "keys": ["alt+c"], "command": "toggle_case_sensitive", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+r"], "command": "toggle_regex", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+w"], "command": "toggle_whole_word", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+ { "keys": ["alt+a"], "command": "toggle_preserve_case", "context":
+ [
+ { "key": "setting.is_widget", "operator": "equal", "operand": true }
+ ]
+ },
+
+ // Find panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
+ },
+
+ // Replace panel key bindings
+ { "keys": ["enter"], "command": "find_next", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["ctrl+alt+enter"], "command": "replace_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
+ },
+
+ // Incremental find panel key bindings
+ { "keys": ["enter"], "command": "hide_panel", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["shift+enter"], "command": "find_prev", "context":
+ [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ },
+ { "keys": ["alt+enter"], "command": "find_all", "args": {"close_panel": true},
+ "context": [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
+ }
+]
diff --git a/Default/Default (Windows).sublime-mousemap b/Default/Default (Windows).sublime-mousemap
new file mode 100644
index 0000000..748418e
--- /dev/null
+++ b/Default/Default (Windows).sublime-mousemap
@@ -0,0 +1,131 @@
+[
+ // Basic drag select
+ {
+ "button": "button1", "count": 1,
+ "press_command": "drag_select"
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"additive": true}
+ },
+ {
+ "button": "button1", "count": 1, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"subtractive": true}
+ },
+
+ // Select between selection and click location
+ {
+ "button": "button1", "modifiers": ["shift"],
+ "press_command": "drag_select",
+ "press_args": {"extend": true}
+ },
+ {
+ "button": "button1", "modifiers": ["shift", "ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"additive": true, "extend": true}
+ },
+ {
+ "button": "button1", "modifiers": ["shift", "alt"],
+ "press_command": "drag_select",
+ "press_args": {"subtractive": true, "extend": true}
+ },
+
+ // Drag select by words
+ {
+ "button": "button1", "count": 2,
+ "press_command": "drag_select",
+ "press_args": {"by": "words"}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "additive": true}
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "words", "subtractive": true}
+ },
+
+ // Drag select by lines
+ {
+ "button": "button1", "count": 3,
+ "press_command": "drag_select",
+ "press_args": {"by": "lines"}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "additive": true}
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "lines", "subtractive": true}
+ },
+
+ // Shift + Mouse 2 Column select
+ {
+ "button": "button2", "modifiers": ["shift"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns"}
+ },
+ {
+ "button": "button2", "modifiers": ["shift", "ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "additive": true}
+ },
+ {
+ "button": "button2", "modifiers": ["shift", "alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "subtractive": true}
+ },
+
+ // Mouse 3 column select
+ {
+ "button": "button3",
+ "press_command": "drag_select",
+ "press_args": {"by": "columns"}
+ },
+ {
+ "button": "button3", "modifiers": ["ctrl"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "additive": true}
+ },
+ {
+ "button": "button3", "modifiers": ["alt"],
+ "press_command": "drag_select",
+ "press_args": {"by": "columns", "subtractive": true}
+ },
+
+ // Simple chording: hold down mouse 2, and click mouse 1
+ {
+ "button": "button1", "count": 1, "modifiers": ["button2"],
+ "command": "expand_selection", "args": {"to": "line"},
+ "press_command": "drag_select"
+ },
+ {
+ "button": "button1", "count": 2, "modifiers": ["button2"],
+ "command": "expand_selection_to_paragraph"
+ },
+ {
+ "button": "button1", "count": 3, "modifiers": ["button2"],
+ "command": "select_all"
+ },
+
+ // Switch files with buttons 4 and 5
+ { "button": "button4", "modifiers": [], "command": "prev_view" },
+ { "button": "button5", "modifiers": [], "command": "next_view" },
+
+ // Switch files by holding down button 2, and using the scroll wheel
+ { "button": "scroll_down", "modifiers": ["button2"], "command": "next_view" },
+ { "button": "scroll_up", "modifiers": ["button2"], "command": "prev_view" },
+
+ // Change font size with ctrl+scroll wheel
+ { "button": "scroll_down", "modifiers": ["ctrl"], "command": "decrease_font_size" },
+ { "button": "scroll_up", "modifiers": ["ctrl"], "command": "increase_font_size" },
+
+ { "button": "button2", "modifiers": [], "command": "context_menu" }
+]
diff --git a/Default/Default.sublime-commands b/Default/Default.sublime-commands
new file mode 100644
index 0000000..88e3318
--- /dev/null
+++ b/Default/Default.sublime-commands
@@ -0,0 +1,118 @@
+[
+ {
+ "caption": "Word Wrap: Toggle",
+ "command": "toggle_setting",
+ "args": {"setting": "word_wrap"}
+ },
+ {
+ "caption": "Convert Case: Upper Case",
+ "command": "upper_case"
+ },
+ {
+ "caption": "Convert Case: Lower Case",
+ "command": "lower_case"
+ },
+ {
+ "caption": "Convert Case: Title Case",
+ "command": "title_case"
+ },
+ {
+ "caption": "Convert Case: Swap Case",
+ "command": "swap_case"
+ },
+
+ { "command": "toggle_comment", "args": {"block": false}, "caption": "Toggle Comment" },
+ { "command": "toggle_comment", "args": {"block": true}, "caption": "Toggle Block Comment" },
+
+ { "command": "toggle_bookmark", "caption": "Bookmarks: Toggle" },
+ { "command": "next_bookmark", "caption": "Bookmarks: Select Next" },
+ { "command": "prev_bookmark", "caption": "Bookmarks: Select Previous" },
+ { "command": "clear_bookmarks", "caption": "Bookmarks: Clear All" },
+ { "command": "select_all_bookmarks", "caption": "Bookmarks: Select All" },
+
+ { "caption": "Indentation: Convert to Tabs", "command": "unexpand_tabs", "args": {"set_translate_tabs": true} },
+ { "caption": "Indentation: Convert to Spaces", "command": "expand_tabs", "args": {"set_translate_tabs": true} },
+ { "caption": "Indentation: Reindent Lines", "command": "reindent", "args": {"single_line": false} },
+
+ { "caption": "View: Toggle Side Bar", "command": "toggle_side_bar" },
+ { "caption": "View: Toggle Open Files in Side Bar", "command": "toggle_show_open_files" },
+ { "caption": "View: Toggle Minimap", "command": "toggle_minimap" },
+ { "caption": "View: Toggle Tabs", "command": "toggle_tabs" },
+ { "caption": "View: Toggle Status Bar", "command": "toggle_status_bar" },
+ { "caption": "View: Toggle Menu", "command": "toggle_menu" },
+
+ { "caption": "Project: Save As", "command": "save_project_as" },
+ { "caption": "Project: Close", "command": "close_project" },
+ { "caption": "Project: Add Folder", "command": "prompt_add_folder" },
+
+ { "caption": "Preferences: Settings - Default", "command": "open_file", "args": {"file": "${packages}/Default/Preferences.sublime-settings"} },
+ { "caption": "Preferences: Settings - User", "command": "open_file", "args": {"file": "${packages}/User/Preferences.sublime-settings"} },
+ { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} },
+
+ {
+ "caption": "Preferences: Key Bindings - Default",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/Default/Default (Windows).sublime-keymap",
+ "platform": "Windows"
+ }
+ },
+ {
+ "caption": "Preferences: Key Bindings - Default",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/Default/Default (OSX).sublime-keymap",
+ "platform": "OSX"
+ }
+ },
+ {
+ "caption": "Preferences: Key Bindings - Default",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/Default/Default (Linux).sublime-keymap",
+ "platform": "Linux"
+ }
+ },
+ {
+ "caption": "Preferences: Key Bindings - User",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/User/Default (Windows).sublime-keymap",
+ "platform": "Windows"
+ }
+ },
+ {
+ "caption": "Preferences: Key Bindings - User",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/User/Default (OSX).sublime-keymap",
+ "platform": "OSX"
+ }
+ },
+ {
+ "caption": "Preferences: Key Bindings - User",
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/User/Default (Linux).sublime-keymap",
+ "platform": "Linux"
+ }
+ },
+
+ { "caption": "File: Save All", "command": "save_all" },
+ { "caption": "File: Revert", "command": "revert" },
+ { "caption": "File: New View into File", "command": "clone_file" },
+ { "caption": "File: Close All", "command": "close_all" },
+
+ { "caption": "HTML: Wrap Selection With Tag", "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } },
+ { "caption": "HTML: Encode Special Characters", "command": "encode_html_entities" },
+
+ { "caption": "Rot13 Selection", "command": "rot13" },
+
+ { "caption": "Sort Lines", "command": "sort_lines", "args": {"case_sensitive": false} },
+ { "caption": "Sort Lines (Case Sensitive)", "command": "sort_lines", "args": {"case_sensitive": true} },
+
+ { "caption": "Code Folding: Unfold All", "command": "unfold_all" },
+ { "caption": "Code Folding: Fold Tag Attributes", "command": "fold_tag_attributes" },
+
+ { "caption": "About", "command": "show_about_window" }
+]
diff --git a/Default/Delete Left Right.sublime-macro b/Default/Delete Left Right.sublime-macro
new file mode 100644
index 0000000..e6946e6
--- /dev/null
+++ b/Default/Delete Left Right.sublime-macro
@@ -0,0 +1,4 @@
+[
+ {"command": "left_delete" },
+ {"command": "right_delete" }
+]
diff --git a/Default/Delete Line.sublime-macro b/Default/Delete Line.sublime-macro
new file mode 100644
index 0000000..5fecdcb
--- /dev/null
+++ b/Default/Delete Line.sublime-macro
@@ -0,0 +1,5 @@
+[
+ {"command": "expand_selection", "args": {"to": "line"}},
+ {"command": "add_to_kill_ring", "args": {"forward": true}},
+ {"command": "left_delete"}
+]
diff --git a/Default/Delete to BOL.sublime-macro b/Default/Delete to BOL.sublime-macro
new file mode 100644
index 0000000..9697284
--- /dev/null
+++ b/Default/Delete to BOL.sublime-macro
@@ -0,0 +1,5 @@
+[
+ {"command": "move_to", "args": {"to": "bol", "extend": true}},
+ {"command": "add_to_kill_ring", "args": {"forward": false}},
+ {"command": "left_delete"}
+]
diff --git a/Default/Delete to EOL.sublime-macro b/Default/Delete to EOL.sublime-macro
new file mode 100644
index 0000000..3af8234
--- /dev/null
+++ b/Default/Delete to EOL.sublime-macro
@@ -0,0 +1,5 @@
+[
+ {"command": "move_to", "args": {"to": "eol", "extend": true}},
+ {"command": "add_to_kill_ring", "args": {"forward": true}},
+ {"command": "right_delete"}
+]
diff --git a/Default/Delete to Hard BOL.sublime-macro b/Default/Delete to Hard BOL.sublime-macro
new file mode 100644
index 0000000..947de20
--- /dev/null
+++ b/Default/Delete to Hard BOL.sublime-macro
@@ -0,0 +1,5 @@
+[
+ {"command": "move_to", "args": {"to": "hardbol", "extend": true}},
+ {"command": "add_to_kill_ring", "args": {"forward": false}},
+ {"command": "left_delete"}
+]
diff --git a/Default/Delete to Hard EOL.sublime-macro b/Default/Delete to Hard EOL.sublime-macro
new file mode 100644
index 0000000..153395f
--- /dev/null
+++ b/Default/Delete to Hard EOL.sublime-macro
@@ -0,0 +1,5 @@
+[
+ {"command": "move_to", "args": {"to": "hardeol", "extend": true}},
+ {"command": "add_to_kill_ring", "args": {"forward": true}},
+ {"command": "right_delete"}
+]
diff --git a/Default/Distraction Free.sublime-settings b/Default/Distraction Free.sublime-settings
new file mode 100644
index 0000000..ddbae8d
--- /dev/null
+++ b/Default/Distraction Free.sublime-settings
@@ -0,0 +1,8 @@
+{
+ "line_numbers": false,
+ "gutter": false,
+ "draw_centered": true,
+ "wrap_width": 80,
+ "word_wrap": true,
+ "scroll_past_end": true
+}
diff --git a/Default/Find Results.hidden-tmLanguage b/Default/Find Results.hidden-tmLanguage
new file mode 100644
index 0000000..4488707
--- /dev/null
+++ b/Default/Find Results.hidden-tmLanguage
@@ -0,0 +1,50 @@
+
+
+
+
+ name
+ Find Results
+
+ patterns
+
+
+ match
+ ^([^ ].*):$
+ captures
+
+ 1
+
+ name
+ entity.name.filename.find-in-files
+
+
+
+
+ match
+ ^ +([0-9]+)
+ captures
+
+ 1
+
+ name
+ constant.numeric.line-number.find-in-files
+
+
+
+
+ match
+ ^ +([0-9]+):
+ captures
+
+ 1
+
+ name
+ constant.numeric.line-number.match.find-in-files
+
+
+
+
+ scopeName
+ text.find-in-files
+
+
diff --git a/Default/Find Results.hidden-tmLanguage.cache b/Default/Find Results.hidden-tmLanguage.cache
new file mode 100644
index 0000000..ca64c3e
Binary files /dev/null and b/Default/Find Results.hidden-tmLanguage.cache differ
diff --git a/Default/Find in Files.sublime-menu b/Default/Find in Files.sublime-menu
new file mode 100644
index 0000000..2101553
--- /dev/null
+++ b/Default/Find in Files.sublime-menu
@@ -0,0 +1,8 @@
+[
+ { "command": "clear_location", "caption": "Clear" },
+ { "command": "add_directory", "caption": "Add Folder" },
+ { "command": "add_where_snippet", "args": {"snippet": "*.${0:txt}"}, "caption": "Add Include Filter" },
+ { "command": "add_where_snippet", "args": {"snippet": "-*.${0:txt}"}, "caption": "Add Exclude Filter" },
+ { "command": "add_where_snippet", "args": {"snippet": ""}, "caption": "Add Open Folders" },
+ { "command": "add_where_snippet", "args": {"snippet": ""}, "caption": "Add Open Files" }
+]
diff --git a/Default/Icon.png b/Default/Icon.png
new file mode 100644
index 0000000..82d904c
Binary files /dev/null and b/Default/Icon.png differ
diff --git a/Default/Ignored Packages.cache b/Default/Ignored Packages.cache
new file mode 100644
index 0000000..27b92a5
--- /dev/null
+++ b/Default/Ignored Packages.cache
@@ -0,0 +1 @@
+["Vintage"]
\ No newline at end of file
diff --git a/Default/Indentation Rules - Comments.tmPreferences b/Default/Indentation Rules - Comments.tmPreferences
new file mode 100644
index 0000000..8cb6749
--- /dev/null
+++ b/Default/Indentation Rules - Comments.tmPreferences
@@ -0,0 +1,13 @@
+
+
+
+
+ scope
+ comment
+ settings
+
+ preserveIndent
+
+
+
+
diff --git a/Default/Indentation Rules - Comments.tmPreferences.cache b/Default/Indentation Rules - Comments.tmPreferences.cache
new file mode 100644
index 0000000..fa56901
Binary files /dev/null and b/Default/Indentation Rules - Comments.tmPreferences.cache differ
diff --git a/Default/Indentation Rules.tmPreferences b/Default/Indentation Rules.tmPreferences
new file mode 100644
index 0000000..1688681
--- /dev/null
+++ b/Default/Indentation Rules.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ scope
+ source
+ settings
+
+ decreaseIndentPattern
+ ^(.*\*/)?\s*\}[;\s]*$
+ increaseIndentPattern
+ ^.*(\{[^}"']*)$
+ disableIndentNextLinePattern
+ ^\s*\{[\]})]*\s*$
+ indentParens
+
+
+
+
diff --git a/Default/Indentation Rules.tmPreferences.cache b/Default/Indentation Rules.tmPreferences.cache
new file mode 100644
index 0000000..6b34a51
Binary files /dev/null and b/Default/Indentation Rules.tmPreferences.cache differ
diff --git a/Default/Indentation.sublime-menu b/Default/Indentation.sublime-menu
new file mode 100644
index 0000000..9c49375
--- /dev/null
+++ b/Default/Indentation.sublime-menu
@@ -0,0 +1,17 @@
+[
+{ "command": "toggle_setting", "args": {"setting": "translate_tabs_to_spaces"}, "caption": "Indent Using Spaces", "checkbox": true },
+ { "caption": "-" },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 1}, "caption": "Tab Width: 1", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 2}, "caption": "Tab Width: 2", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 3}, "caption": "Tab Width: 3", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 4}, "caption": "Tab Width: 4", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 5}, "caption": "Tab Width: 5", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 6}, "caption": "Tab Width: 6", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 7}, "caption": "Tab Width: 7", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 8}, "caption": "Tab Width: 8", "checkbox": true },
+ { "caption": "-" },
+ { "command": "detect_indentation", "caption": "Guess Settings From Buffer" },
+ { "caption": "-" },
+ { "command": "expand_tabs", "caption": "Convert Indentation to Spaces", "args": {"set_translate_tabs": true} },
+ { "command": "unexpand_tabs", "caption": "Convert Indentation to Tabs", "args": {"set_translate_tabs": true} }
+ ]
diff --git a/Default/Main.sublime-menu b/Default/Main.sublime-menu
new file mode 100644
index 0000000..459abe7
--- /dev/null
+++ b/Default/Main.sublime-menu
@@ -0,0 +1,809 @@
+[
+ {
+ "caption": "File",
+ "mnemonic": "F",
+ "id": "file",
+ "children":
+ [
+ { "command": "new_file", "caption": "New File", "mnemonic": "N" },
+
+ { "command": "prompt_open_file", "caption": "Open File…", "mnemonic": "O", "platform": "!OSX" },
+ { "command": "prompt_open_folder", "caption": "Open Folder…", "platform": "!OSX" },
+ { "command": "prompt_open", "caption": "Open…", "platform": "OSX" },
+
+ {
+ "caption": "Open Recent",
+ "mnemonic": "R",
+ "children":
+ [
+ { "command": "reopen_last_file", "caption": "Reopen Closed File" },
+ { "caption": "-" },
+ { "command": "open_recent_file", "args": {"index": 0 } },
+ { "command": "open_recent_file", "args": {"index": 1 } },
+ { "command": "open_recent_file", "args": {"index": 2 } },
+ { "command": "open_recent_file", "args": {"index": 3 } },
+ { "command": "open_recent_file", "args": {"index": 4 } },
+ { "command": "open_recent_file", "args": {"index": 5 } },
+ { "command": "open_recent_file", "args": {"index": 6 } },
+ { "command": "open_recent_file", "args": {"index": 7 } },
+ { "caption": "-" },
+ { "command": "open_recent_folder", "args": {"index": 0 } },
+ { "command": "open_recent_folder", "args": {"index": 1 } },
+ { "command": "open_recent_folder", "args": {"index": 2 } },
+ { "command": "open_recent_folder", "args": {"index": 3 } },
+ { "command": "open_recent_folder", "args": {"index": 4 } },
+ { "command": "open_recent_folder", "args": {"index": 5 } },
+ { "command": "open_recent_folder", "args": {"index": 6 } },
+ { "command": "open_recent_folder", "args": {"index": 7 } },
+ { "caption": "-" },
+ { "command": "clear_recent_files", "caption": "Clear Items" }
+ ]
+ },
+ {
+ "caption": "Reopen with Encoding",
+ "children":
+ [
+ { "caption": "UTF-8", "command": "reopen", "args": {"encoding": "utf-8" } },
+ { "caption": "UTF-16 LE", "command": "reopen", "args": {"encoding": "utf-16 le" } },
+ { "caption": "UTF-16 BE", "command": "reopen", "args": {"encoding": "utf-16 be" } },
+ { "caption": "-" },
+ { "caption": "Western (Windows 1252)", "command": "reopen", "args": {"encoding": "Western (Windows 1252)" } },
+ { "caption": "Western (ISO 8859-1)", "command": "reopen", "args": {"encoding": "Western (ISO 8859-1)" } },
+ { "caption": "Western (ISO 8859-3)", "command": "reopen", "args": {"encoding": "Western (ISO 8859-3)" } },
+ { "caption": "Western (ISO 8859-15)", "command": "reopen", "args": {"encoding": "Western (ISO 8859-15)" } },
+ { "caption": "Western (Mac Roman)", "command": "reopen", "args": {"encoding": "Western (Mac Roman)" } },
+ { "caption": "DOS (CP 437)", "command": "reopen", "args": {"encoding": "DOS (CP 437)" } },
+ { "caption": "Arabic (Windows 1256)", "command": "reopen", "args": {"encoding": "Arabic (Windows 1256)" } },
+ { "caption": "Arabic (ISO 8859-6)", "command": "reopen", "args": {"encoding": "Arabic (ISO 8859-6)" } },
+ { "caption": "Baltic (Windows 1257)", "command": "reopen", "args": {"encoding": "Baltic (Windows 1257)" } },
+ { "caption": "Baltic (ISO 8859-4)", "command": "reopen", "args": {"encoding": "Baltic (ISO 8859-4)" } },
+ { "caption": "Celtic (ISO 8859-14)", "command": "reopen", "args": {"encoding": "Celtic (ISO 8859-14)" } },
+ { "caption": "Central European (Windows 1250)", "command": "reopen", "args": {"encoding": "Central European (Windows 1250)" } },
+ { "caption": "Central European (ISO 8859-2)", "command": "reopen", "args": {"encoding": "Central European (ISO 8859-2)" } },
+ { "caption": "Cyrillic (Windows 1251)", "command": "reopen", "args": {"encoding": "Cyrillic (Windows 1251)" } },
+ { "caption": "Cyrillic (Windows 866)", "command": "reopen", "args": {"encoding": "Cyrillic (Windows 866)" } },
+ { "caption": "Cyrillic (ISO 8859-5)", "command": "reopen", "args": {"encoding": "Cyrillic (ISO 8859-5)" } },
+ { "caption": "Cyrillic (KOI8-R)", "command": "reopen", "args": {"encoding": "Cyrillic (KOI8-R)" } },
+ { "caption": "Cyrillic (KOI8-U)", "command": "reopen", "args": {"encoding": "Cyrillic (KOI8-U)" } },
+ { "caption": "Estonian (ISO 8859-13)", "command": "reopen", "args": {"encoding": "Estonian (ISO 8859-13)" } },
+ { "caption": "Greek (Windows 1253)", "command": "reopen", "args": {"encoding": "Greek (Windows 1253)" } },
+ { "caption": "Greek (ISO 8859-7)", "command": "reopen", "args": {"encoding": "Greek (ISO 8859-7)" } },
+ { "caption": "Hebrew (Windows 1255)", "command": "reopen", "args": {"encoding": "Hebrew (Windows 1255)" } },
+ { "caption": "Hebrew (ISO 8859-8)", "command": "reopen", "args": {"encoding": "Hebrew (ISO 8859-8)" } },
+ { "caption": "Nordic (ISO 8859-10)", "command": "reopen", "args": {"encoding": "Nordic (ISO 8859-10)" } },
+ { "caption": "Romanian (ISO 8859-16)", "command": "reopen", "args": {"encoding": "Romanian (ISO 8859-16)" } },
+ { "caption": "Turkish (Windows 1254)", "command": "reopen", "args": {"encoding": "Turkish (Windows 1254)" } },
+ { "caption": "Turkish (ISO 8859-9)", "command": "reopen", "args": {"encoding": "Turkish (ISO 8859-9)" } },
+ { "caption": "Vietnamese (Windows 1258)", "command": "reopen", "args": {"encoding": "Vietnamese (Windows 1258)" } },
+ { "caption": "-" },
+ { "caption": "Hexadecimal", "command": "reopen", "args": {"encoding": "Hexadecimal" } }
+ ]
+ },
+ { "command": "clone_file", "caption": "New View into File", "mnemonic": "e" },
+ { "command": "save", "caption": "Save", "mnemonic": "S" },
+ {
+ "caption": "Save with Encoding",
+ "children":
+ [
+ { "caption": "UTF-8", "command": "save", "args": {"encoding": "utf-8" } },
+ { "caption": "UTF-8 with BOM", "command": "save", "args": {"encoding": "utf-8 with bom" } },
+ { "caption": "UTF-16 LE", "command": "save", "args": {"encoding": "utf-16 le" } },
+ { "caption": "UTF-16 LE with BOM", "command": "save", "args": {"encoding": "utf-16 le with bom" } },
+ { "caption": "UTF-16 BE", "command": "save", "args": {"encoding": "utf-16 be" } },
+ { "caption": "UTF-16 BE with BOM", "command": "save", "args": {"encoding": "utf-16 be with bom" } },
+ { "caption": "-" },
+ { "caption": "Western (Windows 1252)", "command": "save", "args": {"encoding": "Western (Windows 1252)" } },
+ { "caption": "Western (ISO 8859-1)", "command": "save", "args": {"encoding": "Western (ISO 8859-1)" } },
+ { "caption": "Western (ISO 8859-3)", "command": "save", "args": {"encoding": "Western (ISO 8859-3)" } },
+ { "caption": "Western (ISO 8859-15)", "command": "save", "args": {"encoding": "Western (ISO 8859-15)" } },
+ { "caption": "Western (Mac Roman)", "command": "save", "args": {"encoding": "Western (Mac Roman)" } },
+ { "caption": "DOS (CP 437)", "command": "save", "args": {"encoding": "DOS (CP 437)" } },
+ { "caption": "Arabic (Windows 1256)", "command": "save", "args": {"encoding": "Arabic (Windows 1256)" } },
+ { "caption": "Arabic (ISO 8859-6)", "command": "save", "args": {"encoding": "Arabic (ISO 8859-6)" } },
+ { "caption": "Baltic (Windows 1257)", "command": "save", "args": {"encoding": "Baltic (Windows 1257)" } },
+ { "caption": "Baltic (ISO 8859-4)", "command": "save", "args": {"encoding": "Baltic (ISO 8859-4)" } },
+ { "caption": "Celtic (ISO 8859-14)", "command": "save", "args": {"encoding": "Celtic (ISO 8859-14)" } },
+ { "caption": "Central European (Windows 1250)", "command": "save", "args": {"encoding": "Central European (Windows 1250)" } },
+ { "caption": "Central European (ISO 8859-2)", "command": "save", "args": {"encoding": "Central European (ISO 8859-2)" } },
+ { "caption": "Cyrillic (Windows 1251)", "command": "save", "args": {"encoding": "Cyrillic (Windows 1251)" } },
+ { "caption": "Cyrillic (Windows 866)", "command": "save", "args": {"encoding": "Cyrillic (Windows 866)" } },
+ { "caption": "Cyrillic (ISO 8859-5)", "command": "save", "args": {"encoding": "Cyrillic (ISO 8859-5)" } },
+ { "caption": "Cyrillic (KOI8-R)", "command": "save", "args": {"encoding": "Cyrillic (KOI8-R)" } },
+ { "caption": "Cyrillic (KOI8-U)", "command": "save", "args": {"encoding": "Cyrillic (KOI8-U)" } },
+ { "caption": "Estonian (ISO 8859-13)", "command": "save", "args": {"encoding": "Estonian (ISO 8859-13)" } },
+ { "caption": "Greek (Windows 1253)", "command": "save", "args": {"encoding": "Greek (Windows 1253)" } },
+ { "caption": "Greek (ISO 8859-7)", "command": "save", "args": {"encoding": "Greek (ISO 8859-7)" } },
+ { "caption": "Hebrew (Windows 1255)", "command": "save", "args": {"encoding": "Hebrew (Windows 1255)" } },
+ { "caption": "Hebrew (ISO 8859-8)", "command": "save", "args": {"encoding": "Hebrew (ISO 8859-8)" } },
+ { "caption": "Nordic (ISO 8859-10)", "command": "save", "args": {"encoding": "Nordic (ISO 8859-10)" } },
+ { "caption": "Romanian (ISO 8859-16)", "command": "save", "args": {"encoding": "Romanian (ISO 8859-16)" } },
+ { "caption": "Turkish (Windows 1254)", "command": "save", "args": {"encoding": "Turkish (Windows 1254)" } },
+ { "caption": "Turkish (ISO 8859-9)", "command": "save", "args": {"encoding": "Turkish (ISO 8859-9)" } },
+ { "caption": "Vietnamese (Windows 1258)", "command": "save", "args": {"encoding": "Vietnamese (Windows 1258)" } },
+ { "caption": "-" },
+ { "caption": "Hexadecimal", "command": "save", "args": {"encoding": "Hexadecimal" } }
+ ]
+ },
+ { "command": "prompt_save_as", "caption": "Save As…", "mnemonic": "A" },
+ { "command": "save_all", "caption": "Save All", "mnemonic": "l" },
+ { "caption": "-", "id": "window" },
+ { "command": "new_window", "caption": "New Window", "mnemonic": "W" },
+ { "command": "close_window", "caption": "Close Window" },
+ { "caption": "-", "id": "close" },
+ { "command": "close", "caption": "Close File", "mnemonic": "C" },
+ { "command": "revert", "caption": "Revert File", "mnemonic": "v" },
+ { "command": "close_all", "caption": "Close All Files" },
+ { "caption": "-", "id": "exit" },
+ { "command": "exit", "mnemonic": "x" }
+ ]
+ },
+ {
+ "caption": "Edit",
+ "mnemonic": "E",
+ "id": "edit",
+ "children":
+ [
+ { "command": "undo", "mnemonic": "U" },
+ { "command": "redo_or_repeat", "mnemonic": "R" },
+ {
+ "caption": "Undo Selection",
+ "children":
+ [
+ { "command": "soft_undo" },
+ { "command": "soft_redo" }
+ ]
+ },
+ { "caption": "-", "id": "clipboard" },
+ { "command": "copy", "mnemonic": "C" },
+ { "command": "cut", "mnemonic": "n" },
+ { "command": "paste", "mnemonic": "P" },
+ { "command": "paste_and_indent", "mnemonic": "I" },
+ { "caption": "-" },
+ {
+ "caption": "Line", "mnemonic": "L",
+ "id": "line",
+ "children":
+ [
+ { "command": "indent" },
+ { "command": "unindent" },
+ { "command": "reindent", "args": {"single_line": true} },
+ { "command": "swap_line_up" },
+ { "command": "swap_line_down" },
+ { "command": "duplicate_line" },
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"}, "caption": "Delete Line" },
+ { "command": "join_lines" }
+ ]
+ },
+ {
+ "caption": "Comment", "mnemonic": "m",
+ "id": "comment",
+ "children":
+ [
+ { "command": "toggle_comment", "args": {"block": false}, "caption": "Toggle Comment" },
+ { "command": "toggle_comment", "args": {"block": true}, "caption": "Toggle Block Comment" }
+ ]
+ },
+ {
+ "caption": "Text", "mnemonic": "T",
+ "id": "text",
+ "children":
+ [
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line Before.sublime-macro"}, "caption": "Insert Line Before" },
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Add Line.sublime-macro"}, "caption": "Insert Line After" },
+ { "caption": "-" },
+ { "command": "delete_word", "args": { "forward": true }, "caption": "Delete Word Forward" },
+ { "command": "delete_word", "args": { "forward": false }, "caption": "Delete Word Backward" },
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"}, "caption": "Delete Line" },
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"}, "caption": "Delete to End" },
+ { "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard BOL.sublime-macro"}, "caption": "Delete to Beginning" },
+ { "caption": "-" },
+ { "command": "transpose" }
+ ]
+ },
+ {
+ "caption": "Tag",
+ "id": "tag",
+ "children":
+ [
+ { "command": "close_tag" },
+ { "command": "expand_selection", "args": {"to": "tag"}, "caption": "Expand Selection to Tag" },
+ { "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" }, "caption": "Wrap Selection With Tag" }
+ ]
+ },
+ {
+ "caption": "Mark",
+ "id": "mark",
+ "children":
+ [
+ { "command": "set_mark" },
+ { "command": "select_to_mark" },
+ { "command": "delete_to_mark" },
+ { "command": "swap_with_mark" },
+ { "command": "clear_bookmarks", "args": {"name": "mark"}, "caption": "Clear Mark" },
+ { "caption": "-" },
+ { "command": "yank" }
+ ]
+ },
+ {
+ "caption": "Code Folding",
+ "id": "fold",
+ "children":
+ [
+ { "command": "fold" },
+ { "command": "unfold" },
+ { "command": "unfold_all", "caption": "Unfold All" },
+ { "caption": "-" },
+ { "caption": "Fold All", "command": "fold_by_level", "args": {"level": 1} },
+ { "caption": "Fold Level 2", "command": "fold_by_level", "args": {"level": 2} },
+ { "caption": "Fold Level 3", "command": "fold_by_level", "args": {"level": 3} },
+ { "caption": "Fold Level 4", "command": "fold_by_level", "args": {"level": 4} },
+ { "caption": "Fold Level 5", "command": "fold_by_level", "args": {"level": 5} },
+ { "caption": "Fold Level 6", "command": "fold_by_level", "args": {"level": 6} },
+ { "caption": "Fold Level 7", "command": "fold_by_level", "args": {"level": 7} },
+ { "caption": "Fold Level 8", "command": "fold_by_level", "args": {"level": 8} },
+ { "caption": "Fold Level 9", "command": "fold_by_level", "args": {"level": 9} },
+ { "caption": "-" },
+ { "command": "fold_tag_attributes", "caption": "Fold Tag Attributes" }
+ ]
+ },
+ {
+ "caption": "Convert Case", "mnemonic": "a",
+ "id": "convert_case",
+ "children":
+ [
+ { "command": "title_case", "caption": "Title Case" },
+ { "command": "upper_case", "caption": "Upper Case" },
+ { "command": "lower_case", "caption": "Lower Case" },
+ { "command": "swap_case", "caption": "Swap Case" }
+ ]
+ },
+ {
+ "caption": "Wrap",
+ "id": "wrap",
+ "children":
+ [
+ { "command": "wrap_lines", "caption": "Wrap Paragraph at Ruler" },
+ { "command": "wrap_lines", "args": {"width": 70}, "caption": "Wrap paragraph at 70 characters" },
+ { "command": "wrap_lines", "args": {"width": 78}, "caption": "Wrap paragraph at 78 characters" },
+ { "command": "wrap_lines", "args": {"width": 80}, "caption": "Wrap paragraph at 80 characters" },
+ { "command": "wrap_lines", "args": {"width": 100}, "caption": "Wrap paragraph at 100 characters" },
+ { "command": "wrap_lines", "args": {"width": 120}, "caption": "Wrap paragraph at 120 characters" }
+ ]
+ },
+ { "command": "auto_complete", "caption": "Show Completions" },
+ { "caption": "-", "id": "permute" },
+
+ { "command": "sort_lines", "args": {"case_sensitive": false}, "caption": "Sort Lines", "mnemonic": "S" },
+ { "command": "sort_lines", "args": {"case_sensitive": true}, "caption": "Sort Lines (Case Sensitive)" },
+ {
+ "caption": "Permute Lines",
+ "children":
+ [
+ { "command": "permute_lines", "args": {"operation": "reverse"}, "caption": "Reverse" },
+ { "command": "permute_lines", "args": {"operation": "unique"}, "caption": "Unique" },
+ { "command": "permute_lines", "args": {"operation": "shuffle"}, "caption": "Shuffle" }
+ ]
+ },
+ {
+ "caption": "Permute Selections",
+ "children":
+ [
+ { "command": "sort_selection", "args": {"case_sensitive": false}, "caption": "Sort" },
+ { "command": "sort_selection", "args": {"case_sensitive": true}, "caption": "Sort (Case Sensitive)" },
+ { "command": "permute_selection", "args": {"operation": "reverse"}, "caption": "Reverse" },
+ { "command": "permute_selection", "args": {"operation": "unique"}, "caption": "Unique" },
+ { "command": "permute_selection", "args": {"operation": "shuffle"}, "caption": "Shuffle" }
+ ]
+ },
+ { "caption": "-", "id": "end" }
+ ]
+ },
+ {
+ "caption": "Selection",
+ "mnemonic": "S",
+ "id": "selection",
+ "children":
+ [
+ { "command": "split_selection_into_lines", "caption": "Split into Lines" },
+ { "command": "select_lines", "args": {"forward": false}, "caption": "Add Previous Line" },
+ { "command": "select_lines", "args": {"forward": true}, "caption": "Add Next Line" },
+ { "command": "single_selection" },
+ { "caption": "-" },
+ { "command": "select_all" },
+ { "command": "expand_selection", "args": {"to": "line"}, "caption": "Expand Selection to Line" },
+ { "command": "find_under_expand", "caption": "Expand Selection to Word" },
+ { "command": "expand_selection_to_paragraph", "caption": "Expand Selection to Paragraph" },
+ { "command": "expand_selection", "args": {"to": "scope"}, "caption": "Expand Selection to Scope" },
+ { "command": "expand_selection", "args": {"to": "brackets"}, "caption": "Expand Selection to Brackets" },
+ { "command": "expand_selection", "args": {"to": "indentation"}, "caption": "Expand Selection to Indentation" },
+ { "command": "expand_selection", "args": {"to": "tag"}, "caption": "Expand Selection to Tag" }
+ ]
+ },
+ {
+ "caption": "Find",
+ "mnemonic": "i",
+ "id": "find",
+ "children":
+ [
+ { "command": "show_panel", "args": {"panel": "find"}, "caption": "Find…" },
+ { "command": "find_next" },
+ { "command": "find_prev", "caption": "Find Previous" },
+ { "command": "show_panel", "args": {"panel": "incremental_find", "reverse": false}, "caption": "Incremental Find" },
+ { "caption": "-" },
+ { "command": "show_panel", "args": {"panel": "replace"}, "caption": "Replace…" },
+ { "command": "replace_next" },
+ { "caption": "-" },
+ { "command": "find_under", "caption": "Quick Find" },
+ { "command": "find_all_under", "caption": "Quick Find All" },
+ { "command": "find_under_expand", "caption": "Quick Add Next" },
+ { "command": "find_under_expand_skip", "caption": "Quick Skip Next", "platform": "!OSX" },
+ { "caption": "-" },
+ { "command": "slurp_find_string", "caption": "Use Selection for Find" },
+ { "command": "slurp_replace_string", "caption": "Use Selection for Replace" },
+ { "caption": "-" },
+ { "command": "show_panel", "args": {"panel": "find_in_files"}, "caption": "Find in Files…" },
+ {
+ "caption": "Find Results",
+ "mnemonic": "R",
+ "children":
+ [
+ { "command": "show_panel", "args": {"panel": "output.find_results"}, "caption": "Show Results Panel" },
+ { "command": "next_result" },
+ { "command": "prev_result", "caption": "Previous Result" }
+ ]
+ }
+ ]
+ },
+ {
+ "caption": "View",
+ "mnemonic": "V",
+ "id": "view",
+ "children":
+ [
+ {
+ "caption": "Side Bar",
+ "id": "side_bar",
+ "children":
+ [
+ { "command": "toggle_side_bar" },
+ { "caption": "-" },
+ { "command": "toggle_show_open_files" }
+ ]
+ },
+ { "command": "toggle_minimap" },
+ { "command": "toggle_tabs" },
+ { "command": "toggle_status_bar" },
+ { "command": "toggle_menu" },
+ { "command": "show_panel", "args": {"panel": "console", "toggle": true} },
+ { "caption": "-", "id": "full_screen" },
+ { "command": "toggle_full_screen" },
+ { "command": "toggle_distraction_free" },
+ { "caption": "-", "id": "groups" },
+ {
+ "caption": "Layout",
+ "mnemonic": "L",
+ "id": "layout",
+ "children":
+ [
+ {
+ "caption": "Single",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1]]
+ }
+ },
+ {
+ "caption": "Columns: 2",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
+ }
+ },
+ {
+ "caption": "Columns: 3",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.33, 0.66, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]
+ }
+ },
+ {
+ "caption": "Columns: 4",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.25, 0.5, 0.75, 1.0],
+ "rows": [0.0, 1.0],
+ "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]
+ }
+ },
+ {
+ "caption": "Rows: 2",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]
+ }
+ },
+ {
+ "caption": "Rows: 3",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 1.0],
+ "rows": [0.0, 0.33, 0.66, 1.0],
+ "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]
+ }
+ },
+ {
+ "caption": "Grid: 4",
+ "command": "set_layout",
+ "args":
+ {
+ "cols": [0.0, 0.5, 1.0],
+ "rows": [0.0, 0.5, 1.0],
+ "cells":
+ [
+ [0, 0, 1, 1], [1, 0, 2, 1],
+ [0, 1, 1, 2], [1, 1, 2, 2]
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "caption": "Focus Group",
+ "mnemonic": "F",
+ "children":
+ [
+ { "command": "focus_group", "args": {"group": 0}, "caption": "Group 1" },
+ { "command": "focus_group", "args": {"group": 1}, "caption": "Group 2" },
+ { "command": "focus_group", "args": {"group": 2}, "caption": "Group 3" },
+ { "command": "focus_group", "args": {"group": 3}, "caption": "Group 4" }
+ ]
+ },
+ {
+ "caption": "Move File To Group",
+ "mnemonic": "M",
+ "children":
+ [
+ { "command": "move_to_group", "args": {"group": 0}, "caption": "Group 1" },
+ { "command": "move_to_group", "args": {"group": 1}, "caption": "Group 2" },
+ { "command": "move_to_group", "args": {"group": 2}, "caption": "Group 3" },
+ { "command": "move_to_group", "args": {"group": 3}, "caption": "Group 4" }
+ ]
+ },
+ { "caption": "-" },
+ {
+ "caption": "Syntax",
+ "mnemonic": "S",
+ "id": "syntax",
+ "children": [ { "command": "$file_types" } ]
+ },
+ {
+ "caption": "Indentation",
+ "mnemonic": "I",
+ "id": "indentation",
+ "children":
+ [
+ { "command": "toggle_setting", "args": {"setting": "translate_tabs_to_spaces"}, "caption": "Indent Using Spaces", "checkbox": true },
+ { "caption": "-" },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 1}, "caption": "Tab Width: 1", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 2}, "caption": "Tab Width: 2", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 3}, "caption": "Tab Width: 3", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 4}, "caption": "Tab Width: 4", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 5}, "caption": "Tab Width: 5", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 6}, "caption": "Tab Width: 6", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 7}, "caption": "Tab Width: 7", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "tab_size", "value": 8}, "caption": "Tab Width: 8", "checkbox": true },
+ { "caption": "-" },
+ { "command": "detect_indentation", "caption": "Guess Settings From Buffer" },
+ { "caption": "-" },
+ { "command": "expand_tabs", "caption": "Convert Indentation to Spaces", "args": {"set_translate_tabs": true} },
+ { "command": "unexpand_tabs", "caption": "Convert Indentation to Tabs", "args": {"set_translate_tabs": true} }
+ ]
+ },
+ {
+ "caption": "Line Endings",
+ "mnemonic": "n",
+ "id": "line_endings",
+ "children":
+ [
+ { "command": "set_line_ending", "args": {"type": "windows"}, "caption": "Windows", "checkbox": true },
+ { "command": "set_line_ending", "args": {"type": "unix"}, "caption": "Unix", "checkbox": true },
+ { "command": "set_line_ending", "args": {"type": "cr"}, "caption": "Mac OS 9", "checkbox": true }
+ ]
+ },
+ { "caption": "-", "id": "settings" },
+ { "command": "toggle_setting", "args": {"setting": "word_wrap"}, "caption": "Word Wrap", "mnemonic": "w", "checkbox": true },
+ {
+ "caption": "Word Wrap Column",
+ "children":
+ [
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 0}, "caption": "Automatic", "checkbox": true },
+ { "caption": "-" },
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 70}, "caption": "70", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 78}, "caption": "78", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 80}, "caption": "80", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 100}, "caption": "100", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "wrap_width", "value": 120}, "caption": "120", "checkbox": true }
+ ]
+ },
+ {
+ "caption": "Ruler",
+ "children":
+ [
+ { "command": "set_setting", "args": {"setting": "rulers", "value": []}, "caption": "None", "checkbox": true },
+ { "caption": "-" },
+ { "command": "set_setting", "args": {"setting": "rulers", "value": [70]}, "caption": "70", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "rulers", "value": [78]}, "caption": "78", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "rulers", "value": [80]}, "caption": "80", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "rulers", "value": [100]}, "caption": "100", "checkbox": true },
+ { "command": "set_setting", "args": {"setting": "rulers", "value": [120]}, "caption": "120", "checkbox": true }
+ ]
+ },
+ { "caption": "-" },
+ { "command": "toggle_setting", "args": {"setting": "spell_check"}, "caption": "Spell Check", "checkbox": true },
+ { "command": "next_misspelling" },
+ { "command": "prev_misspelling" },
+ {
+ "caption": "Dictionary",
+ "children": [ { "command": "$dictionaries" } ]
+ }
+ ]
+ },
+ {
+ "caption": "Goto",
+ "mnemonic": "G",
+ "id": "goto",
+ "children":
+ [
+ { "command": "show_overlay", "args": {"overlay": "goto", "show_files": true}, "caption": "Goto Anything…", "mnemonic": "A" },
+ { "caption": "-" },
+ { "command": "show_overlay", "args": {"overlay": "goto", "text": "@"}, "caption": "Goto Symbol…" },
+ // { "command": "show_overlay", "args": {"overlay": "goto", "text": "#"}, "caption": "Goto Word…" },
+ { "command": "show_overlay", "args": {"overlay": "goto", "text": ":"}, "caption": "Goto Line…" },
+ { "caption": "-" },
+ {
+ "caption": "Switch File",
+ "mnemonic": "t",
+ "id": "switch_file",
+ "children":
+ [
+ { "command": "next_view", "caption": "Next File" },
+ { "command": "prev_view", "caption": "Previous File" },
+ { "caption": "-" },
+ { "command": "next_view_in_stack", "caption": "Next File in Stack" },
+ { "command": "prev_view_in_stack", "caption": "Previous File in Stack" },
+ { "caption": "-" },
+ { "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm"]}, "caption": "Switch Header/Implementation", "mnemonic": "H" },
+ { "caption": "-" },
+ { "command": "select_by_index", "args": { "index": 0 } },
+ { "command": "select_by_index", "args": { "index": 1 } },
+ { "command": "select_by_index", "args": { "index": 2 } },
+ { "command": "select_by_index", "args": { "index": 3 } },
+ { "command": "select_by_index", "args": { "index": 4 } },
+ { "command": "select_by_index", "args": { "index": 5 } },
+ { "command": "select_by_index", "args": { "index": 6 } },
+ { "command": "select_by_index", "args": { "index": 7 } },
+ { "command": "select_by_index", "args": { "index": 8 } },
+ { "command": "select_by_index", "args": { "index": 9 } }
+ ]
+ },
+ { "caption": "-" },
+ {
+ "caption": "Scroll",
+ "mnemonic": "S",
+ "id": "scroll",
+ "children":
+ [
+ { "command": "show_at_center", "caption": "Scroll to Selection" },
+ { "command": "scroll_lines", "args": {"amount": 1.0 }, "caption": "Line Up" },
+ { "command": "scroll_lines", "args": {"amount": -1.0 }, "caption": "Line Down" }
+ ]
+ },
+ {
+ "caption": "Bookmarks",
+ "mnemonic": "b",
+ "id": "bookmarks",
+ "children":
+ [
+ { "command": "toggle_bookmark" },
+ { "command": "next_bookmark" },
+ { "command": "prev_bookmark" },
+ { "command": "clear_bookmarks" },
+ { "command": "select_all_bookmarks" },
+ { "caption": "-" },
+ { "command": "select_bookmark", "args": {"index": 0} },
+ { "command": "select_bookmark", "args": {"index": 1} },
+ { "command": "select_bookmark", "args": {"index": 2} },
+ { "command": "select_bookmark", "args": {"index": 3} },
+ { "command": "select_bookmark", "args": {"index": 4} },
+ { "command": "select_bookmark", "args": {"index": 5} },
+ { "command": "select_bookmark", "args": {"index": 6} },
+ { "command": "select_bookmark", "args": {"index": 7} },
+ { "command": "select_bookmark", "args": {"index": 8} },
+ { "command": "select_bookmark", "args": {"index": 9} },
+ { "command": "select_bookmark", "args": {"index": 10} },
+ { "command": "select_bookmark", "args": {"index": 11} },
+ { "command": "select_bookmark", "args": {"index": 12} },
+ { "command": "select_bookmark", "args": {"index": 13} },
+ { "command": "select_bookmark", "args": {"index": 14} },
+ { "command": "select_bookmark", "args": {"index": 15} }
+ ]
+ },
+ { "caption": "-" },
+ { "command": "move_to", "args": {"to": "brackets"}, "caption": "Jump to Matching Bracket" }
+ ]
+ },
+ {
+ "caption": "Tools",
+ "mnemonic": "T",
+ "id": "tools",
+ "children":
+ [
+ { "command": "show_overlay", "args": {"overlay": "command_palette"}, "caption": "Command Palette…" },
+ { "command": "show_overlay", "args": {"overlay": "command_palette", "text": "Snippet: "}, "caption": "Snippets…" },
+ { "caption": "-", "id": "build" },
+ {
+ "caption": "Build System",
+ "mnemonic": "u",
+ "children":
+ [
+ { "command": "set_build_system", "args": { "file": "" }, "caption": "Automatic", "checkbox": true },
+ { "caption": "-" },
+ { "command": "set_build_system", "args": {"index": 0}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 1}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 2}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 3}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 4}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 5}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 6}, "checkbox": true },
+ { "command": "set_build_system", "args": {"index": 7}, "checkbox": true },
+ { "command": "$build_systems" },
+ { "caption": "-" },
+ { "command": "new_build_system", "caption": "New Build System…" }
+ ]
+ },
+ { "command": "build", "mnemonic": "B" },
+ { "command": "build", "args": {"variant": "Run"}, "mnemonic": "R" },
+ { "command": "exec", "args": {"kill": true}, "caption": "Cancel Build", "mnemonic": "C" },
+ {
+ "caption": "Build Results",
+ "mnemonic": "R",
+ "children":
+ [
+ { "command": "show_panel", "args": {"panel": "output.exec"}, "caption": "Show Build Results", "mnemonic": "S" },
+ { "command": "next_result", "mnemonic": "N" },
+ { "command": "prev_result", "caption": "Previous Result", "mnemonic": "P" }
+ ]
+ },
+ { "command": "toggle_save_all_on_build", "caption": "Save All on Build", "mnemonic": "A", "checkbox": true },
+ { "caption": "-", "id": "macros" },
+ { "command": "toggle_record_macro", "mnemonic": "M" },
+ { "command": "run_macro", "caption": "Playback Macro", "mnemonic": "P" },
+ { "command": "save_macro", "caption": "Save Macro…", "mnemonic": "v" },
+ {
+ "caption": "Macros",
+ "children": [ { "command": "$macros" } ]
+ },
+ { "caption": "-" },
+ { "command": "new_plugin", "caption": "New Plugin…" },
+ { "command": "new_snippet", "caption": "New Snippet…" },
+ { "caption": "-", "id": "end" }
+ ]
+ },
+ {
+ "caption": "Project",
+ "mnemonic": "P",
+ "id": "project",
+ "children":
+ [
+ { "command": "prompt_open_project", "caption": "Open Project…", "mnemonic": "O" },
+ {
+ "caption": "Recent Projects",
+ "mnemonic": "R",
+ "children":
+ [
+ { "command": "open_recent_project", "args": {"index": 0 } },
+ { "command": "open_recent_project", "args": {"index": 1 } },
+ { "command": "open_recent_project", "args": {"index": 2 } },
+ { "command": "open_recent_project", "args": {"index": 3 } },
+ { "command": "open_recent_project", "args": {"index": 4 } },
+ { "command": "open_recent_project", "args": {"index": 5 } },
+ { "command": "open_recent_project", "args": {"index": 6 } },
+ { "command": "open_recent_project", "args": {"index": 7 } },
+ { "caption": "-" },
+ { "command": "clear_recent_projects", "caption": "Clear Items" }
+ ]
+ },
+ { "caption": "-" },
+ { "command": "prompt_select_project", "caption": "Switch Project in Window…", "mnemonic": "S" },
+ { "command": "save_project_as", "caption": "Save Project As…", "mnemonic": "A" },
+ { "command": "close_project", "mnemonic": "C" },
+ { "command": "open_file", "args": {"file": "${project}"}, "caption": "Edit Project" },
+ { "caption": "-" },
+ { "command": "prompt_add_folder", "caption": "Add Folder to Project…", "mnemonic": "d" },
+ { "command": "close_folder_list", "caption": "Remove all Folders from Project", "mnemonic": "m" },
+ { "command": "refresh_folder_list", "caption": "Refresh Folders", "mnemonic": "e" },
+ { "caption": "-" },
+ { "caption": "-", "id": "end" }
+ ]
+ },
+ {
+ "caption": "Preferences",
+ "mnemonic": "n",
+ "id": "preferences",
+ "children":
+ [
+ { "command": "open_dir", "args": {"dir": "$packages"}, "caption": "Browse Packages…", "mnemonic": "B" },
+ { "caption": "-" },
+ { "command": "open_file", "args": {"file": "${packages}/Default/Preferences.sublime-settings"}, "caption": "Settings – Default" },
+ { "command": "open_file", "args": {"file": "${packages}/User/Preferences.sublime-settings"}, "caption": "Settings – User" },
+ {
+ "caption": "Settings – More",
+ "children":
+ [
+ { "command": "open_file_settings", "caption": "Syntax Specific – User" },
+ { "command": "open_file", "args": {"file": "${packages}/User/Distraction Free.sublime-settings"}, "caption": "Distraction Free – User" }
+ ]
+ },
+ { "caption": "-" },
+ {
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/Default/Default ($platform).sublime-keymap"
+ },
+ "caption": "Key Bindings – Default"
+ },
+ {
+ "command": "open_file", "args":
+ {
+ "file": "${packages}/User/Default ($platform).sublime-keymap"
+ },
+ "caption": "Key Bindings – User"
+ },
+ { "caption": "-" },
+ {
+ "caption": "Font",
+ "children":
+ [
+ { "command": "increase_font_size", "caption": "Larger" },
+ { "command": "decrease_font_size", "caption": "Smaller" },
+ { "caption": "-" },
+ { "command": "reset_font_size", "caption": "Reset" }
+ ]
+ },
+ {
+ "caption": "Color Scheme",
+ "children": [ { "command": "$color_schemes" } ]
+ }
+ ]
+ },
+ {
+ "caption": "Help",
+ "mnemonic": "H",
+ "id": "help",
+ "children":
+ [
+ { "command": "open_url", "args": {"url": "http://www.sublimetext.com/docs/2/"}, "caption": "Documentation" },
+ { "command": "open_url", "args": {"url": "http://twitter.com/sublimehq"}, "caption": "Twitter" },
+ { "caption": "-" },
+ { "command": "purchase_license"},
+ { "command": "show_license_window", "caption": "Enter License" },
+ { "command": "remove_license"},
+ { "caption": "-" },
+ { "command": "show_about_window", "caption": "About Sublime Text 2", "mnemonic": "A" }
+ ]
+ }
+]
diff --git a/Default/Meta Info Summary.cache b/Default/Meta Info Summary.cache
new file mode 100644
index 0000000..c219223
Binary files /dev/null and b/Default/Meta Info Summary.cache differ
diff --git a/Default/Minimap.sublime-settings b/Default/Minimap.sublime-settings
new file mode 100644
index 0000000..2e03071
--- /dev/null
+++ b/Default/Minimap.sublime-settings
@@ -0,0 +1,5 @@
+{
+ "rulers": [],
+ "gutter": false,
+ "draw_indent_guides": false
+}
diff --git a/Default/Miscellaneous.tmPreferences.cache b/Default/Miscellaneous.tmPreferences.cache
new file mode 100644
index 0000000..e94d1ca
Binary files /dev/null and b/Default/Miscellaneous.tmPreferences.cache differ
diff --git a/Default/Preferences (Linux).sublime-settings b/Default/Preferences (Linux).sublime-settings
new file mode 100644
index 0000000..f3e8ca1
--- /dev/null
+++ b/Default/Preferences (Linux).sublime-settings
@@ -0,0 +1,5 @@
+{
+ "font_face": "Monospace",
+ "font_size": 10,
+ "mouse_wheel_switches_tabs": true
+}
diff --git a/Default/Preferences (OSX).sublime-settings b/Default/Preferences (OSX).sublime-settings
new file mode 100644
index 0000000..5480b8a
--- /dev/null
+++ b/Default/Preferences (OSX).sublime-settings
@@ -0,0 +1,9 @@
+{
+ "font_face": "Menlo Regular",
+ "font_size": 12,
+ "scroll_past_end": false,
+ "find_selected_text": false,
+ "move_to_limit_on_up_down": true,
+ "close_windows_when_empty": true,
+ "show_full_path": false
+}
diff --git a/Default/Preferences (Windows).sublime-settings b/Default/Preferences (Windows).sublime-settings
new file mode 100644
index 0000000..0eeb1f9
--- /dev/null
+++ b/Default/Preferences (Windows).sublime-settings
@@ -0,0 +1,4 @@
+{
+ "font_face": "Consolas",
+ "font_size": 10
+}
diff --git a/Default/Preferences.sublime-settings b/Default/Preferences.sublime-settings
new file mode 100644
index 0000000..bf86fc6
--- /dev/null
+++ b/Default/Preferences.sublime-settings
@@ -0,0 +1,325 @@
+// While you can edit this file, it's best to put your changes in
+// "User/Preferences.sublime-settings", which overrides the settings in here.
+//
+// Settings may also be placed in file type specific options files, for
+// example, in Packages/Python/Python.sublime-settings for python files.
+{
+ // Sets the colors used within the text area
+ "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
+
+ // Note that the font_face and font_size are overriden in the platform
+ // specific settings file, for example, "Preferences (Linux).sublime-settings".
+ // Because of this, setting them here will have no effect: you must set them
+ // in your User File Preferences.
+ "font_face": "",
+ "font_size": 10,
+
+ // Valid options are "no_bold", "no_italic", "no_antialias", "gray_antialias",
+ // "subpixel_antialias", "no_round" (OS X only) and "directwrite" (Windows only)
+ "font_options": [],
+
+ // Characters that are considered to separate words
+ "word_separators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?",
+
+ // Set to false to prevent line numbers being drawn in the gutter
+ "line_numbers": true,
+
+ // Set to false to hide the gutter altogether
+ "gutter": true,
+
+ // Spacing between the gutter and the text
+ "margin": 4,
+
+ // Fold buttons are the triangles shown in the gutter to fold regions of text
+ "fold_buttons": true,
+
+ // Hides the fold buttons unless the mouse is over the gutter
+ "fade_fold_buttons": true,
+
+ // Columns in which to display vertical rulers
+ "rulers": [],
+
+ // Set to true to turn spell checking on by default
+ "spell_check": false,
+
+ // The number of spaces a tab is considered equal to
+ "tab_size": 4,
+
+ // Set to true to insert spaces when tab is pressed
+ "translate_tabs_to_spaces": false,
+
+ // If translate_tabs_to_spaces is true, use_tab_stops will make tab and
+ // backspace insert/delete up to the next tabstop
+ "use_tab_stops": true,
+
+ // Set to false to disable detection of tabs vs. spaces on load
+ "detect_indentation": true,
+
+ // Calculates indentation automatically when pressing enter
+ "auto_indent": true,
+
+ // Makes auto indent a little smarter, e.g., by indenting the next line
+ // after an if statement in C. Requires auto_indent to be enabled.
+ "smart_indent": true,
+
+ // Adds whitespace up to the first open bracket when indenting. Requires
+ // auto_indent to be enabled.
+ "indent_to_bracket": false,
+
+ // Trims white space added by auto_indent when moving the caret off the
+ // line.
+ "trim_automatic_white_space": true,
+
+ // Disables horizontal scrolling if enabled.
+ // May be set to true, false, or "auto", where it will be disabled for
+ // source code, and otherwise enabled.
+ "word_wrap": "auto",
+
+ // Set to a value other than 0 to force wrapping at that column rather than the
+ // window width
+ "wrap_width": 0,
+
+ // Set to false to prevent word wrapped lines from being indented to the same
+ // level
+ "indent_subsequent_lines": true,
+
+ // Draws text centered in the window rather than left aligned
+ "draw_centered": false,
+
+ // Controls auto pairing of quotes, brackets etc
+ "auto_match_enabled": true,
+
+ // Word list to use for spell checking
+ "dictionary": "Packages/Language - English/en_US.dic",
+
+ // Set to true to draw a border around the visible rectangle on the minimap.
+ // The color of the border will be determined by the "minimapBorder" key in
+ // the color scheme
+ "draw_minimap_border": false,
+
+ // If enabled, will highlight any line with a caret
+ "highlight_line": false,
+
+ // Valid values are "smooth", "phase", "blink", "wide" and "solid".
+ "caret_style": "smooth",
+
+ // Set to false to disable underlining the brackets surrounding the caret
+ "match_brackets": true,
+
+ // Set to false if you'd rather only highlight the brackets when the caret is
+ // next to one
+ "match_brackets_content": true,
+
+ // Set to false to not highlight square brackets. This only takes effect if
+ // match_brackets is true
+ "match_brackets_square": true,
+
+ // Set to false to not highlight curly brackets. This only takes effect if
+ // match_brackets is true
+ "match_brackets_braces": true,
+
+ // Set to false to not highlight angle brackets. This only takes effect if
+ // match_brackets is true
+ "match_brackets_angle": false,
+
+ // Enable visualization of the matching tag in HTML and XML
+ "match_tags": true,
+
+ // Highlights other occurrences of the currently selected text
+ "match_selection": true,
+
+ // Additional spacing at the top of each line, in pixels
+ "line_padding_top": 0,
+
+ // Additional spacing at the bottom of each line, in pixels
+ "line_padding_bottom": 0,
+
+ // Set to false to disable scrolling past the end of the buffer.
+ // On OS X, this value is overridden in the platform specific settings, so
+ // you'll need to place this line in your user settings to override it.
+ "scroll_past_end": true,
+
+ // This controls what happens when pressing up or down when on the first
+ // or last line.
+ // On OS X, this value is overridden in the platform specific settings, so
+ // you'll need to place this line in your user settings to override it.
+ "move_to_limit_on_up_down": false,
+
+ // Set to "none" to turn off drawing white space, "selection" to draw only the
+ // white space within the selection, and "all" to draw all white space
+ "draw_white_space": "selection",
+
+ // Set to false to turn off the indentation guides.
+ // The color and width of the indent guides may be customized by editing
+ // the corresponding .tmTheme file, and specifying the colors "guide",
+ // "activeGuide" and "stackGuide"
+ "draw_indent_guides": true,
+
+ // Controls how the indent guides are drawn, valid options are
+ // "draw_normal" and "draw_active". draw_active will draw the indent
+ // guides containing the caret in a different color.
+ "indent_guide_options": ["draw_normal"],
+
+ // Set to true to removing trailing white space on save
+ "trim_trailing_white_space_on_save": false,
+
+ // Set to true to ensure the last line of the file ends in a newline
+ // character when saving
+ "ensure_newline_at_eof_on_save": false,
+
+ // Set to true to automatically save files when switching to a different file
+ // or application
+ "save_on_focus_lost": false,
+
+ // The encoding to use when the encoding can't be determined automatically.
+ // ASCII, UTF-8 and UTF-16 encodings will be automatically detected.
+ "fallback_encoding": "Western (Windows 1252)",
+
+ // Encoding used when saving new files, and files opened with an undefined
+ // encoding (e.g., plain ascii files). If a file is opened with a specific
+ // encoding (either detected or given explicitly), this setting will be
+ // ignored, and the file will be saved with the encoding it was opened
+ // with.
+ "default_encoding": "UTF-8",
+
+ // Files containing null bytes are opened as hexadecimal by default
+ "enable_hexadecimal_encoding": true,
+
+ // Determines what character(s) are used to terminate each line in new files.
+ // Valid values are 'system' (whatever the OS uses), 'windows' (CRLF) and
+ // 'unix' (LF only).
+ "default_line_ending": "system",
+
+ // When enabled, pressing tab will insert the best matching completion.
+ // When disabled, tab will only trigger snippets or insert a tab.
+ // Shift+tab can be used to insert an explicit tab when tab_completion is
+ // enabled.
+ "tab_completion": true,
+
+ // Enable auto complete to be triggered automatically when typing.
+ "auto_complete": true,
+
+ // The maximum file size where auto complete will be automatically triggered.
+ "auto_complete_size_limit": 4194304,
+
+ // The delay, in ms, before the auto complete window is shown after typing
+ "auto_complete_delay": 50,
+
+ // Controls what scopes auto complete will be triggered in
+ "auto_complete_selector": "source - comment",
+
+ // Additional situations to trigger auto complete
+ "auto_complete_triggers": [ {"selector": "text.html", "characters": "<"} ],
+
+ // By default, auto complete will commit the current completion on enter.
+ // This setting can be used to make it complete on tab instead.
+ // Completing on tab is generally a superior option, as it removes
+ // ambiguity between committing the completion and inserting a newline.
+ "auto_complete_commit_on_tab": false,
+
+ // Controls if auto complete is shown when snippet fields are active.
+ // Only relevant if auto_complete_commit_on_tab is true.
+ "auto_complete_with_fields": false,
+
+ // By default, shift+tab will only unindent if the selection spans
+ // multiple lines. When pressing shift+tab at other times, it'll insert a
+ // tab character - this allows tabs to be inserted when tab_completion is
+ // enabled. Set this to true to make shift+tab always unindent, instead of
+ // inserting tabs.
+ "shift_tab_unindent": false,
+
+ // If true, the selected text will be copied into the find panel when it's
+ // shown.
+ // On OS X, this value is overridden in the platform specific settings, so
+ // you'll need to place this line in your user settings to override it.
+ "find_selected_text": true,
+
+ // When drag_text is enabled, clicking on selected text will begin a
+ // drag-drop operation
+ "drag_text": true,
+
+ //
+ // User Interface Settings
+ //
+
+ // The theme controls the look of Sublime Text's UI (buttons, tabs, scroll bars, etc)
+ "theme": "Default.sublime-theme",
+
+ // Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to
+ // scroll slower, or set to larger than 1 to scroll faster
+ "scroll_speed": 1.0,
+
+ // Controls side bar animation when expanding or collapsing folders
+ "tree_animation_enabled": true,
+
+ // Makes tabs with modified files more visible
+ "highlight_modified_tabs": false,
+
+ "show_tab_close_buttons": true,
+
+ // Show folders in the side bar in bold
+ "bold_folder_labels": false,
+
+ // OS X 10.7 only: Set to true to disable Lion style full screen support.
+ // Sublime Text must be restarted for this to take effect.
+ "use_simple_full_screen": false,
+
+ // Valid values are "system", "enabled" and "disabled"
+ "overlay_scroll_bars": "system",
+
+ //
+ // Application Behavior Settings
+ //
+
+ // Exiting the application with hot_exit enabled will cause it to close
+ // immediately without prompting. Unsaved modifications and open files will
+ // be preserved and restored when next starting.
+ //
+ // Closing a window with an associated project will also close the window
+ // without prompting, preserving unsaved changes in the workspace file
+ // alongside the project.
+ "hot_exit": true,
+
+ // remember_open_files makes the application start up with the last set of
+ // open files. Changing this to false will have no effect if hot_exit is
+ // true
+ "remember_open_files": true,
+
+ // OS X only: When files are opened from finder, or by dragging onto the
+ // dock icon, this controls if a new window is created or not.
+ "open_files_in_new_window": true,
+
+ // OS X only: This controls if an empty window is created at startup or not.
+ "create_window_at_startup": true,
+
+ // Set to true to close windows as soon as the last file is closed, unless
+ // there's a folder open within the window. This is always enabled on OS X,
+ // changing it here won't modify the behavior.
+ "close_windows_when_empty": false,
+
+ // Show the full path to files in the title bar.
+ // On OS X, this value is overridden in the platform specific settings, so
+ // you'll need to place this line in your user settings to override it.
+ "show_full_path": true,
+
+ // Shows the Build Results panel when building. If set to false, the Build
+ // Results can be shown via the Tools/Build Results menu.
+ "show_panel_on_build": true,
+
+ // Preview file contents when clicking on a file in the side bar. Double
+ // clicking or editing the preview will open the file and assign it a tab.
+ "preview_on_click": true,
+
+ // folder_exclude_patterns and file_exclude_patterns control which files
+ // are listed in folders on the side bar. These can also be set on a per-
+ // project basis.
+ "folder_exclude_patterns": [".svn", ".git", ".hg", "CVS"],
+ "file_exclude_patterns": ["*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db"],
+ // These files will still show up in the side bar, but won't be included in
+ // Goto Anything or Find in Files
+ "binary_file_patterns": ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.ttf", "*.tga", "*.dds", "*.ico", "*.eot", "*.pdf", "*.swf", "*.jar", "*.zip"],
+
+ // List any packages to ignore here. When removing entries from this list,
+ // a restart may be required if the package contains plugins.
+ "ignored_packages": ["Vintage"]
+}
diff --git a/Default/Regex Format Widget.sublime-settings b/Default/Regex Format Widget.sublime-settings
new file mode 100644
index 0000000..e69de29
diff --git a/Default/Regex Widget.sublime-settings b/Default/Regex Widget.sublime-settings
new file mode 100644
index 0000000..cf1b634
--- /dev/null
+++ b/Default/Regex Widget.sublime-settings
@@ -0,0 +1,3 @@
+{
+ "syntax": "Packages/Regular Expressions/RegExp.tmLanguage"
+}
diff --git a/Default/Side Bar Mount Point.sublime-menu b/Default/Side Bar Mount Point.sublime-menu
new file mode 100644
index 0000000..3411b67
--- /dev/null
+++ b/Default/Side Bar Mount Point.sublime-menu
@@ -0,0 +1,4 @@
+[
+ { "caption": "-", "id": "folder_commands" },
+ { "caption": "Remove Folder from Project", "command": "remove_folder", "args": { "dirs": []} }
+]
diff --git a/Default/Side Bar.sublime-menu b/Default/Side Bar.sublime-menu
new file mode 100644
index 0000000..3d308b9
--- /dev/null
+++ b/Default/Side Bar.sublime-menu
@@ -0,0 +1,11 @@
+[
+ { "caption": "New File", "command": "new_file_at", "args": {"dirs": []} },
+ { "caption": "Rename…", "command": "rename_path", "args": {"paths": []} },
+ { "caption": "Delete File", "command": "delete_file", "args": {"files": []} },
+ { "caption": "Open Containing Folder…", "command": "open_containing_folder", "args": {"files": []} },
+ { "caption": "-", "id": "folder_commands" },
+ { "caption": "New Folder…", "command": "new_folder", "args": {"dirs": []} },
+ { "caption": "Delete Folder", "command": "delete_folder", "args": {"dirs": []} },
+ { "caption": "Find in Folder…", "command": "find_in_folder", "args": {"dirs": []} },
+ { "caption": "-", "id": "end" }
+]
diff --git a/Default/Startup.cache b/Default/Startup.cache
new file mode 100644
index 0000000..94b7c96
Binary files /dev/null and b/Default/Startup.cache differ
diff --git a/Default/Symbol List.tmPreferences b/Default/Symbol List.tmPreferences
new file mode 100644
index 0000000..0eeaf41
--- /dev/null
+++ b/Default/Symbol List.tmPreferences
@@ -0,0 +1,17 @@
+
+
+
+
+ name
+ Symbol List
+ scope
+ entity.name.function, entity.name.type, meta.toc-list
+ settings
+
+ showInSymbolList
+ 1
+
+ uuid
+ 0A0DA1FC-59DE-4FD9-9A2C-63C6811A3C39
+
+
diff --git a/Default/Symbol List.tmPreferences.cache b/Default/Symbol List.tmPreferences.cache
new file mode 100644
index 0000000..186d223
Binary files /dev/null and b/Default/Symbol List.tmPreferences.cache differ
diff --git a/Default/Syntax Summary.cache b/Default/Syntax Summary.cache
new file mode 100644
index 0000000..f0ee828
Binary files /dev/null and b/Default/Syntax Summary.cache differ
diff --git a/Default/Syntax.sublime-menu b/Default/Syntax.sublime-menu
new file mode 100644
index 0000000..b555b7b
--- /dev/null
+++ b/Default/Syntax.sublime-menu
@@ -0,0 +1,6 @@
+[
+ {
+ "caption": "Syntax",
+ "children": [ { "command": "$file_types" } ]
+ }
+]
diff --git a/Default/Tab Context.sublime-menu b/Default/Tab Context.sublime-menu
new file mode 100644
index 0000000..b5781f0
--- /dev/null
+++ b/Default/Tab Context.sublime-menu
@@ -0,0 +1,8 @@
+[
+ { "command": "close_by_index", "args": { "group": -1, "index": -1 }, "caption": "Close" },
+ { "command": "close_others_by_index", "args": { "group": -1, "index": -1 }, "caption": "Close others" },
+ { "command": "close_to_right_by_index", "args": { "group": -1, "index": -1 }, "caption": "Close tabs to the right" },
+ { "caption": "-" },
+ { "command": "new_file" },
+ { "command": "prompt_open_file", "caption": "Open file" }
+]
diff --git a/Default/Widget Context.sublime-menu b/Default/Widget Context.sublime-menu
new file mode 100644
index 0000000..971328a
--- /dev/null
+++ b/Default/Widget Context.sublime-menu
@@ -0,0 +1,7 @@
+[
+ { "command": "copy" },
+ { "command": "cut" },
+ { "command": "paste" },
+ { "caption": "-" },
+ { "command": "select_all" }
+]
diff --git a/Default/Widget.sublime-settings b/Default/Widget.sublime-settings
new file mode 100644
index 0000000..fe8c1fa
--- /dev/null
+++ b/Default/Widget.sublime-settings
@@ -0,0 +1,15 @@
+{
+ "rulers": [],
+ "translate_tabs_to_spaces": false,
+ "gutter": false,
+ "margin": 1,
+ "syntax": "Packages/Text/Plain text.tmLanguage",
+ "is_widget": true,
+ "word_wrap": false,
+ "auto_match_enabled": false,
+ "scroll_past_end": false,
+ "draw_indent_guides": false,
+ "draw_centered": false,
+ "auto_complete": false,
+ "match_selection": false
+}
diff --git a/Default/comment.py b/Default/comment.py
new file mode 100644
index 0000000..b967afc
--- /dev/null
+++ b/Default/comment.py
@@ -0,0 +1,233 @@
+import sublime, sublime_plugin
+
+def advance_to_first_non_white_space_on_line(view, pt):
+ while True:
+ c = view.substr(sublime.Region(pt, pt + 1))
+ if c == " " or c == "\t":
+ pt += 1
+ else:
+ break
+
+ return pt
+
+def has_non_white_space_on_line(view, pt):
+ while True:
+ c = view.substr(sublime.Region(pt, pt + 1))
+ if c == " " or c == "\t":
+ pt += 1
+ else:
+ return c != "\n"
+
+def build_comment_data(view, pt):
+ shell_vars = view.meta_info("shellVariables", pt)
+ if not shell_vars:
+ return ([], [])
+
+ # transform the list of dicts into a single dict
+ all_vars = {}
+ for v in shell_vars:
+ if 'name' in v and 'value' in v:
+ all_vars[v['name']] = v['value']
+
+ line_comments = []
+ block_comments = []
+
+ # transform the dict into a single array of valid comments
+ suffixes = [""] + ["_" + str(i) for i in xrange(1, 10)]
+ for suffix in suffixes:
+ start = all_vars.setdefault("TM_COMMENT_START" + suffix)
+ end = all_vars.setdefault("TM_COMMENT_END" + suffix)
+ mode = all_vars.setdefault("TM_COMMENT_MODE" + suffix)
+ disable_indent = all_vars.setdefault("TM_COMMENT_DISABLE_INDENT" + suffix)
+
+ if start and end:
+ block_comments.append((start, end, disable_indent == 'yes'))
+ block_comments.append((start.strip(), end.strip(), disable_indent == 'yes'))
+ elif start:
+ line_comments.append((start, disable_indent == 'yes'))
+ line_comments.append((start.strip(), disable_indent == 'yes'))
+
+ return (line_comments, block_comments)
+
+class ToggleCommentCommand(sublime_plugin.TextCommand):
+
+ def remove_block_comment(self, view, edit, comment_data, region):
+ (line_comments, block_comments) = comment_data
+
+ # Call extract_scope from the midpoint of the region, as calling it
+ # from the start can give false results if the block comment begin/end
+ # markers are assigned their own scope, as is done in HTML.
+ whole_region = view.extract_scope(region.begin() + region.size() / 2)
+
+ for c in block_comments:
+ (start, end, disable_indent) = c
+ start_region = sublime.Region(whole_region.begin(),
+ whole_region.begin() + len(start))
+ end_region = sublime.Region(whole_region.end() - len(end),
+ whole_region.end())
+
+ if view.substr(start_region) == start and view.substr(end_region) == end:
+ # It's faster to erase the start region first
+ view.erase(edit, start_region)
+
+ end_region = sublime.Region(
+ end_region.begin() - start_region.size(),
+ end_region.end() - start_region.size())
+
+ view.erase(edit, end_region)
+ return True
+
+ return False
+
+ def remove_line_comment(self, view, edit, comment_data, region):
+ (line_comments, block_comments) = comment_data
+
+ found_line_comment = False
+
+ start_positions = [advance_to_first_non_white_space_on_line(view, r.begin())
+ for r in view.lines(region)]
+
+ start_positions.reverse()
+
+ for pos in start_positions:
+ for c in line_comments:
+ (start, disable_indent) = c
+ comment_region = sublime.Region(pos,
+ pos + len(start))
+ if view.substr(comment_region) == start:
+ view.erase(edit, comment_region)
+ found_line_comment = True
+ break
+
+ return found_line_comment
+
+ def is_entirely_line_commented(self, view, comment_data, region):
+ (line_comments, block_comments) = comment_data
+
+ start_positions = [advance_to_first_non_white_space_on_line(view, r.begin())
+ for r in view.lines(region)]
+
+ start_positions = filter(lambda p: has_non_white_space_on_line(view, p),
+ start_positions)
+
+ if len(start_positions) == 0:
+ return False
+
+ for pos in start_positions:
+ found_line_comment = False
+ for c in line_comments:
+ (start, disable_indent) = c
+ comment_region = sublime.Region(pos,
+ pos + len(start))
+ if view.substr(comment_region) == start:
+ found_line_comment = True
+ if not found_line_comment:
+ return False
+
+ return True
+
+ def block_comment_region(self, view, edit, block_comment_data, region):
+ (start, end, disable_indent) = block_comment_data
+
+ if region.empty():
+ # Silly buggers to ensure the cursor doesn't end up after the end
+ # comment token
+ view.replace(edit, sublime.Region(region.end()), 'x')
+ view.insert(edit, region.end() + 1, end)
+ view.replace(edit, sublime.Region(region.end(), region.end() + 1), '')
+ view.insert(edit, region.begin(), start)
+ else:
+ view.insert(edit, region.end(), end)
+ view.insert(edit, region.begin(), start)
+
+ def line_comment_region(self, view, edit, line_comment_data, region):
+ (start, disable_indent) = line_comment_data
+
+ start_positions = [r.begin() for r in view.lines(region)]
+ start_positions.reverse()
+
+ # Remove any blank lines from consideration, they make getting the
+ # comment start markers to line up challenging
+ non_empty_start_positions = filter(lambda p: has_non_white_space_on_line(view, p),
+ start_positions)
+
+ # If all the lines are blank however, just comment away
+ if len(non_empty_start_positions) != 0:
+ start_positions = non_empty_start_positions
+
+ if not disable_indent:
+ min_indent = None
+
+ # This won't work well with mixed spaces and tabs, but really,
+ # don't do that!
+ for pos in start_positions:
+ indent = advance_to_first_non_white_space_on_line(view, pos) - pos
+ if min_indent == None or indent < min_indent:
+ min_indent = indent
+
+ if min_indent != None and min_indent > 0:
+ start_positions = [r + min_indent for r in start_positions]
+
+ for pos in start_positions:
+ view.insert(edit, pos, start)
+
+ def add_comment(self, view, edit, comment_data, prefer_block, region):
+ (line_comments, block_comments) = comment_data
+
+ if len(line_comments) == 0 and len(block_comments) == 0:
+ return
+
+ if len(block_comments) == 0:
+ prefer_block = False
+
+ if len(line_comments) == 0:
+ prefer_block = True
+
+ if region.empty():
+ if prefer_block:
+ # add the block comment
+ self.block_comment_region(view, edit, block_comments[0], region)
+ else:
+ # comment out the line
+ self.line_comment_region(view, edit, line_comments[0], region)
+ else:
+ if prefer_block:
+ # add the block comment
+ self.block_comment_region(view, edit, block_comments[0], region)
+ else:
+ # add a line comment to each line
+ self.line_comment_region(view, edit, line_comments[0], region)
+
+ def run(self, edit, block=False):
+ for region in self.view.sel():
+ comment_data = build_comment_data(self.view, region.begin())
+ if (region.end() != self.view.size() and
+ build_comment_data(self.view, region.end()) != comment_data):
+ # region spans languages, nothing we can do
+ continue
+
+ if self.remove_block_comment(self.view, edit, comment_data, region):
+ continue
+
+ if self.is_entirely_line_commented(self.view, comment_data, region):
+ self.remove_line_comment(self.view, edit, comment_data, region)
+ continue
+
+ has_line_comment = len(comment_data[0]) > 0
+
+ if not has_line_comment and not block and region.empty():
+ # Use block comments to comment out the line
+ line = self.view.line(region.a)
+ line = sublime.Region(
+ advance_to_first_non_white_space_on_line(self.view, line.a),
+ line.b)
+
+ # Try and remove any existing block comment now
+ if self.remove_block_comment(self.view, edit, comment_data, line):
+ continue
+
+ self.add_comment(self.view, edit, comment_data, block, line)
+ continue
+
+ # Add a comment instead
+ self.add_comment(self.view, edit, comment_data, block, region)
diff --git a/Default/comment.pyc b/Default/comment.pyc
new file mode 100644
index 0000000..54b1abc
Binary files /dev/null and b/Default/comment.pyc differ
diff --git a/Default/copy_path.py b/Default/copy_path.py
new file mode 100644
index 0000000..fd324c7
--- /dev/null
+++ b/Default/copy_path.py
@@ -0,0 +1,10 @@
+import sublime, sublime_plugin
+
+class CopyPathCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ if len(self.view.file_name()) > 0:
+ sublime.set_clipboard(self.view.file_name())
+ sublime.status_message("Copied file path")
+
+ def is_enabled(self):
+ return self.view.file_name() and len(self.view.file_name()) > 0
diff --git a/Default/copy_path.pyc b/Default/copy_path.pyc
new file mode 100644
index 0000000..732831a
Binary files /dev/null and b/Default/copy_path.pyc differ
diff --git a/Default/delete_word.py b/Default/delete_word.py
new file mode 100644
index 0000000..f881038
--- /dev/null
+++ b/Default/delete_word.py
@@ -0,0 +1,73 @@
+import sublime, sublime_plugin
+
+def clamp(xmin, x, xmax):
+ if x < xmin:
+ return xmin
+ if x > xmax:
+ return xmax
+ return x;
+
+class DeleteWordCommand(sublime_plugin.TextCommand):
+
+ def find_by_class(self, pt, classes, forward):
+ if forward:
+ delta = 1
+ end_position = self.view.size()
+ if pt > end_position:
+ pt = end_position
+ else:
+ delta = -1
+ end_position = 0
+ if pt < end_position:
+ pt = end_position
+
+ while pt != end_position:
+ if self.view.classify(pt) & classes != 0:
+ return pt
+ pt += delta
+
+ return pt
+
+ def expand_word(self, view, pos, classes, forward):
+ if forward:
+ delta = 1
+ else:
+ delta = -1
+ ws = ["\t", " "]
+
+ if forward:
+ if view.substr(pos) in ws and view.substr(pos + 1) in ws:
+ classes = sublime.CLASS_WORD_START | sublime.CLASS_PUNCTUATION_START | sublime.CLASS_LINE_END
+ else:
+ if view.substr(pos - 1) in ws and view.substr(pos - 2) in ws:
+ classes = sublime.CLASS_WORD_END | sublime.CLASS_PUNCTUATION_END | sublime.CLASS_LINE_START
+
+ return sublime.Region(pos, self.find_by_class(pos + delta, classes, forward))
+
+ def run(self, edit, forward = True, sub_words = False):
+
+ if forward:
+ classes = sublime.CLASS_WORD_END | sublime.CLASS_PUNCTUATION_END | sublime.CLASS_LINE_START
+ if sub_words:
+ classes |= sublime.CLASS_SUB_WORD_END
+ else:
+ classes = sublime.CLASS_WORD_START | sublime.CLASS_PUNCTUATION_START | sublime.CLASS_LINE_END
+ if sub_words:
+ classes |= sublime.CLASS_SUB_WORD_START
+
+ new_sels = []
+ for s in reversed(self.view.sel()):
+ if s.empty():
+ new_sels.append(self.expand_word(self.view, s.b, classes, forward))
+
+ sz = self.view.size()
+ for s in new_sels:
+ self.view.sel().add(sublime.Region(clamp(0, s.a, sz),
+ clamp(0, s.b, sz)))
+
+ self.view.run_command("add_to_kill_ring", {"forward": forward})
+
+ if forward:
+ self.view.run_command('right_delete')
+ else:
+ self.view.run_command('left_delete')
diff --git a/Default/delete_word.pyc b/Default/delete_word.pyc
new file mode 100644
index 0000000..9757240
Binary files /dev/null and b/Default/delete_word.pyc differ
diff --git a/Default/detect_indentation.py b/Default/detect_indentation.py
new file mode 100644
index 0000000..9f6ae1d
--- /dev/null
+++ b/Default/detect_indentation.py
@@ -0,0 +1,62 @@
+import sublime, sublime_plugin
+from functools import partial
+
+class DetectIndentationCommand(sublime_plugin.TextCommand):
+ """Examines the contents of the buffer to determine the indentation
+ settings."""
+
+ def run(self, edit, show_message = True, threshold = 10):
+ sample = self.view.substr(sublime.Region(0, min(self.view.size(), 2**14)))
+
+ starts_with_tab = 0
+ spaces_list = []
+ indented_lines = 0
+
+ for line in sample.split("\n"):
+ if not line: continue
+ if line[0] == "\t":
+ starts_with_tab += 1
+ indented_lines += 1
+ elif line.startswith(' '):
+ spaces = 0
+ for ch in line:
+ if ch == ' ': spaces += 1
+ else: break
+ if spaces > 1 and spaces != len(line):
+ indented_lines += 1
+ spaces_list.append(spaces)
+
+ evidence = [1.0, 1.0, 0.8, 0.9, 0.8, 0.9, 0.9, 0.95, 1.0]
+
+ if indented_lines >= threshold:
+ if len(spaces_list) > starts_with_tab:
+ for indent in xrange(8, 1, -1):
+ same_indent = filter(lambda x: x % indent == 0, spaces_list)
+ if len(same_indent) >= evidence[indent] * len(spaces_list):
+ if show_message:
+ sublime.status_message("Detect Indentation: Setting indentation to "
+ + str(indent) + " spaces")
+ self.view.settings().set('translate_tabs_to_spaces', True)
+ self.view.settings().set('tab_size', indent)
+ return
+
+ for indent in xrange(8, 1, -2):
+ same_indent = filter(lambda x: x % indent == 0 or x % indent == 1, spaces_list)
+ if len(same_indent) >= evidence[indent] * len(spaces_list):
+ if show_message:
+ sublime.status_message("Detect Indentation: Setting indentation to "
+ + str(indent) + " spaces")
+ self.view.settings().set('translate_tabs_to_spaces', True)
+ self.view.settings().set('tab_size', indent)
+ return
+
+ elif starts_with_tab >= 0.8 * indented_lines:
+ if show_message:
+ sublime.status_message("Detect Indentation: Setting indentation to tabs")
+ self.view.settings().set('translate_tabs_to_spaces', False)
+
+class DetectIndentationEventListener(sublime_plugin.EventListener):
+ def on_load(self, view):
+ if view.settings().get('detect_indentation'):
+ is_at_front = view.window() != None
+ view.run_command('detect_indentation', {'show_message': is_at_front})
diff --git a/Default/detect_indentation.pyc b/Default/detect_indentation.pyc
new file mode 100644
index 0000000..5c0fab5
Binary files /dev/null and b/Default/detect_indentation.pyc differ
diff --git a/Default/duplicate_line.py b/Default/duplicate_line.py
new file mode 100644
index 0000000..3a8d37f
--- /dev/null
+++ b/Default/duplicate_line.py
@@ -0,0 +1,11 @@
+import sublime, sublime_plugin
+
+class DuplicateLineCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ for region in self.view.sel():
+ if region.empty():
+ line = self.view.line(region)
+ line_contents = self.view.substr(line) + '\n'
+ self.view.insert(edit, line.begin(), line_contents)
+ else:
+ self.view.insert(edit, region.begin(), self.view.substr(region))
diff --git a/Default/duplicate_line.pyc b/Default/duplicate_line.pyc
new file mode 100644
index 0000000..4da9c8b
Binary files /dev/null and b/Default/duplicate_line.pyc differ
diff --git a/Default/echo.py b/Default/echo.py
new file mode 100644
index 0000000..dc7d730
--- /dev/null
+++ b/Default/echo.py
@@ -0,0 +1,5 @@
+import sublime, sublime_plugin
+
+class EchoCommand(sublime_plugin.ApplicationCommand):
+ def run(self, **kwargs):
+ print kwargs
diff --git a/Default/echo.pyc b/Default/echo.pyc
new file mode 100644
index 0000000..c4a9afc
Binary files /dev/null and b/Default/echo.pyc differ
diff --git a/Default/exec.py b/Default/exec.py
new file mode 100644
index 0000000..f51f775
--- /dev/null
+++ b/Default/exec.py
@@ -0,0 +1,229 @@
+import sublime, sublime_plugin
+import os, sys
+import thread
+import subprocess
+import functools
+import time
+
+class ProcessListener(object):
+ def on_data(self, proc, data):
+ pass
+
+ def on_finished(self, proc):
+ pass
+
+# Encapsulates subprocess.Popen, forwarding stdout to a supplied
+# ProcessListener (on a separate thread)
+class AsyncProcess(object):
+ def __init__(self, arg_list, env, listener,
+ # "path" is an option in build systems
+ path="",
+ # "shell" is an options in build systems
+ shell=False):
+
+ self.listener = listener
+ self.killed = False
+
+ self.start_time = time.time()
+
+ # Hide the console window on Windows
+ startupinfo = None
+ if os.name == "nt":
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+
+ # Set temporary PATH to locate executable in arg_list
+ if path:
+ old_path = os.environ["PATH"]
+ # The user decides in the build system whether he wants to append $PATH
+ # or tuck it at the front: "$PATH;C:\\new\\path", "C:\\new\\path;$PATH"
+ os.environ["PATH"] = os.path.expandvars(path).encode(sys.getfilesystemencoding())
+
+ proc_env = os.environ.copy()
+ proc_env.update(env)
+ for k, v in proc_env.iteritems():
+ proc_env[k] = os.path.expandvars(v).encode(sys.getfilesystemencoding())
+
+ self.proc = subprocess.Popen(arg_list, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, startupinfo=startupinfo, env=proc_env, shell=shell)
+
+ if path:
+ os.environ["PATH"] = old_path
+
+ if self.proc.stdout:
+ thread.start_new_thread(self.read_stdout, ())
+
+ if self.proc.stderr:
+ thread.start_new_thread(self.read_stderr, ())
+
+ def kill(self):
+ if not self.killed:
+ self.killed = True
+ self.proc.terminate()
+ self.listener = None
+
+ def poll(self):
+ return self.proc.poll() == None
+
+ def exit_code(self):
+ return self.proc.poll()
+
+ def read_stdout(self):
+ while True:
+ data = os.read(self.proc.stdout.fileno(), 2**15)
+
+ if data != "":
+ if self.listener:
+ self.listener.on_data(self, data)
+ else:
+ self.proc.stdout.close()
+ if self.listener:
+ self.listener.on_finished(self)
+ break
+
+ def read_stderr(self):
+ while True:
+ data = os.read(self.proc.stderr.fileno(), 2**15)
+
+ if data != "":
+ if self.listener:
+ self.listener.on_data(self, data)
+ else:
+ self.proc.stderr.close()
+ break
+
+class ExecCommand(sublime_plugin.WindowCommand, ProcessListener):
+ def run(self, cmd = [], file_regex = "", line_regex = "", working_dir = "",
+ encoding = "utf-8", env = {}, quiet = False, kill = False,
+ # Catches "path" and "shell"
+ **kwargs):
+
+ if kill:
+ if self.proc:
+ self.proc.kill()
+ self.proc = None
+ self.append_data(None, "[Cancelled]")
+ return
+
+ if not hasattr(self, 'output_view'):
+ # Try not to call get_output_panel until the regexes are assigned
+ self.output_view = self.window.get_output_panel("exec")
+
+ # Default the to the current files directory if no working directory was given
+ if (working_dir == "" and self.window.active_view()
+ and self.window.active_view().file_name()):
+ working_dir = os.path.dirname(self.window.active_view().file_name())
+
+ self.output_view.settings().set("result_file_regex", file_regex)
+ self.output_view.settings().set("result_line_regex", line_regex)
+ self.output_view.settings().set("result_base_dir", working_dir)
+
+ # Call get_output_panel a second time after assigning the above
+ # settings, so that it'll be picked up as a result buffer
+ self.window.get_output_panel("exec")
+
+ self.encoding = encoding
+ self.quiet = quiet
+
+ self.proc = None
+ if not self.quiet:
+ print "Running " + " ".join(cmd)
+ sublime.status_message("Building")
+
+ show_panel_on_build = sublime.load_settings("Preferences.sublime-settings").get("show_panel_on_build", True)
+ if show_panel_on_build:
+ self.window.run_command("show_panel", {"panel": "output.exec"})
+
+ merged_env = env.copy()
+ if self.window.active_view():
+ user_env = self.window.active_view().settings().get('build_env')
+ if user_env:
+ merged_env.update(user_env)
+
+ # Change to the working dir, rather than spawning the process with it,
+ # so that emitted working dir relative path names make sense
+ if working_dir != "":
+ os.chdir(working_dir)
+
+ err_type = OSError
+ if os.name == "nt":
+ err_type = WindowsError
+
+ try:
+ # Forward kwargs to AsyncProcess
+ self.proc = AsyncProcess(cmd, merged_env, self, **kwargs)
+ except err_type as e:
+ self.append_data(None, str(e) + "\n")
+ self.append_data(None, "[cmd: " + str(cmd) + "]\n")
+ self.append_data(None, "[dir: " + str(os.getcwdu()) + "]\n")
+ if "PATH" in merged_env:
+ self.append_data(None, "[path: " + str(merged_env["PATH"]) + "]\n")
+ else:
+ self.append_data(None, "[path: " + str(os.environ["PATH"]) + "]\n")
+ if not self.quiet:
+ self.append_data(None, "[Finished]")
+
+ def is_enabled(self, kill = False):
+ if kill:
+ return hasattr(self, 'proc') and self.proc and self.proc.poll()
+ else:
+ return True
+
+ def append_data(self, proc, data):
+ if proc != self.proc:
+ # a second call to exec has been made before the first one
+ # finished, ignore it instead of intermingling the output.
+ if proc:
+ proc.kill()
+ return
+
+ try:
+ str = data.decode(self.encoding)
+ except:
+ str = "[Decode error - output not " + self.encoding + "]\n"
+ proc = None
+
+ # Normalize newlines, Sublime Text always uses a single \n separator
+ # in memory.
+ str = str.replace('\r\n', '\n').replace('\r', '\n')
+
+ selection_was_at_end = (len(self.output_view.sel()) == 1
+ and self.output_view.sel()[0]
+ == sublime.Region(self.output_view.size()))
+ self.output_view.set_read_only(False)
+ edit = self.output_view.begin_edit()
+ self.output_view.insert(edit, self.output_view.size(), str)
+ if selection_was_at_end:
+ self.output_view.show(self.output_view.size())
+ self.output_view.end_edit(edit)
+ self.output_view.set_read_only(True)
+
+ def finish(self, proc):
+ if not self.quiet:
+ elapsed = time.time() - proc.start_time
+ exit_code = proc.exit_code()
+ if exit_code == 0 or exit_code == None:
+ self.append_data(proc, ("[Finished in %.1fs]") % (elapsed))
+ else:
+ self.append_data(proc, ("[Finished in %.1fs with exit code %d]") % (elapsed, exit_code))
+
+ if proc != self.proc:
+ return
+
+ errs = self.output_view.find_all_results()
+ if len(errs) == 0:
+ sublime.status_message("Build finished")
+ else:
+ sublime.status_message(("Build finished with %d errors") % len(errs))
+
+ # Set the selection to the start, so that next_result will work as expected
+ edit = self.output_view.begin_edit()
+ self.output_view.sel().clear()
+ self.output_view.sel().add(sublime.Region(0))
+ self.output_view.end_edit(edit)
+
+ def on_data(self, proc, data):
+ sublime.set_timeout(functools.partial(self.append_data, proc, data), 0)
+
+ def on_finished(self, proc):
+ sublime.set_timeout(functools.partial(self.finish, proc), 0)
diff --git a/Default/exec.pyc b/Default/exec.pyc
new file mode 100644
index 0000000..f5c5e46
Binary files /dev/null and b/Default/exec.pyc differ
diff --git a/Default/fold.py b/Default/fold.py
new file mode 100644
index 0000000..6747e5d
--- /dev/null
+++ b/Default/fold.py
@@ -0,0 +1,125 @@
+import sublime, sublime_plugin
+
+def fold_region_from_indent(view, r):
+ if r.b == view.size():
+ return sublime.Region(r.a - 1, r.b)
+ else:
+ return sublime.Region(r.a - 1, r.b - 1)
+
+class FoldUnfoldCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ new_sel = []
+ for s in self.view.sel():
+ r = s
+ empty_region = r.empty()
+ if empty_region:
+ r = sublime.Region(r.a - 1, r.a + 1)
+
+ unfolded = self.view.unfold(r)
+ if len(unfolded) == 0:
+ self.view.fold(s)
+ elif empty_region:
+ for r in unfolded:
+ new_sel.append(r)
+
+ if len(new_sel) > 0:
+ self.view.sel().clear()
+ for r in new_sel:
+ self.view.sel().add(r)
+
+class FoldCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ new_sel = []
+ for s in self.view.sel():
+ if s.empty():
+ r = self.view.indented_region(s.a)
+ if not r.empty():
+ r = fold_region_from_indent(self.view, r)
+ self.view.fold(r)
+ new_sel.append(r)
+ else:
+ new_sel.append(s)
+ else:
+ if self.view.fold(s):
+ new_sel.append(s)
+ else:
+ r = self.view.indented_region(s.a)
+ if not r.empty():
+ r = fold_region_from_indent(self.view, r)
+ self.view.fold(r)
+ new_sel.append(r)
+ else:
+ new_sel.append(s)
+
+ self.view.sel().clear()
+ for r in new_sel:
+ self.view.sel().add(r)
+
+class FoldAllCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ folds = []
+ tp = 0
+ size = self.view.size()
+ while tp < size:
+ s = self.view.indented_region(tp)
+ if not s.empty():
+ r = fold_region_from_indent(self.view, s)
+ folds.append(r)
+ tp = s.b
+ else:
+ tp = self.view.full_line(tp).b
+
+ self.view.fold(folds)
+ self.view.show(self.view.sel())
+
+ sublime.status_message("Folded " + str(len(folds)) + " regions")
+
+class FoldByLevelCommand(sublime_plugin.TextCommand):
+ def run(self, edit, level):
+ level = int(level)
+ folds = []
+ tp = 0
+ size = self.view.size()
+ while tp < size:
+ if self.view.indentation_level(tp) == level:
+ s = self.view.indented_region(tp)
+ if not s.empty():
+ r = fold_region_from_indent(self.view, s)
+ folds.append(r)
+ tp = s.b
+ continue;
+
+ tp = self.view.full_line(tp).b
+
+ self.view.fold(folds)
+ self.view.show(self.view.sel())
+
+ sublime.status_message("Folded " + str(len(folds)) + " regions")
+
+class UnfoldCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ new_sel = []
+ for s in self.view.sel():
+ unfold = s
+ if s.empty():
+ unfold = sublime.Region(s.a - 1, s.a + 1)
+
+ unfolded = self.view.unfold(unfold)
+ if len(unfolded) == 0 and s.empty():
+ unfolded = self.view.unfold(self.view.full_line(s.b))
+
+ if len(unfolded) == 0:
+ new_sel.append(s)
+ else:
+ for r in unfolded:
+ new_sel.append(r)
+
+ if len(new_sel) > 0:
+ self.view.sel().clear()
+ for r in new_sel:
+ self.view.sel().add(r)
+
+class UnfoldAllCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.view.unfold(sublime.Region(0, self.view.size()))
+ self.view.show(self.view.sel())
diff --git a/Default/fold.pyc b/Default/fold.pyc
new file mode 100644
index 0000000..26fafc0
Binary files /dev/null and b/Default/fold.pyc differ
diff --git a/Default/font.py b/Default/font.py
new file mode 100644
index 0000000..b9b5173
--- /dev/null
+++ b/Default/font.py
@@ -0,0 +1,45 @@
+import sublime, sublime_plugin
+
+class IncreaseFontSizeCommand(sublime_plugin.ApplicationCommand):
+ def run(self):
+ s = sublime.load_settings("Preferences.sublime-settings")
+ current = s.get("font_size", 10)
+
+ if current >= 36:
+ current += 4
+ elif current >= 24:
+ current += 2
+ else:
+ current += 1
+
+ if current > 128:
+ current = 128
+ s.set("font_size", current)
+
+ sublime.save_settings("Preferences.sublime-settings")
+
+class DecreaseFontSizeCommand(sublime_plugin.ApplicationCommand):
+ def run(self):
+ s = sublime.load_settings("Preferences.sublime-settings")
+ current = s.get("font_size", 10)
+ # current -= 1
+
+ if current >= 40:
+ current -= 4
+ elif current >= 26:
+ current -= 2
+ else:
+ current -= 1
+
+ if current < 8:
+ current = 8
+ s.set("font_size", current)
+
+ sublime.save_settings("Preferences.sublime-settings")
+
+class ResetFontSizeCommand(sublime_plugin.ApplicationCommand):
+ def run(self):
+ s = sublime.load_settings("Preferences.sublime-settings")
+ s.erase("font_size")
+
+ sublime.save_settings("Preferences.sublime-settings")
diff --git a/Default/font.pyc b/Default/font.pyc
new file mode 100644
index 0000000..30448c4
Binary files /dev/null and b/Default/font.pyc differ
diff --git a/Default/goto_line.py b/Default/goto_line.py
new file mode 100644
index 0000000..2ec2ea2
--- /dev/null
+++ b/Default/goto_line.py
@@ -0,0 +1,33 @@
+import sublime, sublime_plugin
+
+class PromptGotoLineCommand(sublime_plugin.WindowCommand):
+
+ def run(self):
+ self.window.show_input_panel("Goto Line:", "", self.on_done, None, None)
+ pass
+
+ def on_done(self, text):
+ try:
+ line = int(text)
+ if self.window.active_view():
+ self.window.active_view().run_command("goto_line", {"line": line} )
+ except ValueError:
+ pass
+
+class GotoLineCommand(sublime_plugin.TextCommand):
+
+ def run(self, edit, line):
+ # Convert from 1 based to a 0 based line number
+ line = int(line) - 1
+
+ # Negative line numbers count from the end of the buffer
+ if line < 0:
+ lines, _ = self.view.rowcol(self.view.size())
+ line = lines + line + 1
+
+ pt = self.view.text_point(line, 0)
+
+ self.view.sel().clear()
+ self.view.sel().add(sublime.Region(pt))
+
+ self.view.show(pt)
diff --git a/Default/goto_line.pyc b/Default/goto_line.pyc
new file mode 100644
index 0000000..54cfac2
Binary files /dev/null and b/Default/goto_line.pyc differ
diff --git a/Default/indentation.py b/Default/indentation.py
new file mode 100644
index 0000000..dac7aba
--- /dev/null
+++ b/Default/indentation.py
@@ -0,0 +1,168 @@
+import re
+import os
+import textwrap
+import sublime
+import sublime_plugin
+
+def get_tab_size(view):
+ return int(view.settings().get('tab_size', 8))
+
+def normed_indentation_pt(view, sel, non_space=False):
+ """
+ Calculates tab normed `visual` position of sel.begin() relative "
+ to start of line
+
+ \n\t\t\t => normed_indentation_pt => 12
+ \n \t\t\t => normed_indentation_pt => 12
+
+ Different amount of characters, same visual indentation.
+ """
+
+ tab_size = get_tab_size(view)
+ pos = 0
+ ln = view.line(sel)
+
+ for pt in xrange(ln.begin(), ln.end() if non_space else sel.begin()):
+ ch = view.substr(pt)
+
+ if ch == '\t':
+ pos += tab_size - (pos % tab_size)
+
+ elif ch.isspace():
+ pos += 1
+
+ elif non_space:
+ break
+ else:
+ pos+=1
+
+ return pos
+
+def compress_column(column):
+ # "SS\T"
+ if all(c.isspace() for c in column):
+ column = '\t'
+
+ # "CCSS"
+ elif column[-1] == ' ':
+ while column and column[-1] == ' ':
+ column.pop()
+ column.append('\t')
+
+ # "CC\T"
+ return column
+
+def line_and_normed_pt(view, pt):
+ return ( view.rowcol(pt)[0],
+ normed_indentation_pt(view, sublime.Region(pt)) )
+
+def pt_from_line_and_normed_pt(view, (ln, pt)):
+ i = start_pt = view.text_point(ln, 0)
+ tab_size = get_tab_size(view)
+
+ pos = 0
+
+ for i in xrange(start_pt, start_pt + pt):
+ ch = view.substr(i)
+
+ if ch == '\t':
+ pos += tab_size - (pos % tab_size)
+ else:
+ pos += 1
+
+ i += 1
+ if pos == pt: break
+
+ return i
+
+def save_selections(view, selections=None):
+ return [ [line_and_normed_pt(view, p) for p in (sel.a, sel.b)]
+ for sel in selections or view.sel() ]
+
+def region_from_stored_selection(view, stored):
+ return sublime.Region(*[pt_from_line_and_normed_pt(view, p) for p in stored])
+
+def restore_selections(view, lines_and_pts):
+ view.sel().clear()
+
+ for stored in lines_and_pts:
+ view.sel().add(region_from_stored_selection(view, stored))
+
+def unexpand(the_string, tab_size, first_line_offset = 0, only_leading=True):
+ lines = the_string.split('\n')
+ compressed = []
+
+ for li, line in enumerate(lines):
+ pos = 0
+
+ if not li: pos += first_line_offset
+
+ rebuilt_line = []
+ column = []
+
+ for i, char in enumerate(line):
+ if only_leading and not char.isspace():
+ column.extend(list(line[i:]))
+ break
+
+ column.append(char)
+ pos += 1
+
+ if char == '\t':
+ pos += tab_size - (pos % tab_size)
+
+ if pos % tab_size == 0:
+ rebuilt_line.extend(compress_column(column))
+ column = []
+
+ rebuilt_line.extend(column)
+ compressed.append(''.join(rebuilt_line))
+
+ return '\n'.join(compressed)
+
+class TabCommand(sublime_plugin.TextCommand):
+ translate = False
+
+ def run(self, edit, set_translate_tabs=False, whole_buffer=True, **kw):
+ view = self.view
+
+ if set_translate_tabs or not self.translate:
+ view.settings().set('translate_tabs_to_spaces', self.translate)
+
+ if whole_buffer or not view.has_non_empty_selection_region():
+ self.operation_regions = [sublime.Region(0, view.size())]
+ else:
+ self.operation_regions = view.sel()
+
+ sels = save_selections(view)
+ visible, = save_selections(view, [view.visible_region()])
+ self.do(edit, **kw)
+ restore_selections(view, sels)
+ visible = region_from_stored_selection(view, visible)
+ view.show(visible, False)
+ view.run_command("scroll_lines", {"amount": 1.0 })
+
+class ExpandTabs(TabCommand):
+ translate = True
+
+ def do(self, edit, **kw):
+ view = self.view
+ tab_size = get_tab_size(view)
+
+ for sel in self.operation_regions:
+ sel = view.line(sel) # TODO: expand tabs with non regular offsets
+ view.replace(edit, sel, view.substr(sel).expandtabs(tab_size))
+
+class UnexpandTabs(TabCommand):
+ def do(self, edit, only_leading = True, **kw):
+ view = self.view
+ tab_size = get_tab_size(view)
+
+ for sel in self.operation_regions:
+ the_string = view.substr(sel)
+ first_line_off_set = normed_indentation_pt( view, sel ) % tab_size
+
+ compressed = unexpand( the_string, tab_size, first_line_off_set,
+ only_leading = only_leading )
+
+ view.replace(edit, sel, compressed)
diff --git a/Default/indentation.pyc b/Default/indentation.pyc
new file mode 100644
index 0000000..2d4de0a
Binary files /dev/null and b/Default/indentation.pyc differ
diff --git a/Default/kill_ring.py b/Default/kill_ring.py
new file mode 100644
index 0000000..d47639f
--- /dev/null
+++ b/Default/kill_ring.py
@@ -0,0 +1,107 @@
+import sublime_plugin, sublime
+
+class KillRing:
+ def __init__(self):
+ self.limit = 16
+ self.buffer = [None for i in xrange(self.limit)]
+ self.head = 0
+ self.len = 0
+ self.kill_points = []
+ self.kill_id = 0
+
+ def top(self):
+ return self.buffer[self.head]
+
+ def seal(self):
+ self.kill_points = []
+ self.kill_id = 0
+
+ def push(self, text):
+ self.head = (self.head + 1) % self.limit
+ self.buffer[self.head] = text
+ if self.len < self.limit:
+ self.len += 1
+
+ def add(self, view_id, text, regions, forward):
+ if view_id != self.kill_id:
+ # view has changed, ensure the last kill ring entry will not be
+ # appended to
+ self.seal()
+
+ begin_points = []
+ end_points = []
+ for r in regions:
+ begin_points.append(r.begin())
+ end_points.append(r.end())
+
+ if forward:
+ compare_points = begin_points
+ else:
+ compare_points = end_points
+
+ if compare_points == self.kill_points:
+ # Selection hasn't moved since the last kill, append/prepend the
+ # text to the current entry
+ if forward:
+ self.buffer[self.head] = self.buffer[self.head] + text
+ else:
+ self.buffer[self.head] = text + self.buffer[self.head]
+ else:
+ # Create a new entry in the kill ring for this text
+ self.push(text)
+
+ self.kill_points = begin_points
+ self.kill_id = view_id
+
+ def get(self, index):
+ return self.buffer[(self.head + index) % self.limit]
+
+ def __len__(self):
+ return self.len
+
+kill_ring = KillRing()
+
+class YankCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ kill_ring.seal()
+ text = kill_ring.top()
+
+ lines = text.splitlines()
+
+ regions = [r for r in self.view.sel()]
+ regions.reverse()
+
+ if len(regions) > 1 and len(regions) == len(lines):
+ # insert one line from the top of the kill ring at each
+ # corresponding selection
+ for i in xrange(len(regions)):
+ s = regions[i]
+ line = lines[i]
+ num = self.view.insert(edit, s.begin(), line)
+ self.view.erase(edit, sublime.Region(s.begin() + num,
+ s.end() + num))
+ else:
+ # insert the top of the kill ring at each selection
+ for s in regions:
+ num = self.view.insert(edit, s.begin(), text)
+ self.view.erase(edit, sublime.Region(s.begin() + num,
+ s.end() + num))
+
+ def is_enabled(self):
+ return len(kill_ring) > 0
+
+class AddToKillRingCommand(sublime_plugin.TextCommand):
+ def run(self, edit, forward):
+ delta = 1
+ if not forward:
+ delta = -1
+
+ text = []
+ regions = []
+ for s in self.view.sel():
+ if s.empty():
+ s = sublime.Region(s.a, s.a + delta)
+ text.append(self.view.substr(s))
+ regions.append(s)
+
+ kill_ring.add(self.view.id(), "\n".join(text), regions, forward)
diff --git a/Default/kill_ring.pyc b/Default/kill_ring.pyc
new file mode 100644
index 0000000..8567f2c
Binary files /dev/null and b/Default/kill_ring.pyc differ
diff --git a/Default/mark.py b/Default/mark.py
new file mode 100644
index 0000000..284b52c
--- /dev/null
+++ b/Default/mark.py
@@ -0,0 +1,43 @@
+import sublime, sublime_plugin
+
+class SetMarkCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ mark = [s for s in self.view.sel()]
+ self.view.add_regions("mark", mark, "mark", "dot",
+ sublime.HIDDEN | sublime.PERSISTENT)
+
+class SwapWithMarkCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ old_mark = self.view.get_regions("mark")
+
+ mark = [s for s in self.view.sel()]
+ self.view.add_regions("mark", mark, "mark", "dot",
+ sublime.HIDDEN | sublime.PERSISTENT)
+
+ if len(old_mark):
+ self.view.sel().clear()
+ for r in old_mark:
+ self.view.sel().add(r)
+
+class SelectToMarkCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ mark = self.view.get_regions("mark")
+
+ num = min(len(mark), len(self.view.sel()))
+
+ regions = []
+ for i in xrange(num):
+ regions.append(self.view.sel()[i].cover(mark[i]))
+
+ for i in xrange(num, len(self.view.sel())):
+ regions.append(self.view.sel()[i])
+
+ self.view.sel().clear()
+ for r in regions:
+ self.view.sel().add(r)
+
+class DeleteToMark(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.view.run_command("select_to_mark")
+ self.view.run_command("add_to_kill_ring", {"forward": False})
+ self.view.run_command("left_delete")
diff --git a/Default/mark.pyc b/Default/mark.pyc
new file mode 100644
index 0000000..4408bf4
Binary files /dev/null and b/Default/mark.pyc differ
diff --git a/Default/new_templates.py b/Default/new_templates.py
new file mode 100644
index 0000000..f288b7b
--- /dev/null
+++ b/Default/new_templates.py
@@ -0,0 +1,53 @@
+import sublime, sublime_plugin
+import os
+
+class NewBuildSystemCommand(sublime_plugin.WindowCommand):
+ def run(self):
+ v = self.window.new_file()
+ v.settings().set('default_dir',
+ os.path.join(sublime.packages_path(), 'User'))
+ v.set_syntax_file('Packages/JavaScript/JSON.tmLanguage')
+ v.set_name('untitled.sublime-build')
+
+ template = """{
+ "cmd": ["${0:make}"]
+}
+"""
+ v.run_command("insert_snippet", {"contents": template})
+
+
+class NewPluginCommand(sublime_plugin.WindowCommand):
+ def run(self):
+ v = self.window.new_file()
+ v.settings().set('default_dir',
+ os.path.join(sublime.packages_path(), 'User'))
+ v.set_syntax_file('Packages/Python/Python.tmLanguage')
+
+ template = """import sublime, sublime_plugin
+
+class ExampleCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ $0self.view.insert(edit, 0, "Hello, World!")
+"""
+ v.run_command("insert_snippet", {"contents": template})
+
+
+class NewSnippetCommand(sublime_plugin.WindowCommand):
+ def run(self):
+ v = self.window.new_file()
+ v.settings().set('default_dir',
+ os.path.join(sublime.packages_path(), 'User'))
+ v.settings().set('default_extension', 'sublime-snippet')
+ v.set_syntax_file('Packages/XML/XML.tmLanguage')
+
+ template = """
+
+
+
+
+
+
+"""
+ v.run_command("insert_snippet", {"contents": template})
diff --git a/Default/new_templates.pyc b/Default/new_templates.pyc
new file mode 100644
index 0000000..9357441
Binary files /dev/null and b/Default/new_templates.pyc differ
diff --git a/Default/open_file_settings.py b/Default/open_file_settings.py
new file mode 100644
index 0000000..c701d94
--- /dev/null
+++ b/Default/open_file_settings.py
@@ -0,0 +1,12 @@
+import sublime, sublime_plugin
+import os.path
+
+class OpenFileSettingsCommand(sublime_plugin.WindowCommand):
+ def run(self):
+ view = self.window.active_view()
+ settings_name, _ = os.path.splitext(os.path.basename(view.settings().get('syntax')))
+ dir_name = os.path.join(sublime.packages_path(), 'User')
+ self.window.open_file(os.path.join(dir_name, settings_name + ".sublime-settings"))
+
+ def is_enabled(self):
+ return self.window.active_view() != None
diff --git a/Default/open_file_settings.pyc b/Default/open_file_settings.pyc
new file mode 100644
index 0000000..cbd901c
Binary files /dev/null and b/Default/open_file_settings.pyc differ
diff --git a/Default/open_in_browser.py b/Default/open_in_browser.py
new file mode 100644
index 0000000..042f141
--- /dev/null
+++ b/Default/open_in_browser.py
@@ -0,0 +1,13 @@
+import sublime, sublime_plugin
+import webbrowser
+
+class OpenInBrowserCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ if self.view.file_name():
+ webbrowser.open_new_tab("file://" + self.view.file_name())
+
+ def is_visible(self):
+ return self.view.file_name() and (self.view.file_name()[-5:] == ".html" or
+ self.view.file_name()[-5:] == ".HTML" or
+ self.view.file_name()[-4:] == ".htm" or
+ self.view.file_name()[-4:] == ".HTM")
diff --git a/Default/open_in_browser.pyc b/Default/open_in_browser.pyc
new file mode 100644
index 0000000..b399d1a
Binary files /dev/null and b/Default/open_in_browser.pyc differ
diff --git a/Default/paragraph.py b/Default/paragraph.py
new file mode 100644
index 0000000..bb5fb22
--- /dev/null
+++ b/Default/paragraph.py
@@ -0,0 +1,211 @@
+import sublime, sublime_plugin
+import string
+import textwrap
+import re
+import comment
+
+def previous_line(view, sr):
+ """sr should be a Region covering the entire hard line"""
+ if sr.begin() == 0:
+ return None
+ else:
+ return view.full_line(sr.begin() - 1)
+
+def next_line(view, sr):
+ """sr should be a Region covering the entire hard line, including
+ the newline"""
+ if sr.end() == view.size():
+ return None
+ else:
+ return view.full_line(sr.end())
+
+
+separating_line_pattern = re.compile("^[\\t ]*\\n?$")
+
+def is_paragraph_separating_line(view, sr):
+ return separating_line_pattern.match(view.substr(sr)) != None
+
+def has_prefix(view, line, prefix):
+ if not prefix:
+ return True
+
+ line_start = view.substr(sublime.Region(line.begin(),
+ line.begin() + len(prefix)))
+
+ return line_start == prefix
+
+def expand_to_paragraph(view, tp):
+ sr = view.full_line(tp)
+ if is_paragraph_separating_line(view, sr):
+ return sublime.Region(tp, tp)
+
+ required_prefix = None
+
+ # If the current line starts with a comment, only select lines that are also
+ # commented
+ (line_comments, block_comments) = comment.build_comment_data(view, tp)
+ dataStart = comment.advance_to_first_non_white_space_on_line(view, sr.begin())
+ for c in line_comments:
+ (start, disable_indent) = c
+ comment_region = sublime.Region(dataStart,
+ dataStart + len(start))
+ if view.substr(comment_region) == start:
+ required_prefix = view.substr(sublime.Region(sr.begin(), comment_region.end()))
+ break
+
+ first = sr.begin()
+ prev = sr
+ while True:
+ prev = previous_line(view, prev)
+ if (prev == None or is_paragraph_separating_line(view, prev) or
+ not has_prefix(view, prev, required_prefix)):
+ break
+ else:
+ first = prev.begin()
+
+ last = sr.end()
+ next = sr
+ while True:
+ next = next_line(view, next)
+ if (next == None or is_paragraph_separating_line(view, next) or
+ not has_prefix(view, next, required_prefix)):
+ break
+ else:
+ last = next.end()
+
+ return sublime.Region(first, last)
+
+def all_paragraphs_intersecting_selection(view, sr):
+ paragraphs = []
+
+ para = expand_to_paragraph(view, sr.begin())
+ if not para.empty():
+ paragraphs.append(para)
+
+ while True:
+ line = next_line(view, para)
+ if line == None or line.begin() >= sr.end():
+ break;
+
+ if not is_paragraph_separating_line(view, line):
+ para = expand_to_paragraph(view, line.begin())
+ paragraphs.append(para)
+ else:
+ para = line
+
+ return paragraphs
+
+
+class ExpandSelectionToParagraphCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ regions = []
+
+ for s in self.view.sel():
+ regions.append(sublime.Region(
+ expand_to_paragraph(self.view, s.begin()).begin(),
+ expand_to_paragraph(self.view, s.end()).end()))
+
+ for r in regions:
+ self.view.sel().add(r)
+
+
+class WrapLinesCommand(sublime_plugin.TextCommand):
+ line_prefix_pattern = re.compile("^\W+")
+
+ def extract_prefix(self, sr):
+ lines = self.view.split_by_newlines(sr)
+ if len(lines) == 0:
+ return None
+
+ initial_prefix_match = self.line_prefix_pattern.match(self.view.substr(
+ lines[0]))
+ if not initial_prefix_match:
+ return None
+
+ prefix = self.view.substr(sublime.Region(lines[0].begin(),
+ lines[0].begin() + initial_prefix_match.end()))
+
+ for line in lines[1:]:
+ if self.view.substr(sublime.Region(line.begin(),
+ line.begin() + len(prefix))) != prefix:
+ return None
+
+ return prefix
+
+ def width_in_spaces(self, str, tab_width):
+ sum = 0;
+ for c in str:
+ if c == '\t':
+ sum += tab_width - 1
+ return sum
+
+ def run(self, edit, width=0):
+ if width == 0 and self.view.settings().get("wrap_width"):
+ try:
+ width = int(self.view.settings().get("wrap_width"))
+ except TypeError:
+ pass
+
+ if width == 0 and self.view.settings().get("rulers"):
+ # try and guess the wrap width from the ruler, if any
+ try:
+ width = int(self.view.settings().get("rulers")[0])
+ except ValueError:
+ pass
+ except TypeError:
+ pass
+
+ if width == 0:
+ width = 78
+
+ # Make sure tabs are handled as per the current buffer
+ tab_width = 8
+ if self.view.settings().get("tab_size"):
+ try:
+ tab_width = int(self.view.settings().get("tab_size"))
+ except TypeError:
+ pass
+
+ if tab_width == 0:
+ tab_width == 8
+
+ paragraphs = []
+ for s in self.view.sel():
+ paragraphs.extend(all_paragraphs_intersecting_selection(self.view, s))
+
+ if len(paragraphs) > 0:
+ self.view.sel().clear()
+ for p in paragraphs:
+ self.view.sel().add(p)
+
+ # This isn't an ideal way to do it, as we loose the position of the
+ # cursor within the paragraph: hence why the paragraph is selected
+ # at the end.
+ for s in self.view.sel():
+ wrapper = textwrap.TextWrapper()
+ wrapper.expand_tabs = False
+ wrapper.width = width
+ prefix = self.extract_prefix(s)
+ if prefix:
+ wrapper.initial_indent = prefix
+ wrapper.subsequent_indent = prefix
+ wrapper.width -= self.width_in_spaces(prefix, tab_width)
+
+ if wrapper.width < 0:
+ continue
+
+ txt = self.view.substr(s)
+ if prefix:
+ txt = txt.replace(prefix, u"")
+
+ txt = string.expandtabs(txt, tab_width)
+
+ txt = wrapper.fill(txt) + u"\n"
+ self.view.replace(edit, s, txt)
+
+ # It's unhelpful to have the entire paragraph selected, just leave the
+ # selection at the end
+ ends = [s.end() - 1 for s in self.view.sel()]
+ self.view.sel().clear()
+ for pt in ends:
+ self.view.sel().add(sublime.Region(pt))
diff --git a/Default/paragraph.pyc b/Default/paragraph.pyc
new file mode 100644
index 0000000..0e65dd9
Binary files /dev/null and b/Default/paragraph.pyc differ
diff --git a/Default/save_on_focus_lost.py b/Default/save_on_focus_lost.py
new file mode 100644
index 0000000..939259c
--- /dev/null
+++ b/Default/save_on_focus_lost.py
@@ -0,0 +1,10 @@
+import sublime, sublime_plugin
+import os.path
+
+class SaveOnFocusLost(sublime_plugin.EventListener):
+ def on_deactivated(self, view):
+ # The check for os.path.exists ensures that deleted files won't be resurrected
+ if (view.file_name() and view.is_dirty() and
+ view.settings().get('save_on_focus_lost') == True and
+ os.path.exists(view.file_name())):
+ view.run_command('save');
diff --git a/Default/save_on_focus_lost.pyc b/Default/save_on_focus_lost.pyc
new file mode 100644
index 0000000..b3fdcae
Binary files /dev/null and b/Default/save_on_focus_lost.pyc differ
diff --git a/Default/scroll.py b/Default/scroll.py
new file mode 100644
index 0000000..1d9dcaa
--- /dev/null
+++ b/Default/scroll.py
@@ -0,0 +1,13 @@
+import sublime, sublime_plugin
+
+class ScrollToBof(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.view.show(0)
+
+class ScrollToEof(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.view.show(self.view.size())
+
+class ShowAtCenter(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.view.show_at_center(self.view.sel()[0])
diff --git a/Default/scroll.pyc b/Default/scroll.pyc
new file mode 100644
index 0000000..21691d8
Binary files /dev/null and b/Default/scroll.pyc differ
diff --git a/Default/send2trash/__init__.py b/Default/send2trash/__init__.py
new file mode 100644
index 0000000..d6fa7f0
--- /dev/null
+++ b/Default/send2trash/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
+
+# This software is licensed under the "BSD" License as described in the "LICENSE" file,
+# which should be included with this package. The terms are also available at
+# http://www.hardcoded.net/licenses/bsd_license
+
+import sys
+
+if sys.platform == 'darwin':
+ from .plat_osx import send2trash
+elif sys.platform == 'win32':
+ from .plat_win import send2trash
+else:
+ from .plat_other import send2trash
diff --git a/Default/send2trash/__init__.pyc b/Default/send2trash/__init__.pyc
new file mode 100644
index 0000000..73f114b
Binary files /dev/null and b/Default/send2trash/__init__.pyc differ
diff --git a/Default/send2trash/plat_osx.py b/Default/send2trash/plat_osx.py
new file mode 100644
index 0000000..ba58b6f
--- /dev/null
+++ b/Default/send2trash/plat_osx.py
@@ -0,0 +1,44 @@
+# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
+
+# This software is licensed under the "BSD" License as described in the "LICENSE" file,
+# which should be included with this package. The terms are also available at
+# http://www.hardcoded.net/licenses/bsd_license
+
+from ctypes import cdll, byref, Structure, c_char, c_char_p
+from ctypes.util import find_library
+
+Foundation = cdll.LoadLibrary(find_library('Foundation'))
+CoreServices = cdll.LoadLibrary(find_library('CoreServices'))
+
+GetMacOSStatusCommentString = Foundation.GetMacOSStatusCommentString
+GetMacOSStatusCommentString.restype = c_char_p
+FSPathMakeRefWithOptions = CoreServices.FSPathMakeRefWithOptions
+FSMoveObjectToTrashSync = CoreServices.FSMoveObjectToTrashSync
+
+kFSPathMakeRefDefaultOptions = 0
+kFSPathMakeRefDoNotFollowLeafSymlink = 0x01
+
+kFSFileOperationDefaultOptions = 0
+kFSFileOperationOverwrite = 0x01
+kFSFileOperationSkipSourcePermissionErrors = 0x02
+kFSFileOperationDoNotMoveAcrossVolumes = 0x04
+kFSFileOperationSkipPreflight = 0x08
+
+class FSRef(Structure):
+ _fields_ = [('hidden', c_char * 80)]
+
+def check_op_result(op_result):
+ if op_result:
+ msg = GetMacOSStatusCommentString(op_result).decode('utf-8')
+ raise OSError(msg)
+
+def send2trash(path):
+ if not isinstance(path, bytes):
+ path = path.encode('utf-8')
+ fp = FSRef()
+ opts = kFSPathMakeRefDoNotFollowLeafSymlink
+ op_result = FSPathMakeRefWithOptions(path, opts, byref(fp), None)
+ check_op_result(op_result)
+ opts = kFSFileOperationDefaultOptions
+ op_result = FSMoveObjectToTrashSync(byref(fp), None, opts)
+ check_op_result(op_result)
diff --git a/Default/send2trash/plat_osx.pyc b/Default/send2trash/plat_osx.pyc
new file mode 100644
index 0000000..41c1882
Binary files /dev/null and b/Default/send2trash/plat_osx.pyc differ
diff --git a/Default/send2trash/plat_other.py b/Default/send2trash/plat_other.py
new file mode 100644
index 0000000..ee1479b
--- /dev/null
+++ b/Default/send2trash/plat_other.py
@@ -0,0 +1,154 @@
+# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
+
+# This software is licensed under the "BSD" License as described in the "LICENSE" file,
+# which should be included with this package. The terms are also available at
+# http://www.hardcoded.net/licenses/bsd_license
+
+# This is a reimplementation of plat_other.py with reference to the
+# freedesktop.org trash specification:
+# [1] http://www.freedesktop.org/wiki/Specifications/trash-spec
+# [2] http://www.ramendik.ru/docs/trashspec.html
+# See also:
+# [3] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+#
+# For external volumes this implementation will raise an exception if it can't
+# find or create the user's trash directory.
+
+import sys
+import os
+import os.path as op
+from datetime import datetime
+import stat
+from urllib import quote
+
+FILES_DIR = 'files'
+INFO_DIR = 'info'
+INFO_SUFFIX = '.trashinfo'
+
+# Default of ~/.local/share [3]
+XDG_DATA_HOME = op.expanduser(os.environ.get('XDG_DATA_HOME', '~/.local/share'))
+HOMETRASH = op.join(XDG_DATA_HOME, 'Trash')
+
+uid = os.getuid()
+TOPDIR_TRASH = '.Trash'
+TOPDIR_FALLBACK = '.Trash-' + str(uid)
+
+def is_parent(parent, path):
+ path = op.realpath(path) # In case it's a symlink
+ parent = op.realpath(parent)
+ return path.startswith(parent)
+
+def format_date(date):
+ return date.strftime("%Y-%m-%dT%H:%M:%S")
+
+def info_for(src, topdir):
+ # ...it MUST not include a ".."" directory, and for files not "under" that
+ # directory, absolute pathnames must be used. [2]
+ if topdir is None or not is_parent(topdir, src):
+ src = op.abspath(src)
+ else:
+ src = op.relpath(src, topdir)
+
+ info = "[Trash Info]\n"
+ info += "Path=" + quote(src) + "\n"
+ info += "DeletionDate=" + format_date(datetime.now()) + "\n"
+ return info
+
+def check_create(dir):
+ # use 0700 for paths [3]
+ if not op.exists(dir):
+ os.makedirs(dir, 0o700)
+
+def trash_move(src, dst, topdir=None):
+ filename = op.basename(src)
+ filespath = op.join(dst, FILES_DIR)
+ infopath = op.join(dst, INFO_DIR)
+ base_name, ext = op.splitext(filename)
+
+ counter = 0
+ destname = filename
+ while op.exists(op.join(filespath, destname)) or op.exists(op.join(infopath, destname + INFO_SUFFIX)):
+ counter += 1
+ destname = '%s %s%s' % (base_name, counter, ext)
+
+ check_create(filespath)
+ check_create(infopath)
+
+ os.rename(src, op.join(filespath, destname))
+ f = open(op.join(infopath, destname + INFO_SUFFIX), 'w')
+ f.write(info_for(src, topdir))
+ f.close()
+
+def find_mount_point(path):
+ # Even if something's wrong, "/" is a mount point, so the loop will exit.
+ # Use realpath in case it's a symlink
+ path = op.realpath(path) # Required to avoid infinite loop
+ while not op.ismount(path):
+ path = op.split(path)[0]
+ return path
+
+def find_ext_volume_global_trash(volume_root):
+ # from [2] Trash directories (1) check for a .Trash dir with the right
+ # permissions set.
+ trash_dir = op.join(volume_root, TOPDIR_TRASH)
+ if not op.exists(trash_dir):
+ return None
+
+ mode = os.lstat(trash_dir).st_mode
+ # vol/.Trash must be a directory, cannot be a symlink, and must have the
+ # sticky bit set.
+ if not op.isdir(trash_dir) or op.islink(trash_dir) or not (mode & stat.S_ISVTX):
+ return None
+
+ trash_dir = op.join(trash_dir, str(uid))
+ try:
+ check_create(trash_dir)
+ except OSError:
+ return None
+ return trash_dir
+
+def find_ext_volume_fallback_trash(volume_root):
+ # from [2] Trash directories (1) create a .Trash-$uid dir.
+ trash_dir = op.join(volume_root, TOPDIR_FALLBACK)
+ # Try to make the directory, if we can't the OSError exception will escape
+ # be thrown out of send2trash.
+ check_create(trash_dir)
+ return trash_dir
+
+def find_ext_volume_trash(volume_root):
+ trash_dir = find_ext_volume_global_trash(volume_root)
+ if trash_dir is None:
+ trash_dir = find_ext_volume_fallback_trash(volume_root)
+ return trash_dir
+
+# Pull this out so it's easy to stub (to avoid stubbing lstat itself)
+def get_dev(path):
+ return os.lstat(path).st_dev
+
+def send2trash(path):
+ # if not isinstance(path, str):
+ # path = str(path, sys.getfilesystemencoding())
+ if not op.exists(path):
+ raise OSError("File not found: %s" % path)
+ # ...should check whether the user has the necessary permissions to delete
+ # it, before starting the trashing operation itself. [2]
+ if not os.access(path, os.W_OK):
+ raise OSError("Permission denied: %s" % path)
+ # if the file to be trashed is on the same device as HOMETRASH we
+ # want to move it there.
+ path_dev = get_dev(path)
+
+ # If XDG_DATA_HOME or HOMETRASH do not yet exist we need to stat the
+ # home directory, and these paths will be created further on if needed.
+ trash_dev = get_dev(op.expanduser('~'))
+
+ if path_dev == trash_dev:
+ topdir = XDG_DATA_HOME
+ dest_trash = HOMETRASH
+ else:
+ topdir = find_mount_point(path)
+ trash_dev = get_dev(topdir)
+ if trash_dev != path_dev:
+ raise OSError("Couldn't find mount point for %s" % path)
+ dest_trash = find_ext_volume_trash(topdir)
+ trash_move(path, dest_trash, topdir)
diff --git a/Default/send2trash/plat_win.py b/Default/send2trash/plat_win.py
new file mode 100644
index 0000000..b437174
--- /dev/null
+++ b/Default/send2trash/plat_win.py
@@ -0,0 +1,55 @@
+# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
+
+# This software is licensed under the "BSD" License as described in the "LICENSE" file,
+# which should be included with this package. The terms are also available at
+# http://www.hardcoded.net/licenses/bsd_license
+
+from ctypes import windll, Structure, byref, c_uint
+from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL
+import os.path as op
+
+shell32 = windll.shell32
+SHFileOperationW = shell32.SHFileOperationW
+
+class SHFILEOPSTRUCTW(Structure):
+ _fields_ = [
+ ("hwnd", HWND),
+ ("wFunc", UINT),
+ ("pFrom", LPCWSTR),
+ ("pTo", LPCWSTR),
+ ("fFlags", c_uint),
+ ("fAnyOperationsAborted", BOOL),
+ ("hNameMappings", c_uint),
+ ("lpszProgressTitle", LPCWSTR),
+ ]
+
+FO_MOVE = 1
+FO_COPY = 2
+FO_DELETE = 3
+FO_RENAME = 4
+
+FOF_MULTIDESTFILES = 1
+FOF_SILENT = 4
+FOF_NOCONFIRMATION = 16
+FOF_ALLOWUNDO = 64
+FOF_NOERRORUI = 1024
+
+def send2trash(path):
+ # if not isinstance(path, str):
+ # path = str(path, 'mbcs')
+ if not op.isabs(path):
+ path = op.abspath(path)
+ fileop = SHFILEOPSTRUCTW()
+ fileop.hwnd = 0
+ fileop.wFunc = FO_DELETE
+ fileop.pFrom = LPCWSTR(path + '\0')
+ fileop.pTo = None
+ fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT
+ fileop.fAnyOperationsAborted = 0
+ fileop.hNameMappings = 0
+ fileop.lpszProgressTitle = None
+ result = SHFileOperationW(byref(fileop))
+ if result:
+ msg = "Couldn't perform operation. Error code: %d" % result
+ raise OSError(msg)
+
diff --git a/Default/set_unsaved_view_name.py b/Default/set_unsaved_view_name.py
new file mode 100644
index 0000000..57d4228
--- /dev/null
+++ b/Default/set_unsaved_view_name.py
@@ -0,0 +1,70 @@
+import sublime, sublime_plugin
+import os.path
+import string
+import functools
+
+class SetUnsavedViewName(sublime_plugin.EventListener):
+ setting_name = False
+
+ dropped_chars = string.whitespace
+
+ pending = 0
+
+ def on_modified(self, view):
+ if view.file_name() or view.is_loading():
+ return
+
+ if self.setting_name:
+ return
+
+ self.pending += 1
+ sublime.set_timeout(functools.partial(self.update_title, view), 20)
+
+ def update_title(self, view):
+ self.pending -= 1
+ if self.pending != 0:
+ return
+
+ if view.settings().get('set_unsaved_view_name') == False:
+ return
+
+ cur_name = view.settings().get('auto_name')
+ view_name = view.name()
+
+ # Only set the name for plain text files
+ syntax = view.settings().get('syntax')
+ if syntax != 'Packages/Text/Plain text.tmLanguage':
+ if cur_name:
+ # Undo any previous name that was set
+ view.settings().erase('auto_name')
+ if cur_name == view_name:
+ view.set_name("")
+ return
+
+ # Name has been explicitly set, don't override it
+ if not cur_name and view_name:
+ return
+
+ # Name has been explicitly changed, don't override it
+ if cur_name and cur_name != view.name():
+ view.settings().erase('auto_name')
+ return
+
+ # Don't set the names on widgets, it'll just trigger spurious
+ # on_modified callbacks
+ if view.settings().get('is_widget'):
+ return
+
+ line = view.line(0)
+ if line.size() > 50:
+ line = sublime.Region(0, 50)
+
+ first_line = view.substr(line)
+
+ first_line = first_line.strip(self.dropped_chars)
+
+ self.setting_name = True
+ view.set_name(first_line)
+ self.setting_name = False
+
+ view.settings().set('auto_name', first_line)
diff --git a/Default/set_unsaved_view_name.pyc b/Default/set_unsaved_view_name.pyc
new file mode 100644
index 0000000..2a43a04
Binary files /dev/null and b/Default/set_unsaved_view_name.pyc differ
diff --git a/Default/side_bar.py b/Default/side_bar.py
new file mode 100644
index 0000000..6c17cfb
--- /dev/null
+++ b/Default/side_bar.py
@@ -0,0 +1,84 @@
+import sublime, sublime_plugin
+import os
+import functools
+import send2trash
+
+class NewFileAtCommand(sublime_plugin.WindowCommand):
+ def run(self, dirs):
+ v = self.window.new_file()
+
+ if len(dirs) == 1:
+ v.settings().set('default_dir', dirs[0])
+
+ def is_visible(self, dirs):
+ return len(dirs) == 1
+
+class DeleteFileCommand(sublime_plugin.WindowCommand):
+ def run(self, files):
+ for f in files:
+ send2trash.send2trash(f)
+
+ def is_visible(self, files):
+ return len(files) > 0
+
+class NewFolderCommand(sublime_plugin.WindowCommand):
+ def run(self, dirs):
+ self.window.show_input_panel("Folder Name:", "", functools.partial(self.on_done, dirs[0]), None, None)
+
+ def on_done(self, dir, name):
+ os.makedirs(os.path.join(dir, name))
+
+ def is_visible(self, dirs):
+ return len(dirs) == 1
+
+class DeleteFolderCommand(sublime_plugin.WindowCommand):
+ def run(self, dirs):
+ if sublime.ok_cancel_dialog("Delete Folder?", "Delete"):
+ try:
+ for d in dirs:
+ send2trash.send2trash(d)
+ except:
+ sublime.status_message("Unable to delete folder")
+
+ def is_visible(self, dirs):
+ return len(dirs) > 0
+
+class RenamePathCommand(sublime_plugin.WindowCommand):
+ def run(self, paths):
+ branch, leaf = os.path.split(paths[0])
+ v = self.window.show_input_panel("New Name:", leaf, functools.partial(self.on_done, paths[0], branch), None, None)
+ name, ext = os.path.splitext(leaf)
+
+ v.sel().clear()
+ v.sel().add(sublime.Region(0, len(name)))
+
+ def on_done(self, old, branch, leaf):
+ new = os.path.join(branch, leaf)
+
+ try:
+ os.rename(old, new)
+
+ v = self.window.find_open_file(old)
+ if v:
+ v.retarget(new)
+ except:
+ sublime.status_message("Unable to rename")
+
+ def is_visible(self, paths):
+ return len(paths) == 1
+
+class OpenContainingFolderCommand(sublime_plugin.WindowCommand):
+ def run(self, files):
+ branch,leaf = os.path.split(files[0])
+ self.window.run_command("open_dir", {"dir": branch, "file": leaf})
+
+ def is_visible(self, files):
+ return len(files) > 0
+
+class FindInFolderCommand(sublime_plugin.WindowCommand):
+ def run(self, dirs):
+ self.window.run_command("show_panel", {"panel": "find_in_files",
+ "where": ",".join(dirs)})
+
+ def is_visible(self, dirs):
+ return len(dirs) > 0
diff --git a/Default/side_bar.pyc b/Default/side_bar.pyc
new file mode 100644
index 0000000..b4b21c7
Binary files /dev/null and b/Default/side_bar.pyc differ
diff --git a/Default/sort.py b/Default/sort.py
new file mode 100644
index 0000000..812b0f5
--- /dev/null
+++ b/Default/sort.py
@@ -0,0 +1,184 @@
+import sublime, sublime_plugin
+import random
+
+# Uglyness needed until SelectionRegions will happily compare themselves
+def srcmp(a, b):
+ aa = a.begin();
+ ba = b.begin();
+
+ if aa < ba:
+ return -1;
+ elif aa == ba:
+ return cmp(a.end(), b.end())
+ else:
+ return 1;
+
+def srtcmp(ta, tb):
+ return srcmp(ta[0], tb[0])
+
+def permute_selection(f, v, e):
+ regions = [s for s in v.sel() if not s.empty()]
+ regions.sort(srcmp)
+ txt = [v.substr(s) for s in regions]
+ txt = f(txt)
+
+ # no sane way to handle this case
+ if len(txt) != len(regions):
+ return
+
+ # Do the replacement in reverse order, so the character offsets don't get
+ # invalidated
+ combined = zip(regions, txt)
+ combined.sort(srtcmp, reverse=True)
+
+ for x in combined:
+ [r, t] = x
+ v.replace(e, r, t)
+
+def case_insensitive_sort(txt):
+ txt.sort(lambda a, b: cmp(a.lower(), b.lower()))
+ return txt
+
+def case_sensitive_sort(txt):
+ txt.sort(lambda a, b: cmp(a, b))
+ return txt
+
+def reverse_list(l):
+ l.reverse()
+ return l
+
+def shuffle_list(l):
+ random.shuffle(l)
+ return l
+
+def uniquealise_list(l):
+ table = {}
+ res = []
+ for x in l:
+ if x not in table:
+ table[x] = x
+ res.append(x)
+ return res
+
+permute_funcs = { "reverse" : reverse_list,
+ "shuffle" : shuffle_list,
+ "unique" : uniquealise_list }
+
+def unique_selection(v):
+ regions = [s for s in v.sel() if not s.empty()]
+ regions.sort(srcmp)
+
+ dupregions = []
+ table = {}
+ for r in regions:
+ txt = v.substr(r)
+ if txt not in table:
+ table[txt] = r
+ else:
+ dupregions.append(r)
+
+ dupregions.reverse()
+ for r in dupregions:
+ v.erase(e, r)
+
+def shrink_wrap_region( view, region ):
+ a, b = region.begin(), region.end()
+
+ for a in xrange(a, b):
+ if not view.substr(a).isspace():
+ break
+
+ for b in xrange(b-1, a, -1):
+ if not view.substr(b).isspace():
+ b += 1
+ break
+
+ return sublime.Region(a, b)
+
+def shrinkwrap_and_expand_non_empty_selections_to_entire_line(v):
+ sw = shrink_wrap_region
+ regions = []
+
+ for sel in v.sel():
+ if not sel.empty():
+ regions.append(v.line(sw(v, v.line(sel))))
+ v.sel().subtract(sel)
+
+ for r in regions:
+ v.sel().add(r)
+
+def permute_lines(f, v, e):
+ shrinkwrap_and_expand_non_empty_selections_to_entire_line(v)
+
+ regions = [s for s in v.sel() if not s.empty()]
+ if not regions:
+ regions = [sublime.Region(0, v.size())]
+
+ regions.sort(srcmp, reverse=True)
+
+ for r in regions:
+ txt = v.substr(r)
+ lines = txt.splitlines()
+ lines = f(lines)
+
+ v.replace(e, r, u"\n".join(lines))
+
+def has_multiple_non_empty_selection_region(v):
+ return len([s for s in v.sel() if not s.empty()]) > 1
+
+class SortLinesCommand(sublime_plugin.TextCommand):
+ def run(self, edit, case_sensitive=False,
+ reverse=False,
+ remove_duplicates=False):
+ view = self.view
+
+ if case_sensitive:
+ permute_lines(case_sensitive_sort, view, edit)
+ else:
+ permute_lines(case_insensitive_sort, view, edit)
+
+ if reverse:
+ permute_lines(reverse_list, view, edit)
+
+ if remove_duplicates:
+ permute_lines(uniquealise_list, view, edit)
+
+class SortSelectionCommand(sublime_plugin.TextCommand):
+ def run(self, edit, case_sensitive=False,
+ reverse=False,
+ remove_duplicates=False):
+
+ view = self.view
+
+ permute_selection(
+ case_sensitive_sort if case_sensitive else case_insensitive_sort,
+ view, edit)
+
+ if reverse:
+ permute_selection(reverse_list, view, edit)
+
+ if remove_duplicates:
+ unique_selection(view, edit)
+
+ def is_enabled(self, **kw):
+ return has_multiple_non_empty_selection_region(self.view)
+
+class PermuteLinesCommand(sublime_plugin.TextCommand):
+ def run(self, edit, operation='shuffle'):
+ permute_lines(permute_funcs[operation], self.view, edit)
+
+class PermuteSelectionCommand(sublime_plugin.TextCommand):
+ def run(self, edit, operation='shuffle'):
+ view = self.view
+
+ if operation == "reverse":
+ permute_selection(reverse_list, view, edit)
+
+ elif operation == "shuffle":
+ permute_selection(shuffle_list, view, edit)
+
+ elif operation == "unique":
+ unique_selection(view, edit)
+
+ def is_enabled(self, **kw):
+ return has_multiple_non_empty_selection_region(self.view)
diff --git a/Default/sort.pyc b/Default/sort.pyc
new file mode 100644
index 0000000..7fcbd5a
Binary files /dev/null and b/Default/sort.pyc differ
diff --git a/Default/swap_line.py b/Default/swap_line.py
new file mode 100644
index 0000000..97841ee
--- /dev/null
+++ b/Default/swap_line.py
@@ -0,0 +1,110 @@
+import sublime, sublime_plugin
+
+
+def expand_to_line(view, region):
+ """
+ As view.full_line, but doesn't expand to the next line if a full line is
+ already selected
+ """
+ if not (region.a == region.b) and view.substr(region.end() - 1) == '\n':
+ return sublime.Region(view.line(region).begin(), region.end())
+ else:
+ return view.full_line(region)
+
+
+def extract_line_blocks(view):
+ blocks = [expand_to_line(view, s) for s in view.sel()]
+ if len(blocks) == 0:
+ return blocks
+
+ # merge any adjacent blocks
+ merged_blocks = [blocks[0]]
+ for block in blocks[1:]:
+ last_block = merged_blocks[-1]
+ if block.begin() <= last_block.end():
+ merged_blocks[-1] = sublime.Region(last_block.begin(), block.end())
+ else:
+ merged_blocks.append(block)
+
+ return merged_blocks
+
+class SwapLineUpCommand(sublime_plugin.TextCommand):
+
+ def run(self, edit):
+ blocks = extract_line_blocks(self.view)
+
+ # No selection
+ if len(blocks) == 0:
+ return
+
+ # Already at BOF
+ if blocks[0].begin() == 0:
+ return
+
+ # Add a trailing newline if required, the logic is simpler if every line
+ # ends with a newline
+ add_trailing_newline = (self.view.substr(self.view.size() - 1) != '\n') and blocks[-1].b == self.view.size()
+ if add_trailing_newline:
+ # The insert can cause the selection to move. This isn't wanted, so
+ # reset the selection if it has moved to EOF
+ sel = [r for r in self.view.sel()]
+ self.view.insert(edit, self.view.size(), '\n')
+ if self.view.sel()[-1].end() == self.view.size():
+ # Selection has moved, restore the previous selection
+ self.view.sel().clear()
+ for r in sel:
+ self.view.sel().add(r)
+
+ # Fix up any block that should now include this newline
+ blocks[-1] = sublime.Region(blocks[-1].a, blocks[-1].b + 1)
+
+ # Process in reverse order
+ blocks.reverse()
+ for b in blocks:
+ prev_line = self.view.full_line(b.begin() - 1)
+ self.view.insert(edit, b.end(), self.view.substr(prev_line))
+ self.view.erase(edit, prev_line)
+
+ if add_trailing_newline:
+ # Remove the added newline
+ self.view.erase(edit, sublime.Region(self.view.size() - 1, self.view.size()))
+
+ # Ensure the selection is visible
+ self.view.show(self.view.sel(), False)
+
+class SwapLineDownCommand(sublime_plugin.TextCommand):
+
+ def run(self, edit):
+ blocks = extract_line_blocks(self.view)
+
+ # No selection
+ if len(blocks) == 0:
+ return
+
+ # Already at EOF
+ if blocks[-1].end() == self.view.size():
+ return
+
+ # Add a trailing newline if required, the logic is simpler if every line
+ # ends with a newline
+ add_trailing_newline = (self.view.substr(self.view.size() - 1) != '\n')
+ if add_trailing_newline:
+ # No block can be at EOF (checked above), so no need to fix up the
+ # blocks
+ self.view.insert(edit, self.view.size(), '\n')
+
+ # Process in reverse order
+ blocks.reverse()
+ for b in blocks:
+ next_line = self.view.full_line(b.end())
+ contents = self.view.substr(next_line)
+
+ self.view.erase(edit, next_line)
+ self.view.insert(edit, b.begin(), contents)
+
+ if add_trailing_newline:
+ # Remove the added newline
+ self.view.erase(edit, sublime.Region(self.view.size() - 1, self.view.size()))
+
+ # Ensure the selection is visible
+ self.view.show(self.view.sel(), False)
diff --git a/Default/swap_line.pyc b/Default/swap_line.pyc
new file mode 100644
index 0000000..58fbfcb
Binary files /dev/null and b/Default/swap_line.pyc differ
diff --git a/Default/switch_file.py b/Default/switch_file.py
new file mode 100644
index 0000000..60fa7e3
--- /dev/null
+++ b/Default/switch_file.py
@@ -0,0 +1,42 @@
+import sublime, sublime_plugin
+import os.path
+import platform
+
+def compare_file_names(x, y):
+ if platform.system() == 'Windows' or platform.system() == 'Darwin':
+ return x.lower() == y.lower()
+ else:
+ return x == y
+
+class SwitchFileCommand(sublime_plugin.WindowCommand):
+ def run(self, extensions=[]):
+ if not self.window.active_view():
+ return
+
+ fname = self.window.active_view().file_name()
+ if not fname:
+ return
+
+ path = os.path.dirname(fname)
+ base, ext = os.path.splitext(fname)
+
+ start = 0
+ count = len(extensions)
+
+ if ext != "":
+ ext = ext[1:]
+
+ for i in xrange(0, len(extensions)):
+ if compare_file_names(extensions[i], ext):
+ start = i + 1
+ count -= 1
+ break
+
+ for i in xrange(0, count):
+ idx = (start + i) % len(extensions)
+
+ new_path = base + '.' + extensions[idx]
+
+ if os.path.exists(new_path):
+ self.window.open_file(new_path)
+ break
diff --git a/Default/switch_file.pyc b/Default/switch_file.pyc
new file mode 100644
index 0000000..374150f
Binary files /dev/null and b/Default/switch_file.pyc differ
diff --git a/Default/transform.py b/Default/transform.py
new file mode 100644
index 0000000..a194513
--- /dev/null
+++ b/Default/transform.py
@@ -0,0 +1,38 @@
+import string
+import sublime
+import sublime_plugin
+
+class Transformer(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.transform(self.transformer[0], self.view, edit)
+
+ def transform(self, f, view, edit):
+ for s in view.sel():
+ if s.empty():
+ s = view.word(s)
+
+ txt = f(view.substr(s))
+ view.replace(edit, s, txt)
+
+class SwapCaseCommand(Transformer):
+ transformer = string.swapcase,
+
+class UpperCaseCommand(Transformer):
+ transformer = string.upper,
+
+class LowerCaseCommand(Transformer):
+ transformer = string.lower,
+
+class TitleCaseCommand(Transformer):
+ transformer = lambda s: string.capwords(s, " "),
+
+def rot13(ch):
+ o = ord(ch)
+ if o >= ord('a') and o <= ord('z'):
+ return unichr((o - ord('a') + 13) % 26 + ord('a'))
+ if o >= ord('A') and o <= ord('Z'):
+ return unichr((o - ord('A') + 13) % 26 + ord('A'))
+ return ch
+
+class Rot13Command(Transformer):
+ transformer = lambda s: "".join([rot13(ch) for ch in s]),
diff --git a/Default/transform.pyc b/Default/transform.pyc
new file mode 100644
index 0000000..b9c2a3a
Binary files /dev/null and b/Default/transform.pyc differ
diff --git a/Default/transpose.py b/Default/transpose.py
new file mode 100644
index 0000000..e3a8a4d
--- /dev/null
+++ b/Default/transpose.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+#coding: utf8
+#################################### IMPORTS ###################################
+
+# Std Libs
+import re
+
+try:
+ from itertools import izip
+except ImportError: # Python 3 coming Feb?
+ from itertools import zip as izip
+
+# Sublime Libs
+import sublime
+import sublime_plugin
+
+#################################### HELPERS ###################################
+
+def notify_nothing():
+ sublime.status_message('Nothing to transpose')
+
+def full_region(region):
+ return ( sublime.Region(region.begin(), region.begin() + 1)
+ if region.empty() else region )
+
+def perform_transposition(edit, view, trans, init_sel):
+ " assumes trans is already reverse sorted sequence of regions"
+ view.sel().subtract(init_sel)
+
+ for i, (sel, substr) in enumerate(izip(trans,
+ reversed([view.substr(s) for s in trans])) ):
+ view.replace(edit, sel, substr)
+ if not i: view.sel().add(init_sel)
+
+def transpose_selections(edit, view):
+ for sel in view.sel():
+ word_sel = view.word(sel)
+ word_extents = (wb, we) = (word_sel.begin(), word_sel.end())
+ transpose_words = sel.end() in word_extents
+
+ #" wora! arst"
+ if transpose_words:
+ if sel.end() == we:
+ next = view.find('\w', word_sel.end())
+ if next is None: continue
+ trans = [ view.word(next), word_sel ]
+ else:
+ if wb == 0: continue
+ for pt in xrange(wb-1, -1, -1):
+ if re.match('\w', view.substr(pt)): break
+ trans = [ word_sel, view.word(pt) ]
+ else:
+ p1 = max(0, sel.begin() -1)
+ character_behind_region = sublime.Region(p1)
+ #" a!a"
+ trans = [ full_region(sel), full_region(character_behind_region)]
+
+ perform_transposition(edit, view, trans, sel)
+
+def rotate_selections(edit, view):
+ # TODO: ???
+ for sel in view.sel():
+ if sel.empty(): view.sel().add(view.word(sel))
+
+ sels = list(reversed(view.sel()))
+
+ strings = [ view.substr(s) for s in sels ]
+ strings.append(strings.pop(0))
+
+ for sel, substr in izip(sels, strings):
+ view.replace(edit, sel, substr)
+
+################################### COMMANDS ###################################
+
+class Transpose(sublime_plugin.TextCommand):
+ """
+ - empty selection, cursor within a word: transpose characters
+ - empty selection, cursor at the end of a word: transpose words
+ - multiple selections, all empty: as above
+
+ - multiple selections, at least one non-empty: rotate contents of selections
+ (i.e., each selection takes on the contents of the selection before it)
+
+ - single non-empty selection: do nothing
+
+ """
+
+ def run(self, edit, **kw):
+ if not self.enabled(): return notify_nothing()
+
+ view = self.view
+ sels = view.sel()
+ nsels = len(sels)
+
+ if nsels > 1 and view.has_non_empty_selection_region():
+ rotate_selections(edit, view)
+ else:
+ transpose_selections(edit, view)
+
+ def enabled(self):
+ sels = self.view.sel()
+ return not (len(sels) == 1 and not sels[0].empty())
\ No newline at end of file
diff --git a/Default/transpose.pyc b/Default/transpose.pyc
new file mode 100644
index 0000000..f172508
Binary files /dev/null and b/Default/transpose.pyc differ
diff --git a/Default/trim_trailing_white_space.py b/Default/trim_trailing_white_space.py
new file mode 100644
index 0000000..96aa0ec
--- /dev/null
+++ b/Default/trim_trailing_white_space.py
@@ -0,0 +1,19 @@
+import sublime, sublime_plugin
+
+class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
+ def on_pre_save(self, view):
+ if view.settings().get("trim_trailing_white_space_on_save") == True:
+ trailing_white_space = view.find_all("[\t ]+$")
+ trailing_white_space.reverse()
+ edit = view.begin_edit()
+ for r in trailing_white_space:
+ view.erase(edit, r)
+ view.end_edit(edit)
+
+class EnsureNewlineAtEof(sublime_plugin.EventListener):
+ def on_pre_save(self, view):
+ if view.settings().get("ensure_newline_at_eof_on_save") == True:
+ if view.size() > 0 and view.substr(view.size() - 1) != '\n':
+ edit = view.begin_edit()
+ view.insert(edit, view.size(), "\n")
+ view.end_edit(edit)
diff --git a/Default/trim_trailing_white_space.pyc b/Default/trim_trailing_white_space.pyc
new file mode 100644
index 0000000..c5de455
Binary files /dev/null and b/Default/trim_trailing_white_space.pyc differ
diff --git a/Diff/Context.sublime-menu b/Diff/Context.sublime-menu
new file mode 100644
index 0000000..38afeca
--- /dev/null
+++ b/Diff/Context.sublime-menu
@@ -0,0 +1,4 @@
+[
+ { "caption": "-" },
+ { "caption": "Show Unsaved Changes…", "command": "diff_changes" }
+]
diff --git a/Diff/Diff.tmLanguage b/Diff/Diff.tmLanguage
new file mode 100644
index 0000000..601dde1
--- /dev/null
+++ b/Diff/Diff.tmLanguage
@@ -0,0 +1,229 @@
+
+
+
+
+ fileTypes
+
+ diff
+ patch
+
+ firstLineMatch
+ (?x)^
+ (===\ modified\ file
+ |==== \s* // .+ \s - \s .+ \s+ ====
+ |Index:[ ]
+ |---\ [^%]
+ |\*\*\*.*\d{4}\s*$
+ |\d+(,\d+)* (a|d|c) \d+(,\d+)* $
+ |diff\ --git[ ]
+ )
+
+ foldingStartMarker
+ ^\+\+\+
+ foldingStopMarker
+ ^---|^$
+ keyEquivalent
+ ^~D
+ name
+ Diff
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.separator.diff
+
+
+ match
+ ^((\*{15})|(={67})|(-{3}))$\n?
+ name
+ meta.separator.diff
+
+
+ match
+ ^\d+(,\d+)*(a|d|c)\d+(,\d+)*$\n?
+ name
+ meta.diff.range.normal
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.range.diff
+
+ 2
+
+ name
+ meta.toc-list.line-number.diff
+
+ 3
+
+ name
+ punctuation.definition.range.diff
+
+
+ match
+ ^(@@)\s*(.+?)\s*(@@)($\n?)?
+ name
+ meta.diff.range.unified
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.range.diff
+
+ 4
+
+ name
+ punctuation.definition.range.diff
+
+ 6
+
+ name
+ punctuation.definition.range.diff
+
+ 7
+
+ name
+ punctuation.definition.range.diff
+
+
+ match
+ ^(((\-{3}) .+ (\-{4}))|((\*{3}) .+ (\*{4})))$\n?
+ name
+ meta.diff.range.context
+
+
+ captures
+
+ 4
+
+ name
+ punctuation.definition.from-file.diff
+
+ 6
+
+ name
+ punctuation.definition.from-file.diff
+
+ 7
+
+ name
+ punctuation.definition.from-file.diff
+
+
+ match
+ (^(((-{3}) .+)|((\*{3}) .+))$\n?|^(={4}) .+(?= - ))
+ name
+ meta.diff.header.from-file
+
+
+ captures
+
+ 2
+
+ name
+ punctuation.definition.to-file.diff
+
+ 3
+
+ name
+ punctuation.definition.to-file.diff
+
+ 4
+
+ name
+ punctuation.definition.to-file.diff
+
+
+ match
+ (^(\+{3}) .+$\n?| (-) .* (={4})$\n?)
+ name
+ meta.diff.header.to-file
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.inserted.diff
+
+ 6
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(((>)( .*)?)|((\+).*))$\n?
+ name
+ markup.inserted.diff
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(!).*$\n?
+ name
+ markup.changed.diff
+
+
+ captures
+
+ 3
+
+ name
+ punctuation.definition.inserted.diff
+
+ 6
+
+ name
+ punctuation.definition.inserted.diff
+
+
+ match
+ ^(((<)( .*)?)|((-).*))$\n?
+ name
+ markup.deleted.diff
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.key-value.diff
+
+ 2
+
+ name
+ meta.toc-list.file-name.diff
+
+
+ match
+ ^Index(:) (.+)$\n?
+ name
+ meta.diff.index
+
+
+ scopeName
+ source.diff
+ uuid
+ 7E848FF4-708E-11D9-97B4-0011242E4184
+
+
diff --git a/Diff/Diff.tmLanguage.cache b/Diff/Diff.tmLanguage.cache
new file mode 100644
index 0000000..8d21815
Binary files /dev/null and b/Diff/Diff.tmLanguage.cache differ
diff --git a/Diff/Side Bar.sublime-menu b/Diff/Side Bar.sublime-menu
new file mode 100644
index 0000000..030ce8a
--- /dev/null
+++ b/Diff/Side Bar.sublime-menu
@@ -0,0 +1,3 @@
+[
+ { "caption": "Diff Files…", "command": "diff_files", "args": {"files": []} }
+]
diff --git a/Diff/diff.py b/Diff/diff.py
new file mode 100644
index 0000000..df45883
--- /dev/null
+++ b/Diff/diff.py
@@ -0,0 +1,83 @@
+import sublime, sublime_plugin
+import difflib
+import time
+import os.path
+import codecs
+
+class DiffFilesCommand(sublime_plugin.WindowCommand):
+ def run(self, files):
+ if len(files) != 2:
+ return
+
+ try:
+ a = codecs.open(files[1], "r", "utf-8").readlines()
+ b = codecs.open(files[0], "r", "utf-8").readlines()
+ except UnicodeDecodeError:
+ sublime.status_message("Diff only works with UTF-8 files")
+ return
+
+ adate = time.ctime(os.stat(files[1]).st_mtime)
+ bdate = time.ctime(os.stat(files[0]).st_mtime)
+
+ diff = difflib.unified_diff(a, b, files[1], files[0], adate, bdate)
+
+ difftxt = u"".join(line for line in diff)
+
+ if difftxt == "":
+ sublime.status_message("Files are identical")
+ else:
+ v = self.window.new_file()
+ v.set_name(os.path.basename(files[1]) + " -> " + os.path.basename(files[0]))
+ v.set_scratch(True)
+ v.set_syntax_file('Packages/Diff/Diff.tmLanguage')
+ edit = v.begin_edit()
+ v.insert(edit, 0, difftxt)
+ v.end_edit(edit)
+
+ def is_visible(self, files):
+ return len(files) == 2
+
+class DiffChangesCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+
+ fname = self.view.file_name();
+
+ try:
+ a = codecs.open(fname, "r", "utf-8").read().splitlines()
+ b = self.view.substr(sublime.Region(0, self.view.size())).splitlines()
+ except UnicodeDecodeError:
+ sublime.status_message("Diff only works with UTF-8 files")
+ return
+
+ adate = time.ctime(os.stat(fname).st_mtime)
+ bdate = time.ctime()
+
+ diff = difflib.unified_diff(a, b, fname, fname, adate, bdate,lineterm='')
+ difftxt = u"\n".join(line for line in diff)
+
+ if difftxt == "":
+ sublime.status_message("No changes")
+ return
+
+ use_buffer = self.view.settings().get('diff_changes_to_buffer')
+
+ if use_buffer:
+ v = self.view.window().new_file()
+ v.set_name("Unsaved Changes: " + os.path.basename(self.view.file_name()))
+ v.set_scratch(True)
+ v.set_syntax_file('Packages/Diff/Diff.tmLanguage')
+ else:
+ win = self.view.window()
+ v = win.get_output_panel('unsaved_changes')
+ v.set_syntax_file('Packages/Diff/Diff.tmLanguage')
+ v.settings().set('word_wrap', self.view.settings().get('word_wrap'))
+
+ edit = v.begin_edit()
+ v.insert(edit, 0, difftxt)
+ v.end_edit(edit)
+
+ if not use_buffer:
+ win.run_command("show_panel", {"panel": "output.unsaved_changes"})
+
+ def is_enabled(self):
+ return self.view.is_dirty() and self.view.file_name()
diff --git a/Diff/diff.pyc b/Diff/diff.pyc
new file mode 100644
index 0000000..2378e25
Binary files /dev/null and b/Diff/diff.pyc differ
diff --git a/Erlang/Behaviour-Directive.sublime-snippet b/Erlang/Behaviour-Directive.sublime-snippet
new file mode 100644
index 0000000..4748c03
--- /dev/null
+++ b/Erlang/Behaviour-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ beh
+ source.erlang
+ Behaviour Directive
+
diff --git a/Erlang/Case-Expression.sublime-snippet b/Erlang/Case-Expression.sublime-snippet
new file mode 100644
index 0000000..109c4a2
--- /dev/null
+++ b/Erlang/Case-Expression.sublime-snippet
@@ -0,0 +1,9 @@
+
+
+ ${5:body}
+end]]>
+ case
+ source.erlang
+ Case Expression
+
diff --git a/Erlang/Comments.tmPreferences b/Erlang/Comments.tmPreferences
new file mode 100644
index 0000000..1a18f62
--- /dev/null
+++ b/Erlang/Comments.tmPreferences
@@ -0,0 +1,30 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.erlang
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ %
+
+
+ name
+ TM_COMMENT_MODE
+ value
+ line
+
+
+
+ uuid
+ 08AFD8DA-AEFF-4979-98BA-21D5B0A59D33
+
+
diff --git a/Erlang/Comments.tmPreferences.cache b/Erlang/Comments.tmPreferences.cache
new file mode 100644
index 0000000..3d0ca39
Binary files /dev/null and b/Erlang/Comments.tmPreferences.cache differ
diff --git a/Erlang/Define-Directive.sublime-snippet b/Erlang/Define-Directive.sublime-snippet
new file mode 100644
index 0000000..4a1fb00
--- /dev/null
+++ b/Erlang/Define-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ def
+ source.erlang
+ Define Directive
+
diff --git a/Erlang/Erlang.sublime-build b/Erlang/Erlang.sublime-build
new file mode 100644
index 0000000..6aaf47f
--- /dev/null
+++ b/Erlang/Erlang.sublime-build
@@ -0,0 +1,5 @@
+{
+ "cmd": ["erl", "-compile", "$file"],
+ "file_regex":"^([^:]+):([0-9]*):?(.*):?(.*)",
+ "selector": "source.erl"
+}
diff --git a/Erlang/Erlang.tmLanguage b/Erlang/Erlang.tmLanguage
new file mode 100644
index 0000000..ceb3b63
--- /dev/null
+++ b/Erlang/Erlang.tmLanguage
@@ -0,0 +1,2562 @@
+
+
+
+
+ comment
+ The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace). Also, the function/module/record/macro names must be given unquoted. -- desp
+ fileTypes
+
+ erl
+ hrl
+ Emakefile
+ emakefile
+
+ keyEquivalent
+ ^~E
+ name
+ Erlang
+ patterns
+
+
+ include
+ #module-directive
+
+
+ include
+ #import-export-directive
+
+
+ include
+ #record-directive
+
+
+ include
+ #define-directive
+
+
+ include
+ #macro-directive
+
+
+ include
+ #directive
+
+
+ include
+ #function
+
+
+ include
+ #everything-else
+
+
+ repository
+
+ atom
+
+ patterns
+
+
+ begin
+ (')
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.symbol.begin.erlang
+
+
+ end
+ (')
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.symbol.end.erlang
+
+
+ name
+ constant.other.symbol.quoted.single.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3})
+ name
+ constant.other.symbol.escape.erlang
+
+
+ match
+ \\\^?.?
+ name
+ invalid.illegal.atom.erlang
+
+
+
+
+ match
+ [a-z][a-zA-Z\d@_]*+
+ name
+ constant.other.symbol.unquoted.erlang
+
+
+
+ binary
+
+ begin
+ (<<)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.binary.begin.erlang
+
+
+ end
+ (>>)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.binary.end.erlang
+
+
+ name
+ meta.structure.binary.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.binary.erlang
+
+ 2
+
+ name
+ punctuation.separator.value-size.erlang
+
+
+ match
+ (,)|(:)
+
+
+ include
+ #internal-type-specifiers
+
+
+ include
+ #everything-else
+
+
+
+ character
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.character.erlang
+
+ 2
+
+ name
+ constant.character.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+ 5
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\$)((\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3}))
+ name
+ constant.character.erlang
+
+
+ match
+ \$\\\^?.?
+ name
+ invalid.illegal.character.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.character.erlang
+
+
+ match
+ (\$)\S
+ name
+ constant.character.erlang
+
+
+ match
+ \$.?
+ name
+ invalid.illegal.character.erlang
+
+
+
+ comment
+
+ begin
+ (%)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.comment.erlang
+
+
+ end
+ $\n?
+ name
+ comment.line.erlang
+
+ define-directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.define.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.definition.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.define.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ (?=^\s*+-\s*+define\s*+\(\s*+[a-zA-Z\d@_]++\s*+\()
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.define.erlang
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.define.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.definition.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*(,)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ \|\||\||:|;|,|\.|->
+ name
+ punctuation.separator.define.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+
+ directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.erlang
+
+ 3
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.)
+ name
+ meta.directive.erlang
+
+
+
+ everything-else
+
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #record-usage
+
+
+ include
+ #macro-usage
+
+
+ include
+ #expression
+
+
+ include
+ #keyword
+
+
+ include
+ #textual-operator
+
+
+ include
+ #function-call
+
+
+ include
+ #tuple
+
+
+ include
+ #list
+
+
+ include
+ #binary
+
+
+ include
+ #parenthesized-expression
+
+
+ include
+ #character
+
+
+ include
+ #number
+
+
+ include
+ #atom
+
+
+ include
+ #string
+
+
+ include
+ #symbolic-operator
+
+
+ include
+ #variable
+
+
+
+ expression
+
+ patterns
+
+
+ begin
+ \b(if)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.if.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.if.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(case)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.case.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.case.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(receive)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.receive.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.receive.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ keyword.control.fun.erlang
+
+ 3
+
+ name
+ entity.name.type.class.module.erlang
+
+ 4
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 5
+
+ name
+ entity.name.function.erlang
+
+ 6
+
+ name
+ punctuation.separator.function-arity.erlang
+
+
+ match
+ \b(fun)\s*+(([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*(/)
+
+
+ begin
+ \b(fun)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.fun.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.fun.erlang
+ patterns
+
+
+ begin
+ (?=\()
+ end
+ (;)|(?=\bend\b)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clauses.erlang
+
+
+ patterns
+
+
+ include
+ #internal-function-parts
+
+
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(try)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.try.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.try.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(begin)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.begin.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.begin.erlang
+ patterns
+
+
+ include
+ #internal-expression-punctuation
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ \b(query)\b
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.query.erlang
+
+
+ end
+ \b(end)\b
+ endCaptures
+
+ 1
+
+ name
+ keyword.control.end.erlang
+
+
+ name
+ meta.expression.query.erlang
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+
+ function
+
+ begin
+ ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\()
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.definition.erlang
+
+
+ end
+ (\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.terminator.function.erlang
+
+
+ name
+ meta.function.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.erlang
+
+
+ match
+ ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\()
+
+
+ begin
+ (?=\()
+ end
+ (;)|(?=\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clauses.erlang
+
+
+ patterns
+
+
+ include
+ #parenthesized-expression
+
+
+ include
+ #internal-function-parts
+
+
+
+
+ include
+ #everything-else
+
+
+
+ function-call
+
+ begin
+ (?=[a-z][a-zA-Z\d@_]*+\s*+(\(|:\s*+[a-z][a-zA-Z\d@_]*+\s*+\())
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+
+ name
+ meta.function-call.erlang
+ patterns
+
+
+ begin
+ ((erlang)\s*+(:)\s*+)?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)\s*+(\()
+ beginCaptures
+
+ 2
+
+ name
+ entity.name.type.class.module.erlang
+
+ 3
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 4
+
+ name
+ entity.name.function.guard.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (?=\))
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ begin
+ (([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*+(\()
+ beginCaptures
+
+ 2
+
+ name
+ entity.name.type.class.module.erlang
+
+ 3
+
+ name
+ punctuation.separator.module-function.erlang
+
+ 4
+
+ name
+ entity.name.function.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (?=\))
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+
+ import-export-directive
+
+ patterns
+
+
+ begin
+ ^\s*+(-)\s*+(import)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.import.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.module.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.import.erlang
+ patterns
+
+
+ include
+ #internal-function-list
+
+
+
+
+ begin
+ ^\s*+(-)\s*+(export)\s*+(\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.export.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 2
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.export.erlang
+ patterns
+
+
+ include
+ #internal-function-list
+
+
+
+
+
+ internal-expression-punctuation
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.clause-head-body.erlang
+
+ 2
+
+ name
+ punctuation.separator.clauses.erlang
+
+ 3
+
+ name
+ punctuation.separator.expressions.erlang
+
+
+ match
+ (->)|(;)|(,)
+
+ internal-function-list
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.erlang
+
+
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.end.erlang
+
+
+ name
+ meta.structure.list.function.erlang
+ patterns
+
+
+ begin
+ ([a-z][a-zA-Z\d@_]*+)\s*+(/)
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.erlang
+
+ 2
+
+ name
+ punctuation.separator.function-arity.erlang
+
+
+ end
+ (,)|(?=\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.list.erlang
+
+
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ include
+ #everything-else
+
+
+
+ internal-function-parts
+
+ patterns
+
+
+ begin
+ (?=\()
+ end
+ (->)
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.clause-head-body.erlang
+
+
+ patterns
+
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.parameters.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ ,|;
+ name
+ punctuation.separator.guards.erlang
+
+
+ include
+ #everything-else
+
+
+
+
+ match
+ ,
+ name
+ punctuation.separator.expressions.erlang
+
+
+ include
+ #everything-else
+
+
+
+ internal-record-body
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.class.record.begin.erlang
+
+
+ end
+ (?=\})
+ name
+ meta.structure.record.erlang
+ patterns
+
+
+ begin
+ (([a-z][a-zA-Z\d@_]*+)|(_))\s*+(=)
+ beginCaptures
+
+ 2
+
+ name
+ variable.other.field.erlang
+
+ 3
+
+ name
+ variable.language.omitted.field.erlang
+
+ 4
+
+ name
+ keyword.operator.assignment.erlang
+
+
+ end
+ (,)|(?=\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.class.record.erlang
+
+
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+
+ captures
+
+ 1
+
+ name
+ variable.other.field.erlang
+
+ 2
+
+ name
+ punctuation.separator.class.record.erlang
+
+
+ match
+ ([a-z][a-zA-Z\d@_]*+)\s*+(,)?
+
+
+ include
+ #everything-else
+
+
+
+ internal-type-specifiers
+
+ begin
+ (/)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.separator.value-type.erlang
+
+
+ end
+ (?=,|:|>>)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.erlang
+
+ 2
+
+ name
+ storage.modifier.signedness.erlang
+
+ 3
+
+ name
+ storage.modifier.endianness.erlang
+
+ 4
+
+ name
+ storage.modifier.unit.erlang
+
+ 5
+
+ name
+ punctuation.separator.type-specifiers.erlang
+
+
+ match
+ (integer|float|binary)|(signed|unsigned)|(big|little|native)|(unit)|(-)
+
+
+
+ keyword
+
+ match
+ \b(after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\b
+ name
+ keyword.control.erlang
+
+ list
+
+ begin
+ (\[)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.begin.erlang
+
+
+ end
+ (\])
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.list.end.erlang
+
+
+ name
+ meta.structure.list.erlang
+ patterns
+
+
+ match
+ \||\|\||,
+ name
+ punctuation.separator.list.erlang
+
+
+ include
+ #everything-else
+
+
+
+ macro-directive
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.ifdef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(ifdef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.ifdef.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.ifndef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(ifndef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.ifndef.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.undef.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.function.macro.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(undef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.)
+ name
+ meta.directive.undef.erlang
+
+
+
+ macro-usage
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.macro.erlang
+
+ 2
+
+ name
+ entity.name.function.macro.erlang
+
+
+ match
+ (\?\??)\s*+([a-zA-Z\d@_]++)
+ name
+ meta.macro-usage.erlang
+
+ module-directive
+
+ captures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.module.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.module.definition.erlang
+
+ 5
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 6
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ match
+ ^\s*+(-)\s*+(module)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\))\s*+(\.)
+ name
+ meta.directive.module.erlang
+
+ number
+
+ begin
+ (?=\d)
+ end
+ (?!\d)
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.integer-float.erlang
+
+ 3
+
+ name
+ punctuation.separator.float-exponent.erlang
+
+
+ match
+ \d++(\.)\d++(([eE][\+\-])?\d++)?
+ name
+ constant.numeric.float.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 2(#)[0-1]++
+ name
+ constant.numeric.integer.binary.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 3(#)[0-2]++
+ name
+ constant.numeric.integer.base-3.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 4(#)[0-3]++
+ name
+ constant.numeric.integer.base-4.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 5(#)[0-4]++
+ name
+ constant.numeric.integer.base-5.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 6(#)[0-5]++
+ name
+ constant.numeric.integer.base-6.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 7(#)[0-6]++
+ name
+ constant.numeric.integer.base-7.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 8(#)[0-7]++
+ name
+ constant.numeric.integer.octal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 9(#)[0-8]++
+ name
+ constant.numeric.integer.base-9.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 10(#)\d++
+ name
+ constant.numeric.integer.decimal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 11(#)[\daA]++
+ name
+ constant.numeric.integer.base-11.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 12(#)[\da-bA-B]++
+ name
+ constant.numeric.integer.base-12.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 13(#)[\da-cA-C]++
+ name
+ constant.numeric.integer.base-13.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 14(#)[\da-dA-D]++
+ name
+ constant.numeric.integer.base-14.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 15(#)[\da-eA-E]++
+ name
+ constant.numeric.integer.base-15.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 16(#)\h++
+ name
+ constant.numeric.integer.hexadecimal.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 17(#)[\da-gA-G]++
+ name
+ constant.numeric.integer.base-17.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 18(#)[\da-hA-H]++
+ name
+ constant.numeric.integer.base-18.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 19(#)[\da-iA-I]++
+ name
+ constant.numeric.integer.base-19.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 20(#)[\da-jA-J]++
+ name
+ constant.numeric.integer.base-20.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 21(#)[\da-kA-K]++
+ name
+ constant.numeric.integer.base-21.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 22(#)[\da-lA-L]++
+ name
+ constant.numeric.integer.base-22.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 23(#)[\da-mA-M]++
+ name
+ constant.numeric.integer.base-23.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 24(#)[\da-nA-N]++
+ name
+ constant.numeric.integer.base-24.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 25(#)[\da-oA-O]++
+ name
+ constant.numeric.integer.base-25.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 26(#)[\da-pA-P]++
+ name
+ constant.numeric.integer.base-26.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 27(#)[\da-qA-Q]++
+ name
+ constant.numeric.integer.base-27.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 28(#)[\da-rA-R]++
+ name
+ constant.numeric.integer.base-28.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 29(#)[\da-sA-S]++
+ name
+ constant.numeric.integer.base-29.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 30(#)[\da-tA-T]++
+ name
+ constant.numeric.integer.base-30.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 31(#)[\da-uA-U]++
+ name
+ constant.numeric.integer.base-31.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 32(#)[\da-vA-V]++
+ name
+ constant.numeric.integer.base-32.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 33(#)[\da-wA-W]++
+ name
+ constant.numeric.integer.base-33.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 34(#)[\da-xA-X]++
+ name
+ constant.numeric.integer.base-34.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 35(#)[\da-yA-Y]++
+ name
+ constant.numeric.integer.base-35.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.separator.base-integer.erlang
+
+
+ match
+ 36(#)[\da-zA-Z]++
+ name
+ constant.numeric.integer.base-36.erlang
+
+
+ match
+ \d++#[\da-zA-Z]++
+ name
+ invalid.illegal.integer.erlang
+
+
+ match
+ \d++
+ name
+ constant.numeric.integer.decimal.erlang
+
+
+
+ parenthesized-expression
+
+ begin
+ (\()
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.expression.begin.erlang
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.section.expression.end.erlang
+
+
+ name
+ meta.expression.parenthesized
+ patterns
+
+
+ include
+ #everything-else
+
+
+
+ record-directive
+
+ begin
+ ^\s*+(-)\s*+(record)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.section.directive.begin.erlang
+
+ 2
+
+ name
+ keyword.control.directive.import.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.begin.erlang
+
+ 4
+
+ name
+ entity.name.type.class.record.definition.erlang
+
+ 5
+
+ name
+ punctuation.separator.parameters.erlang
+
+
+ end
+ ((\}))\s*+(\))\s*+(\.)
+ endCaptures
+
+ 1
+
+ name
+ meta.structure.record.erlang
+
+ 2
+
+ name
+ punctuation.definition.class.record.end.erlang
+
+ 3
+
+ name
+ punctuation.definition.parameters.end.erlang
+
+ 4
+
+ name
+ punctuation.section.directive.end.erlang
+
+
+ name
+ meta.directive.record.erlang
+ patterns
+
+
+ include
+ #internal-record-body
+
+
+
+ record-usage
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ keyword.operator.record.erlang
+
+ 2
+
+ name
+ entity.name.type.class.record.erlang
+
+ 3
+
+ name
+ punctuation.separator.record-field.erlang
+
+ 4
+
+ name
+ variable.other.field.erlang
+
+
+ match
+ (#)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.)\s*+([a-z][a-zA-Z\d@_]*+)
+ name
+ meta.record-usage.erlang
+
+
+ begin
+ (#)\s*+([a-z][a-zA-Z\d@_]*+)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.record.erlang
+
+ 2
+
+ name
+ entity.name.type.class.record.erlang
+
+
+ end
+ ((\}))
+ endCaptures
+
+ 1
+
+ name
+ meta.structure.record.erlang
+
+ 2
+
+ name
+ punctuation.definition.class.record.end.erlang
+
+
+ name
+ meta.record-usage.erlang
+ patterns
+
+
+ include
+ #internal-record-body
+
+
+
+
+
+ string
+
+ begin
+ (")
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.begin.erlang
+
+
+ end
+ (")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.string.end.erlang
+
+
+ name
+ string.quoted.double.erlang
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.escape.erlang
+
+ 3
+
+ name
+ punctuation.definition.escape.erlang
+
+
+ match
+ (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3})
+ name
+ constant.character.escape.erlang
+
+
+ match
+ \\\^?.?
+ name
+ invalid.illegal.string.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.placeholder.erlang
+
+ 10
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 12
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 3
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 4
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 6
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+ 8
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+
+ match
+ (~)((\-)?\d++|(\*))?((\.)(\d++|(\*)))?((\.)((\*)|.))?[~cfegswpWPBX#bx\+ni]
+ name
+ constant.other.placeholder.erlang
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.placeholder.erlang
+
+ 2
+
+ name
+ punctuation.separator.placeholder-parts.erlang
+
+
+ match
+ (~)(\*)?(\d++)?[~du\-#fsacl]
+ name
+ constant.other.placeholder.erlang
+
+
+ match
+ ~.?
+ name
+ invalid.illegal.string.erlang
+
+
+
+ symbolic-operator
+
+ match
+ \+\+|\+|--|-|\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!
+ name
+ keyword.operator.symbolic.erlang
+
+ textual-operator
+
+ match
+ \b(andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\b
+ name
+ keyword.operator.textual.erlang
+
+ tuple
+
+ begin
+ (\{)
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.definition.tuple.begin.erlang
+
+
+ end
+ (\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.tuple.end.erlang
+
+
+ name
+ meta.structure.tuple.erlang
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.separator.tuple.erlang
+
+
+ include
+ #everything-else
+
+
+
+ variable
+
+ captures
+
+ 1
+
+ name
+ variable.other.erlang
+
+ 2
+
+ name
+ variable.language.omitted.erlang
+
+
+ match
+ (_[a-zA-Z\d@_]++|[A-Z][a-zA-Z\d@_]*+)|(_)
+
+
+ scopeName
+ source.erlang
+ uuid
+ 58EA597D-5158-4BF7-9FB2-B05135D1E166
+
+
diff --git a/Erlang/Erlang.tmLanguage.cache b/Erlang/Erlang.tmLanguage.cache
new file mode 100644
index 0000000..71c0222
Binary files /dev/null and b/Erlang/Erlang.tmLanguage.cache differ
diff --git a/Erlang/Export-Directive.sublime-snippet b/Erlang/Export-Directive.sublime-snippet
new file mode 100644
index 0000000..40e0ac3
--- /dev/null
+++ b/Erlang/Export-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ exp
+ source.erlang
+ Export Directive
+
diff --git a/Erlang/Fun-Expression.sublime-snippet b/Erlang/Fun-Expression.sublime-snippet
new file mode 100644
index 0000000..9c22700
--- /dev/null
+++ b/Erlang/Fun-Expression.sublime-snippet
@@ -0,0 +1,9 @@
+
+
+ ${4:body}
+end]]>
+ fun
+ source.erlang
+ Fun Expression
+
diff --git a/Erlang/Function Symbols.tmPreferences b/Erlang/Function Symbols.tmPreferences
new file mode 100644
index 0000000..c7ee2b8
--- /dev/null
+++ b/Erlang/Function Symbols.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Function Symbols
+ scope
+ source.erlang entity.name.function.definition
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s,$,/,
+
+ uuid
+ 7D7FE91B-0543-4F95-8D99-AF393226415C
+
+
diff --git a/Erlang/Function Symbols.tmPreferences.cache b/Erlang/Function Symbols.tmPreferences.cache
new file mode 100644
index 0000000..42ae1b0
Binary files /dev/null and b/Erlang/Function Symbols.tmPreferences.cache differ
diff --git a/Erlang/HTML (Erlang).tmLanguage b/Erlang/HTML (Erlang).tmLanguage
new file mode 100644
index 0000000..47d7bf6
--- /dev/null
+++ b/Erlang/HTML (Erlang).tmLanguage
@@ -0,0 +1,60 @@
+
+
+
+
+ fileTypes
+
+ yaws
+
+ foldingStartMarker
+ (?x)
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl|erl)\b.*?>
+ |<!--(?!.*-->)
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
+ )
+ foldingStopMarker
+ (?x)
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl|erl)>
+ |^\s*-->
+ |(^|\s)\}
+ )
+ keyEquivalent
+ ^~E
+ name
+ HTML (Erlang)
+ patterns
+
+
+ begin
+ <erl>
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.erlang
+
+
+ end
+ </erl>
+ name
+ source.erlang.embedded.html
+ patterns
+
+
+ include
+ source.erlang
+
+
+
+
+ include
+ text.html.basic
+
+
+ scopeName
+ text.html.erlang.yaws
+ uuid
+ 3FBFF015-B650-4734-848C-47B53ACD5E32
+
+
diff --git a/Erlang/HTML (Erlang).tmLanguage.cache b/Erlang/HTML (Erlang).tmLanguage.cache
new file mode 100644
index 0000000..80c26eb
Binary files /dev/null and b/Erlang/HTML (Erlang).tmLanguage.cache differ
diff --git a/Erlang/If-Expression.sublime-snippet b/Erlang/If-Expression.sublime-snippet
new file mode 100644
index 0000000..6a7ebc8
--- /dev/null
+++ b/Erlang/If-Expression.sublime-snippet
@@ -0,0 +1,9 @@
+
+
+ ${2:body}
+end]]>
+ if
+ source.erlang
+ If Expression
+
diff --git a/Erlang/Ifdef-Directive.sublime-snippet b/Erlang/Ifdef-Directive.sublime-snippet
new file mode 100644
index 0000000..1046768
--- /dev/null
+++ b/Erlang/Ifdef-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ifdef
+ source.erlang
+ Ifdef Directive
+
diff --git a/Erlang/Ifndef-Directive.sublime-snippet b/Erlang/Ifndef-Directive.sublime-snippet
new file mode 100644
index 0000000..71d2395
--- /dev/null
+++ b/Erlang/Ifndef-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ifndef
+ source.erlang
+ Ifndef Directive
+
diff --git a/Erlang/Import-Directive.sublime-snippet b/Erlang/Import-Directive.sublime-snippet
new file mode 100644
index 0000000..0f1ca8d
--- /dev/null
+++ b/Erlang/Import-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ imp
+ source.erlang
+ Import Directive
+
diff --git a/Erlang/Include-Directive.sublime-snippet b/Erlang/Include-Directive.sublime-snippet
new file mode 100644
index 0000000..21076d1
--- /dev/null
+++ b/Erlang/Include-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ inc
+ source.erlang
+ Include Directive
+
diff --git a/Erlang/Indentation Rules.tmPreferences b/Erlang/Indentation Rules.tmPreferences
new file mode 100644
index 0000000..b6733c5
--- /dev/null
+++ b/Erlang/Indentation Rules.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Indentation Rules
+ scope
+ source.erlang
+ settings
+
+ decreaseIndentPattern
+ ^\s*\b(end)\b
+ increaseIndentPattern
+ ^[^%]*(\b(if|case|receive|after|fun|try|catch|begin|query)\b(?!.*\b(end)\b.*))|(->(\s*%.*)?$)
+
+ uuid
+ 34E0D602-ADAE-43F9-A661-0323A821AB75
+
+
diff --git a/Erlang/Indentation Rules.tmPreferences.cache b/Erlang/Indentation Rules.tmPreferences.cache
new file mode 100644
index 0000000..ff7da37
Binary files /dev/null and b/Erlang/Indentation Rules.tmPreferences.cache differ
diff --git a/Erlang/Macro Symbols.tmPreferences b/Erlang/Macro Symbols.tmPreferences
new file mode 100644
index 0000000..8c5fe92
--- /dev/null
+++ b/Erlang/Macro Symbols.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Macro Symbols
+ scope
+ source.erlang entity.name.function.macro.definition
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s/^/?/
+
+ uuid
+ 5EEC72E3-EEA9-4C53-8D70-3903EF1D84E2
+
+
diff --git a/Erlang/Macro Symbols.tmPreferences.cache b/Erlang/Macro Symbols.tmPreferences.cache
new file mode 100644
index 0000000..cbc336c
Binary files /dev/null and b/Erlang/Macro Symbols.tmPreferences.cache differ
diff --git a/Erlang/Module Symbols.tmPreferences b/Erlang/Module Symbols.tmPreferences
new file mode 100644
index 0000000..36b15de
--- /dev/null
+++ b/Erlang/Module Symbols.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Module Symbols
+ scope
+ source.erlang entity.name.type.class.module.definition.erlang
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s/^/-/
+
+ uuid
+ 1250456F-9F83-4BAA-B338-5C9E86E89DD9
+
+
diff --git a/Erlang/Module Symbols.tmPreferences.cache b/Erlang/Module Symbols.tmPreferences.cache
new file mode 100644
index 0000000..228b097
Binary files /dev/null and b/Erlang/Module Symbols.tmPreferences.cache differ
diff --git a/Erlang/Module-Directive.sublime-snippet b/Erlang/Module-Directive.sublime-snippet
new file mode 100644
index 0000000..e50c641
--- /dev/null
+++ b/Erlang/Module-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ mod
+ source.erlang
+ Module Directive
+
diff --git a/Erlang/Receive-Expression.sublime-snippet b/Erlang/Receive-Expression.sublime-snippet
new file mode 100644
index 0000000..b88a12b
--- /dev/null
+++ b/Erlang/Receive-Expression.sublime-snippet
@@ -0,0 +1,12 @@
+
+
+ ${5:body}
+}${6:after
+ ${7:expression} ->
+ ${8:body}
+}end]]>
+ rcv
+ source.erlang
+ Receive Expression
+
diff --git a/Erlang/Record Symbols.tmPreferences b/Erlang/Record Symbols.tmPreferences
new file mode 100644
index 0000000..7ad1dbd
--- /dev/null
+++ b/Erlang/Record Symbols.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+
+ name
+ Record Symbols
+ scope
+ source.erlang entity.name.type.class.record.definition
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+ s/^/#/
+
+ uuid
+ 31DB728C-AC89-4DF0-A2B9-9D3D3A7552A9
+
+
diff --git a/Erlang/Record Symbols.tmPreferences.cache b/Erlang/Record Symbols.tmPreferences.cache
new file mode 100644
index 0000000..4c617b7
Binary files /dev/null and b/Erlang/Record Symbols.tmPreferences.cache differ
diff --git a/Erlang/Record-Directive.sublime-snippet b/Erlang/Record-Directive.sublime-snippet
new file mode 100644
index 0000000..9ddcc0c
--- /dev/null
+++ b/Erlang/Record-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ rec
+ source.erlang
+ Record Directive
+
diff --git a/Erlang/Symbol Overrides.tmPreferences b/Erlang/Symbol Overrides.tmPreferences
new file mode 100644
index 0000000..327c16c
--- /dev/null
+++ b/Erlang/Symbol Overrides.tmPreferences
@@ -0,0 +1,17 @@
+
+
+
+
+ name
+ Symbol Overrides
+ scope
+ source.erlang entity.name.function, source.erlang entity.name.type.class
+ settings
+
+ showInSymbolList
+ 0
+
+ uuid
+ AE84FFDF-2D5A-4331-A301-6CF34CF26CD8
+
+
diff --git a/Erlang/Symbol Overrides.tmPreferences.cache b/Erlang/Symbol Overrides.tmPreferences.cache
new file mode 100644
index 0000000..b44f362
Binary files /dev/null and b/Erlang/Symbol Overrides.tmPreferences.cache differ
diff --git a/Erlang/Try-Expression.sublime-snippet b/Erlang/Try-Expression.sublime-snippet
new file mode 100644
index 0000000..ecd7f85
--- /dev/null
+++ b/Erlang/Try-Expression.sublime-snippet
@@ -0,0 +1,14 @@
+
+
+ ${7:body}}}
+${8:catch
+ ${9:pattern}${10: when ${11:guard}} ->
+ ${12:body}}
+${13:after
+ ${14:body}}
+end]]>
+ try
+ source.erlang
+ Try Expression
+
diff --git a/Erlang/Undef-Directive.sublime-snippet b/Erlang/Undef-Directive.sublime-snippet
new file mode 100644
index 0000000..09454fd
--- /dev/null
+++ b/Erlang/Undef-Directive.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ undef
+ source.erlang
+ Undef Directive
+
diff --git a/Git/.gitignore b/Git/.gitignore
new file mode 100644
index 0000000..b591a13
--- /dev/null
+++ b/Git/.gitignore
@@ -0,0 +1,4 @@
+*.pyc
+*.tmLanguage.cache
+.DS_Store
+package-metadata.json
\ No newline at end of file
diff --git a/Git/CONTRIBUTORS b/Git/CONTRIBUTORS
new file mode 100644
index 0000000..90be6f7
--- /dev/null
+++ b/Git/CONTRIBUTORS
@@ -0,0 +1,28 @@
+These are the people who helped make this plugin:
+
+David Lynch
+Sheldon Els
+Nick Fisher
+Can Yilmaz
+Stefan Buhrmester
+Rafal Chlodnicki
+Daniël de Kok
+David Baumgold
+Iuri de Silvio
+joshuacc
+misfo
+Kevin Smith
+Κώστας Καραχάλιος
+Dominique Wahli
+Fraser Graham
+Hamid Nazari
+Jeff Sandberg
+Joshua Clanton
+Maxim Sukharev
+Niklas Hambüchen
+Patrik Ring
+Scott Bowers
+Weslly Honorato
+brcooley
+jdc0589
+Adam Venturella
diff --git a/Git/Default.sublime-commands b/Git/Default.sublime-commands
new file mode 100644
index 0000000..1000593
--- /dev/null
+++ b/Git/Default.sublime-commands
@@ -0,0 +1,209 @@
+[
+ { "caption": "Git: Init",
+ "command": "git_init"
+ }
+ ,{
+ "caption": "Git: Blame",
+ "command": "git_blame"
+ }
+ ,{
+ "caption": "Git: New Tag",
+ "command": "git_new_tag"
+ }
+ ,{
+ "caption": "Git: Show Tags",
+ "command": "git_show_tags"
+ }
+ ,{
+ "caption": "Git Push Tags",
+ "command": "git_push_tags"
+ }
+ ,{
+ "caption": "Git: Log Current File",
+ "command": "git_log"
+ }
+ ,{
+ "caption": "Git: Log All",
+ "command": "git_log_all"
+ }
+ ,{
+ "caption": "Git: Graph Current File",
+ "command": "git_graph"
+ }
+ ,{
+ "caption": "Git: Graph All",
+ "command": "git_graph_all"
+ }
+ ,{
+ "caption": "Git: Diff Current File",
+ "command": "git_diff"
+ }
+ ,{
+ "caption": "Git: Diff All",
+ "command": "git_diff_all"
+ }
+ ,{
+ "caption": "Git: Diff Staged",
+ "command": "git_diff_commit"
+ }
+ ,{
+ "caption": "Git: Diff Tool",
+ "command": "git_diff_tool"
+ }
+ ,{
+ "caption": "Git: Commit",
+ "command": "git_commit"
+ }
+ ,{
+ "caption": "Git: Amend Commit",
+ "command": "git_commit_amend"
+ }
+ ,{
+ "caption": "Git: Quick Commit",
+ "command": "git_quick_commit"
+ }
+ ,{
+ "caption": "Git: Status",
+ "command": "git_status"
+ }
+ ,{
+ "caption": "Git: Open Modified Files",
+ "command": "git_open_modified_files"
+ }
+ ,{
+ "caption": "Git: New Branch",
+ "command": "git_new_branch"
+ }
+ ,{
+ "caption": "Git: Change Branch",
+ "command": "git_branch"
+ }
+ ,{
+ "caption": "Git: Merge Branch",
+ "command": "git_merge"
+ }
+ ,{
+ "caption": "Git: Delete Branch",
+ "command": "git_delete_branch"
+ }
+ ,{
+ "caption": "Git: Stash Changes",
+ "command": "git_stash"
+ }
+ ,{
+ "caption": "Git: Stash Pop",
+ "command": "git_stash_pop"
+ }
+ ,{
+ "caption": "Git: Stash Apply",
+ "command": "git_stash_apply"
+ }
+ ,{
+ "caption": "Git: Stash Drop",
+ "command": "git_stash_drop"
+ }
+ ,{
+ "caption": "Git: Add Current File",
+ "command": "git_add"
+ }
+ ,{
+ "caption": "Git: Add...",
+ "command": "git_add_choice"
+ }
+ ,{
+ "caption": "Git: Checkout Current File",
+ "command": "git_checkout"
+ }
+ ,{
+ "caption": "Git: Fetch",
+ "command": "git_fetch"
+ }
+ ,{
+ "caption": "Git: Pull",
+ "command": "git_pull"
+ }
+ ,{
+ "caption": "Git: Pull Current Branch",
+ "command": "git_pull_current_branch"
+ }
+ ,{
+ "caption": "Git: Push",
+ "command": "git_push"
+ }
+ ,{
+ "caption": "Git: Push Current Branch",
+ "command": "git_push_current_branch"
+ }
+ ,{
+ "caption": "Git: Show Current File",
+ "command": "git_show"
+ }
+ ,{
+ "caption": "Git: Toggle Annotations",
+ "command": "git_toggle_annotations"
+ }
+ ,{
+ "caption": "Git: Custom Command",
+ "command": "git_custom"
+ }
+ ,{
+ "caption": "Git Flow: Feature Start",
+ "command": "git_flow_feature_start"
+ }
+ ,{
+ "caption": "Git Flow: Feature Finish",
+ "command": "git_flow_feature_finish"
+ }
+ ,{
+ "caption": "Git Flow: Release Start",
+ "command": "git_flow_release_start"
+ }
+ ,{
+ "caption": "Git Flow: Release Finish",
+ "command": "git_flow_release_finish"
+ }
+ ,{
+ "caption": "Git Flow: Hotfix Start",
+ "command": "git_flow_hotfix_start"
+ }
+ ,{
+ "caption": "Git Flow: Hotfix Finish",
+ "command": "git_flow_hotfix_finish"
+ }
+ ,{
+ "caption": "Git: Open...",
+ "command": "git_open_file"
+ }
+ ,{
+ "caption": "Git: Reset (unstage) Current File",
+ "command": "git_reset_head"
+ }
+ ,{
+ "caption": "Git: Reset (unstage) All",
+ "command": "git_reset_head_all"
+ }
+ ,{
+ "caption": "Git: Reset (hard) HEAD",
+ "command": "git_reset_hard_head"
+ }
+ ,{
+ "caption": "Git: Add Selected Hunk",
+ "command": "git_add_selected_hunk"
+ }
+ ,{
+ "caption": "Git: Commit Selected Hunk",
+ "command": "git_commit_selected_hunk"
+ }
+ ,{
+ "caption": "Git: Gui",
+ "command": "git_gui"
+ }
+ ,{
+ "caption": "Git: Gitk",
+ "command": "git_gitk"
+ }
+ ,{
+ "caption": "Git: Commit history",
+ "command": "git_commit_history"
+ }
+]
diff --git a/Git/Git Blame.JSON-tmLanguage b/Git/Git Blame.JSON-tmLanguage
new file mode 100644
index 0000000..d0b4322
--- /dev/null
+++ b/Git/Git Blame.JSON-tmLanguage
@@ -0,0 +1,18 @@
+{ "name": "Git Blame",
+ "scopeName": "text.git-blame",
+ "fileTypes": ["git-blame"],
+ "patterns": [
+ {
+ "match": "^(\\^?[a-f0-9]+)\\s+([\\w\\-\\d\\.\\/]*)\\s*\\((.*?)\\s+(\\d{4}-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d [+-]\\d{4})\\s+(\\d+)\\)",
+ "name": "line.comment.git-blame",
+ "captures": {
+ "1": {"name": "string.sha.git-blame"},
+ "2": {"name": "string.path.git-blame"},
+ "3": {"name": "support.function.author.git-blame"},
+ "4": {"name": "constant.numeric.date.git-blame"},
+ "5": {"name": "variable.parameter.line-number.git-blame"}
+ }
+ }
+ ],
+ "uuid": "5d37add9-889e-4174-b232-4bd423b84c0a"
+}
diff --git a/Git/Git Blame.tmLanguage b/Git/Git Blame.tmLanguage
new file mode 100644
index 0000000..d909cbb
--- /dev/null
+++ b/Git/Git Blame.tmLanguage
@@ -0,0 +1,53 @@
+
+
+
+
+ fileTypes
+
+ git-blame
+
+ name
+ Git Blame
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ string.sha.git-blame
+
+ 2
+
+ name
+ string.path.git-blame
+
+ 3
+
+ name
+ support.function.author.git-blame
+
+ 4
+
+ name
+ constant.numeric.date.git-blame
+
+ 5
+
+ name
+ variable.parameter.line-number.git-blame
+
+
+ match
+ ^(\^?[a-f0-9]+)\s+([\w\-\d\.\/]*)\s*\((.*?)\s+(\d{4}-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d{4})\s+(\d+)\)
+ name
+ line.comment.git-blame
+
+
+ scopeName
+ text.git-blame
+ uuid
+ 5d37add9-889e-4174-b232-4bd423b84c0a
+
+
diff --git a/Git/Git Commit Message.JSON-tmLanguage b/Git/Git Commit Message.JSON-tmLanguage
new file mode 100644
index 0000000..d287027
--- /dev/null
+++ b/Git/Git Commit Message.JSON-tmLanguage
@@ -0,0 +1,21 @@
+{ "name": "Git Commit Message",
+ "scopeName": "text.git-commit",
+ "fileTypes": ["COMMIT_EDITMSG"],
+ "patterns": [
+ { "name": "comment.line.number-sign.git-commit",
+ "match": "^\\s*(#).*$\n?",
+ "captures": {
+ "1": { "name": "punctuation.definition.comment.git-commit" }
+ }
+ },
+ { "name": "meta.diff.git-commit",
+ "comment": "diff at the end of the commit message when using commit -v, or viewing a log. End pattern is just something to be never matched so that the meta continues untill the end of the file.",
+ "begin": "diff\\ \\-\\-git",
+ "end": "(?=xxxxxx)123457",
+ "patterns": [
+ { "include": "source.diff" }
+ ]
+ }
+ ],
+ "uuid": "de3fb2fc-e564-4a31-9813-5ee26967c5c8"
+}
\ No newline at end of file
diff --git a/Git/Git Commit Message.sublime-settings b/Git/Git Commit Message.sublime-settings
new file mode 100644
index 0000000..7bbc12b
--- /dev/null
+++ b/Git/Git Commit Message.sublime-settings
@@ -0,0 +1,5 @@
+{
+ "rulers": [70],
+ "word_wrap": true,
+ "wrap_width": 69
+}
diff --git a/Git/Git Commit Message.tmLanguage b/Git/Git Commit Message.tmLanguage
new file mode 100644
index 0000000..1b46130
--- /dev/null
+++ b/Git/Git Commit Message.tmLanguage
@@ -0,0 +1,51 @@
+
+
+
+
+ fileTypes
+
+ COMMIT_EDITMSG
+
+ name
+ Git Commit Message
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.git-commit
+
+
+ match
+ ^\s*(#).*$
+?
+ name
+ comment.line.number-sign.git-commit
+
+
+ begin
+ diff\ \-\-git
+ comment
+ diff at the end of the commit message when using commit -v, or viewing a log. End pattern is just something to be never matched so that the meta continues untill the end of the file.
+ end
+ (?=xxxxxx)123457
+ name
+ meta.diff.git-commit
+ patterns
+
+
+ include
+ source.diff
+
+
+
+
+ scopeName
+ text.git-commit
+ uuid
+ de3fb2fc-e564-4a31-9813-5ee26967c5c8
+
+
diff --git a/Git/Git Graph.JSON-tmLanguage b/Git/Git Graph.JSON-tmLanguage
new file mode 100644
index 0000000..926b3d6
--- /dev/null
+++ b/Git/Git Graph.JSON-tmLanguage
@@ -0,0 +1,31 @@
+{ "name": "Git Graph",
+ "scopeName": "text.git-graph",
+ "fileTypes": ["git-graph"],
+ "patterns": [
+ { "match": "^([| *\\\\]+)([0-9a-f]{4,40}) (.*?) (\\d{4}-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d [+-]\\d{4}) (?:\\(((?:[a-zA-Z0-9._\\-\\/]+(?:, )?)+)\\) )?",
+ "name": "log-entry.git-graph",
+ "captures": {
+ "1": {"name": "comment.git-graph" },
+ "2": {"name": "string.git-graph" },
+ "3": {"name": "support.function.git-graph" },
+ "4": {"name": "constant.numeric.git-graph" },
+ "5": {"name": "variable.parameter.git-graph" }
+ }
+ },
+ { "match": "^\\|[\\|_\\/\\\\ ]+\n?$",
+ "name": "comment.git-graph",
+ "comment": "lines with no commit details"
+ },
+ { "match": "(?:[Ff]ix(?:e[ds])?|[Rr]esolve[ds]?|[Cc]lose[ds]?)?\\s*(?:#\\d+|\\[.*?\\])",
+ "name": "keyword.git-graph",
+ "comment": "issue numbers"
+ },
+ { "match": "Merge branch '(.*?)' of .*?\n?$",
+ "name": "comment.git-graph",
+ "captures": {
+ "1": {"name": "variable.parameter.git-graph"}
+ }
+ }
+ ],
+ "uuid": "b900521e-af64-471b-aec8-1ecf88aab595"
+}
diff --git a/Git/Git Graph.tmLanguage b/Git/Git Graph.tmLanguage
new file mode 100644
index 0000000..4c19eec
--- /dev/null
+++ b/Git/Git Graph.tmLanguage
@@ -0,0 +1,90 @@
+
+
+
+
+ fileTypes
+
+ git-graph
+
+ name
+ Git Graph
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ comment.git-graph
+
+ 2
+
+ name
+ string.git-graph
+
+ 3
+
+ name
+ support.function.git-graph
+
+ 4
+
+ name
+ constant.numeric.git-graph
+
+ 5
+
+ name
+ variable.parameter.git-graph
+
+ 6
+
+ name
+ keyword.git-graph
+
+
+ match
+ ^([| *\\]+)([0-9a-f]{4,40}) -( \(.*?\))? (.*) (\(.*) (<.*>) .*
+ name
+ log-entry.git-graph
+
+
+ comment
+ lines with no commit details
+ match
+ ^\|[\|_\/\\ ]+
+?$
+ name
+ comment.git-graph
+
+
+ comment
+ issue numbers
+ match
+ (?:[Ff]ix(?:e[ds])?|[Rr]esolve[ds]?|[Cc]lose[ds]?)?\s*(?:#\d+|\[.*?\])
+ name
+ keyword.git-graph
+
+
+ captures
+
+ 1
+
+ name
+ variable.parameter.git-graph
+
+
+ match
+ Merge branch '(.*?)' of .*?
+?$
+ name
+ comment.git-graph
+
+
+ scopeName
+ text.git-graph
+ uuid
+ b900521e-af64-471b-aec8-1ecf88aab595
+
+
diff --git a/Git/Git.sublime-settings b/Git/Git.sublime-settings
new file mode 100644
index 0000000..c9d69ea
--- /dev/null
+++ b/Git/Git.sublime-settings
@@ -0,0 +1,36 @@
+{
+ // save before running commands
+ "save_first": true
+
+ // if present, use this command instead of plain "git"
+ // e.g. "/Users/kemayo/bin/git" or "C:\bin\git.exe"
+ ,"git_command": false
+
+ // point this the installation location of git-flow
+ ,"git_flow_command": "/usr/local/bin/git-flow"
+
+ // use the panel for diff output, rather than a new scratch window (new tab)
+ ,"diff_panel": false
+
+ // affects blame command when no selection is made
+ // true: blame whole file
+ // false: blame only current line
+ ,"blame_whole_file": true
+
+ // If you'd rather have your status command open files instead of show you a
+ // diff, set this to true. You can still do `Git: Status` followed by
+ // 'Git: Diff Current File' to get a file diff
+ ,"status_opens_file": false
+
+ // Use --verbose flag for commit messages
+ ,"verbose_commits": true
+
+ // How many commit messages to store in the history. Set to 0 to disable.
+ ,"history_size": 5
+
+ // Show git flow commands
+ ,"flow": false
+
+ // Annotations default to being on for all files. Can be slow in some cases.
+ ,"annotations": false
+}
diff --git a/Git/Main.sublime-menu b/Git/Main.sublime-menu
new file mode 100644
index 0000000..a674d35
--- /dev/null
+++ b/Git/Main.sublime-menu
@@ -0,0 +1,124 @@
+[
+ {
+ "id": "tools",
+ "children":
+ [
+ {
+ "caption": "Git",
+ "children":
+ [
+ {
+ "caption": "This file",
+ "children":
+ [
+ { "caption": "Log", "command": "git_log" }
+ ,{ "caption": "Graph", "command": "git_graph" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Diff", "command": "git_diff" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Add", "command": "git_add" }
+ ,{ "caption": "Add Selected Hunk", "command": "git_add_selected_hunk" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Reset", "command": "git_reset_head" }
+ ,{ "caption": "Checkout (Discard Changes)", "command": "git_checkout" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Quick Commit Current File", "command": "git_quick_commit" }
+ ,{ "caption": "Commit Selected Hunk", "command": "git_commit_selected_hunk" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Blame", "command": "git_blame" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Toggle Annotations", "command": "git_toggle_annotations" }
+ ]
+ }
+ ,{
+ "caption": "Whole repo",
+ "children":
+ [
+ { "caption": "Log", "command": "git_log_all" }
+ ,{ "caption": "Graph", "command": "git_graph_all" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Diff", "command": "git_diff_all" }
+ ,{ "caption": "Diff Staged", "command": "git_diff_commit" }
+ ,{ "caption": "Diff Tool", "command": "git_diff_tool" }
+ ,{ "caption": "Reset Hard", "command": "git_reset_hard_head" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Add...", "command": "git_add_choice" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Reset", "command": "git_reset_head_all" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Commit", "command": "git_commit" }
+ ,{ "caption": "Amend Last Commit", "command": "git_commit_amend" }
+ ,{ "caption": "-" }
+ ,{ "caption": "Open...", "command": "git_open_file" }
+ ]
+ }
+ ,{
+ "caption": "Stash",
+ "children":
+ [
+ { "caption": "Save", "command": "git_stash" }
+ ,{ "caption": "Pop", "command": "git_stash_pop" }
+ ,{ "caption": "Apply", "command": "git_stash_apply" }
+ ,{ "caption": "Drop", "command": "git_stash_drop" }
+ ]
+ }
+ ,{ "caption": "-" }
+ ,{
+ "caption": "Flow",
+ "children":
+ [
+ { "caption": "Feature Start", "command": "git_flow_feature_start"}
+ ,{ "caption": "Feature Finish", "command": "git_flow_feature_finish"}
+ ,{ "caption": "-"}
+ ,{ "caption": "Release Start", "command": "git_flow_release_start"}
+ ,{ "caption": "Release Finish", "command": "git_flow_release_finish"}
+ ,{ "caption": "-"}
+ ,{ "caption": "Hotfix Start", "command": "git_flow_hotfix_start"}
+ ,{ "caption": "Hotfix Finish", "command": "git_flow_hotfix_finish"}
+ ]
+ }
+ ,{ "caption": "-" }
+ ,{ "caption": "Init", "command": "git_init"}
+ ,{ "caption": "Status...", "command": "git_status" }
+ ,{ "caption": "Branches...", "command": "git_branch" }
+ ,{ "caption": "Merge...", "command": "git_merge" }
+ ,{ "caption": "See commit history...", "command": "git_commit_history"}
+ ]
+ }
+ ]
+ }
+
+ ,{
+ "caption": "Preferences",
+ "mnemonic": "n",
+ "id": "preferences",
+ "children":
+ [
+ {
+ "caption": "Package Settings",
+ "mnemonic": "P",
+ "id": "package-settings",
+ "children":
+ [
+ {
+ "caption": "Git",
+ "children":
+ [
+ {
+ "command": "open_file",
+ "args": {"file": "${packages}/Git/Git.sublime-settings"},
+ "caption": "Settings – Default"
+ },
+ {
+ "command": "open_file",
+ "args": {"file": "${packages}/User/Git.sublime-settings"},
+ "caption": "Settings – User"
+ },
+ { "caption": "-" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/Git/README.markdown b/Git/README.markdown
new file mode 100644
index 0000000..908e756
--- /dev/null
+++ b/Git/README.markdown
@@ -0,0 +1,22 @@
+# Sublime Text 2 plugin: git
+
+Git integration: it's pretty handy. Who knew, right?
+
+For more information about what's supported, and how to install this, [check the wiki](https://github.com/kemayo/sublime-text-2-git/wiki).
+
+## Install
+
+### Package Control
+
+The easiest way to install this is with [Package Control](http://wbond.net/sublime\_packages/package\_control).
+
+ * If you just went and installed Package Control, you probably need to restart Sublime Text 2 before doing this next bit.
+ * Bring up the Command Palette (Command+Shift+p on OS X, Control+Shift+p on Linux/Windows).
+ * Select "Package Control: Install Package" (it'll take a few seconds)
+ * Select Git when the list appears.
+
+Package Control will automatically keep Git up to date with the latest version.
+
+### The rest
+
+If you don't want to use Package Control, [check the wiki](https://github.com/kemayo/sublime-text-2-git/wiki) for other installation methods on various platforms.
diff --git a/Git/git.py b/Git/git.py
new file mode 100644
index 0000000..3f59c9d
--- /dev/null
+++ b/Git/git.py
@@ -0,0 +1,1292 @@
+import os
+import sublime
+import sublime_plugin
+import threading
+import subprocess
+import functools
+import tempfile
+import os.path
+import re
+import time
+
+# when sublime loads a plugin it's cd'd into the plugin directory. Thus
+# __file__ is useless for my purposes. What I want is "Packages/Git", but
+# allowing for the possibility that someone has renamed the file.
+# Fun discovery: Sublime on windows still requires posix path separators.
+PLUGIN_DIRECTORY = os.getcwd().replace(os.path.normpath(os.path.join(os.getcwd(), '..', '..')) + os.path.sep, '').replace(os.path.sep, '/')
+
+history = []
+
+
+def main_thread(callback, *args, **kwargs):
+ # sublime.set_timeout gets used to send things onto the main thread
+ # most sublime.[something] calls need to be on the main thread
+ sublime.set_timeout(functools.partial(callback, *args, **kwargs), 0)
+
+
+def open_url(url):
+ sublime.active_window().run_command('open_url', {"url": url})
+
+
+git_root_cache = {}
+def git_root(directory):
+ global git_root_cache
+
+ retval = False
+ leaf_dir = directory
+
+ if leaf_dir in git_root_cache and git_root_cache[leaf_dir]['expires'] > time.time():
+ return git_root_cache[leaf_dir]['retval']
+
+ while directory:
+ if os.path.exists(os.path.join(directory, '.git')):
+ retval = directory
+ break
+ parent = os.path.realpath(os.path.join(directory, os.path.pardir))
+ if parent == directory:
+ # /.. == /
+ retval = False
+ break
+ directory = parent
+
+ git_root_cache[leaf_dir] = { 'retval': retval, 'expires': time.time() + 5 }
+
+ return retval
+
+
+# for readability code
+def git_root_exist(directory):
+ return git_root(directory)
+
+
+def view_contents(view):
+ region = sublime.Region(0, view.size())
+ return view.substr(region)
+
+
+def plugin_file(name):
+ return os.path.join(PLUGIN_DIRECTORY, name)
+
+
+def do_when(conditional, callback, *args, **kwargs):
+ if conditional():
+ return callback(*args, **kwargs)
+ sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
+
+
+def _make_text_safeish(text, fallback_encoding, method='decode'):
+ # The unicode decode here is because sublime converts to unicode inside
+ # insert in such a way that unknown characters will cause errors, which is
+ # distinctly non-ideal... and there's no way to tell what's coming out of
+ # git in output. So...
+ try:
+ unitext = getattr(text, method)('utf-8')
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ unitext = getattr(text, method)(fallback_encoding)
+ return unitext
+
+
+class CommandThread(threading.Thread):
+ def __init__(self, command, on_done, working_dir="", fallback_encoding="", **kwargs):
+ threading.Thread.__init__(self)
+ self.command = command
+ self.on_done = on_done
+ self.working_dir = working_dir
+ if "stdin" in kwargs:
+ self.stdin = kwargs["stdin"]
+ else:
+ self.stdin = None
+ if "stdout" in kwargs:
+ self.stdout = kwargs["stdout"]
+ else:
+ self.stdout = subprocess.PIPE
+ self.fallback_encoding = fallback_encoding
+ self.kwargs = kwargs
+
+ def run(self):
+ try:
+ # Per http://bugs.python.org/issue8557 shell=True is required to
+ # get $PATH on Windows. Yay portable code.
+ shell = os.name == 'nt'
+ if self.working_dir != "":
+ os.chdir(self.working_dir)
+
+ proc = subprocess.Popen(self.command,
+ stdout=self.stdout, stderr=subprocess.STDOUT,
+ stdin=subprocess.PIPE,
+ shell=shell, universal_newlines=True)
+ output = proc.communicate(self.stdin)[0]
+ if not output:
+ output = ''
+ # if sublime's python gets bumped to 2.7 we can just do:
+ # output = subprocess.check_output(self.command)
+ main_thread(self.on_done,
+ _make_text_safeish(output, self.fallback_encoding), **self.kwargs)
+ except subprocess.CalledProcessError, e:
+ main_thread(self.on_done, e.returncode)
+ except OSError, e:
+ if e.errno == 2:
+ main_thread(sublime.error_message, "Git binary could not be found in PATH\n\nConsider using the git_command setting for the Git plugin\n\nPATH is: %s" % os.environ['PATH'])
+ else:
+ raise e
+
+
+# A base for all commands
+class GitCommand(object):
+ may_change_files = False
+
+ def run_command(self, command, callback=None, show_status=True,
+ filter_empty_args=True, no_save=False, **kwargs):
+ if filter_empty_args:
+ command = [arg for arg in command if arg]
+ if 'working_dir' not in kwargs:
+ kwargs['working_dir'] = self.get_working_dir()
+ if 'fallback_encoding' not in kwargs and self.active_view() and self.active_view().settings().get('fallback_encoding'):
+ kwargs['fallback_encoding'] = self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
+
+ s = sublime.load_settings("Git.sublime-settings")
+ if s.get('save_first') and self.active_view() and self.active_view().is_dirty() and not no_save:
+ self.active_view().run_command('save')
+ if command[0] == 'git' and s.get('git_command'):
+ command[0] = s.get('git_command')
+ if command[0] == 'git-flow' and s.get('git_flow_command'):
+ command[0] = s.get('git_flow_command')
+ if not callback:
+ callback = self.generic_done
+
+ thread = CommandThread(command, callback, **kwargs)
+ thread.start()
+
+ if show_status:
+ message = kwargs.get('status_message', False) or ' '.join(command)
+ sublime.status_message(message)
+
+ def generic_done(self, result):
+ if self.may_change_files and self.active_view() and self.active_view().file_name():
+ if self.active_view().is_dirty():
+ result = "WARNING: Current view is dirty.\n\n"
+ else:
+ # just asking the current file to be re-opened doesn't do anything
+ print "reverting"
+ position = self.active_view().viewport_position()
+ self.active_view().run_command('revert')
+ do_when(lambda: not self.active_view().is_loading(), lambda: self.active_view().set_viewport_position(position, False))
+ # self.active_view().show(position)
+
+ view = self.active_view()
+ if view and view.settings().get('live_git_annotations'):
+ self.view.run_command('git_annotate')
+
+ if not result.strip():
+ return
+ self.panel(result)
+
+ def _output_to_view(self, output_file, output, clear=False,
+ syntax="Packages/Diff/Diff.tmLanguage", **kwargs):
+ output_file.set_syntax_file(syntax)
+ edit = output_file.begin_edit()
+ if clear:
+ region = sublime.Region(0, self.output_view.size())
+ output_file.erase(edit, region)
+ output_file.insert(edit, 0, output)
+ output_file.end_edit(edit)
+
+ def scratch(self, output, title=False, position=None, **kwargs):
+ scratch_file = self.get_window().new_file()
+ if title:
+ scratch_file.set_name(title)
+ scratch_file.set_scratch(True)
+ self._output_to_view(scratch_file, output, **kwargs)
+ scratch_file.set_read_only(True)
+ if position:
+ sublime.set_timeout(lambda: scratch_file.set_viewport_position(position), 0)
+ return scratch_file
+
+ def panel(self, output, **kwargs):
+ if not hasattr(self, 'output_view'):
+ self.output_view = self.get_window().get_output_panel("git")
+ self.output_view.set_read_only(False)
+ self._output_to_view(self.output_view, output, clear=True, **kwargs)
+ self.output_view.set_read_only(True)
+ self.get_window().run_command("show_panel", {"panel": "output.git"})
+
+ def quick_panel(self, *args, **kwargs):
+ self.get_window().show_quick_panel(*args, **kwargs)
+
+
+# A base for all git commands that work with the entire repository
+class GitWindowCommand(GitCommand, sublime_plugin.WindowCommand):
+ def active_view(self):
+ return self.window.active_view()
+
+ def _active_file_name(self):
+ view = self.active_view()
+ if view and view.file_name() and len(view.file_name()) > 0:
+ return view.file_name()
+
+ @property
+ def fallback_encoding(self):
+ if self.active_view() and self.active_view().settings().get('fallback_encoding'):
+ return self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
+
+ # If there's no active view or the active view is not a file on the
+ # filesystem (e.g. a search results view), we can infer the folder
+ # that the user intends Git commands to run against when there's only
+ # only one.
+ def is_enabled(self):
+ if self._active_file_name() or len(self.window.folders()) == 1:
+ return git_root(self.get_working_dir())
+
+ def get_file_name(self):
+ return ''
+
+ # If there is a file in the active view use that file's directory to
+ # search for the Git root. Otherwise, use the only folder that is
+ # open.
+ def get_working_dir(self):
+ file_name = self._active_file_name()
+ if file_name:
+ return os.path.realpath(os.path.dirname(file_name))
+ else:
+ try: # handle case with no open folder
+ return self.window.folders()[0]
+ except IndexError:
+ return ''
+
+ def get_window(self):
+ return self.window
+
+
+# A base for all git commands that work with the file in the active view
+class GitTextCommand(GitCommand, sublime_plugin.TextCommand):
+ def active_view(self):
+ return self.view
+
+ def is_enabled(self):
+ # First, is this actually a file on the file system?
+ if self.view.file_name() and len(self.view.file_name()) > 0:
+ return git_root(self.get_working_dir())
+
+ def get_file_name(self):
+ return os.path.basename(self.view.file_name())
+
+ def get_working_dir(self):
+ return os.path.realpath(os.path.dirname(self.view.file_name()))
+
+ def get_window(self):
+ # Fun discovery: if you switch tabs while a command is working,
+ # self.view.window() is None. (Admittedly this is a consequence
+ # of my deciding to do async command processing... but, hey,
+ # got to live with that now.)
+ # I did try tracking the window used at the start of the command
+ # and using it instead of view.window() later, but that results
+ # panels on a non-visible window, which is especially useless in
+ # the case of the quick panel.
+ # So, this is not necessarily ideal, but it does work.
+ return self.view.window() or sublime.active_window()
+
+
+class GitInit(object):
+ def git_init(self, directory):
+ if os.path.exists(directory):
+ self.run_command(['git', 'init'], self.git_inited, working_dir = directory)
+ else:
+ sublime.status_message("Directory does not exist.")
+
+ def git_inited(self, result):
+ sublime.status_message(result)
+
+
+class GitInitCommand(GitInit, GitWindowCommand):
+ def run(self):
+ self.get_window().show_input_panel("Git directory", self.get_working_dir(), self.git_init, None, None)
+
+ def is_enabled(self):
+ if not git_root_exist(self.get_working_dir()):
+ return True
+ else:
+ return False
+
+
+class GitBlameCommand(GitTextCommand):
+ def run(self, edit):
+ # somewhat custom blame command:
+ # -w: ignore whitespace changes
+ # -M: retain blame when moving lines
+ # -C: retain blame when copying lines between files
+ command = ['git', 'blame', '-w', '-M', '-C']
+
+ s = sublime.load_settings("Git.sublime-settings")
+ selection = self.view.sel()[0] # todo: multi-select support?
+ if not selection.empty() or not s.get('blame_whole_file'):
+ # just the lines we have a selection on
+ begin_line, begin_column = self.view.rowcol(selection.begin())
+ end_line, end_column = self.view.rowcol(selection.end())
+ # blame will fail if last line is empty and is included in the selection
+ if end_line > begin_line and end_column == 0:
+ end_line -= 1
+ lines = str(begin_line + 1) + ',' + str(end_line + 1)
+ command.extend(('-L', lines))
+ callback = self.blame_done
+ else:
+ callback = functools.partial(self.blame_done,
+ position=self.view.viewport_position())
+
+ command.append(self.get_file_name())
+ self.run_command(command, callback)
+
+ def blame_done(self, result, position=None):
+ self.scratch(result, title="Git Blame", position=position,
+ syntax=plugin_file("Git Blame.tmLanguage"))
+
+
+class GitLog(object):
+ def run(self, edit=None):
+ return self.run_log('--', self.get_file_name())
+
+ def run_log(self, *args):
+ # the ASCII bell (\a) is just a convenient character I'm pretty sure
+ # won't ever come up in the subject of the commit (and if it does then
+ # you positively deserve broken output...)
+ # 9000 is a pretty arbitrarily chosen limit; picked entirely because
+ # it's about the size of the largest repo I've tested this on... and
+ # there's a definite hiccup when it's loading that
+ command = ['git', 'log', '--pretty=%s\a%h %an <%aE>\a%ad (%ar)',
+ '--date=local', '--max-count=9000', '--follow' if args[1] else None]
+ command.extend(args)
+ self.run_command(
+ command,
+ self.log_done)
+
+ def log_done(self, result):
+ self.results = [r.split('\a', 2) for r in result.strip().split('\n')]
+ self.quick_panel(self.results, self.log_panel_done)
+
+ def log_panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ item = self.results[picked]
+ # the commit hash is the first thing on the second line
+ self.log_result(item[1].split(' ')[0])
+
+ def log_result(self, ref):
+ # I'm not certain I should have the file name here; it restricts the
+ # details to just the current file. Depends on what the user expects...
+ # which I'm not sure of.
+ self.run_command(
+ ['git', 'log', '-p', '-1', ref, '--', self.get_file_name()],
+ self.details_done)
+
+ def details_done(self, result):
+ self.scratch(result, title="Git Commit Details", syntax=plugin_file("Git Commit Message.tmLanguage"))
+
+
+class GitLogCommand(GitLog, GitTextCommand):
+ pass
+
+
+class GitLogAllCommand(GitLog, GitWindowCommand):
+ pass
+
+
+class GitShow(object):
+ def run(self, edit=None):
+ # GitLog Copy-Past
+ self.run_command(
+ ['git', 'log', '--pretty=%s\a%h %an <%aE>\a%ad (%ar)',
+ '--date=local', '--max-count=9000', '--', self.get_file_name()],
+ self.show_done)
+
+ def show_done(self, result):
+ # GitLog Copy-Past
+ self.results = [r.split('\a', 2) for r in result.strip().split('\n')]
+ self.quick_panel(self.results, self.panel_done)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ item = self.results[picked]
+ # the commit hash is the first thing on the second line
+ ref = item[1].split(' ')[0]
+ # Make full file name
+ working_dir = self.get_working_dir()
+ file_path = working_dir.replace(git_root(working_dir), '')[1:]
+ file_name = os.path.join(file_path, self.get_file_name())
+ self.run_command(
+ ['git', 'show', '%s:%s' % (ref, file_name)],
+ self.details_done,
+ ref=ref)
+
+ def details_done(self, result, ref):
+ syntax = self.view.settings().get('syntax')
+ self.scratch(result, title="%s:%s" % (ref, self.get_file_name()), syntax=syntax)
+
+
+class GitShowCommand(GitShow, GitTextCommand):
+ pass
+
+
+class GitShowAllCommand(GitShow, GitWindowCommand):
+ pass
+
+
+class GitGraph(object):
+ def run(self, edit=None):
+ filename = self.get_file_name()
+ self.run_command(
+ ['git', 'log', '--graph', '--pretty=%h -%d (%cr) (%ci) <%an> %s', '--abbrev-commit', '--no-color', '--decorate', '--date=relative', '--follow' if filename else None, '--', filename],
+ self.log_done
+ )
+
+ def log_done(self, result):
+ self.scratch(result, title="Git Log Graph", syntax=plugin_file("Git Graph.tmLanguage"))
+
+
+class GitGraphCommand(GitGraph, GitTextCommand):
+ pass
+
+class GitGraphAllCommand(GitGraph, GitWindowCommand):
+ pass
+
+class GitDiff (object):
+ def run(self, edit=None):
+ self.run_command(['git', 'diff', '--no-color', '--', self.get_file_name()],
+ self.diff_done)
+
+ def diff_done(self, result):
+ if not result.strip():
+ self.panel("No output")
+ return
+ s = sublime.load_settings("Git.sublime-settings")
+ if s.get('diff_panel'):
+ view = self.panel(result)
+ else:
+ view = self.scratch(result, title="Git Diff")
+
+ lines_inserted = view.find_all(r'^\+[^+]{2} ')
+ lines_deleted = view.find_all(r'^-[^-]{2} ')
+
+ view.add_regions("inserted", lines_inserted, "markup.inserted.diff", "dot", sublime.HIDDEN)
+ view.add_regions("deleted", lines_deleted, "markup.deleted.diff", "dot", sublime.HIDDEN)
+
+
+class GitDiffCommit (object):
+ def run(self, edit=None):
+ self.run_command(['git', 'diff', '--cached', '--no-color'],
+ self.diff_done)
+
+ def diff_done(self, result):
+ if not result.strip():
+ self.panel("No output")
+ return
+ self.scratch(result, title="Git Diff")
+
+
+class GitDiffCommand(GitDiff, GitTextCommand):
+ pass
+
+
+class GitDiffAllCommand(GitDiff, GitWindowCommand):
+ pass
+
+
+class GitDiffCommitCommand(GitDiffCommit, GitWindowCommand):
+ pass
+
+
+class GitDiffTool(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'difftool'])
+
+
+class GitQuickCommitCommand(GitTextCommand):
+ def run(self, edit):
+ self.get_window().show_input_panel("Message", "",
+ self.on_input, None, None)
+
+ def on_input(self, message):
+ if message.strip() == "":
+ self.panel("No commit message provided")
+ return
+ self.run_command(['git', 'add', self.get_file_name()],
+ functools.partial(self.add_done, message))
+
+ def add_done(self, message, result):
+ if result.strip():
+ sublime.error_message("Error adding file:\n" + result)
+ return
+ self.run_command(['git', 'commit', '-m', message])
+
+
+# Commit is complicated. It'd be easy if I just wanted to let it run
+# on OSX, and assume that subl was in the $PATH. However... I can't do
+# that. Second choice was to set $GIT_EDITOR to sublime text for the call
+# to commit, and let that Just Work. However, on Windows you can't pass
+# -w to sublime, which means the editor won't wait, and so the commit will fail
+# with an empty message.
+# Thus this flow:
+# 1. `status --porcelain --untracked-files=no` to know whether files need
+# to be committed
+# 2. `status` to get a template commit message (not the exact one git uses; I
+# can't see a way to ask it to output that, which is not quite ideal)
+# 3. Create a scratch buffer containing the template
+# 4. When this buffer is closed, get its contents with an event handler and
+# pass execution back to the original command. (I feel that the way this
+# is done is a total hack. Unfortunately, I cannot see a better way right
+# now.)
+# 5. Strip lines beginning with # from the message, and save in a temporary
+# file
+# 6. `commit -F [tempfile]`
+class GitCommitCommand(GitWindowCommand):
+ active_message = False
+ extra_options = ""
+
+ def run(self):
+ self.lines = []
+ self.working_dir = self.get_working_dir()
+ self.run_command(
+ ['git', 'status', '--untracked-files=no', '--porcelain'],
+ self.porcelain_status_done
+ )
+
+ def porcelain_status_done(self, result):
+ # todo: split out these status-parsing things... asdf
+ has_staged_files = False
+ result_lines = result.rstrip().split('\n')
+ for line in result_lines:
+ if line and not line[0].isspace():
+ has_staged_files = True
+ break
+ if not has_staged_files:
+ self.panel("Nothing to commit")
+ return
+ # Okay, get the template!
+ s = sublime.load_settings("Git.sublime-settings")
+ if s.get("verbose_commits"):
+ self.run_command(['git', 'diff', '--staged', '--no-color'], self.diff_done)
+ else:
+ self.run_command(['git', 'status'], self.diff_done)
+
+ def diff_done(self, result):
+ settings = sublime.load_settings("Git.sublime-settings")
+ historySize = settings.get('history_size')
+
+ def format(line):
+ return '# ' + line.replace("\n", " ")
+
+ if not len(self.lines):
+ self.lines = ["", ""]
+
+ self.lines.extend(map(format, history[:historySize]))
+ self.lines.extend([
+ "# --------------",
+ "# Please enter the commit message for your changes. Everything below",
+ "# this paragraph is ignored, and an empty message aborts the commit.",
+ "# Just close the window to accept your message.",
+ result.strip()
+ ])
+ template = "\n".join(self.lines)
+ msg = self.window.new_file()
+ msg.set_scratch(True)
+ msg.set_name("COMMIT_EDITMSG")
+ self._output_to_view(msg, template, syntax=plugin_file("Git Commit Message.tmLanguage"))
+ msg.sel().clear()
+ msg.sel().add(sublime.Region(0, 0))
+ GitCommitCommand.active_message = self
+
+ def message_done(self, message):
+ # filter out the comments (git commit doesn't do this automatically)
+ settings = sublime.load_settings("Git.sublime-settings")
+ historySize = settings.get('history_size')
+ lines = [line for line in message.split("\n# --------------")[0].split("\n")
+ if not line.lstrip().startswith('#')]
+ message = '\n'.join(lines).strip()
+
+ if len(message) and historySize:
+ history.insert(0, message)
+ # write the temp file
+ message_file = tempfile.NamedTemporaryFile(delete=False)
+ message_file.write(_make_text_safeish(message, self.fallback_encoding, 'encode'))
+ message_file.close()
+ self.message_file = message_file
+ # and actually commit
+ self.run_command(['git', 'commit', '-F', message_file.name, self.extra_options],
+ self.commit_done, working_dir=self.working_dir)
+
+ def commit_done(self, result):
+ os.remove(self.message_file.name)
+ self.panel(result)
+
+class GitCommitAmendCommand(GitCommitCommand):
+ extra_options = "--amend"
+
+ def diff_done(self, result):
+ self.after_show = result
+ self.run_command(['git','log','-n','1','--format=format:%B'], self.amend_diff_done)
+
+ def amend_diff_done(self, result):
+ self.lines = result.split("\n")
+ super(GitCommitAmendCommand, self).diff_done(self.after_show)
+
+class GitCommitMessageListener(sublime_plugin.EventListener):
+ def on_close(self, view):
+ if view.name() != "COMMIT_EDITMSG":
+ return
+ command = GitCommitCommand.active_message
+ if not command:
+ return
+ message = view_contents(view)
+ command.message_done(message)
+
+
+class GitCommitHistoryCommand(sublime_plugin.TextCommand):
+ def run(self, edit):
+ self.edit = edit
+ self.view.window().show_quick_panel(history, self.panel_done, sublime.MONOSPACE_FONT)
+
+ def panel_done(self, index):
+ if index > -1:
+ self.view.replace(self.edit, self.view.sel()[0], history[index] + '\n')
+
+
+class GitStatusCommand(GitWindowCommand):
+ force_open = False
+
+ def run(self):
+ self.run_command(['git', 'status', '--porcelain'], self.status_done)
+
+ def status_done(self, result):
+ self.results = filter(self.status_filter, result.rstrip().split('\n'))
+ if len(self.results):
+ self.show_status_list()
+ else:
+ sublime.status_message("Nothing to show")
+
+ def show_status_list(self):
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def status_filter(self, item):
+ # for this class we don't actually care
+ return len(item) > 0
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_file = self.results[picked]
+ # first 2 characters are status codes, the third is a space
+ picked_status = picked_file[:2]
+ picked_file = picked_file[3:]
+ self.panel_followup(picked_status, picked_file, picked)
+
+ def panel_followup(self, picked_status, picked_file, picked_index):
+ # split out solely so I can override it for laughs
+
+ s = sublime.load_settings("Git.sublime-settings")
+ root = git_root(self.get_working_dir())
+ if picked_status == '??' or s.get('status_opens_file') or self.force_open:
+ if(os.path.isfile(os.path.join(root, picked_file))): self.window.open_file(os.path.join(root, picked_file))
+ else:
+ self.run_command(['git', 'diff', '--no-color', '--', picked_file.strip('"')],
+ self.diff_done, working_dir=root)
+
+ def diff_done(self, result):
+ if not result.strip():
+ return
+ self.scratch(result, title="Git Diff")
+
+class GitOpenModifiedFilesCommand(GitStatusCommand):
+ force_open = True
+
+ def show_status_list(self):
+ for line_index in range(0, len(self.results)):
+ self.panel_done(line_index)
+
+class GitAddChoiceCommand(GitStatusCommand):
+ def status_filter(self, item):
+ return not item[1].isspace()
+
+ def show_status_list(self):
+ self.results = [[" + All Files", "apart from untracked files"], [" + All Files", "including untracked files"]] + self.results
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def panel_followup(self, picked_status, picked_file, picked_index):
+ working_dir=git_root(self.get_working_dir())
+
+ if picked_index == 0:
+ command = ['git', 'add', '--update']
+ elif picked_index == 1:
+ command = ['git', 'add', '--all']
+ else:
+ command = ['git']
+ picked_file = picked_file.strip('"')
+ if os.path.isfile(working_dir+"/"+picked_file):
+ command += ['add']
+ else:
+ command += ['rm']
+ command += ['--', picked_file]
+
+ self.run_command(command, self.rerun,
+ working_dir=working_dir)
+
+ def rerun(self, result):
+ self.run()
+
+
+class GitAdd(GitTextCommand):
+ def run(self, edit):
+ self.run_command(['git', 'add', self.get_file_name()])
+
+
+class GitStashCommand(GitWindowCommand):
+ may_change_files = True
+
+ def run(self):
+ self.run_command(['git', 'stash'])
+
+
+class GitStashPopCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'stash', 'pop'])
+
+
+class GitStashApplyCommand(GitWindowCommand):
+ may_change_files = True
+ command_to_run_after_list = 'apply'
+
+ def run(self):
+ self.run_command(['git', 'stash', 'list'], self.stash_list_done)
+
+ def stash_list_done(self, result):
+ # No stash list at all
+ if not result:
+ self.panel('No stash found')
+ return
+
+ self.results = result.rstrip().split('\n')
+
+ # If there is only one, apply it
+ if len(self.results) == 1:
+ self.stash_list_panel_done()
+ else:
+ self.quick_panel(self.results, self.stash_list_panel_done)
+
+ def stash_list_panel_done(self, picked=0):
+ if 0 > picked < len(self.results):
+ return
+
+ # get the stash ref (e.g. stash@{3})
+ self.stash = self.results[picked].split(':')[0]
+ self.run_command(['git', 'stash', self.command_to_run_after_list, self.stash])
+
+
+class GitStashDropCommand(GitStashApplyCommand):
+ command_to_run_after_list = 'drop'
+
+
+class GitOpenFileCommand(GitLog, GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'branch', '-a', '--no-color'], self.branch_done)
+
+ def branch_done(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.branch_panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def branch_panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ self.branch = self.results[picked].split(' ')[-1]
+ self.run_log(self.branch)
+
+ def log_result(self, result_hash):
+ # the commit hash is the first thing on the second line
+ self.ref = result_hash
+ self.run_command(
+ ['git', 'ls-tree', '-r', '--full-tree', self.ref],
+ self.ls_done)
+
+ def ls_done(self, result):
+ # Last two items are the ref and the file name
+ # p.s. has to be a list of lists; tuples cause errors later
+ self.results = [[match.group(2), match.group(1)] for match in re.finditer(r"\S+\s(\S+)\t(.+)", result)]
+
+ self.quick_panel(self.results, self.ls_panel_done)
+
+ def ls_panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ item = self.results[picked]
+
+ self.filename = item[0]
+ self.fileRef = item[1]
+
+ self.run_command(
+ ['git', 'show', self.fileRef],
+ self.show_done)
+
+ def show_done(self, result):
+ self.scratch(result, title="%s:%s" % (self.fileRef, self.filename))
+
+
+class GitBranchCommand(GitWindowCommand):
+ may_change_files = True
+ command_to_run_after_branch = ['checkout']
+ extra_flags = []
+
+ def run(self):
+ self.run_command(['git', 'branch', '--no-color'] + self.extra_flags, self.branch_done)
+
+ def branch_done(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_branch = self.results[picked]
+ if picked_branch.startswith("*"):
+ return
+ picked_branch = picked_branch.strip()
+ self.run_command(['git'] + self.command_to_run_after_branch + [picked_branch], self.update_status)
+
+ def update_status(self, result):
+ global branch
+ branch = ""
+ for view in self.window.views():
+ view.run_command("git_branch_status")
+
+class GitMergeCommand(GitBranchCommand):
+ command_to_run_after_branch = ['merge']
+ extra_flags = ['--no-merge']
+
+class GitDeleteBranchCommand(GitBranchCommand):
+ command_to_run_after_branch = ['branch', '-d']
+
+class GitNewBranchCommand(GitWindowCommand):
+ def run(self):
+ self.get_window().show_input_panel("Branch name", "",
+ self.on_input, None, None)
+
+ def on_input(self, branchname):
+ if branchname.strip() == "":
+ self.panel("No branch name provided")
+ return
+ self.run_command(['git', 'checkout', '-b', branchname])
+
+
+class GitNewTagCommand(GitWindowCommand):
+ def run(self):
+ self.get_window().show_input_panel("Tag name", "", self.on_input, None, None)
+
+ def on_input(self, tagname):
+ if not tagname.strip():
+ self.panel("No branch name provided")
+ return
+ self.run_command(['git', 'tag', tagname])
+
+class GitShowTagsCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'tag'], self.fetch_tag)
+
+ def fetch_tag(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.panel_done)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_tag = self.results[picked]
+ picked_tag = picked_tag.strip()
+ self.run_command(['git', 'show', picked_tag])
+
+class GitPushTagsCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'push', '--tags'])
+
+
+class GitCheckoutCommand(GitTextCommand):
+ may_change_files = True
+
+ def run(self, edit):
+ self.run_command(['git', 'checkout', self.get_file_name()])
+
+
+class GitFetchCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'fetch'], callback=self.panel)
+
+
+class GitPullCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'pull'], callback=self.panel)
+
+
+class GitPullCurrentBranchCommand(GitWindowCommand):
+ command_to_run_after_describe = 'pull'
+
+ def run(self):
+ self.run_command(['git', 'describe', '--contains', '--all', 'HEAD'], callback=self.describe_done)
+
+ def describe_done(self, result):
+ self.current_branch = result.strip()
+ self.run_command(['git', 'remote'], callback=self.remote_done)
+
+ def remote_done(self, result):
+ self.remotes = result.rstrip().split('\n')
+ if len(self.remotes) == 1:
+ self.panel_done()
+ else:
+ self.quick_panel(self.remotes, self.panel_done, sublime.MONOSPACE_FONT)
+
+ def panel_done(self, picked=0):
+ if picked < 0 or picked >= len(self.remotes):
+ return
+ self.picked_remote = self.remotes[picked]
+ self.picked_remote = self.picked_remote.strip()
+ self.run_command(['git', self.command_to_run_after_describe, self.picked_remote, self.current_branch])
+
+
+class GitPushCommand(GitWindowCommand):
+ def run(self):
+ self.run_command(['git', 'push'], callback=self.panel)
+
+
+class GitPushCurrentBranchCommand(GitPullCurrentBranchCommand):
+ command_to_run_after_describe = 'push'
+
+
+class GitCustomCommand(GitWindowCommand):
+ may_change_files = True
+
+ def run(self):
+ self.get_window().show_input_panel("Git command", "",
+ self.on_input, None, None)
+
+ def on_input(self, command):
+ command = str(command) # avoiding unicode
+ if command.strip() == "":
+ self.panel("No git command provided")
+ return
+ import shlex
+ command_splitted = ['git'] + shlex.split(command)
+ print command_splitted
+ self.run_command(command_splitted)
+
+class GitFlowCommand(GitWindowCommand):
+ def is_visible(self):
+ s = sublime.load_settings("Git.sublime-settings")
+ if s.get('flow'):
+ return True
+
+class GitFlowFeatureStartCommand(GitFlowCommand):
+ def run(self):
+ self.get_window().show_input_panel('Enter Feature Name:', '', self.on_done, None, None)
+
+ def on_done(self, feature_name):
+ self.run_command(['git-flow', 'feature', 'start', feature_name])
+
+
+class GitFlowFeatureFinishCommand(GitFlowCommand):
+ def run(self):
+ self.run_command(['git-flow', 'feature'], self.feature_done)
+
+ def feature_done(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_feature = self.results[picked]
+ if picked_feature.startswith("*"):
+ picked_feature = picked_feature.strip("*")
+ picked_feature = picked_feature.strip()
+ self.run_command(['git-flow', 'feature', 'finish', picked_feature])
+
+
+class GitFlowReleaseStartCommand(GitFlowCommand):
+ def run(self):
+ self.get_window().show_input_panel('Enter Version Number:', '', self.on_done, None, None)
+
+ def on_done(self, release_name):
+ self.run_command(['git-flow', 'release', 'start', release_name])
+
+
+class GitFlowReleaseFinishCommand(GitFlowCommand):
+ def run(self):
+ self.run_command(['git-flow', 'release'], self.release_done)
+
+ def release_done(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_release = self.results[picked]
+ if picked_release.startswith("*"):
+ picked_release = picked_release.strip("*")
+ picked_release = picked_release.strip()
+ self.run_command(['git-flow', 'release', 'finish', picked_release])
+
+
+class GitFlowHotfixStartCommand(GitFlowCommand):
+ def run(self):
+ self.get_window().show_input_panel('Enter hotfix name:', '', self.on_done, None, None)
+
+ def on_done(self, hotfix_name):
+ self.run_command(['git-flow', 'hotfix', 'start', hotfix_name])
+
+
+class GitFlowHotfixFinishCommand(GitFlowCommand):
+ def run(self):
+ self.run_command(['git-flow', 'hotfix'], self.hotfix_done)
+
+ def hotfix_done(self, result):
+ self.results = result.rstrip().split('\n')
+ self.quick_panel(self.results, self.panel_done,
+ sublime.MONOSPACE_FONT)
+
+ def panel_done(self, picked):
+ if 0 > picked < len(self.results):
+ return
+ picked_hotfix = self.results[picked]
+ if picked_hotfix.startswith("*"):
+ picked_hotfix = picked_hotfix.strip("*")
+ picked_hotfix = picked_hotfix.strip()
+ self.run_command(['git-flow', 'hotfix', 'finish', picked_hotfix])
+
+class GitResetHead(object):
+ def run(self, edit=None):
+ self.run_command(['git', 'reset', 'HEAD', self.get_file_name()])
+
+ def generic_done(self, result):
+ pass
+
+
+class GitResetHeadCommand(GitResetHead, GitTextCommand):
+ pass
+
+
+class GitResetHeadAllCommand(GitResetHead, GitWindowCommand):
+ pass
+
+
+class GitResetHardHeadCommand(GitWindowCommand):
+ may_change_files = True
+
+ def run(self):
+ if sublime.ok_cancel_dialog("Warning: this will reset your index and revert all files, throwing away all your uncommitted changes with no way to recover. Consider stashing your changes instead if you'd like to set them aside safely.", "Continue"):
+ self.run_command(['git', 'reset', '--hard', 'HEAD'])
+
+
+class GitClearAnnotationCommand(GitTextCommand):
+ def run(self, view):
+ self.active_view().settings().set('live_git_annotations', False)
+ self.view.erase_regions('git.changes.x')
+ self.view.erase_regions('git.changes.+')
+ self.view.erase_regions('git.changes.-')
+
+
+class GitToggleAnnotationsCommand(GitTextCommand):
+ def run(self, view):
+ if self.active_view().settings().get('live_git_annotations'):
+ self.view.run_command('git_clear_annotation')
+ else:
+ self.view.run_command('git_annotate')
+
+
+class GitAnnotationListener(sublime_plugin.EventListener):
+ def on_modified(self, view):
+ if not view.settings().get('live_git_annotations'):
+ return
+ view.run_command('git_annotate')
+ def on_load(self, view):
+ s = sublime.load_settings("Git.sublime-settings")
+ if s.get('annotations'):
+ view.run_command('git_annotate')
+
+
+class GitAnnotateCommand(GitTextCommand):
+ # Unfortunately, git diff does not support text from stdin, making a *live* annotation
+ # difficult. Therefore I had to resort to the system diff command. (Problems on win?)
+ # This works as follows:
+ # 1. When the command is run for the first time for this file, a temporary file with the
+ # current state of the HEAD is being pulled from git.
+ # 2. All consecutive runs will pass the current buffer into diffs stdin. The resulting
+ # output is then parsed and regions are set accordingly.
+ def run(self, view):
+ # If the annotations are already running, we dont have to create a new tmpfile
+ if hasattr(self, "tmp"):
+ self.compare_tmp(None)
+ return
+ self.tmp = tempfile.NamedTemporaryFile()
+ self.active_view().settings().set('live_git_annotations', True)
+ root = git_root(self.get_working_dir())
+ repo_file = os.path.relpath(self.view.file_name(), root)
+ self.run_command(['git', 'show', 'HEAD:{0}'.format(repo_file)], show_status=False, no_save=True, callback=self.compare_tmp, stdout=self.tmp)
+
+ def compare_tmp(self, result, stdout=None):
+ all_text = self.view.substr(sublime.Region(0, self.view.size())).encode("utf-8")
+ self.run_command(['diff', '--no-color', '-u', self.tmp.name, '-'], stdin=all_text, no_save=True, show_status=False, callback=self.parse_diff)
+
+ # This is where the magic happens. At the moment, only one chunk format is supported. While
+ # the unified diff format theoritaclly supports more, I don't think git diff creates them.
+ def parse_diff(self, result, stdin=None):
+ lines = result.splitlines()
+ matcher = re.compile('^@@ -([0-9]*),([0-9]*) \+([0-9]*),([0-9]*) @@')
+ diff = []
+ for line_index in range(0, len(lines)):
+ line = lines[line_index]
+ if not line.startswith('@'):
+ continue
+ match = matcher.match(line)
+ if not match:
+ continue
+ line_before, len_before, line_after, len_after = [int(match.group(x)) for x in [1, 2, 3, 4]]
+ chunk_index = line_index + 1
+ tracked_line_index = line_after - 1
+ deletion = False
+ insertion = False
+ while True:
+ line = lines[chunk_index]
+ if line.startswith('@'):
+ break
+ elif line.startswith('-'):
+ if not line.strip() == '-':
+ deletion = True
+ tracked_line_index -= 1
+ elif line.startswith('+'):
+ if deletion and not line.strip() == '+':
+ diff.append(['x', tracked_line_index])
+ insertion = True
+ elif not deletion:
+ insertion = True
+ diff.append(['+', tracked_line_index])
+ else:
+ if not insertion and deletion:
+ diff.append(['-', tracked_line_index])
+ insertion = deletion = False
+ tracked_line_index += 1
+ chunk_index += 1
+ if chunk_index >= len(lines):
+ break
+
+ self.annotate(diff)
+
+ # Once we got all lines with their specific change types (either x, +, or - for
+ # modified, added, or removed) we can create our regions and do the actual annotation.
+ def annotate(self, diff):
+ self.view.erase_regions('git.changes.x')
+ self.view.erase_regions('git.changes.+')
+ self.view.erase_regions('git.changes.-')
+ typed_diff = {'x': [], '+': [], '-': []}
+ for change_type, line in diff:
+ if change_type == '-':
+ full_region = self.view.full_line(self.view.text_point(line - 1, 0))
+ position = full_region.begin()
+ for i in xrange(full_region.size()):
+ typed_diff[change_type].append(sublime.Region(position + i))
+ else:
+ point = self.view.text_point(line, 0)
+ region = self.view.full_line(point)
+ if change_type == '-':
+ region = sublime.Region(point, point + 5)
+ typed_diff[change_type].append(region)
+
+ for change in ['x', '+']:
+ self.view.add_regions("git.changes.{0}".format(change), typed_diff[change], 'git.changes.{0}'.format(change), 'dot', sublime.HIDDEN)
+
+ self.view.add_regions("git.changes.-", typed_diff['-'], 'git.changes.-', 'dot', sublime.DRAW_EMPTY_AS_OVERWRITE)
+
+
+class GitAddSelectedHunkCommand(GitTextCommand):
+ def run(self, edit):
+ self.run_command(['git', 'diff', '--no-color', '-U1', self.get_file_name()], self.cull_diff)
+
+ def cull_diff(self, result):
+ selection = []
+ for sel in self.view.sel():
+ selection.append({
+ "start": self.view.rowcol(sel.begin())[0] + 1,
+ "end": self.view.rowcol(sel.end())[0] + 1,
+ })
+
+ hunks = [{"diff":""}]
+ i = 0
+ matcher = re.compile('^@@ -([0-9]*)(?:,([0-9]*))? \+([0-9]*)(?:,([0-9]*))? @@')
+ for line in result.splitlines():
+ if line.startswith('@@'):
+ i += 1
+ match = matcher.match(line)
+ start = int(match.group(3))
+ end = match.group(4)
+ if end:
+ end = start + int(end)
+ else:
+ end = start
+ hunks.append({"diff": "", "start": start, "end": end})
+ hunks[i]["diff"] += line + "\n"
+
+ diffs = hunks[0]["diff"]
+ hunks.pop(0)
+ selection_is_hunky = False
+ for hunk in hunks:
+ for sel in selection:
+ if sel["end"] < hunk["start"]:
+ continue
+ if sel["start"] > hunk["end"]:
+ continue
+ diffs += hunk["diff"] # + "\n\nEND OF HUNK\n\n"
+ selection_is_hunky = True
+
+ if selection_is_hunky:
+ self.run_command(['git', 'apply', '--cached'], stdin=diffs)
+ else:
+ sublime.status_message("No selected hunk")
+
+
+class GitCommitSelectedHunk(GitAddSelectedHunkCommand):
+ def run(self, edit):
+ self.run_command(['git', 'diff', '--no-color', self.get_file_name()], self.cull_diff)
+ self.get_window().run_command('git_commit')
+
+
+
+class GitGuiCommand(GitTextCommand):
+ def run(self, edit):
+ command = ['git', 'gui']
+ self.run_command(command)
+
+
+class GitGitkCommand(GitTextCommand):
+ def run(self, edit):
+ command = ['gitk']
+ self.run_command(command)
+
+class GitBranchStatusListener(sublime_plugin.EventListener):
+ def on_load(self, view):
+ view.run_command("git_branch_status")
+
+branch = ""
+class GitBranchStatusCommand(GitTextCommand):
+ def run(self, view):
+ global branch
+
+ if branch:
+ self.set_status(branch)
+ else:
+ self.run_command(['git','rev-parse','--abbrev-ref','HEAD'], self.branch_done, show_status=False)
+
+ def branch_done(self, result):
+ global branch
+ branch = result.strip()
+ self.set_status(branch)
+
+ def set_status(self, branch):
+ self.view.set_status("git-branch", "git branch: " + branch)
diff --git a/Go/Comments.tmPreferences b/Go/Comments.tmPreferences
new file mode 100644
index 0000000..1ac0b41
--- /dev/null
+++ b/Go/Comments.tmPreferences
@@ -0,0 +1,42 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.go
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ //
+
+
+ name
+ TM_COMMENT_START_2
+ value
+ /*
+
+
+ name
+ TM_COMMENT_END_2
+ value
+ */
+
+
+ name
+ TM_COMMENT_DISABLE_INDENT_2
+ value
+ yes
+
+
+
+ uuid
+ 05400837-EE8F-44D1-A636-3EEB0E82FFF5
+
+
diff --git a/Go/Comments.tmPreferences.cache b/Go/Comments.tmPreferences.cache
new file mode 100644
index 0000000..47ee97e
Binary files /dev/null and b/Go/Comments.tmPreferences.cache differ
diff --git a/Go/Empty ().tmSnippet b/Go/Empty ().tmSnippet
new file mode 100644
index 0000000..1d325c4
--- /dev/null
+++ b/Go/Empty ().tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+
+ $0
+
+ keyEquivalent
+
+ name
+ Empty ()
+ scope
+ meta.parens.empty.go
+ uuid
+ 214A69FB-0168-465E-AB51-D8C6C46BCF61
+
+
diff --git a/Go/For Loop.tmSnippet b/Go/For Loop.tmSnippet
new file mode 100644
index 0000000..0b36e88
--- /dev/null
+++ b/Go/For Loop.tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ for ${2:i} := 0; $2 < ${1:count}; ${3:$2++} {
+ $0
+}
+ name
+ For Loop
+ scope
+ source.go
+ tabTrigger
+ for
+ uuid
+ 7DA0072A-BF35-413B-B4D9-B5C2B4D20FF2
+
+
diff --git a/Go/Go.tmLanguage b/Go/Go.tmLanguage
new file mode 100644
index 0000000..07fec9a
--- /dev/null
+++ b/Go/Go.tmLanguage
@@ -0,0 +1,764 @@
+
+
+
+
+ comment
+ Go allows any Unicode character to be used in identifiers, so our identifier regex is: \b([[:alpha:]_]+[[:alnum:]_]*)\b
+ fileTypes
+
+ go
+
+ firstLineMatch
+ -[*]-( Mode:)? Go -[*]-
+ foldingStartMarker
+ (?x)
+ /\*\*(?!\*) # opening C-style comment with 2 asterisks but no third later on
+ | # OR
+ ^ # start of line...
+ (?! # ...which does NOT contain...
+ [^{(]*?// # ...a possible bunch of non-opening-braces, followed by a C++ comment
+ | # OR
+ [^{(]*?/\*(?!.*?\*/.*?[{(]) # ...a possible bunch of non-opening-braces, followed by a C comment with no ending
+ )
+ .*? # ...any characters (or none)...
+ [{(]\s* # ...followed by an open brace and zero or more whitespace...
+ ( # ...followed by...
+ $ # ...a dollar...
+ | # OR
+ // # ...a C++ comment...
+ | # OR
+ /\*(?!.*?\*/.*\S) # ...a C comment, so long as no non-whitespace chars follow it..
+ )
+
+ foldingStopMarker
+ (?<!\*)\*\*/|^\s*[})]
+ keyEquivalent
+ ^~G
+ name
+ Go
+ patterns
+
+
+ include
+ #receiver_function_declaration
+
+
+ include
+ #plain_function_declaration
+
+
+ include
+ #basic_things
+
+
+ include
+ #exported_variables
+
+
+ begin
+ ^[[:blank:]]*(import)\b\s+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.import.go
+
+
+ end
+ (?=(?://|/\*))|$
+ name
+ meta.preprocessor.go.import
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.double.import.go
+
+
+
+
+ include
+ #block
+
+
+ include
+ #root_parens
+
+
+ include
+ #function_calls
+
+
+ repository
+
+ access
+
+ match
+ (?<=\.)[[:alpha:]_][[:alnum:]_]*\b(?!\s*\()
+ name
+ variable.other.dot-access.go
+
+ basic_things
+
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #initializers
+
+
+ include
+ #access
+
+
+ include
+ #strings
+
+
+ include
+ #keywords
+
+
+
+ block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.go
+ patterns
+
+
+ include
+ #block_innards
+
+
+
+ block_innards
+
+ patterns
+
+
+ include
+ #function_block_innards
+
+
+ include
+ #exported_variables
+
+
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.block.go
+
+
+ match
+ ^/\* =(\s*.*?)\s*= \*/$\n?
+ name
+ comment.block.go
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.go
+
+
+ end
+ \*/
+ name
+ comment.block.go
+
+
+ match
+ \*/.*\n
+ name
+ invalid.illegal.stray-commend-end.go
+
+
+ captures
+
+ 1
+
+ name
+ meta.toc-list.banner.line.go
+
+
+ match
+ ^// =(\s*.*?)\s*=\s*$\n?
+ name
+ comment.line.double-slash.banner.go
+
+
+ begin
+ //
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.go
+
+
+ end
+ $\n?
+ name
+ comment.line.double-slash.go
+ patterns
+
+
+ match
+ (?>\\\s*\n)
+ name
+ punctuation.separator.continuation.go
+
+
+
+
+
+ exported_variables
+
+ comment
+ This is kinda hacky, in order to get the 'var' scoped the right way again.
+ match
+ (?<=\s|\[\])([[:upper:]][[:alnum:]_]*)(?=\W+)
+ name
+ variable.exported.go
+
+ fn_parens
+
+ begin
+ \(
+ end
+ \)
+ name
+ meta.parens.go
+ patterns
+
+
+ include
+ #basic_things
+
+
+ include
+ #function_calls
+
+
+
+ function_block
+
+ begin
+ \{
+ end
+ \}
+ name
+ meta.block.go
+ patterns
+
+
+ include
+ #function_block_innards
+
+
+
+ function_block_innards
+
+ patterns
+
+
+ include
+ #basic_things
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.support.function.leading.go
+
+ 2
+
+ name
+ support.function.builtin.go
+
+
+ match
+ (\s*)\b(new|c(lose(d)?|ap)|p(anic(ln)?|rint(ln)?)|len|make)(?:\b|\()
+
+
+ include
+ #function_block
+
+
+ include
+ #function_calls
+
+
+ include
+ #fn_parens
+
+
+
+ function_calls
+
+ captures
+
+ 1
+
+ name
+ punctuation.whitespace.function-call.leading.go
+
+ 2
+
+ name
+ support.function.any-method.go
+
+ 3
+
+ name
+ punctuation.definition.parameters.go
+
+
+ match
+ (?x)
+ (?: (?= \s ) (?:(?<=else|new|return) | (?<!\w)) (\s+) )?
+ (\b
+ (?!(for|if|else|switch|return)\s*\()
+ (?:[[:alpha:]_][[:alnum:]_]*+\b) # method name
+ )
+ \s*(\()
+
+ name
+ meta.function-call.go
+
+ initializers
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ variable.other.go
+
+ 1
+
+ name
+ keyword.control.go
+
+
+ comment
+ This matches the 'var x int = 0' style of variable declaration.
+ match
+ ^[[:blank:]]*(var)\s+(?:[[:alpha:]_][[:alnum:]_]*)(?:,\s+[[:alpha:]_][[:alnum:]_]*)*
+ name
+ meta.initialization.explicit.go
+
+
+ captures
+
+ 0
+
+ name
+ variable.other.go
+
+ 1
+
+ name
+ keyword.operator.initialize.go
+
+
+ comment
+ This matches the 'x := 0' style of variable declaration.
+ match
+ (?:[[:alpha:]_][[:alnum:]_]*)(?:,\s+[[:alpha:]_][[:alnum:]_]*)*\s*(:=)
+ name
+ meta.initialization.short.go
+
+
+
+ keywords
+
+ patterns
+
+
+ match
+ \b(s(truct|elect|witch)|c(ontinue|ase)|type|i(nterface|f|mport)|def(er|ault)|package|else|var|f(or|unc|allthrough)|r(eturn|ange)|go(to)?|map|break)\b
+ name
+ keyword.control.go
+
+
+ match
+ (\b|(?<=\]))(int(16|8|32|64)?|uint(16|8|32|ptr|64)?|float(32|64)?|b(yte|ool)|string)\b
+ name
+ storage.type.go
+
+
+ match
+ \b(const|chan)\b
+ name
+ storage.modifier.go
+
+
+ match
+ \b(nil|true|false|iota)\b
+ name
+ constant.language.go
+
+
+ match
+ \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b
+ name
+ constant.numeric.go
+
+
+ match
+ (\<\-)|(\-\>)
+ name
+ support.channel-operator.go
+
+
+
+ plain_function_declaration
+
+ begin
+ (?x)
+ ^[[:blank:]]*(func)\s*
+ (?: ([[:alpha:]_][[:alnum:]_]*)? ) # name of function is optional
+ (?: \( ((?:[\[\]\w\d\s\/,._*&<>-]|(?:interface\{\}))*)? \) ) # required braces for parameters (even if empty)
+ \s*
+ (?: \(? ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)? )? # optional return types, optionally within braces
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.go
+
+ 2
+
+ name
+ entity.name.function.go
+
+ 3
+
+ name
+ variable.parameters.go
+
+ 4
+
+ name
+ variable.return-types.go
+
+
+ end
+ (?<=\})
+ name
+ meta.function.plain.go
+ patterns
+
+
+ include
+ #comments
+
+
+
+ include
+ #function_block
+
+
+
+ receiver_function_declaration
+
+ begin
+ (?x)
+ (func)\s*
+ (?: \( ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)\s+ ) # receiver variable declarations, in brackets
+ (?: ([[:alpha:]_][[:alnum:]_]*)? ) # name of function is optional
+ (?: \( ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*)? \) ) # required braces for parameters (even if empty)
+ \s*
+ (?: \(? ((?:[\[\]\w\d\s,._*&<>-]|(?:interface\{\}))*) \)? )? # optional return types, optionally within braces
+
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.go
+
+ 2
+
+ name
+ variable.receiver.go
+
+ 3
+
+ name
+ entity.name.function.go
+
+ 4
+
+ name
+ variable.parameters.go
+
+ 5
+
+ name
+ variable.return-types.go
+
+
+ comment
+ Version of above with support for declaring a receiver variable.
+ end
+ (?<=\})
+ name
+ meta.function.receiver.go
+ patterns
+
+
+ include
+ #comments
+
+
+
+
+ include
+ #function_block
+
+
+
+ root_parens
+
+ begin
+ \(
+ end
+ (?<=\()(\))?|(?:\))
+ endCaptures
+
+ 1
+
+ name
+ meta.parens.empty.go
+
+
+ name
+ meta.parens.go
+ patterns
+
+
+ include
+ #basic_things
+
+
+ include
+ #exported_variables
+
+
+ include
+ #function_calls
+
+
+
+ string_escaped_char
+
+ patterns
+
+
+ match
+ \\(\\|[abfnrutv'"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-7]{3})
+ name
+ constant.character.escape.go
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unknown-escape.go
+
+
+
+ string_placeholder
+
+ patterns
+
+
+ match
+ (?x)%
+ (\d+\$)? # field (argument #)
+ [#0\- +']* # flags
+ [,;:_]? # separator character (AltiVec)
+ ((-?\d+)|\*(-?\d+\$)?)? # minimum field width
+ (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision
+ [diouxXDOUeEfFgGaAcCsSpnvtTbyYhHmMzZ%] # conversion type
+
+ name
+ constant.other.placeholder.go
+
+
+ match
+ %
+ name
+ invalid.illegal.placeholder.go
+
+
+
+ strings
+
+ patterns
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.double.go
+ patterns
+
+
+ include
+ #string_placeholder
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.single.go
+ patterns
+
+
+ include
+ #string_escaped_char
+
+
+
+
+ begin
+ `
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.go
+
+
+ end
+ `
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.go
+
+
+ name
+ string.quoted.raw.go
+
+
+
+
+ scopeName
+ source.go
+ uuid
+ 33100200-8916-4F78-8522-4362628C6889
+
+
diff --git a/Go/Go.tmLanguage.cache b/Go/Go.tmLanguage.cache
new file mode 100644
index 0000000..cf33cf7
Binary files /dev/null and b/Go/Go.tmLanguage.cache differ
diff --git a/Go/If Statement.tmSnippet b/Go/If Statement.tmSnippet
new file mode 100644
index 0000000..d420f0f
--- /dev/null
+++ b/Go/If Statement.tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ if ${1:condition} {
+ $0
+}
+ name
+ If Statement
+ scope
+ source.go
+ tabTrigger
+ if
+ uuid
+ AF797914-E5F7-4F2B-866B-852889C6A925
+
+
diff --git a/Go/Indentation Rules.tmPreferences b/Go/Indentation Rules.tmPreferences
new file mode 100644
index 0000000..549f561
--- /dev/null
+++ b/Go/Indentation Rules.tmPreferences
@@ -0,0 +1,57 @@
+
+
+
+
+ name
+ Indentation Rules
+ scope
+ source.go
+ settings
+
+ decreaseIndentPattern
+ (?x)
+ ^ # start of line
+ (.*\*/)? # skip comments if present
+ ( # three possibilities
+ \s* \} # whitespace and a closing curly brace
+ ( # capture:
+ [^}{"']* \{ # anything other than curly braces or quotes, then open curly
+ )? # (optional)
+ [;\s]*? # any whitespace or semicolons
+ |
+ (?:\s* (case|default).*:) # case statements pop back one indent
+ |
+ (?: \) (?<! \( ) ) # closing braces not preceded by opening braces
+ )
+ (//.*|/\*.*\*/\s*)? # skip any comments (optional)
+ $ # end of line
+
+ increaseIndentPattern
+ (?x)
+ ^
+ (?: .* \*/ )? # skip any comments
+ (?:
+ (.* \{ [^}"'\n]*) # lines containing an open curly but no quotes or close curly
+ | # OR
+ (?:\s* (case|default).*:) # case statements
+ | # OR
+ (.* \( [^)"'\n]*) # lines containing an open brace but no quotes or close brace
+ )
+ (//.*|/\*.*\*/\s*)? # skip any comments (optional)
+ $
+
+
+ unIndentedLinePattern
+ ^\s*((/\*|\*/|//|import\b.*|package\b.*).*)?$
+
+ uuid
+ 160118A4-208D-4422-AFF0-0C21B5B78AAF
+
+
diff --git a/Go/Indentation Rules.tmPreferences.cache b/Go/Indentation Rules.tmPreferences.cache
new file mode 100644
index 0000000..21d0a36
Binary files /dev/null and b/Go/Indentation Rules.tmPreferences.cache differ
diff --git a/Go/Struct.tmSnippet b/Go/Struct.tmSnippet
new file mode 100644
index 0000000..b06ddfe
--- /dev/null
+++ b/Go/Struct.tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ struct {
+ ${0:var vartype;}
+}
+ name
+ Struct
+ scope
+ source.go
+ tabTrigger
+ st
+ uuid
+ CC5D7F66-6BBC-4D9C-BC32-D569238523EB
+
+
diff --git a/Go/Type Function.tmSnippet b/Go/Type Function.tmSnippet
new file mode 100644
index 0000000..4d20882
--- /dev/null
+++ b/Go/Type Function.tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ func (${1:varname typename}) ${2:func_name}($3)$4 {
+ $0
+}
+ name
+ Type Function
+ scope
+ source.go
+ tabTrigger
+ tfunc
+ uuid
+ D8CF6ACF-85BB-4AAD-BFDE-DFD9D075FCF2
+
+
diff --git a/Go/func.tmSnippet b/Go/func.tmSnippet
new file mode 100644
index 0000000..93c318c
--- /dev/null
+++ b/Go/func.tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ func ${1:func_name}($2)$3 {
+ $0
+}
+ name
+ Function
+ scope
+ source.go
+ tabTrigger
+ func
+ uuid
+ E9B44CC5-B004-4793-B125-7E429FDCCE32
+
+
diff --git a/Go/go func().tmSnippet b/Go/go func().tmSnippet
new file mode 100644
index 0000000..04a53a1
--- /dev/null
+++ b/Go/go func().tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ go func($1) {
+ $0
+}${2:($3)}
+ name
+ go func()
+ scope
+ source.go
+ tabTrigger
+ gfn
+ uuid
+ 6B01E886-4CFA-476E-AE01-EFF406116978
+
+
diff --git a/Go/import.tmSnippet b/Go/import.tmSnippet
new file mode 100644
index 0000000..b8e974e
--- /dev/null
+++ b/Go/import.tmSnippet
@@ -0,0 +1,16 @@
+
+
+
+
+ content
+ import $2"${1:name}"
+ name
+ Import
+ scope
+ source.go
+ tabTrigger
+ imp
+ uuid
+ 2DFA9510-6F88-4BC6-A409-DA4075DEA8FF
+
+
diff --git a/Go/main().tmSnippet b/Go/main().tmSnippet
new file mode 100644
index 0000000..76a2d5a
--- /dev/null
+++ b/Go/main().tmSnippet
@@ -0,0 +1,18 @@
+
+
+
+
+ content
+ func main() {
+ $0
+}
+ name
+ main()
+ scope
+ source.go
+ tabTrigger
+ main
+ uuid
+ 18A04BC9-D37A-46B9-8C92-4E8D287A46E4
+
+
diff --git a/Go/type.tmSnippet b/Go/type.tmSnippet
new file mode 100644
index 0000000..cc8ca42
--- /dev/null
+++ b/Go/type.tmSnippet
@@ -0,0 +1,16 @@
+
+
+
+
+ content
+ type ${1:name} ${2:int8}
+ name
+ Type
+ scope
+ source.go
+ tabTrigger
+ type
+ uuid
+ 9E325583-D146-41A4-BA94-0B5BF91DEBF8
+
+
diff --git a/Graphviz/DOT.tmLanguage b/Graphviz/DOT.tmLanguage
new file mode 100644
index 0000000..d9a9c66
--- /dev/null
+++ b/Graphviz/DOT.tmLanguage
@@ -0,0 +1,127 @@
+
+
+
+
+ fileTypes
+
+ dot
+ DOT
+
+ foldingStartMarker
+ \{
+ foldingStopMarker
+ \}
+ keyEquivalent
+ ^~G
+ name
+ Graphviz (DOT)
+ patterns
+
+
+ match
+ \b(node|edge|graph|digraph|subgraph|strict)\b
+ name
+ storage.type.dot
+
+
+ match
+ \b(bottomlabel|color|comment|distortion|fillcolor|fixedsize|fontcolor|fontname|fontsize|group|height|label|layer|orientation|peripheries|regular|shape|shapefile|sides|skew|style|toplabel|URL|width|z)\b
+ name
+ support.constant.attribute.node.dot
+
+
+ match
+ \b(arrowhead|arrowsize|arrowtail|color|comment|constraint|decorate|dir|fontcolor|fontname|fontsize|headlabel|headport|headURL|label|labelangle|labeldistance|labelfloat|labelcolor|labelfontname|labelfontsize|layer|lhead|ltail|minlen|samehead|sametail|style|taillabel|tailport|tailURL|weight)\b
+ name
+ support.constant.attribute.edge.dot
+
+
+ match
+ \b(bgcolor|center|clusterrank|color|comment|compound|concentrate|fillcolor|fontname|fontpath|fontsize|label|labeljust|labelloc|layers|margin|mclimit|nodesep|nslimit|nslimit1|ordering|orientation|page|pagedir|quantum|rank|rankdir|ranksep|ratio|remincross|rotate|samplepoints|searchsize|size|style|URL)\b
+ name
+ support.constant.attribute.graph.dot
+
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.dot
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.dot
+
+
+ name
+ string.quoted.double.dot
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.dot
+
+
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.dot
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.dot
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.dot
+
+
+ match
+ (#).*$\n?
+ name
+ comment.line.number-sign.dot
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.dot
+
+
+ end
+ \*/
+ name
+ comment.block.dot
+
+
+ scopeName
+ source.dot
+ uuid
+ 1A53D54E-6B1D-11D9-A006-000D93589AF6
+
+
diff --git a/Graphviz/DOT.tmLanguage.cache b/Graphviz/DOT.tmLanguage.cache
new file mode 100644
index 0000000..81f6642
Binary files /dev/null and b/Graphviz/DOT.tmLanguage.cache differ
diff --git a/Groovy/#!-usr-local-bin-groovy-w.sublime-snippet b/Groovy/#!-usr-local-bin-groovy-w.sublime-snippet
new file mode 100644
index 0000000..2d4d306
--- /dev/null
+++ b/Groovy/#!-usr-local-bin-groovy-w.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ #!
+ source.groovy
+ #!/usr/bin/env groovy -w
+
diff --git a/Groovy/Ant-__-replace.sublime-snippet b/Groovy/Ant-__-replace.sublime-snippet
new file mode 100644
index 0000000..12792e1
--- /dev/null
+++ b/Groovy/Ant-__-replace.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ replace
+ source.groovy
+ replace(dir: …, includes: …, token: …, value: …)
+
diff --git a/Groovy/Block-Comment.sublime-snippet b/Groovy/Block-Comment.sublime-snippet
new file mode 100644
index 0000000..10925f0
--- /dev/null
+++ b/Groovy/Block-Comment.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ doc
+ source.groovy
+ Doc Block
+
diff --git a/Groovy/Constructor.sublime-snippet b/Groovy/Constructor.sublime-snippet
new file mode 100644
index 0000000..cf8267f
--- /dev/null
+++ b/Groovy/Constructor.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ con
+ source.groovy
+ constructor() { … }
+
diff --git a/Groovy/Groovy.tmLanguage b/Groovy/Groovy.tmLanguage
new file mode 100644
index 0000000..2bb658d
--- /dev/null
+++ b/Groovy/Groovy.tmLanguage
@@ -0,0 +1,1356 @@
+
+
+
+
+ fileTypes
+
+ groovy
+ gvy
+
+ foldingStartMarker
+ (\{\s*$|^\s*// \{\{\{)
+ foldingStopMarker
+ ^\s*(\}|// \}\}\}$)
+ keyEquivalent
+ ^~G
+ name
+ Groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ ^(#!).+$\n
+ name
+ comment.line.hashbang.groovy
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.package.groovy
+
+ 2
+
+ name
+ storage.type.package.groovy
+
+
+ match
+ ^\s*(package)\s+([^ ;]+)
+ name
+ meta.package.groovy
+
+
+ captures
+
+ 1
+
+ name
+ keyword.other.import.groovy
+
+ 2
+
+ name
+ storage.type.import.groovy
+
+
+ match
+ ^\s*(import)\s+([^ ;$]+);?
+ name
+ meta.import.groovy
+
+
+ include
+ #groovy
+
+
+ repository
+
+ class-object
+
+ patterns
+
+
+ match
+ (?x)
+ \b(
+ (?:[a-z]\w*\.)* # Optional package specification
+ [A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # Optional Generics
+ (?:\[\s*\])* # Optional brackets (array)
+ )\b
+
+ name
+ storage.type.class.groovy
+
+
+
+ classes
+
+ begin
+ (?x)^\s*
+ (?:(?:\b(?:(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s*)*) # modifier
+ (class)\s+
+ (\w+)\s* # identifier
+ captures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 2
+
+ name
+ storage.modifier.static.groovy
+
+ 3
+
+ name
+ storage.modifier.final.groovy
+
+ 4
+
+ name
+ storage.modifier.other.groovy
+
+ 5
+
+ name
+ storage.type.class.groovy
+
+ 6
+
+ name
+ entity.name.type.class.groovy
+
+
+ end
+ $
+ name
+ meta.definition.class.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.modifier.extends.groovy
+
+ 2
+
+ name
+ entity.other.inherited-class.groovy
+
+
+ match
+ (extends)\s+([a-zA-Z0-9_\.]+(?:<(?:[a-zA-Z0-9_, ])+>)?)\s*
+ name
+ meta.definition.class.inherited.classes.groovy
+
+
+ begin
+ (implements)\s
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.implements.groovy
+
+
+ end
+ (?=\s*extends|$|\{)
+ name
+ meta.definition.class.implemented.interfaces.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ entity.other.inherited-class.interface.groovy
+
+ 2
+
+ name
+ punctuation.definition.implemented.interfaces.separator.groovy
+
+
+ match
+ ((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)
+
+
+
+
+
+ comment-block
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ end
+ \*/
+ name
+ comment.block.groovy
+
+ comments
+
+ patterns
+
+
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ /\*\*/
+ name
+ comment.block.empty.groovy
+
+
+ include
+ text.html.javadoc
+
+
+ include
+ #comment-block
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.groovy
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.groovy
+
+
+
+ constants
+
+ patterns
+
+
+ match
+ \b([A-Z][A-Z0-9_]+)\b
+ name
+ constant.other.groovy
+
+
+ match
+ \b(true|false|null)\b
+ name
+ constant.language.groovy
+
+
+
+ groovy
+
+ patterns
+
+
+ include
+ #classes
+
+
+ include
+ #methods
+
+
+ include
+ #groovy-code
+
+
+
+ groovy-code
+
+ patterns
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+ include
+ #map-keys
+
+
+
+ groovy-code-minus-map-keys
+
+ comment
+ In some situations, maps can't be declared without enclosing []'s,
+ therefore we create a collection of everything but that
+ patterns
+
+
+ include
+ #comments
+
+
+ include
+ #support-functions
+
+
+ include
+ #keyword-language
+
+
+ include
+ #values
+
+
+ include
+ #keyword-operator
+
+
+ include
+ #storage-types
+
+
+ include
+ #storage-modifiers
+
+
+
+ keyword
+
+ patterns
+
+
+ include
+ #keyword-operator
+
+
+ include
+ #keyword-language
+
+
+
+ keyword-language
+
+ patterns
+
+
+ match
+ \b(try|catch|finally|throw)\b
+ name
+ keyword.control.exception.groovy
+
+
+ match
+ \b(return|break|continue|default|do|while|for|switch|if|else)\b
+ name
+ keyword.control.groovy
+
+
+ begin
+ \bcase\b
+ beginCaptures
+
+ 0
+
+ name
+ keyword.control.groovy
+
+
+ end
+ :
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.case-terminator.groovy
+
+
+ name
+ meta.case.groovy
+ patterns
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ \b(new)\b
+ name
+ keyword.other.new.groovy
+
+
+ begin
+ \b(assert)\s
+ beginCaptures
+
+ 1
+
+ name
+ keyword.control.assert.groovy
+
+
+ end
+ $
+ name
+ meta.declaration.assertion.groovy
+ patterns
+
+
+ match
+ :
+ name
+ keyword.operator.assert.expression-seperator.groovy
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ \b(throws)\b
+ name
+ keyword.other.throws.groovy
+
+
+
+ keyword-operator
+
+ patterns
+
+
+ match
+ \b(as)\b
+ name
+ keyword.operator.as.groovy
+
+
+ match
+ \b(is)\b
+ name
+ keyword.operator.is.groovy
+
+
+ match
+ \?\:
+ name
+ keyword.operator.elvis.groovy
+
+
+ match
+ \.\.
+ name
+ keyword.operator.range.groovy
+
+
+ match
+ \->
+ name
+ keyword.operator.arrow.groovy
+
+
+ match
+ <<
+ name
+ keyword.operator.leftshift.groovy
+
+
+ match
+ (?<=\S)\.(?=\S)
+ name
+ keyword.operator.navigation.groovy
+
+
+ match
+ (?<=\S)\?\.(?=\S)
+ name
+ keyword.operator.safe-navigation.groovy
+
+
+ begin
+ \?
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.ternary.groovy
+
+
+ end
+ $
+ name
+ meta.evaluation.ternary.groovy
+ patterns
+
+
+ match
+ :
+ name
+ keyword.operator.ternary.expression-seperator.groovy
+
+
+ include
+ #groovy-code-minus-map-keys
+
+
+
+
+ match
+ ==~
+ name
+ keyword.operator.match.groovy
+
+
+ match
+ =~
+ name
+ keyword.operator.find.groovy
+
+
+ match
+ \b(instanceof)\b
+ name
+ keyword.operator.instanceof.groovy
+
+
+ match
+ (===|==|!=|<=|>=|<=>|<>|<|>|<<)
+ name
+ keyword.operator.comparison.groovy
+
+
+ match
+ =
+ name
+ keyword.operator.assignment.groovy
+
+
+ match
+ (\-\-|\+\+)
+ name
+ keyword.operator.increment-decrement.groovy
+
+
+ match
+ (\-|\+|\*|\/|%)
+ name
+ keyword.operator.arithmetic.groovy
+
+
+ match
+ (!|&&|\|\|)
+ name
+ keyword.operator.logical.groovy
+
+
+
+ map-keys
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.groovy
+
+ 2
+
+ name
+ punctuation.definition.seperator.key-value.groovy
+
+
+ match
+ (\w+)\s*(:)
+
+
+
+ method-call
+
+ begin
+ (\w+)(\()
+ beginCaptures
+
+ 1
+
+ name
+ meta.method.groovy
+
+ 2
+
+ name
+ punctuation.definition.method-parameters.begin.groovy
+
+
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.method-parameters.end.groovy
+
+
+ name
+ meta.method-call.groovy
+ patterns
+
+
+ match
+ ,
+ name
+ punctuation.definition.seperator.parameter.groovy
+
+
+ include
+ #groovy-code
+
+
+
+ method-declaration-remainder
+
+ patterns
+
+
+ begin
+ \(
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.begin.groovy
+
+
+ contentName
+ meta.definition.method.parameters.groovy
+ end
+ \)
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.parameters.end.groovy
+
+
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.parameter.groovy
+
+ 2
+
+ name
+ variable.parameter.groovy
+
+
+ match
+ (?x)\s*
+ (
+ (?:boolean|byte|char|short|int|float|long|double|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)
+ )?
+ \s*
+ ([a-z_][A-Za-z0-9_]*) # variable
+
+ name
+ meta.definition.method.parameter.groovy
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.parameter.groovy
+
+
+ match
+ (boolean|byte|char|short|int|float|long|double|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)
+ name
+ meta.definition.method.parameter.groovy
+
+
+ match
+ ,
+ name
+ punctuation.definition.parameters.seperator.groovy
+
+
+ include
+ #comment-block
+
+
+
+
+ begin
+ (?<=\))\s*(throws)\s
+ captures
+
+ 1
+
+ name
+ storage.modifier.throws.groovy
+
+
+ end
+ (?=$|\{)
+ name
+ meta.definition.method.throwables.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ storage.type.throwable.groovy
+
+ 2
+
+ name
+ punctuation.definition.throwables.seperator.groovy
+
+
+ match
+ ((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)
+
+
+
+
+
+ methods
+
+ patterns
+
+
+ begin
+ (?x)^\s*
+ (?: # zero or more modifiers
+ (?:
+ (public|private|protected)|(final)|(native|synchronized|abstract|threadsafe|transient)
+ )
+ \s+
+ )?
+ \s*
+ ([A-Z](?:[a-zA-Z0-9_])+) # constructor/class name
+ \s*
+ (?=\()
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 2
+
+ name
+ storage.modifier.final.groovy
+
+ 3
+
+ name
+ storage.modifier.other.groovy
+
+ 4
+
+ name
+ entity.name.function.constructor.groovy
+
+ 5
+
+ name
+ punctuation.definition.parameters.begin.groovy
+
+
+ end
+ {|$\n?
+ name
+ meta.definition.constructor.groovy
+ patterns
+
+
+ include
+ #method-declaration-remainder
+
+
+
+
+ begin
+ (?x)^\s*
+ (?:
+ (?: # or modifier and optional type
+ (?:(?:\b(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s+)+\s* # modifier
+ (?:\b
+ (void)
+ |
+ (boolean|byte|char|short|int|float|long|double) # primitive
+ |
+ ( # or class type
+ (?:\w+\.)*[A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # optional Generic type
+ (?:\[\s*\])* # zero or more square brackets (array)
+ )
+ )?
+ )
+ |
+ (?:\b # or type by itself
+ (def)
+ |
+ (void)
+ |
+ (boolean|byte|char|short|int|float|long|double) # primitive
+ |
+ ( # or class type
+ (?:\w+\.)*[A-Z]\w+\b # Class name
+ (?:<(?:[\w, ]*)>)? # optional generics info
+ (?:\[\s*\])* # zero or more square brackets (array)
+ )
+ )
+ )
+ \s*
+ (\w+) # method name
+ \s*
+ (?=\() # opening parens
+
+ beginCaptures
+
+ 1
+
+ name
+ storage.modifier.access-control.groovy
+
+ 10
+
+ name
+ storage.type.return-type.primitive.groovy
+
+ 11
+
+ name
+ storage.type.return-type.class.groovy
+
+ 12
+
+ name
+ entity.name.function.groovy
+
+ 2
+
+ name
+ storage.modifier.static.groovy
+
+ 3
+
+ name
+ storage.modifier.final.groovy
+
+ 4
+
+ name
+ storage.modifier.other.groovy
+
+ 5
+
+ name
+ storage.type.return-type.void.groovy
+
+ 6
+
+ name
+ storage.type.return-type.primitive.groovy
+
+ 7
+
+ name
+ storage.type.return-type.class.groovy
+
+ 8
+
+ name
+ storage.type.return-type.def.groovy
+
+ 9
+
+ name
+ storage.type.return-type.void.groovy
+
+
+ end
+ {|$\n?
+ name
+ meta.definition.method.groovy
+ patterns
+
+
+ include
+ #method-declaration-remainder
+
+
+
+
+
+ nest_curly
+
+ begin
+ \{
+ captures
+
+ 0
+
+ name
+ punctuation.section.scope.groovy
+
+
+ end
+ \}
+ patterns
+
+
+ include
+ #nest_curly
+
+
+
+ numbers
+
+ patterns
+
+
+ match
+ ((0(x|X)[0-9a-fA-F]*)|(\+|-)?\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
+ name
+ constant.numeric.groovy
+
+
+
+ regexp
+
+ patterns
+
+
+ begin
+ /(?=[^/]+/)
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.regexp.begin.groovy
+
+
+ end
+ /
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.regexp.end.groovy
+
+
+ name
+ string.regexp.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+
+
+
+ storage-modifiers
+
+ patterns
+
+
+ match
+ \b(private|protected|public)\b
+ name
+ storage.modifier.access-control.groovy
+
+
+ match
+ \b(static)\b
+ name
+ storage.modifier.static.groovy
+
+
+ match
+ \b(final)\b
+ name
+ storage.modifier.final.groovy
+
+
+ match
+ \b(native|synchronized|abstract|threadsafe|transient)\b
+ name
+ storage.modifier.other.groovy
+
+
+
+ storage-types
+
+ patterns
+
+
+ begin
+ (@[^ (]+)(\()
+ beginCaptures
+
+ 1
+
+ name
+ storage.type.annotation.groovy
+
+ 2
+
+ name
+ punctuation.definition.annotation-arguments.begin.groovy
+
+
+ end
+ (\))
+ endCaptures
+
+ 1
+
+ name
+ punctuation.definition.annotation-arguments.end.groovy
+
+
+ name
+ meta.declaration.annotation.groovy
+ patterns
+
+
+ captures
+
+ 1
+
+ name
+ constant.other.key.groovy
+
+ 2
+
+ name
+ keyword.operator.assignment.groovy
+
+
+ match
+ (\w*)\s*(=)
+
+
+ include
+ #values
+
+
+ match
+ ,
+ name
+ punctuation.definition.seperator.groovy
+
+
+
+
+ match
+ @\S+
+ name
+ storage.type.annotation.groovy
+
+
+ match
+ \b(def)\b
+ name
+ storage.type.def.groovy
+
+
+ match
+ \b(boolean|byte|char|short|int|float|long|double)(?:\[\s*\])*\b
+ name
+ storage.type.primitive.groovy
+
+
+
+ string-quoted-double
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.groovy
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.groovy
+
+
+ name
+ string.quoted.double.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+ match
+ \$\w+
+ name
+ variable.other.interpolated.groovy
+
+
+ begin
+ \$\{
+ captures
+
+ 0
+
+ name
+ punctuation.section.embedded.groovy
+
+
+ end
+ \}
+ name
+ source.groovy.embedded.source
+ patterns
+
+
+ include
+ #nest_curly
+
+
+
+
+
+ string-quoted-single
+
+ begin
+ '
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.groovy
+
+
+ end
+ '
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.groovy
+
+
+ name
+ string.quoted.single.groovy
+ patterns
+
+
+ match
+ \\.
+ name
+ constant.character.escape.groovy
+
+
+
+ strings
+
+ patterns
+
+
+ include
+ #string-quoted-double
+
+
+ include
+ #string-quoted-single
+
+
+ include
+ #regexp
+
+
+
+ structures
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.structure.begin.groovy
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.structure.end.groovy
+
+
+ name
+ meta.structure.groovy
+ patterns
+
+
+ include
+ #groovy-code
+
+
+ match
+ ,
+ name
+ punctuation.definition.separator.groovy
+
+
+
+ support-functions
+
+ patterns
+
+
+ match
+ (?x)\b(?:sprintf|print(?:f|ln)?)\b
+ name
+ support.function.print.groovy
+
+
+ match
+ (?x)\b(?:shouldFail|fail(?:NotEquals)?|ass(?:ume|ert(?:S(?:cript|ame)|N(?:ot(?:Same|
+ Null)|ull)|Contains|T(?:hat|oString|rue)|Inspect|Equals|False|Length|
+ ArrayEquals)))\b
+ name
+ support.function.testing.groovy
+
+
+ match
+ (?x)\b(?:sleep|inspect|dump|use|with)\b
+ name
+ support.function.other.groovy
+
+
+
+ values
+
+ patterns
+
+
+ include
+ #variables
+
+
+ include
+ #strings
+
+
+ include
+ #numbers
+
+
+ include
+ #constants
+
+
+ include
+ #class-object
+
+
+ include
+ #structures
+
+
+ include
+ #method-call
+
+
+
+ variables
+
+ patterns
+
+
+ match
+ \b(this|super)\b
+ name
+ variable.language.groovy
+
+
+
+
+ scopeName
+ source.groovy
+ uuid
+ B3A64888-EBBB-4436-8D9E-F1169C5D7613
+
+
diff --git a/Groovy/Groovy.tmLanguage.cache b/Groovy/Groovy.tmLanguage.cache
new file mode 100644
index 0000000..e89f7a8
Binary files /dev/null and b/Groovy/Groovy.tmLanguage.cache differ
diff --git a/Groovy/Hash-Pair.sublime-snippet b/Groovy/Hash-Pair.sublime-snippet
new file mode 100644
index 0000000..95aaef7
--- /dev/null
+++ b/Groovy/Hash-Pair.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ :
+ source.groovy
+ key: "value" (Hash Pair)
+
diff --git a/Groovy/Symbol List%3A Class Variables.tmPreferences b/Groovy/Symbol List%3A Class Variables.tmPreferences
new file mode 100644
index 0000000..a553104
--- /dev/null
+++ b/Groovy/Symbol List%3A Class Variables.tmPreferences
@@ -0,0 +1,21 @@
+
+
+
+
+ name
+ Symbol List: Class Variables
+ scope
+ source.groovy meta.definition.class meta.definition.class-variable.name
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/.+/ $0/g
+
+
+ uuid
+ AAC3FB7F-5428-4B6A-B43E-62E4C6677E1F
+
+
diff --git a/Groovy/Symbol List%3A Class Variables.tmPreferences.cache b/Groovy/Symbol List%3A Class Variables.tmPreferences.cache
new file mode 100644
index 0000000..7f311eb
Binary files /dev/null and b/Groovy/Symbol List%3A Class Variables.tmPreferences.cache differ
diff --git a/Groovy/Symbol List%3A Classes.tmPreferences b/Groovy/Symbol List%3A Classes.tmPreferences
new file mode 100644
index 0000000..2cfbc95
--- /dev/null
+++ b/Groovy/Symbol List%3A Classes.tmPreferences
@@ -0,0 +1,17 @@
+
+
+
+
+ name
+ Symbol List: Classes
+ scope
+ source.groovy entity.name.type.class
+ settings
+
+ showInSymbolList
+ 1
+
+ uuid
+ 6201F313-C9FB-4D7E-9D01-FB85287BE21C
+
+
diff --git a/Groovy/Symbol List%3A Classes.tmPreferences.cache b/Groovy/Symbol List%3A Classes.tmPreferences.cache
new file mode 100644
index 0000000..eb1afa7
Binary files /dev/null and b/Groovy/Symbol List%3A Classes.tmPreferences.cache differ
diff --git a/Groovy/Symbol List%3A Methods.tmPreferences b/Groovy/Symbol List%3A Methods.tmPreferences
new file mode 100644
index 0000000..fb52dd2
--- /dev/null
+++ b/Groovy/Symbol List%3A Methods.tmPreferences
@@ -0,0 +1,21 @@
+
+
+
+
+ name
+ Symbol List: Methods
+ scope
+ source.groovy meta.definition.method.signature
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/\s*.*\s+(\w+)\s*(\(.*\)).*/ $1$2/g
+
+
+ uuid
+ 6AF1B177-1700-478F-808B-78D85403FC19
+
+
diff --git a/Groovy/Symbol List%3A Methods.tmPreferences.cache b/Groovy/Symbol List%3A Methods.tmPreferences.cache
new file mode 100644
index 0000000..6e920f6
Binary files /dev/null and b/Groovy/Symbol List%3A Methods.tmPreferences.cache differ
diff --git a/Groovy/Symbol List%3A Variables.tmPreferences b/Groovy/Symbol List%3A Variables.tmPreferences
new file mode 100644
index 0000000..0583a06
--- /dev/null
+++ b/Groovy/Symbol List%3A Variables.tmPreferences
@@ -0,0 +1,21 @@
+
+
+
+
+ name
+ Symbol List: Variables
+ scope
+ source.groovy meta.definition.class-variable.name
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/.+/$0/g
+
+
+ uuid
+ CF622434-558B-4333-8B57-76576354D6DC
+
+
diff --git a/Groovy/Symbol List%3A Variables.tmPreferences.cache b/Groovy/Symbol List%3A Variables.tmPreferences.cache
new file mode 100644
index 0000000..dd2953b
Binary files /dev/null and b/Groovy/Symbol List%3A Variables.tmPreferences.cache differ
diff --git a/Groovy/Thread_start-{-__-}.sublime-snippet b/Groovy/Thread_start-{-__-}.sublime-snippet
new file mode 100644
index 0000000..d74afc4
--- /dev/null
+++ b/Groovy/Thread_start-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ thread
+ source.groovy
+ Thread.start { … }
+
diff --git a/Groovy/Thread_startDaemon-{-__-}.sublime-snippet b/Groovy/Thread_startDaemon-{-__-}.sublime-snippet
new file mode 100644
index 0000000..2f5c7c4
--- /dev/null
+++ b/Groovy/Thread_startDaemon-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ thread
+ source.groovy
+ Thread.startDaemon { … }
+
diff --git a/Groovy/all{-e-__-}.sublime-snippet b/Groovy/all{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..eab6e09
--- /dev/null
+++ b/Groovy/all{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ all
+ source.groovy
+ all { … }
+
diff --git a/Groovy/any{-e-__-}.sublime-snippet b/Groovy/any{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..fe86c68
--- /dev/null
+++ b/Groovy/any{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ any
+ source.groovy
+ any { … }
+
diff --git a/Groovy/as-BigDecimal.sublime-snippet b/Groovy/as-BigDecimal.sublime-snippet
new file mode 100644
index 0000000..02658b0
--- /dev/null
+++ b/Groovy/as-BigDecimal.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as BigDecimal
+
diff --git a/Groovy/as-BigInteger.sublime-snippet b/Groovy/as-BigInteger.sublime-snippet
new file mode 100644
index 0000000..13698c7
--- /dev/null
+++ b/Groovy/as-BigInteger.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as BigInteger
+
diff --git a/Groovy/as-Double.sublime-snippet b/Groovy/as-Double.sublime-snippet
new file mode 100644
index 0000000..3d9ac60
--- /dev/null
+++ b/Groovy/as-Double.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as Double
+
diff --git a/Groovy/as-Float.sublime-snippet b/Groovy/as-Float.sublime-snippet
new file mode 100644
index 0000000..be64fa6
--- /dev/null
+++ b/Groovy/as-Float.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as Float
+
diff --git a/Groovy/as-Immutable.sublime-snippet b/Groovy/as-Immutable.sublime-snippet
new file mode 100644
index 0000000..f785d06
--- /dev/null
+++ b/Groovy/as-Immutable.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ .as
+ source.groovy
+ asImmutable()
+
diff --git a/Groovy/as-Set.sublime-snippet b/Groovy/as-Set.sublime-snippet
new file mode 100644
index 0000000..09a8d6d
--- /dev/null
+++ b/Groovy/as-Set.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as Set
+
diff --git a/Groovy/as-String.sublime-snippet b/Groovy/as-String.sublime-snippet
new file mode 100644
index 0000000..e9ff514
--- /dev/null
+++ b/Groovy/as-String.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as String
+
diff --git a/Groovy/as-Synchronized.sublime-snippet b/Groovy/as-Synchronized.sublime-snippet
new file mode 100644
index 0000000..f012910
--- /dev/null
+++ b/Groovy/as-Synchronized.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ .as
+ source.groovy
+ asSynchronized()
+
diff --git a/Groovy/as-Writable.sublime-snippet b/Groovy/as-Writable.sublime-snippet
new file mode 100644
index 0000000..3b634f4
--- /dev/null
+++ b/Groovy/as-Writable.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ as
+ source.groovy
+ as Writable
+
diff --git a/Groovy/assert(__).sublime-snippet b/Groovy/assert(__).sublime-snippet
new file mode 100644
index 0000000..37069d1
--- /dev/null
+++ b/Groovy/assert(__).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ !
+ source.groovy
+ assert
+
diff --git a/Groovy/assertEquals(__).sublime-snippet b/Groovy/assertEquals(__).sublime-snippet
new file mode 100644
index 0000000..f1cbfae
--- /dev/null
+++ b/Groovy/assertEquals(__).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ase
+ source.groovy
+ assertEquals
+
diff --git a/Groovy/assertFalse.sublime-snippet b/Groovy/assertFalse.sublime-snippet
new file mode 100644
index 0000000..9d3fe8c
--- /dev/null
+++ b/Groovy/assertFalse.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ asf
+ source.groovy
+ assertFalse
+
diff --git a/Groovy/assertNotEquals(__).sublime-snippet b/Groovy/assertNotEquals(__).sublime-snippet
new file mode 100644
index 0000000..e7c2d3e
--- /dev/null
+++ b/Groovy/assertNotEquals(__).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ asne
+ source.groovy
+ assertNotEquals
+
diff --git a/Groovy/assertNotNull(__).sublime-snippet b/Groovy/assertNotNull(__).sublime-snippet
new file mode 100644
index 0000000..1894c63
--- /dev/null
+++ b/Groovy/assertNotNull(__).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ asnn
+ source.groovy
+ assertNotNull
+
diff --git a/Groovy/assertNull(__).sublime-snippet b/Groovy/assertNull(__).sublime-snippet
new file mode 100644
index 0000000..e6d0024
--- /dev/null
+++ b/Groovy/assertNull(__).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ asn
+ source.groovy
+ assertNull
+
diff --git a/Groovy/assertSame.sublime-snippet b/Groovy/assertSame.sublime-snippet
new file mode 100644
index 0000000..6ed0be7
--- /dev/null
+++ b/Groovy/assertSame.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ass
+ source.groovy
+ assertSame
+
diff --git a/Groovy/assertTrue.sublime-snippet b/Groovy/assertTrue.sublime-snippet
new file mode 100644
index 0000000..f5bd131
--- /dev/null
+++ b/Groovy/assertTrue.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ ast
+ source.groovy
+ assertTrue
+
diff --git a/Groovy/case.sublime-snippet b/Groovy/case.sublime-snippet
new file mode 100644
index 0000000..4902144
--- /dev/null
+++ b/Groovy/case.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ case
+ source.groovy
+ case … break
+
diff --git a/Groovy/class-__-singleton.sublime-snippet b/Groovy/class-__-singleton.sublime-snippet
new file mode 100644
index 0000000..a38a49c
--- /dev/null
+++ b/Groovy/class-__-singleton.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ instance
+ source.groovy
+ instance … (Singleton)
+
diff --git a/Groovy/class-__.sublime-snippet b/Groovy/class-__.sublime-snippet
new file mode 100644
index 0000000..1bcf4cf
--- /dev/null
+++ b/Groovy/class-__.sublime-snippet
@@ -0,0 +1,10 @@
+
+
+ cl
+ source.groovy
+ class { … }
+
diff --git a/Groovy/class-___-TestCase.sublime-snippet b/Groovy/class-___-TestCase.sublime-snippet
new file mode 100644
index 0000000..1c65f99
--- /dev/null
+++ b/Groovy/class-___-TestCase.sublime-snippet
@@ -0,0 +1,9 @@
+
+
+ tc
+ source.groovy
+ class … extends GroovyTestCase { … }
+
diff --git a/Groovy/collect-{-e-__-}.sublime-snippet b/Groovy/collect-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..5c3d5cc
--- /dev/null
+++ b/Groovy/collect-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ col
+ source.groovy
+ collect { … }
+
diff --git a/Groovy/copy__-file.sublime-snippet b/Groovy/copy__-file.sublime-snippet
new file mode 100644
index 0000000..d56501c
--- /dev/null
+++ b/Groovy/copy__-file.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ copy
+ source.groovy
+ copy(file: …, tofile: …)
+
diff --git a/Groovy/copy__-fileset-include-exclude.sublime-snippet b/Groovy/copy__-fileset-include-exclude.sublime-snippet
new file mode 100644
index 0000000..de56a91
--- /dev/null
+++ b/Groovy/copy__-fileset-include-exclude.sublime-snippet
@@ -0,0 +1,11 @@
+
+
+ copy
+ source.groovy
+ copy(todir: …) { fileset(dir: …) { include … exclude }
+
diff --git a/Groovy/copy__-fileset.sublime-snippet b/Groovy/copy__-fileset.sublime-snippet
new file mode 100644
index 0000000..fc73ca4
--- /dev/null
+++ b/Groovy/copy__-fileset.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ copy
+ source.groovy
+ copy(todir: …) { fileset:dir …) }
+
diff --git a/Groovy/def-__-closure-=-{__}.sublime-snippet b/Groovy/def-__-closure-=-{__}.sublime-snippet
new file mode 100644
index 0000000..c8a6d2d
--- /dev/null
+++ b/Groovy/def-__-closure-=-{__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ $0
+}]]>
+ cv
+ source.groovy
+ closure = { … }
+
diff --git a/Groovy/def-__-method()-{__}.sublime-snippet b/Groovy/def-__-method()-{__}.sublime-snippet
new file mode 100644
index 0000000..fbe20d9
--- /dev/null
+++ b/Groovy/def-__-method()-{__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ m
+ source.groovy
+ method() { … }
+
diff --git a/Groovy/downto(num)-{-n-__-}.sublime-snippet b/Groovy/downto(num)-{-n-__-}.sublime-snippet
new file mode 100644
index 0000000..5c03659
--- /dev/null
+++ b/Groovy/downto(num)-{-n-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ dt
+ source.groovy
+ downto() { … }
+
diff --git a/Groovy/each-{-e-__-}.sublime-snippet b/Groovy/each-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..c0eac3b
--- /dev/null
+++ b/Groovy/each-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ ea
+ source.groovy
+ each { … }
+
diff --git a/Groovy/eachByte-{-byte-__-}.sublime-snippet b/Groovy/eachByte-{-byte-__-}.sublime-snippet
new file mode 100644
index 0000000..16337e2
--- /dev/null
+++ b/Groovy/eachByte-{-byte-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eab
+ source.groovy
+ eachByte { … }
+
diff --git a/Groovy/eachDir-{-dir-__-}.sublime-snippet b/Groovy/eachDir-{-dir-__-}.sublime-snippet
new file mode 100644
index 0000000..fd40234
--- /dev/null
+++ b/Groovy/eachDir-{-dir-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ ead
+ source.groovy
+ eachDir { … }
+
diff --git a/Groovy/eachDirMatch.sublime-snippet b/Groovy/eachDirMatch.sublime-snippet
new file mode 100644
index 0000000..34c659e
--- /dev/null
+++ b/Groovy/eachDirMatch.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eadm
+ source.groovy
+ eachDirMatch { … }
+
diff --git a/Groovy/eachDirRecurse.sublime-snippet b/Groovy/eachDirRecurse.sublime-snippet
new file mode 100644
index 0000000..881b010
--- /dev/null
+++ b/Groovy/eachDirRecurse.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eadr
+ source.groovy
+ eachDirRecurse { … }
+
diff --git a/Groovy/eachFile-{-file-__-}.sublime-snippet b/Groovy/eachFile-{-file-__-}.sublime-snippet
new file mode 100644
index 0000000..0cadbe7
--- /dev/null
+++ b/Groovy/eachFile-{-file-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eaf
+ source.groovy
+ eachFile { … }
+
diff --git a/Groovy/eachFileMatch-{-file-__-}.sublime-snippet b/Groovy/eachFileMatch-{-file-__-}.sublime-snippet
new file mode 100644
index 0000000..fde3301
--- /dev/null
+++ b/Groovy/eachFileMatch-{-file-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eafm
+ source.groovy
+ eachFileMatch { … }
+
diff --git a/Groovy/eachFileRecurse-{-file-__-}.sublime-snippet b/Groovy/eachFileRecurse-{-file-__-}.sublime-snippet
new file mode 100644
index 0000000..73fc6d0
--- /dev/null
+++ b/Groovy/eachFileRecurse-{-file-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eafr
+ source.groovy
+ eachFileRecurse { … }
+
diff --git a/Groovy/eachKey-{-key-__-}.sublime-snippet b/Groovy/eachKey-{-key-__-}.sublime-snippet
new file mode 100644
index 0000000..02e7377
--- /dev/null
+++ b/Groovy/eachKey-{-key-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eak
+ source.groovy
+ eachKey { … }
+
diff --git a/Groovy/eachLine-{-line-__-}.sublime-snippet b/Groovy/eachLine-{-line-__-}.sublime-snippet
new file mode 100644
index 0000000..0172baf
--- /dev/null
+++ b/Groovy/eachLine-{-line-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eal
+ source.groovy
+ eachLine { … }
+
diff --git a/Groovy/eachMatch(regex)-{-match-__-}.sublime-snippet b/Groovy/eachMatch(regex)-{-match-__-}.sublime-snippet
new file mode 100644
index 0000000..3008883
--- /dev/null
+++ b/Groovy/eachMatch(regex)-{-match-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eam
+ source.groovy
+ eachMatch(regex) { … }
+
diff --git a/Groovy/eachObject-{-obj-__-}.sublime-snippet b/Groovy/eachObject-{-obj-__-}.sublime-snippet
new file mode 100644
index 0000000..6645b4a
--- /dev/null
+++ b/Groovy/eachObject-{-obj-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eao
+ source.groovy
+ eachObject { … }
+
diff --git a/Groovy/eachValue-{-val-__-}.sublime-snippet b/Groovy/eachValue-{-val-__-}.sublime-snippet
new file mode 100644
index 0000000..a83bd89
--- /dev/null
+++ b/Groovy/eachValue-{-val-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ eav
+ source.groovy
+ eachValue { … }
+
diff --git a/Groovy/eachWithIndex-{-e-i-__-}.sublime-snippet b/Groovy/eachWithIndex-{-e-i-__-}.sublime-snippet
new file mode 100644
index 0000000..caeab11
--- /dev/null
+++ b/Groovy/eachWithIndex-{-e-i-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ $0
+}]]>
+ eawi
+ source.groovy
+ eachWithIndex { … }
+
diff --git a/Groovy/else.sublime-snippet b/Groovy/else.sublime-snippet
new file mode 100644
index 0000000..d926f97
--- /dev/null
+++ b/Groovy/else.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ el
+ source.groovy
+ else
+
diff --git a/Groovy/elseif-___.sublime-snippet b/Groovy/elseif-___.sublime-snippet
new file mode 100644
index 0000000..80e9dea
--- /dev/null
+++ b/Groovy/elseif-___.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ elif
+ source.groovy
+ elseif
+
diff --git a/Groovy/every-{-e-__-}.sublime-snippet b/Groovy/every-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..b90daf9
--- /dev/null
+++ b/Groovy/every-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ every
+ source.groovy
+ every { … }
+
diff --git a/Groovy/final-method.sublime-snippet b/Groovy/final-method.sublime-snippet
new file mode 100644
index 0000000..2857d04
--- /dev/null
+++ b/Groovy/final-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ fm
+ source.groovy
+ final method() { … }
+
diff --git a/Groovy/final-var.sublime-snippet b/Groovy/final-var.sublime-snippet
new file mode 100644
index 0000000..cd0b036
--- /dev/null
+++ b/Groovy/final-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ fv
+ source.groovy
+ final var
+
diff --git a/Groovy/find-{-e-__-}.sublime-snippet b/Groovy/find-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..381239e
--- /dev/null
+++ b/Groovy/find-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ find
+ source.groovy
+ find { … }
+
diff --git a/Groovy/findAll-{-e-__-}.sublime-snippet b/Groovy/findAll-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..a623315
--- /dev/null
+++ b/Groovy/findAll-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ finda
+ source.groovy
+ findAll { … }
+
diff --git a/Groovy/for-in.sublime-snippet b/Groovy/for-in.sublime-snippet
new file mode 100644
index 0000000..22f6ac9
--- /dev/null
+++ b/Groovy/for-in.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ forin
+ source.groovy
+ for(… in …) { … }
+
diff --git a/Groovy/grep(-pattern-)-{-match-__-}.sublime-snippet b/Groovy/grep(-pattern-)-{-match-__-}.sublime-snippet
new file mode 100644
index 0000000..3dfb77e
--- /dev/null
+++ b/Groovy/grep(-pattern-)-{-match-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ grep
+ source.groovy
+ grep(filter) { … }
+
diff --git a/Groovy/if-else.sublime-snippet b/Groovy/if-else.sublime-snippet
new file mode 100644
index 0000000..6e6d96a
--- /dev/null
+++ b/Groovy/if-else.sublime-snippet
@@ -0,0 +1,10 @@
+
+
+ ifel
+ source.groovy
+ if … else
+
diff --git a/Groovy/if.sublime-snippet b/Groovy/if.sublime-snippet
new file mode 100644
index 0000000..7a46cc0
--- /dev/null
+++ b/Groovy/if.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ if
+ source.groovy
+ if
+
diff --git a/Groovy/import.sublime-snippet b/Groovy/import.sublime-snippet
new file mode 100644
index 0000000..036716f
--- /dev/null
+++ b/Groovy/import.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ im
+ source.groovy
+ import
+
diff --git a/Groovy/mkdir.sublime-snippet b/Groovy/mkdir.sublime-snippet
new file mode 100644
index 0000000..e54ae02
--- /dev/null
+++ b/Groovy/mkdir.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ mkdir
+ source.groovy
+ mkdir(dir: …)
+
diff --git a/Groovy/new-File(__)_eachLine-{-__-}.sublime-snippet b/Groovy/new-File(__)_eachLine-{-__-}.sublime-snippet
new file mode 100644
index 0000000..1d2523b
--- /dev/null
+++ b/Groovy/new-File(__)_eachLine-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ File
+ source.groovy
+ new File(…).eachLine { … }
+
diff --git a/Groovy/package.sublime-snippet b/Groovy/package.sublime-snippet
new file mode 100644
index 0000000..8fcf411
--- /dev/null
+++ b/Groovy/package.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ pa
+ source.groovy
+ package
+
diff --git a/Groovy/print.sublime-snippet b/Groovy/print.sublime-snippet
new file mode 100644
index 0000000..ef2e80c
--- /dev/null
+++ b/Groovy/print.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ p
+ source.groovy
+ print
+
diff --git a/Groovy/println.sublime-snippet b/Groovy/println.sublime-snippet
new file mode 100644
index 0000000..4f86af7
--- /dev/null
+++ b/Groovy/println.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ pl
+ source.groovy
+ println
+
diff --git a/Groovy/private-final-method.sublime-snippet b/Groovy/private-final-method.sublime-snippet
new file mode 100644
index 0000000..dfff5ed
--- /dev/null
+++ b/Groovy/private-final-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ pfm
+ source.groovy
+ private final method() { … }
+
diff --git a/Groovy/private-final-var.sublime-snippet b/Groovy/private-final-var.sublime-snippet
new file mode 100644
index 0000000..7df5f46
--- /dev/null
+++ b/Groovy/private-final-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ pfv
+ source.groovy
+ private final var
+
diff --git a/Groovy/private-method.sublime-snippet b/Groovy/private-method.sublime-snippet
new file mode 100644
index 0000000..03406b5
--- /dev/null
+++ b/Groovy/private-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ pm
+ source.groovy
+ private method() { … }
+
diff --git a/Groovy/private-static-final-String.sublime-snippet b/Groovy/private-static-final-String.sublime-snippet
new file mode 100644
index 0000000..03b3a17
--- /dev/null
+++ b/Groovy/private-static-final-String.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ psfv
+ source.groovy
+ private static final var
+
diff --git a/Groovy/private-static-final-method.sublime-snippet b/Groovy/private-static-final-method.sublime-snippet
new file mode 100644
index 0000000..6199a84
--- /dev/null
+++ b/Groovy/private-static-final-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ psfm
+ source.groovy
+ private static final method() { … }
+
diff --git a/Groovy/private-static-method.sublime-snippet b/Groovy/private-static-method.sublime-snippet
new file mode 100644
index 0000000..5a85cbb
--- /dev/null
+++ b/Groovy/private-static-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ psm
+ source.groovy
+ private static method() { … }
+
diff --git a/Groovy/private-static-var.sublime-snippet b/Groovy/private-static-var.sublime-snippet
new file mode 100644
index 0000000..a1a0293
--- /dev/null
+++ b/Groovy/private-static-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ psv
+ source.groovy
+ private static var
+
diff --git a/Groovy/private-var.sublime-snippet b/Groovy/private-var.sublime-snippet
new file mode 100644
index 0000000..8d1bad7
--- /dev/null
+++ b/Groovy/private-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ pv
+ source.groovy
+ private var
+
diff --git a/Groovy/replaceAll(regex)-{-match-__}.sublime-snippet b/Groovy/replaceAll(regex)-{-match-__}.sublime-snippet
new file mode 100644
index 0000000..697c0f8
--- /dev/null
+++ b/Groovy/replaceAll(regex)-{-match-__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ replace
+ source.groovy
+ replaceAll(regex) { … }
+
diff --git a/Groovy/reverseEach-{-e-__-}.sublime-snippet b/Groovy/reverseEach-{-e-__-}.sublime-snippet
new file mode 100644
index 0000000..5eeb41b
--- /dev/null
+++ b/Groovy/reverseEach-{-e-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ rea
+ source.groovy
+ reverseEach { … }
+
diff --git a/Groovy/run-after.sublime-snippet b/Groovy/run-after.sublime-snippet
new file mode 100644
index 0000000..9909550
--- /dev/null
+++ b/Groovy/run-after.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ runa
+ source.groovy
+ runAfter() { … }
+
diff --git a/Groovy/setUp().sublime-snippet b/Groovy/setUp().sublime-snippet
new file mode 100644
index 0000000..aa1d72c
--- /dev/null
+++ b/Groovy/setUp().sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ setup
+ source.groovy
+ setUp() { … }
+
diff --git a/Groovy/shouldFail(__)-{-__-}.sublime-snippet b/Groovy/shouldFail(__)-{-__-}.sublime-snippet
new file mode 100644
index 0000000..c42167f
--- /dev/null
+++ b/Groovy/shouldFail(__)-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ sf
+ source.groovy
+ shouldFail { … }
+
diff --git a/Groovy/sleep(secs)-{-__-on-interrupt-}.sublime-snippet b/Groovy/sleep(secs)-{-__-on-interrupt-}.sublime-snippet
new file mode 100644
index 0000000..9122e3f
--- /dev/null
+++ b/Groovy/sleep(secs)-{-__-on-interrupt-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ sleep
+ source.groovy
+ sleep(secs) { … // on interrupt do }
+
diff --git a/Groovy/sleep(secs).sublime-snippet b/Groovy/sleep(secs).sublime-snippet
new file mode 100644
index 0000000..4fe6431
--- /dev/null
+++ b/Groovy/sleep(secs).sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ sleep
+ source.groovy
+ sleep(secs)
+
diff --git a/Groovy/sort-{-__-}.sublime-snippet b/Groovy/sort-{-__-}.sublime-snippet
new file mode 100644
index 0000000..a53ca16
--- /dev/null
+++ b/Groovy/sort-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ sort
+ source.groovy
+ sort { … }
+
diff --git a/Groovy/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet b/Groovy/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet
new file mode 100644
index 0000000..e030f80
--- /dev/null
+++ b/Groovy/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ sel
+ source.groovy
+ splitEachLine(separator) { … }
+
diff --git a/Groovy/static-final-method.sublime-snippet b/Groovy/static-final-method.sublime-snippet
new file mode 100644
index 0000000..60412f8
--- /dev/null
+++ b/Groovy/static-final-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ sfm
+ source.groovy
+ static final method() { … }
+
diff --git a/Groovy/static-final-var.sublime-snippet b/Groovy/static-final-var.sublime-snippet
new file mode 100644
index 0000000..a54ba67
--- /dev/null
+++ b/Groovy/static-final-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ sfv
+ source.groovy
+ static final var
+
diff --git a/Groovy/static-main-method.sublime-snippet b/Groovy/static-main-method.sublime-snippet
new file mode 100644
index 0000000..564e3e4
--- /dev/null
+++ b/Groovy/static-main-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ main
+ source.groovy
+ static main() { … }
+
diff --git a/Groovy/static-method.sublime-snippet b/Groovy/static-method.sublime-snippet
new file mode 100644
index 0000000..ed7c5c7
--- /dev/null
+++ b/Groovy/static-method.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ sm
+ source.groovy
+ static method() { … }
+
diff --git a/Groovy/static-var.sublime-snippet b/Groovy/static-var.sublime-snippet
new file mode 100644
index 0000000..46b56fd
--- /dev/null
+++ b/Groovy/static-var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ sv
+ source.groovy
+ static var
+
diff --git a/Groovy/step(to-amount)-{-n-__-}.sublime-snippet b/Groovy/step(to-amount)-{-n-__-}.sublime-snippet
new file mode 100644
index 0000000..beb45d3
--- /dev/null
+++ b/Groovy/step(to-amount)-{-n-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ step
+ source.groovy
+ step(to,amount) { … }
+
diff --git a/Groovy/switch__case.sublime-snippet b/Groovy/switch__case.sublime-snippet
new file mode 100644
index 0000000..92edd63
--- /dev/null
+++ b/Groovy/switch__case.sublime-snippet
@@ -0,0 +1,10 @@
+
+
+ switch
+ source.groovy
+ switch … case
+
diff --git a/Groovy/switch__case__default.sublime-snippet b/Groovy/switch__case__default.sublime-snippet
new file mode 100644
index 0000000..57181ab
--- /dev/null
+++ b/Groovy/switch__case__default.sublime-snippet
@@ -0,0 +1,13 @@
+
+
+ switch
+ source.groovy
+ switch … case … default
+
diff --git a/Groovy/tearDown().sublime-snippet b/Groovy/tearDown().sublime-snippet
new file mode 100644
index 0000000..6f71842
--- /dev/null
+++ b/Groovy/tearDown().sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ tear
+ source.groovy
+ tearDown() { … }
+
diff --git a/Groovy/test-case.sublime-snippet b/Groovy/test-case.sublime-snippet
new file mode 100644
index 0000000..733cf36
--- /dev/null
+++ b/Groovy/test-case.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ t
+ source.groovy
+ test()
+
diff --git a/Groovy/times-{-n-__-}.sublime-snippet b/Groovy/times-{-n-__-}.sublime-snippet
new file mode 100644
index 0000000..d94f5ad
--- /dev/null
+++ b/Groovy/times-{-n-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ times
+ source.groovy
+ times { … }
+
diff --git a/Groovy/to-Array.sublime-snippet b/Groovy/to-Array.sublime-snippet
new file mode 100644
index 0000000..6f8a63d
--- /dev/null
+++ b/Groovy/to-Array.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Array
+
diff --git a/Groovy/to-BigDecimal.sublime-snippet b/Groovy/to-BigDecimal.sublime-snippet
new file mode 100644
index 0000000..4c67653
--- /dev/null
+++ b/Groovy/to-BigDecimal.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to BigDecimal
+
diff --git a/Groovy/to-BigInteger.sublime-snippet b/Groovy/to-BigInteger.sublime-snippet
new file mode 100644
index 0000000..22ca6e3
--- /dev/null
+++ b/Groovy/to-BigInteger.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to BigInteger
+
diff --git a/Groovy/to-Boolean.sublime-snippet b/Groovy/to-Boolean.sublime-snippet
new file mode 100644
index 0000000..dc7fda6
--- /dev/null
+++ b/Groovy/to-Boolean.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Boolean
+
diff --git a/Groovy/to-Character.sublime-snippet b/Groovy/to-Character.sublime-snippet
new file mode 100644
index 0000000..04ec98e
--- /dev/null
+++ b/Groovy/to-Character.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Character
+
diff --git a/Groovy/to-Double.sublime-snippet b/Groovy/to-Double.sublime-snippet
new file mode 100644
index 0000000..b50281f
--- /dev/null
+++ b/Groovy/to-Double.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Double
+
diff --git a/Groovy/to-Float.sublime-snippet b/Groovy/to-Float.sublime-snippet
new file mode 100644
index 0000000..08a5cea
--- /dev/null
+++ b/Groovy/to-Float.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Float
+
diff --git a/Groovy/to-Integer.sublime-snippet b/Groovy/to-Integer.sublime-snippet
new file mode 100644
index 0000000..13e639f
--- /dev/null
+++ b/Groovy/to-Integer.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to Integer
+
diff --git a/Groovy/to-List.sublime-snippet b/Groovy/to-List.sublime-snippet
new file mode 100644
index 0000000..5c61ebc
--- /dev/null
+++ b/Groovy/to-List.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to List
+
diff --git a/Groovy/to-String.sublime-snippet b/Groovy/to-String.sublime-snippet
new file mode 100644
index 0000000..26ce9ce
--- /dev/null
+++ b/Groovy/to-String.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to String
+
diff --git a/Groovy/to-URI.sublime-snippet b/Groovy/to-URI.sublime-snippet
new file mode 100644
index 0000000..4fb2b0d
--- /dev/null
+++ b/Groovy/to-URI.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to URI
+
diff --git a/Groovy/to-URL.sublime-snippet b/Groovy/to-URL.sublime-snippet
new file mode 100644
index 0000000..dcc7d35
--- /dev/null
+++ b/Groovy/to-URL.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ to
+ source.groovy
+ to URL
+
diff --git a/Groovy/try-__-catch__-finally.sublime-snippet b/Groovy/try-__-catch__-finally.sublime-snippet
new file mode 100644
index 0000000..767e544
--- /dev/null
+++ b/Groovy/try-__-catch__-finally.sublime-snippet
@@ -0,0 +1,16 @@
+
+
+ try
+ source.groovy
+ try … catch … finally
+
diff --git a/Groovy/try-__-catch__.sublime-snippet b/Groovy/try-__-catch__.sublime-snippet
new file mode 100644
index 0000000..fe2bd13
--- /dev/null
+++ b/Groovy/try-__-catch__.sublime-snippet
@@ -0,0 +1,13 @@
+
+
+ try
+ source.groovy
+ try … catch
+
diff --git a/Groovy/upto(num)-{-n-__-}.sublime-snippet b/Groovy/upto(num)-{-n-__-}.sublime-snippet
new file mode 100644
index 0000000..a84892f
--- /dev/null
+++ b/Groovy/upto(num)-{-n-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ ut
+ source.groovy
+ upto() { … }
+
diff --git a/Groovy/var.sublime-snippet b/Groovy/var.sublime-snippet
new file mode 100644
index 0000000..58a2ea5
--- /dev/null
+++ b/Groovy/var.sublime-snippet
@@ -0,0 +1,6 @@
+
+
+ v
+ source.groovy
+ var
+
diff --git a/Groovy/while-___-{___}.sublime-snippet b/Groovy/while-___-{___}.sublime-snippet
new file mode 100644
index 0000000..24d7e78
--- /dev/null
+++ b/Groovy/while-___-{___}.sublime-snippet
@@ -0,0 +1,8 @@
+
+
+ while
+ source.groovy
+ while() { … }
+
diff --git a/Groovy/withInputStream-{-in-__-}.sublime-snippet b/Groovy/withInputStream-{-in-__-}.sublime-snippet
new file mode 100644
index 0000000..b632907
--- /dev/null
+++ b/Groovy/withInputStream-{-in-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withInputStream { … }
+
diff --git a/Groovy/withOutputStream-{-out-__-}.sublime-snippet b/Groovy/withOutputStream-{-out-__-}.sublime-snippet
new file mode 100644
index 0000000..9c39d94
--- /dev/null
+++ b/Groovy/withOutputStream-{-out-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withOutputStream { … }
+
diff --git a/Groovy/withPrintWriter-{-pw-__}.sublime-snippet b/Groovy/withPrintWriter-{-pw-__}.sublime-snippet
new file mode 100644
index 0000000..f06f2ea
--- /dev/null
+++ b/Groovy/withPrintWriter-{-pw-__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withPrintWriter { … }
+
diff --git a/Groovy/withReader-{-r-__-}.sublime-snippet b/Groovy/withReader-{-r-__-}.sublime-snippet
new file mode 100644
index 0000000..7172d94
--- /dev/null
+++ b/Groovy/withReader-{-r-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withReader { … }
+
diff --git a/Groovy/withStream-{-in-__-}.sublime-snippet b/Groovy/withStream-{-in-__-}.sublime-snippet
new file mode 100644
index 0000000..9e293bb
--- /dev/null
+++ b/Groovy/withStream-{-in-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withStream { … }
+
diff --git a/Groovy/withStreams-{-Socket-s-__}.sublime-snippet b/Groovy/withStreams-{-Socket-s-__}.sublime-snippet
new file mode 100644
index 0000000..4ae6143
--- /dev/null
+++ b/Groovy/withStreams-{-Socket-s-__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withStreams { … }
+
diff --git a/Groovy/withWriter(charset)-{-w-__-}.sublime-snippet b/Groovy/withWriter(charset)-{-w-__-}.sublime-snippet
new file mode 100644
index 0000000..f043169
--- /dev/null
+++ b/Groovy/withWriter(charset)-{-w-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withWriter(charset) { … }
+
diff --git a/Groovy/withWriter-{-w-__}.sublime-snippet b/Groovy/withWriter-{-w-__}.sublime-snippet
new file mode 100644
index 0000000..d0a0cdf
--- /dev/null
+++ b/Groovy/withWriter-{-w-__}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withWriter { … }
+
diff --git a/Groovy/withWriterAppend(charset)-{-__-}.sublime-snippet b/Groovy/withWriterAppend(charset)-{-__-}.sublime-snippet
new file mode 100644
index 0000000..9ff78d3
--- /dev/null
+++ b/Groovy/withWriterAppend(charset)-{-__-}.sublime-snippet
@@ -0,0 +1,8 @@
+
+ )/}
+ $0
+}]]>
+ with
+ source.groovy
+ withWriterAppend(charset) { … }
+
diff --git a/HTML/Comments.tmPreferences b/HTML/Comments.tmPreferences
new file mode 100644
index 0000000..ad25a4e
--- /dev/null
+++ b/HTML/Comments.tmPreferences
@@ -0,0 +1,30 @@
+
+
+
+
+ name
+ Comments
+ scope
+ text.html
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ <!--
+
+
+ name
+ TM_COMMENT_END
+ value
+ -->
+
+
+
+ uuid
+ B79BDBCF-D0C9-468E-BE62-744074D7825F
+
+
diff --git a/HTML/Comments.tmPreferences.cache b/HTML/Comments.tmPreferences.cache
new file mode 100644
index 0000000..0452a71
Binary files /dev/null and b/HTML/Comments.tmPreferences.cache differ
diff --git a/HTML/HTML.sublime-completions b/HTML/HTML.sublime-completions
new file mode 100644
index 0000000..a10ea2a
--- /dev/null
+++ b/HTML/HTML.sublime-completions
@@ -0,0 +1,197 @@
+{
+ "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
+
+ "completions":
+ [
+ { "trigger": "a", "contents": "$2" },
+ { "trigger": "abbr", "contents": "$1" },
+ { "trigger": "acronym", "contents": "$1" },
+ { "trigger": "address", "contents": "$1" },
+ { "trigger": "applet", "contents": "" },
+ { "trigger": "area", "contents": "$1" },
+ { "trigger": "b", "contents": "$1" },
+ { "trigger": "base", "contents": "$1" },
+ { "trigger": "big", "contents": "$1" },
+ { "trigger": "blockquote", "contents": "$1
" },
+ { "trigger": "body", "contents": "$1" },
+ { "trigger": "button", "contents": "" },
+ { "trigger": "center", "contents": "$1" },
+ { "trigger": "caption", "contents": "$1" },
+ { "trigger": "cdata", "contents": "$1" },
+ { "trigger": "cite", "contents": "$1" },
+ { "trigger": "col", "contents": "$1" },
+ { "trigger": "colgroup", "contents": "$1" },
+ { "trigger": "code", "contents": "$1
" },
+ { "trigger": "div", "contents": "$1
" },
+ { "trigger": "dd", "contents": "$1" },
+ { "trigger": "del", "contents": "$1" },
+ { "trigger": "dfn", "contents": "$1" },
+ { "trigger": "dl", "contents": "$1
" },
+ { "trigger": "dt", "contents": "$1" },
+ { "trigger": "em", "contents": "$1" },
+ { "trigger": "fieldset", "contents": "" },
+ { "trigger": "font", "contents": "$1" },
+ { "trigger": "form", "contents": "" },
+ { "trigger": "frame", "contents": "$1" },
+ { "trigger": "frameset", "contents": "" },
+ { "trigger": "head", "contents": "$1" },
+ { "trigger": "h1", "contents": "$1
" },
+ { "trigger": "h2", "contents": "$1
" },
+ { "trigger": "h3", "contents": "$1
" },
+ { "trigger": "h4", "contents": "$1
" },
+ { "trigger": "h5", "contents": "$1
" },
+ { "trigger": "h6", "contents": "$1
" },
+ { "trigger": "i", "contents": "$1" },
+ { "trigger": "iframe", "contents": "" },
+ { "trigger": "ins", "contents": "$1" },
+ { "trigger": "kbd", "contents": "$1" },
+ { "trigger": "li", "contents": "$1" },
+ { "trigger": "label", "contents": "" },
+ { "trigger": "legend", "contents": "" },
+ { "trigger": "link", "contents": "" },
+ { "trigger": "map", "contents": "" },
+ { "trigger": "noframes", "contents": "$1" },
+ { "trigger": "object", "contents": "" },
+ { "trigger": "ol", "contents": "$1
" },
+ { "trigger": "optgroup", "contents": "" },
+ { "trigger": "option", "contents": "" },
+ { "trigger": "p", "contents": "$1
" },
+ { "trigger": "pre", "contents": "$1
" },
+ { "trigger": "span", "contents": "$1" },
+ { "trigger": "samp", "contents": "$1" },
+ { "trigger": "script", "contents": "" },
+ { "trigger": "style", "contents": "" },
+ { "trigger": "select", "contents": "" },
+ { "trigger": "small", "contents": "$1" },
+ { "trigger": "strong", "contents": "$1" },
+ { "trigger": "sub", "contents": "$1" },
+ { "trigger": "sup", "contents": "$1" },
+ { "trigger": "table", "contents": "" },
+ { "trigger": "tbody", "contents": "$1" },
+ { "trigger": "td", "contents": "$1 | " },
+ { "trigger": "textarea", "contents": "" },
+ { "trigger": "tfoot", "contents": "$1" },
+ { "trigger": "th", "contents": "$1 | " },
+ { "trigger": "thead", "contents": "$1" },
+ { "trigger": "title", "contents": "$1" },
+ { "trigger": "tr", "contents": "$1
" },
+ { "trigger": "tt", "contents": "$1" },
+ { "trigger": "u", "contents": "$1" },
+ { "trigger": "ul", "contents": "" },
+ { "trigger": "var", "contents": "$1" },
+
+ { "trigger": "br", "contents": "
" },
+ { "trigger": "embed", "contents": "