.pr6          ! " # $%&'()*+,-./0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-. / 0 1 2 3 4 5 6 7 89:;<=> ? @ AB!C!D!E!F!G!H!I!J!K!L"M"N"O"P"Q"R"S"T"U"V#W#X#Y#Z#[#\#]#^#_#`#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#{#|#}#~########################################################################################################################################### # # # # ###$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+%,%-%.%/%0%1%2%3%456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''' ' ' ' ' (((((())))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)0)1)2)3)4)5)6)7)8)9):);)<)=)>)?)@)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)[)\)])^)_)`)a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)|)})~))))))************+++,-----...............................................................................//////////////////00011 1 1 1 1 1111111111111122222 2!2"2#2$2%2&2'2(2)2*2+2,2-2.2/203142434445464748494:4;4<4=4>4?4@4A4B4C4D5E5F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6\6]6^6_6`abcdefghijklmnopqrstuvwxyz{|}~77778888888888888889999999999999999999999999999:::::::::::::::;;;;<<<<<<<<<<<<<<===============>????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!A"A#A$A%A&A'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6B7B8B9B:B;B<B=B>C?D@DADBDCDDDEDFDGDHDIDJDKDLEMENFOFPFQFRFSGTGUGVGWGXGYGZG[G\G]H^H_H`HaHbHcHdHeHfHgHhHiHjIkJlKmKnLoLpLqLrLsLtLuLvMwMxMyMzM{M|M}M~MMMMMNOOOOOOOOOOOOOOOOOOOOOOOOOOPPPQQQRSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTUUUUUUUVVWXXXXXXXYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[\\\\\\\\]^^^^^ ^ ^ ^ ^ ^_________`aaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,b-c.d/e0f1g2h3i4j5k6l7m8n9o:p;q<r=s>t?u@vAvBvCvDvEwFxGyHzI{J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X}Y}Z}[}\}]}^}_}`}a}b}c}d~e~f~g~h~i~j~k~l~m~n~opqrstuvwxyz{|}~      !"#$%&'()*+,-./012345 Safe-InferredQ6#Triples: (shorthand, name, unicode) 6 7   6 7NoneMQiTransform a scanner into a scanner that also adds opening, closing and "next" tokens to indicate layout. 89:;<=>89:<;=>GPL-2yi-devel@googlegroups.com experimentalportable Safe-Inferred-Q  Safe-InferredQ  Safe-InferredQ ?@ !"A#B !"# !"# ?@ !"A#B Safe-Inferred !"HJKMQ CParser process$Parser specificationDJCompute the combination of two profiles, as well as which one is the best.E<Right-eval a fully defined process (ie. one that has no Sus)FIntelligent, caching best.GLPush a chunk of symbols or eof in the process. This forces some suspensions.HPush some symbols.IPush eofJMake a parser into a process.KARun a process (in case you do not need the incremental interface),Parse the same thing as the argument, but will be used only as backup. ie, it will be used only if disjuncted with a failing parser.SLMNOPQRSTUVWXYZ[\]^_`Cabcdefghij$%&klm'nopqrstuvDwxyz{E|}F()G~HIJK*+,LSTUVWXYZ[$%&'yz()~HIJK*+,-LMNORQPS[ZYXWVUT\`_^]C jihgfedcba$ pon'mlk&%qrstuvDwxyz{E|}F()G~HIJK*+,q r NoneMQ-./$%&'()*+,-./,()+*-.$'&%/-./  Safe-InferredQNSMap an Event to a Char. This is used in the emacs keymap for Ctrl-Q and vim keymap insertSpecialChar%0123456789:;<=>?@ABCDEFGHIJKLMN0123456789:;<=>?@ABCDEFGHIJKLMN01M2FEDCBA@?>=<;:9876543GLKJIHN 012FEDCBA@?>=<;:9876543GLKJIHMN NoneQR.Convert a Yi Attr into a Vty attribute change.OPQROPQRROPQOPQR None0Q STUVWXYZSTUVWXYZWSTUVXYZSTUVWXYZGPL-2yi-devel@googlegroups.com experimentalportableNoneQbCFinish an atomic command, for the purpose of killring accumulation.cSPut some text in the killring. It's accumulated if the last command was a kill tooPush a string in the killring.dCSet the top of the killring. Never accumulate the previous content.eGet the top of the killring.[\]^_`abcde [\]^_`abcde [\]\]_^bcdea` [\]^_`abcdeGPL-2yi-devel@googlegroups.com experimentalportableNone3QTfQSet the file to which debugging output should be written. Though this is called initDebug. Debugging output is not created by default (i.e., if this function is never called.) The target file can not be changed, nor debugging disabled.g>Outputs the given string before returning the second argument.lTraces x and returns y.mLike traceM, but returns (). fghijklmfghijklmfglmijkh fghijklm Safe-InferredQKSubtraction, but treat maxBound as infinity. i.e. maxBound -? x == maxBound Safe-InferredMQRExecute IO (Maybe a) action replacing all exceptions with return value of Nothing.<Execute IO () action, replacing all exceptions with messages<Execute IO () action, replacing all exceptions with messagesGPL-2yi-devel@googlegroups.com experimentalportable Safe-InferredQRemoves /./ // and /../. sequences from path, doesn't follow symlinks>Returns absolute name of the file, which doesn't contain any /./, /../, // sequences or symlinks/Dereferences symbolic links until regular file directorysomething_else appearsMake a path absolute.,Combines two paths, moves up one level on ..(Splits path into parts by path separatorText version would look like  (not . T.null) . T.split ( pathSeparators)But we should move to system-filepath package anyway. Safe-InferredQ!Canonicalize a user-friendly pathWTurn a user-friendly path into a computer-friendly path by expanding the leading tilda.!Is a user-friendly path absolute?None +-:EHMQ%n3A 'Layout a' wrapped in a state monad for tracking s. This type is not6 itself a monad, but should rather be thought of as a -free version of the  type.oSame as lm, but with all s rd. See  for an example of its use.q-Things with orientations which can be flippedsA general bounding boxIFixed number of "main" windows on the left; stack of windows on the rightTransposed version of RTall windows, with arranged in a balanced binary tree with sliders in between themCWide windows (windows placed on top of one another, equally spaced)?Tall windows (i.e. places windows side-by-side, equally spaced)yExistential wrapper for {5The type of layout managers. See the layout managers ,  and " for some example implementations.|bGiven the old layout and the new list of windows, construct a layout for the new list of windows.If the layout manager uses sliding dividers, then a user will expect that most of these dividers don't move when adding a new window. It is the layout manager's responsibility to ensure that this is the case, and this is the purpose of the Layout a argument.oThe old layout may come from a different layout manager, in which case the layout manager is free to ignore it.}4Describe the layout in a form suitable for the user.~<Cycles to the next variant, if there is one (the default is )@Cycles to the previous variant, if there is one (the default is Relative sizes, for $Divider position, in the range (0,1)Divider referenceOrientations for  and UI-agnostic layout schema. The basic constructs are (horizontal/vertical) stacks with fixed ratios between window sizes; and (horizontal/vertical) pairs with a slider in between (if available).Initial position of the divider8Index of the divider (for updating the divider position)Upper of of the pairLower of the pair OrientationZThe layout stack, with the given weights TODO: fix strictness for stack (it's still lazy)Accessor for the  with given referenceXTrue if the internal layout managers have the same type (but are not necessarily equal).,Windows placed side-by-side, equally spaced.4Windows placed on top of one another, equally spacedNTall windows, arranged in a balanced binary tree with sliders in between them.Transposed version of n4 windows on the left; stack of windows on the right.Transposed version of .Special case of  with all s equal.The default layout is  tallLayout*The def layout consists of a single windowMnopqrstuvwxyz{|}~0nopqrstuvwxyz{|}~1{|}~yzstuvwxqropn/nopqrstuvwxyz{|}~  Safe-InferredQ   Safe-InferredQ'Combination of the Control.Monad.State modify and NRerun the monad until the boolean result is false, collecting list of results.NoneMQLRun a command using the system shell, returning stdout, stderr and exit code GPL-2yi-devel@googlegroups.com experimentalportable Safe-Inferred !"2468MQ#Abstraction of the automaton state.'Operational representation of a processInteractive process description,Abstraction of monadic interactive processesOutputs a result.iConsumes and returns the next character. Fails if there is no input left, or outside the given bounds.)Just like '(<||)' but in prefix form. It s the second argument.9Convert a process description to an "executable" process.Push an event in the automaton(find all the writes that are accessible.+Parses and returns the specified character.9Parses and returns the specified list of events (lazily).+Combines all parsers in the specified list. option x p will either parse p or return x without consuming any input.8#GPL-2yi-devel@googlegroups.com experimentalportableNone+Q A window onto a buffer.regular or mini window?the buffer this window opens toSlist of last accessed buffers (former bufKeys). Last accessed one is first element;height of the window (in number of screen lines displayed)(width of the window (in number of chars)Gview area. note that the top point is also available as a buffer mark.identifier for the window (for UI sync) This is required for accurate scrolling. Scrolling depends on the actual number of buffer lines displayed. Line wrapping changes that number relative to the height so we can't use height for that purpose.OThe actual number of buffer lines displayed. Taking into account line wrapping#Get the identification of a window.%Return a "fake" window onto a buffer. None+HMQ*A tab, containing a collection of windows.For UI sync; fixes #304Visible windows;Current layout. Invariant: must be the layout generated by , up to changing the s.Glayout manager (for regenerating the layout when we add/remove windows)@Returns a list of all mini windows associated with the given tabAccessor for the windows. If the windows (but not the focus) have changed when setting, then a relayout will be triggered to preserve the internal invariant.iAccessor for the layout manager. When setting, will trigger a relayout if the layout manager has changed.Gets / sets the position of the divider with the given reference. The caller must ensure that the DividerRef is valid, otherwise an error will (might!) occur. A specialised version of "fmap".Forces all windows in the tab!Folds over the windows in the tab;Run the layout on the given tab, for the given aspect ratio Make a tab from multiple windowsMake a tab from one windowEquality on tab identity (the )  GPL-2yi-devel@googlegroups.com experimentalportableNoneQ !Helper that shows then packs the Text$, for all those cases where we use  .FThis is kind of like the default Show instance for lists except over  T. It does not leave the elements in extra quotes and should not be attempted to be  n and   back.pWorks by resupplying the found prefix back into the list, eventually either finding the prefix or not matching.Like # but returns empty text on failure.%Remove any trailing strings matching irsC (input record separator) from input string. Like perl's chomp(1).Trim spaces at beginning and endHFills lines up to the given length, splitting the text up if necessary. overInit f runs f over the  + of the input if possible, preserving the  P element as-is. If given a string with length "d 1, it effectively does nothing. Also see . overInit f runs f over the  + of the input if possible, preserving the  P element as-is. If given a string with length "d 1, it effectively does nothing. Also see . Inverse of . In contrast to  ., this does not add an empty line at the end.Split a Text in lines. Unlike  2, this does not remove any empty line at the end.7A helper function for creating functions suitable for modifySelectionB and  modifyRegionBQ. To be used when the desired function should map across the lines of a region.    GPL-2yi-devel@googlegroups.com experimentalportableNone/24MQ Direct subtrees of a tree bPrune the nodes before the given point. The path is used to know which nodes we can force or not.Given an approximate path to a leaf at the end of the region, return: (path to leaf at the end of the region,path from focused node to the leaf, small node encompassing the region) ^Return the first element that matches the predicate, or the last of the list if none matches. Return the element before first element that violates the predicate, or the first of the list if that one violates the predicate. kGiven a path to a node, return a path+node which node that encompasses the given node + a point before it.Search the tree in pre-order starting at a given node, until finding a leaf which is at or after the given point. An effort is also made to return a leaf as close as possible to p. TODO: rename to fromLeafToLeafAt tTakes a list of (node, index of already inspected child), and return all leaves in this node after the said child). sGiven a root, return all the nodes encountered along it, their paths, and the index of the child which comes next. RReturn all leaves after or before child depending on the relation which is given. 3Return all leaves (with paths) inside a given root. |Return all subtrees in a tree; each element of the return list contains paths to nodes. (Root is at the start of each path)Search the given list, and return the last tree before the given point; with path to the root. (Root is at the start of the path)+Return all subtrees in a tree, in preorder."Return the 1st token of a subtree.#Return the last token of a subtree. 5Given a tree, return (first offset, number of lines).A                       ! " # $ % & '  ( ) * + , - . / 0 1 2 3 4 5        :                       ! " # $ % & '  ( ) * + , - . / 0 1 2 3 4 5GPL-2yi-devel@googlegroups.com experimentalportableNone-./Q !"# 6 7 8 !"#"! #"! # 6 7 8None6:MQ $%&'()*+,- $%&'()*+,- *$%&'()+,-$%&'()*+,-GPL-2yi-devel@googlegroups.com experimentalportableNone/24=KQW.$Exp can be expression or declaration0let expression1Data constructor2BType constructor data constructor same as with the TC constructor4URighthandside of functions with | the PAtom in PGuard' does not contain any comments6Module identifier7 An optional8!Righthandside of functions with =<An wrapper for errors> Where clause@,An atom is a token followed by many commentsA%A block of things separated by layoutB"A parenthesized, bracked or bracedFClass declarationHData declaration RHSIData declarationNType declarationSType signaturebThe body of the moduleeThe module declaration part 9bCheck if a token is a brace, this function is used to fix the layout so that do { works correctly :4Theese are the tokens ignored by the layout handler.n The parser ;pModule parse a module <"Parse a body that follows a module =pEmptyBL" A parser returning an empty block >Parse a body of a program ?Parse Variables @Parse VarIdent and ConsIdent AParse an operator using please BParse any operator CParse a consident DParse many variables ECParse a nextline token (the nexLine token is inserted by Layout.hs) FParse a startBlock token GParse a endBlock token Hsym f returns a parser parsing f as a special symbol I exact tokList parse anything that is in tokList Jplease p! returns a parser parsing either p or recovers with the (Special !) token. KParse anything, as errors LParse an ConsIdent MParse a keyword N5Parse an unary operator with and without using please OParse comments PParse something thats optional Q,Parse an atom with, and without using please R,Parse an atom with, and without using please S$Parse an atom with optional comments T pSepBy p sep parse zero or more occurences of p, separated by sep, with optional ending sep, this is quite similar to the sepBy function provided in Parsec, but this one allows an optional extra separator at the end. 2commaSep p = p `pSepBy` (symbol (==(Special ','))) UDSeparate a list of things separated with comma inside of parenthesis VParse a comma separator WParse a Module declaration X$Check if next token is in given list YParse several imports ZParse one import [Parse simple type synonyms \Parse data declarations ]:Parse second half of the data declaration, if there is one ^Parse a deriving _ Parse for all `Parse optional strict variables aExporting module bParse a Let expression cParse a Do block dParse part of a lambda binding. eParse an Of block fyParse classes and instances This is very imprecise, but shall suffice for now. At least is does not complain too often. g$Parse some guards and a where clause hBRight-hand-side of a function or case equation (after the pattern) iThe RHS of an equation. jParse many of something k:Parse a some of something separated by the token (Special  l) m:Parse a some of something separated by the token (Special  l?), or nothing pBlocks' :: Parser TT r -> Parser TT (BL.BList r) n>Parse a block of some something separated by the tok (Special  l) o'Parse something surrounded by (Special  p) and (Special  q) rDParse something that can contain a data, type declaration or a class sJA "normal" expression, where none of the following symbols are acceptable. t4Parse an expression, as a concatenation of elements. u4Parse an expression, as a concatenation of elements. vyParse an "element" of an expression or a pattern. "at" is a list of symbols that, if found, should be considered errors. w5List of things that always should be parsed as errors x1List of things that should not be parsed as noise yyThese symbols are always properly recognized, and therefore they should never be accepted as "noise" inside expressions. z^Parse parenthesis, brackets and braces containing an expression followed by possible comments {^Parse parenthesis, brackets and braces containing an expression followed by possible comments |^Parse parenthesis, brackets and braces containing an expression followed by possible comments }Create a special error token. (e.g. fill in where there is no correct token to parse) Note that the position of the token has to be correct for correct computation of node spans../0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk ~  lm 9 :n ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k m n o r s t u v w x y z { | } A./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnBkji.fc_ZTSNIGCBA@?>=9876543210/ghde`ab[\]^UVWXYOPQRJKLMLHDEF:;<lnmj.;fc_ZTSNIGCBA@?>=9876543210/ghde`ab[\]^UVWXYOPQRJKLMLHDEF:;<ijk ~  lm 9 :n ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k m n o r s t u v w x y z { | } GPL-2yi-devel@googlegroups.com experimentalportableNone-/QzSearch the given list, and return the 1st tree after the given point on the given line. This is the tree that will be moved if something is inserted at the point. Precondition: point is in the given line.{5Given a tree, return (first offset, number of lines).Create a special error token. (e.g. fill in where there is no correct token to parse) Note that the position of the token has to be correct for correct computation of node spans.opqrstuvwxyz{|}~opqrstuvwxyz{|}~vwxyuotsrqpz{|}~otsrqpuvwxyz{|}~GPL-2yi-devel@googlegroups.com experimentalportableNoneQ Get strokes Module for module Get strokes for Imports ,Get strokes for expressions and declarations    GPL-2yi-devel@googlegroups.com experimentalportableNone-/QGPL-2yi-devel@googlegroups.com experimentalportableNone+/24Q(TRepresents either a variable name or a variable name assigned to an expression. AssBeg is a variable name maybe followed by an assignment. AssRst' is an equals sign and an expression. (AssBeg x (Just (AssRst '=' '5'))) means x = 5. Instances of Failablep can represent failure. This is a useful class for future work, since then we can make stroking much easier. Instances of  Strokable/ are datatypes which can be syntax highlighted.Normal stroker.Error stroker.^Given a new style and a stroke, return a stroke with the new style appended to the old one.,Given a list of tokens to check for errors (xs%) and a list of tokens to stroke (xs'), returns normal strokes for xs'A if there were no errors. Otherwise returns error strokes for xs'.Given a list of TT , if any of them is an error, returns an error stroker, otherwise a normal stroker. Using e.g. existentials, we could make this more general and have support for heterogeneous lists of elements which implement Failable, but I haven't had the time to fix this.Given a TT , return a Stroke for it.The main stroking function. Main parser.HParser for statements such as "return", "while", "do-while", "for", etc.MParser for "blocks", i.e. a bunch of statements wrapped in curly brackets or just a single statement.Note that this works for JavaScript 1.8 "lambda" style function bodies as well, e.g. "function hello() 5", since expressions are also statements and we don't require a trailing semi-colon.5TODO: function hello() var x; is not a valid program.Parser for expressions which may be statements. In reality, any expression is also a valid statement, but this is a slight compromise to get rid of the massive performance loss which is introduced when allowing JavaScript objects to be valid statements.@The basic idea here is to parse "the rest" of expressions, e.g. + 3 in x + 3 or [i] in x[i]y. Anything which is useful in such a scenario goes here. TODO: This accepts [], but shouldn't, since x[] is invalid.Parser for expressions.zParses both empty and non-empty arrays. Should probably be split up into further parts to allow for the separation of [] and  [1, 2, 3].!Parses a semicolon if it's there.3Parses a comma-separated list of valid identifiers.Parses a comment.Parses a prefix operator.Parses a infix operator.Parses a postfix operator.Parses any literal.Parses any literal.Parses any string.Parses any valid number.Parses any valid identifier.Parses any boolean.Parses a reserved word.Parses a special token.Parses an operator.!Expects a token x, recovers with .Expects a special token.Expects an expression.0General recovery parser, inserts an error token.Weighted recovery.Better name for  .Better name for  .<TODO: This code is *screaming* for some generic programming.TODO: Somehow fix Failable and failStroker to be more "generic". This will make these instances much nicer and we won't have to make ad-hoc stuff like this.x     fx     K       None234Q0The main verifier which calls the sub-verifiers.{Given a list of function declarations, checks for multiple function declarations, including the functions' subfunctions. Given two Tok t, compares the ts.3Returns a list of the functions in the given block.Given a *, returns the token representing the name. Given a #, returns its inner body as a list.!Given a  ValidName* returns the string representing the name."Like  + but drops the first element in the result. !"#$%& !"#&%$ !"# !"#$%& Safe-InferredQ'()'()')(')(GPL-2yi-devel@googlegroups.com experimentalportableNone +0234:HMQ12Mutation actions (also used the undo or redo list) For the undoredo, we use the dpartial checkpoint/ (Berlage, pg16) strategy to store just the components of the state that change.Note that the update direction is only a hint for moving the cursor (mainly for undo purposes); the insertions and deletions are always applied Forward.`Note that keeping the text does not cost much: we keep the updates in the undo list; if it's a Deletes it means we have just inserted the text in the buffer, so the update shares the data with the buffer. If it's an Insert" we have to keep the data any way.  buffer text Marks for this buffer syntax highlighting state /set of (non overlapping) visual overlay regions 9Lowest modified offset since last recomputation of syntax New FBuffer filled from string. Write string into buffer. Write string into buffer. uShift a mark position, supposing an update at a given point, by a given amount. Negative amount represent deletions.  Point of EOF Return n Chars starting at i of the buffer. 7TODO: This guy is a pretty big bottleneck and only one function uses it which in turn is only seldom used and most of the output is thrown away anyway. We could probably get away with never converting this to String here. The old implementation did so because it worked over ByteString but we don't have to.A"Create an "overlay" for the style sty between points s and e ,Obtain a style-update for a specific overlay /Add a style "overlay" between the given points. #Remove a previously added "overlay" 'Return style information for the range (i,j) Style information is derived from syntax highlighting, active overlays and current regexp. The returned list contains tuples (l,s,r)> where every tuple is to be interpreted as apply the style s from position l to r in the buffer. In each list, the strokes are guaranteed to be ordered and non-overlapping. The lists of strokes are ordered by decreasing priority: the 1st layer should be "painted" on top. Checks if an Update is valid Apply a valid update Reverse the given update 3Line at the given point. (Lines are indexed from 1) ;Point that starts the given line (Lines are indexed from 1) Point that's at EOL. Notably, this puts you right before the newline character if one exists, and right at the end of the text if one does not. 'Get begining of the line relatively to point. PReturn indices of all strings in buffer matching regex, inside the given region. Modify a mark value. cReturns the requested mark, creating a new mark with that name (at the supplied position) if neededP*+,-./01234567 8 9:;<= >? @ A Line for which to grab EOL for 4Point from which we take the line to find the EOL of @ *+,-./01234567 8 9:;<=>?@ A 7*+,-.0/142567563  8 9:;<=  >? @ A !None0Q B-A URList consists of an undo and a redo list.F A new empty B. Notice we must have a saved file point as this is when we assume we are opening the file so it is currently the same as the one on diskGAdd an action to the undo list. According to the restricted, linear undo model, if we add a command whilst the redo list is not empty, we will lose our redoable changes.HAdd a saved file point so that we can tell that the buffer has not been modified since the previous saved file point. Notice that we must be sure to remove the previous saved file points since they are now worthless.I!This undoes one interaction step.J This redoes one iteraction step. CPrepare undo by moving one interaction point from undoes to redoes. 4Remove an initial interactive point, if there is one 5Insert an initial interactive point, if there is none QRepeatedly undo actions, storing away the inverse operations in the redo list. Run the undo-function fL on a swapped URList making it operate in a redo fashion instead of undo.KundoIsAtSavedFilePoint. True/ if the undo list is at a SavedFilePoint indicating that the buffer has not been modified since we last saved the file. Note: that an empty undo list does NOT mean that the buffer is not modified since the last save. Because we may have saved the file and then undone actions done before the save.B CDE FGHIJ K BCDEFGHIJK FGHKIJBCEDB C EDFGHIJ K " Safe-InferredHMQL)Record presenting a frontend's interface.The functions S and Q are both run by the editor's main loop, in response to user actions and so on. Their relation is a little subtle, and is discussed here:'to see some code, look at the function  refreshEditor in Yi.Core#. This is the only place where S and Q are used. the function S! is responsible for updating the Editor with the width and height of the windows. Some frontends, such as Pango, need to modify their internal state to do this, and will consequently change their display. This is expected. the function QQ should cause the UI to update its display with the information given in the Editor.the functionalities of S and Q overlap to some extent, in the sense that both may cause the frontend to update its display. The Yi core provides the following guarantees which the frontend may take advantage of:%in the main editor loop (i.e. in the  refreshEditor function), S0 will be run (possibly multiple times) and then Q[ will be run. This guarantee will hold even in the case of threading (the function  refreshEditor& will always be run atomically, using MVars).between the last run of S and the run of Q&, some changes may be made to the Editor. However, the text, text attributes, and (displayed) window region of all windows will remain the same. However, the cursor location may change.QThis guarantee allows frontends which calculate rendering of the text during the S6 stage to avoid recalculating the render again during Q). Pango is an example of such a frontend.OThe Yi core provides no guarantee about the OS thread from which the functions S and QP are called from. In particular, subprocesses (e.g. compilation, ghci) will run S and Q from new OS threads (see startSubprocessWatchers in Yi.Corei). The frontend must be preparaed for this: for instance, Gtk-based frontends should wrap GUI updates in  postGUIAsync.N Main loopO&Clean up, and also terminate if given trueP!Suspend (or minimize) the programQ#Refresh the UI with the given stateRGUser force-refresh (in case the screen has been messed up from outside)SSet window width and heightTReload cabal project views LMNOPQRSTU LMNOPQRSTU LMNOPQRSTULMNOPQRSTU#GPL-2yi-devel@googlegroups.com experimentalportableNone +-./36:BMQTG[3Configuration record. All Yi hooks can be set here.] UI to use.^UI-specific configuration._*Actions to run when the editor is started.`<Actions to run after startup (after startActions) or reload.aDefault keymap to use.c"List modes by order of preference.d7Produce a .yi.dbg file with a lot of debug information.eSet to X for an emacs-like behaviour.fSet to  S for an emacs-like behaviour, where all deleted text is accumulated in a killring.iList of layout managers for cycleLayoutManagersNextj%Custom configuration, containing the s. Configure with configVariableA.kWhen should we use a "fat" cursor (i.e. 2 pixels wide, rather than 1)? Fat cursors have only been implemented for the Pango frontend.t&Font name, for the UI that support it.u&Font size, for the UI that support it.vStyle of scrollw5Amount to move the buffer when using the scroll wheelx/Should the scrollbar be shown on the left side?y6Hide scrollbar automatically if text fits on one page.z8Hide the tabbar automatically if only one tab is present{<Wrap lines at the edge of the window if too long to display.}9The char with which to fill empty window space. Usually '~'/ for vi-like editors, ' ' for everything else.~ UI coloursThe Editor stateFStack of all the buffers. Invariant: first buffer is the current one.&Supply for buffer, window and tab ids.6current tab contains the visible windows pointed list.dynamic componentsMcurrently highlighted regex (also most recent regex for use in vim bindings)2Processed events that didn't yield any action yet.@Actions to be run when the buffer is closed; should be scrapped.>Used to specify the behaviour of the automatic indent command.dDecrease the indentation to the next smaller indentation hint, if no such hint exists do nothing.VIncrease the indentation to the next higher hint if no such hint exists do nothing.Decrease the indentation to the next smaller indentation hint. If we are currently at the smallest level then cycle back to the largestIncrease the indentation to the next higher indentation hint. If we are currently at the highest level of indentation then cycle back to the lowest.A Mode customizes the Yi interface for editing a particular data format. It specifies when the mode should be used and controls file-specific syntax highlighting and command input, among other things.$so this can be serialized, debugged.+What type of files does this mode apply to?Syntax highlighterPrettify current "paragraph" Buffer-local keymap modificationemacs-style auto-indent line)adjust the indentation after modificationBFollow a "link" in the file. (eg. go to location of error message)bStrokes that should be applied when displaying a syntax element should this be an Action instead?6An action that is to be executed when this mode is set'buffer-local modeline formatting method.go to the point where the variable is declaredimmutable unique keyundo/redo listdynamic components;prefered column to arrive at when we do a lineDown / lineUp;prefered column to arrive at visually (ie, respecting wrap)/updates that haven't been synched in the UI yet*time of the last synchronization with diskread-only flag2the keymap is ready for insertion into this buffer&does buffer contain directory contentsIHow many points (frontend-specific) to change the font by in this bufferCurrently duplicates some of Vim's indent settings. Allowing a buffer to specify settings that are more dynamic, perhaps via closures, could be useful.)Insert spaces instead of tabs as possible Size of a TabIndent by so many columns/The BufferM monad writes the updates performed.Content of the top-level loop.For insertion-only modes^The type of user-bindable functions TODO: doc how these are actually user-bindable are they? input stream output stream%The only mutable state in the programVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     qrstuvwxyz{|}~pkonml[\]^_`abcdefghijVZYXW4VZYXW[\]^_`abcdefghijkonmlpq rstuvwxyz{|}~      $GPL-2yi-devel@googlegroups.com experimentalportableNoneQ !"#$%&'()* !"#$%&'()*)('&%$#"! * !"#$%&'()*% Safe-Inferred3Q,hGiven a path relative to application data directory, this function finds a path to a given data file.-zGiven a path relative to application configuration directory, this function finds a path to a given configuration file..Given an action that retrieves config path, and a path relative to it, this function joins the two together to create a config file path./#Get Yi master configuration script.1@Get articles.db database of locations to visit (for Yi.IReader.)26Get path to Yi history that stores state between runs.3TGet path to environment file that defines namespace used by Yi command evaluator. + ,-./0123 +,-./0123 3/012+-., + ,-./0123GPL-2yi-devel@googlegroups.com experimentalportableNone*+-./3:BEHIMQTEA6Gets a short identifier of a buffer. If we're given a + then just wraps the buffer name like so: *name*. If we're given a 2, it drops the the number of characters specified.&shortIdentString 3 (MemBuffer "hello") "*hello*"'shortIdentString 3 (FileBuffer "hello")"lo"B5Gets the buffer's identifier string, emphasising the :identString (MemBuffer "hello") "*hello*" identString (FileBuffer "hello")"hello"D6update the syntax information (clear the dirty "flag")HuIncreases the font size in the buffer by specified number. What this number actually means depends on the front-end.IuDecreases the font size in the buffer by specified number. What this number actually means depends on the front-end.J8Given a buffer, and some information update the modelineON.B. the contents of modelines should be specified by user, and not hardcoded.K;Given a point, and the file size, gives us a percent stringLAdds an "overlay" to the bufferNRemove an existing "overlay"Q Execute a BufferMw value on a given buffer and window. The new state of the buffer is returned alongside the result of the computation.W Execute a BufferM[ value on a given buffer, using a dummy window. The new state of the buffer is discarded.X9Mark the current point in the undo list as a saved state._Undo all updates that happened since last save, perform a given action and redo all updates again. Given action must not modify undo history. WAnalogous to const, but returns a function that takes two parameters, rather than one.`/Mode applies function that always returns True.a0Mode applies function that always returns False.cCreate buffer named nm with contents sd Point of eofeExtract the current pointj'Move point in buffer to the given indexm6Revert all the pending updates; don't touch the point.n6Write an element into the buffer at the current point.o0Write the list into the buffer at current point.p Insert newline at current point.q Insert given  3 at specified point, extending size of the buffer.r Insert the  + at current point, extending size of buffers:Insert the char at current point, extending size of bufferImplementation note: This just ss a  . This seems sub-optimal because we should be able to do much better without spewing chunks of size 1 everywhere. This approach is necessary however so an 1{ can be recorded. A possible improvement for space would be to have yi-rope  package optimise for appends with length 1.t deleteNAt n p deletes n# characters forwards from position puReturn the current line numbervTop line of the screenwMiddle line of the screenxBottom line of the screen Amount of lines in the screenyReturn line numbers of markszGo to line number n. ny is indexed from 1. Returns the actual line we went to (which may be not be the requested line, if it was out of range)| Set the mode~Modify the modeJReturn indices of strings in buffer matched by regex in the given region.PReturn indices of next string in buffer matched by regex in the given directionHighlight the selection$Whether the selection is highlightedhMove point by the given number of characters. A negative offset moves backwards a positive one forward. Move point -1Move cursor -nMove cursor +1Move cursor +nMove point down by n lines. n can be negative. Returns the actual difference in lines which we moved which may be negative if the requested line difference is negative.Moves to a visual column within the current line as shown on the editor (ie, moving within the current width of a single visual line)Move point up one lineMove point down one line"Return the contents of the buffer.:Returns the contents of the buffer between the two points.If the startPoint >= endPoint, empty string is returned. If the points are out of bounds, as much of the content as possible is taken: you're not guaranteed to get endPoint - startPoint characters.'Read the character at the current pointpRead the character at the given index This is an unsafe operation: character NUL is returned when out of boundsDelete n* characters forward from the current point Gives the  for the current buffer.Current column. Note that this is different from offset or number of chars from sol. (This takes into account tabs, unicode chars, etc.) Current column, visually. ?Decides which column we should be on after the given character..Returns start of line point for a given point p$Returns end of line for given point.Go to line indexed from current point Returns the actual moved difference which of course may be negative if the requested difference was negative.hAccess to a value into the extensible state, keyed by its type. This allows you to retrieve inside a  monad, ie: value <- getBufferDyndAccess to a value into the extensible state, keyed by its type. This allows you to save inside a  monad, ie: putBufferDyn updatedvalue perform a  BufferM a4, and return to the current point. (by using a mark) Perform an  BufferM a", and return to the current point. Perform an  BufferM aU, and return to the current line and column number. The difference between this and  is that here we attempt to return to the specific line and column number, rather than a specific number of characters from the beginning of the buffer.HIn case the column is further away than EOL, the point is left at EOL:  is used internally._What would be the point after doing the given action? The argument must not modify the buffer. Just stores the mode name.    456789:;<=> ? @ A2Number of characters to drop from FileBuffer namesBuffer to work withBCD  EFGHIJ K   LMNOPQR S TUVWXYZ[\ ]^_ `abc defghijk lmnopqrstuvwx yz{ |}~    Point to start atPoint to stop at   !    " # $ %*+,-89:;<=A456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~YRQSWvwxudeyjc*+,-89:;<=Azrqsfnopt@]^TUVZ|}{~JKk>X_LNOMP<FG?8=mD`ab9igh:ABC74E;[\lIH65    456789:;<=> ? @ ABCD  EFGHIJ K   LMNOPQR S TUVWXYZ[\ ]^_ `abc defghijk lmnopqrstuvwx yz{ |}~       !    " # $ %&GPL-2yi-devel@googlegroups.com experimentalportableNoneQ &Delete an arbitrary part of the buffer#Replace a region with a given rope.9Map the given function over the characters in the region.Swap the content of two RegionsPModifies the given region according to the given string transformation function1Extend the right bound of a region to include it.See a region as a block/rectangular region, since regions are represented by two point, this returns a list of small regions form this block region.IJoins lines in the region with a single space, skipping any empty lines.IConcatenates lines in the region preserving the trailing newline if any.  The string modification functionThe region to modify & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8  'GPL-2yi-devel@googlegroups.com experimentalportableNone+Q# Boundary side!Designate a given "unit" of text.the whole documentYa "vertical" line of text (area of text between two characters at the same column number)!a line of text (between newlines)a single characterLTurns a unit into its "negative" by inverting the boundaries. For example, outsideUnit unitViWordJ will be the unit of spaces between words. For units without boundaries (, ', ...), this is the identity function. 98Common boundary checking function: run the condition on len@ characters in specified direction shifted by specified offset.,a word as in use in Emacs (fundamental mode)kdelimited on the left and right by given characters, boolean argument tells if whether those are included. :$Tells if a char can end a sentence ( l, !, ?). ;jVerifies that the string matches all the predicates, pairwise. If the string is "too small", then return  <2. Note the length of predicates has to be finite. =^Helper that takes first two characters of YiString. Faster than take 2 and string conversion.TSeparator characters (space, tab, unicode separators). Most of the units above attempt to identify "words" with various punctuation and symbols included or excluded. This set of units is a simple inverse: it is true for "whitespace" or "separators" and false for anything that is not (letters, numbers, symbols, punctuation, whatever).4unitSep is true for any kind of whitespace/separatorNunitSepThisLine is true for any kind of whitespace/separator on this line only >Is the point at a Unit boundary in the specified  Direction?FParagraph to implement emacs-like forward-paragraph/backward-paragraphTParagraph that begins and ends in the paragraph, not the empty lines surrounding it.WUnit that have its left and right boundaries at the left boundary of the argument unit.genAtBoundaryB u d s2 returns whether the point is at a given boundary (d,s) . Boundary (d,s) , taking Word as example, means: Word ^^ ^^ 12 34 1: (Backward,OutsideBound) 2: (Backward,InsideBound) 3: (Forward,InsideBound) 4: (Forward,OutsideBound)rules: genAtBoundaryB u Backward InsideBound = atBoundaryB u Backward genAtBoundaryB u Forward OutsideBound = atBoundaryB u ForwardvRepeat an action until the condition is fulfilled or the cursor stops moving. The Action may be performed zero times. ?uRepeat an action until the condition is fulfilled or the cursor stops moving. The Action is performed at least once.ADo an action if the current buffer character passes the predicatevGeneric move operation Warning: moving To the (OutsideBound, Backward) bound of Document is impossible (offset -1!) genMoveB u b dC: move in direction d until encountering boundary b or unit u. See  for boundary explanation.YGeneric maybe move operation. As genMoveB, but don't move if we are at boundary already.Move to the next unit boundaryAs (, unless the point is at a unit boundaryTransforms the region given by  in the   with user-supplied function.GDelete between point and next unit boundary, return the deleted region.8Region of the whole textunit where the current point is.BNon empty region of the whole textunit where the current point is.eRegion between the point and the next boundary. The region is empty if the point is at the boundary.xNon empty region between the point and the next boundary, In fact the region can be empty if we are at the end of file.6Non empty region at given point and the next boundary,D 9Offset from current position Look-ahead predicateDirection to look in @ : ; = A B C D E F > G ?    6    6    ; 9 @ : ; = A B C D E F > G ?    (NoneQExtend the given region to boundaries of the text unit. For instance one can extend the selection to complete lines, or paragraphs. >VWXYZ   >  VZYXW  )GPL-2yi-devel@googlegroups.com experimentalportableNoneQTUXMove point between the middle, top and bottom of the screen If the point stays at the middle, it'll be gone to the top else if the point stays at the top, it'll be gone to the bottom else it'll be gone to the middleMove point to start of lineMove point to end of lineMove cursor to origin Move cursor to end of buffer!*Move left if on eol, but not on blank line"Move x- chars back, or to the sol, whichever is less#Move x0 chars forward, or to the eol, whichever is less$(Move to first char of next word forwards%)Move to first char of next word backwards'Move to the next occurence of c)3Move to the character before the next occurence of c+"Move to the previous occurence of c-6Move to the character after the previous occurence of c/.Move to first non-space character in this line01Move to the last non-space character in this line1iGo to the first non space character in the line; if already there, then go to the beginning of the line.2?True if current line consists of just a newline (no whitespace)3INote: Returns False if line doesn't have any characters besides a newline4Move down next n paragraphs5 Move up prev n paragraphs67Return true if the current point is the start of a line75Return true if the current point is the end of a line8True if point at start of file9True if point at end of file:True if point at the last line;&Get the current line and column number=Read the line the point is on H$Read from point to beginning of line I;Get the previous point, unless at the beginning of the file?Reads in word at point.@Reads in word before point.ADelete one character backwardBTDelete forward whitespace or non-whitespace depending on the character under point.CVDelete backward whitespace or non-whitespace depending on the character before point.D4Delete backward to the sof or the new line characterEemacs' delete-horizontal-space with the optional argument.F$capitalise the word under the cursorGlowerise word under the cursorH(capitalise the first letter of this wordJ(Delete to the end of line, excluding it.K0Transpose two characters, (the Emacs C-t action)L0Delete trailing whitespace from all lines. Uses  to get back to where it was.MMarks%Set the current buffer selection markN%Get the current buffer selection markOExchange point & mark.Q=File info, size in chars, line no, col num, char num, percentTScroll up 1 screenUScroll down 1 screenV%Scroll by n screens (negative for up)W*Same as scrollB, but also moves the cursorX,Same as scrollByB, but also moves the cursorYMove to middle line in screenZ$Move cursor to the top of the screen['Move cursor to the bottom of the screen\Scroll by n lines._,Move the point to inside the viewable region Jreturn index of Sol on line n above current line K&return relative position of the point p/ relative to the region defined by the points rs and re`,Move the visible region to include the pointaMove to n lines down from top of screenbMove to n' lines up from the bottom of the screencMove to middle line in screend(Return the region between point and mark L8Return the empty region if the selection is not visible.eJGet the current region boundaries. Extended to the current selection unit.f7Select the given region: set the selection mark at the  6 and the current point at the  5.h<Get a (lazy) stream of lines in the buffer, starting at the next line in the given direction. MGGet the next line of text in the given direction. This returns simply  N if there no such line.i The same as  M but avoids the use of the  OM type in the return by returning the empty string if there is no next line. PGet closest line to the current line (not including the current line) in the given direction which satisfies the given condition. Returns  N4 if there is no line which satisfies the condition.jReturns the closest line to the current line which is non-blank, in the given direction. Returns the empty string if there is no such line (for example if we are on the top line already).l9Prefix each line in the selection using the given string.mUncomments the selection using the given line comment starting string. This only works for the comments which begin at the start of the line.n Just like  QX but automatically inserts a whitespace suffix to the inserted comment string. In fact: QSToggle line comments in the selection by adding or removing a prefix to each line.o3Replace the contents of the buffer with some string R9Fill the text in the region so it fits nicely 80 columns.qSort the lines of the region. S7Forces an extra newline into the region (if one exists)sBHelper function: revert the buffer contents to its on-disk version~<Increase (or decrease if negative) next number on line by n. T Increment number in string by n.#Is character under cursor a number.GUsed by isNumber to test if current character under cursor is a number. Characters ['a'..'f'V] are part of a hex number only if preceded by 0x. Test if the current occurence of ['a'..'f'] is part of a hex number.Move point down by nn lines If line extends past width of window, count moving a single line as moving width points to the right.&Implements the same logic that emacs'  `mark-word`L does. Checks the mark point and moves it forth (or backward) for one word. U V W X !"#$%&'()*+,-./012345 Y6789:;<= H> I?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ J K`abc Zd Lefgh Mi Pjkl%The string that starts a line commentm'The string which begins a line comment3A potentially shorter string that begins a commentn Qo Rpq Srstuvwxyz{|}~ T [ \q !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~q97:68ADC QHgExJLaUSOp}/{P;<ijdNe&>~z32B0u!lhGck1|#")'*(4$-+.,5%?=@yosv\[ZVY]^Mftqr_`wKInmbFTRWXy U X W V !"#$%&'()*+,-./012345 Y6789:;<= H> I?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ J K`abc Zd Lefgh Mi Pjklmn Qo Rpq Srstuvwxyz{|}~ T [ \*GPL-2yi-devel@googlegroups.com experimentalportableNoneQTReturn either a t or the number of spaces specified by tabSize in the IndentSettings. Note that if you actually want to insert a tab character (for example when editing makefiles) then you should use: insertB '\t'.A specialisation of  ]F. This is the most basic and the user is encouraged to specialise  ] on their own. ]This takes two arguments the first is a function to obtain indentation hints from lines above the current one. The second is a function to obtain a set of indentation hints from the previous line. Both of these are in the  monad although the second seems like it is unnecessary. However we must take into account the length of tabs which come from the the tab settings and hence we must be in the  monad.To get the straightforward behaviour of the indents of all previous lines until one of them has zero indent call this with: ?autoIndentHelperB fetchPreviousIndentsB (fmap (: []) indentOfB) However commonly we wish to have something more interesting for the second argument, in particular we commonly wish to have the last opening bracket of the previous line as well as its indent.Cycles through the indentation hints. It does this without requiring to set/get any state. We just look at the current indentation of the current line and moving to the largest indent that is ^7A function generally useful as the first argument to  ]. This searches the lines above the current line for the indentations of each line until we get to a line which has no indentation *and* is not empty. Indicating that we have reached the outer scope. _NReturns the position of the last opening bracket on the line which is not closed on the same line. Note that if we have unmatched parentheses such as "( ]" then we may not get the correct answer, but in that case then arguably we don't really care if we get the correct answer (at least if we get it wrong the user may notice their error). We return a list here as it's a convenient way of returning no hint in the case of there being no non-closed bracket and normally such a hint will be part of a list of hints anyway. NOTE: this could be easily modified to return the indentations of *all* the non-closed opening brackets. But I think this is not what you generally want. TODO: we also do not care whether or not the bracket is within a string or escaped. If someone feels up to caring about that by all means please fix this.gReturns the indentation of a given string. Note that this depends on the current indentation settings. `gReturns the length of a given string taking into account the white space and the indentation settings.Indents the current line to the given indentation level. In addition moves the point according to where it was on the line originally. If we were somewhere within the indentation (ie at the start of the line or on an empty line) then we want to just go to the end of the (new) indentation. However if we are currently pointing somewhere within the text of the line then we wish to remain pointing to the same character.Modifies current line indent measured in visible spaces. Respects indent settings. Calling this with value (+ 4) will turn "t" into "tt" if shiftwidth is 4 and into "t " if shiftwidth is 8 If current line is empty nothing happens.#Indent as much as the previous lineIndent as much as the next lineFInsert a newline at point and indent the new line as the previous one. anSet the padding of the string to newCount, filling in tabs if expandTabs is set in the buffers IndentSettings b0Counts the size of the indent in the given text.*Assumes nothing but tabs and spaces: uses  c. dxshifts right (or left if num is negative) num times, filling in tabs if expandTabs is set in the buffers IndentSettingsIIncreases the indentation on the region by the given amount of shiftWidthKReturn the number of spaces at the beginning of the line, up to the point. ])Action to fetch hints from previous lines,Action to calculate hints from previous line Sets the indent behaviour, see   for a description ^ _ e ` f a b d   ] ^ _ e ` f a b d+GPL-2yi-devel@googlegroups.com experimentalportableNoneQB[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*'[\]^_`abcdefghijqrstuvwxyz{|}~pkonml,NoneQInitialise the ui-NoneBHMQ4Fields that can be modified with all lens machinery.%The configuration monad. Run it with  configMain.Accessor for any !, to be used by modules defining cs. Such modules should provide a custom-named field. For instance, take the following hypothetical :~@newtype UserName = UserName { unUserName :: String } deriving(Typeable, Binary, Default) instance YiConfigVariable UserName$(nameDeriveAccessors '' UserName (n -> Just (n ++ "A"))) userName ::   g userName = unUserNameA  l @7Here, the hypothetical library would provide the field userName to be used in preference to customVariable. GPL-2yi-devel@googlegroups.com experimentalportableNoneQ & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 h i j k l m n o p q r s t u*+,-./0123456789:;<=>?@ABCDEFGHIJKVWXYZ456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.0/142567563@>?.GPL-2yi-devel@googlegroups.com experimentalportableNoneQT7The initial stateCreate and fill a new buffer, using contents of string. | Does not focus the window, or make it the current window. | Call newWindowE or switchToBufferE to take care of that.;Delete a buffer (and release resources associated with it).Return the buffers we have, in no particular orderUReturn a prefix that can be removed from all buffer paths while keeping them unique.Find buffer with this keyFind buffers with this name/Find buffer with given name. Fail if not found.[Perform action with any given buffer, using the last window that was used for that buffer.$Perform action with any given buffer+Perform action with current window's bufferReturn the current bufferPrints a message with  v.!Prints a all given messages with  v. Set the "background" status lineClear the status linePut string into yank register(Return the contents of the yank register(Dynamically-extensible state components.These hooks are used by keymaps to store values that result from Actions (i.e. that restult from IO), as opposed to the pure values they generate themselves, and can be stored internally.The  field is a type-indexed map.*Retrieve a value from the extensible state;Insert a value into the extensible state, keyed by its type7Like fnewE, create a new buffer filled with the String s, Switch the current window to this buffer. Doesn't associate any file with the buffer (unlike fnewE) and so is good for popup internal buffers (like scratch)Like  but defaults to empty contents. w/Create a new zero size window on a given buffer*Create a new window onto the given buffer.1Attach the specified buffer to the current windoweSwitch to the buffer specified as parameter. If the buffer name is empty, switch to the next buffer.LClose a buffer. Note: close the current buffer if the empty string is given:Close current buffer and window, unless it's the last one.Rotate focus to the next window#Rotate focus to the previous windowLSwaps the focused window with the first window. Useful for layouts such as  HPairOneStack-, for which the first window is the largest.ZMoves the focused window to the first window, and moves all other windows down the stack.%Swap focused window with the next one)Swap focused window with the previous one xVA "fake" accessor that fixes the current buffer after a change of the current window.QEnforces invariant that top of buffer stack is the buffer of the current window.LReturn the windows that are currently open on the buffer whose key is given5bring the editor focus the window with the given key./Fails if no window with the given key is found.eSplit the current window, opening a second window onto current buffer. TODO: unfold newWindowE here?VCycle to the next layout manager, or the first one if the current one is nonstandard.ZCycle to the previous layout manager, or the first one if the current one is nonstandard. yHelper function for layoutManagersNext and layoutManagersPrevious8Next variant of the current layout manager, as given by ~=Previous variant of the current layout manager, as given by 2Sets the given divider position on the current tabDCreates a new tab containing a window that views the current buffer.4Moves to the next tab in the round robin set of tabs8Moves to the previous tab in the round robin set of tabsWMoves the focused tab to the given index, or to the end if the index is not specified.Deletes the current tab. If there is only one tab open then error out. When the last tab is focused, move focus to the left, otherwise move focus to the right.nClose the current window. If there is only one tab open and the tab contains only one window then do nothing.5Make the current window the only window on the screenDSwitch focus to some other window. If none is available, create one.Execute the argument in the context of an other window. Create one if necessary. The current window is re-focused after the argument has completed..Shows the current key bindings in a new window/Creates an in-memory buffer with a unique name.` z { | } ~  The buffer indentifier/The contents with which to populate the buffer   buffer namebuffer contents w x y  cc` z { | } ~     w x y  GPL-2yi-devel@googlegroups.com experimentalportableNoneQ Like usual  - but user can specify case sensitivity. See   for exotic unicode gotchas.'Prefix matching function, for use with &Infix matching function, for use with Example: "abc" matches "a1b2c"UTODO: this is a terrible function, isn't this just case-insensitive infix?  FkzetsuComplete a string given a user input string, a matching function and a list of possibilites. Matching function should return the part of the string that matches the user string.Same as  , but maps  showFunction# on possible matches when printing This function attempts to provide a better tab completion result in cases where more than one file matches our prefix. Consider directory with following files: 5["Main.hs", "Main.hi", "Main.o", "Test.py", "Foo.hs"].After inserting Mai[ into the minibuffer and attempting to complete, the possible matches will be filtered in  to  ["Main.hs", "Main.hi", "Main.o"]M however because of multiple matches, the buffer will not be updated to say Main. but will instead stay at Mai.This is extremely tedious when trying to complete filenames in directories with many files so here we try to catch common prefixes of filtered files and if the result is longer than what we have, we use it instead. Is case-sensitive?Input to match onmatcher functionitems to match against Show functionInput to match onmatcher functionitems to match against     /GPL-2yi-devel@googlegroups.com experimentalportableNone+03Q @local name of the tag file TODO: reload if this file is changed>path to the tag file directory tags are relative to this pathmap from tags to filestrie to speed up tag hintingTFind the location of a tag using the tag table. Returns a full path and line number iSuper simple parsing CTag format 1 parsing algorithm TODO: support search patterns in addition to lineno"Read in a tag file from the system>Gives all the possible expanded tags that could match a given prefix0Extends the string to the longest certain lengthSet a new TagTableReset the TagTable&Get the currently registered tag table!          0GPL-2yi-devel@googlegroups.com experimentalportableNoneQPut regex into regex registerClear the regex register!Return contents of regex register1GPL-2yi-devel@googlegroups.com experimentalportableNone *+23468:BHMQ write a/ returns a keymap that just outputs the action a. withModeY f runs fd on the current buffer's mode. As this runs in the YiM monad, we're able to do more than with just  withModeBB such as prompt the user for something before running the action.     Predicate to select exceptionsComputation to runHandler 6     6           2GPL-2yi-devel@googlegroups.com experimentalportableNone3Q 5Parse any character that can be inserted in the text.( optMod f ev produces a  that consumes ev or f ev)#Convert a special key into an event* p >>! act = p >> 'write' act+  p >>=! act = p >>= 'write' . act,  ev ?>> proc =  ev >> proc-  ev ?>>! act =  ev >>   act.  ev ?*>> proc =  ev >> proc/  ev ?*>>! act =  ev >>   act !"#$%&'()*+,-./Q0123456789:;<=>?@ABCDEFGHIJKLMN !"#$%&'()*+,-./! "#)$*+,-./%&'( !"#$%&'()*+,-./*+,-./3GPL-2yi-devel@googlegroups.com experimentalportableNoneQ0"reloads" the configurationSerializes the editor state and relaunches Yi using the serialized state. The launch of Yi will result in recompilation of the user's custom Yi. This, in effect, "reloads" the configuration.00004GPL-2yi-devel@googlegroups.com experimentalportableNone+BMQ 4 TODO: Why  ?5Take an 1, and return the first 4, and an ArticleDB - *without* that article.6Get the first article in the list. We use the list to express relative priority; the first is the most, the last least. We then just cycle through - every article gets equal time.7oWe remove the old first article, and we stick it on the end of the list using the presumably modified version.9KInsert a new article with top priority (that is, at the front of the list).:Serialize given 1 out.;Read in database from 1 and then parse it into an 1.<8Returns the database as it exists on the disk, and the current Yi buffer contents. Note that the Default typeclass gives us an empty Seq. So first we try the buffer state in the hope we can avoid a very expensive read from disk, and if we find nothing (that is, if we get an empty Seq), only then do we call ;.= Given an 1L, dump the scheduled article into the buffer (replacing previous contents).>~Go to next one. This ignores the buffer, but it doesn't remove anything from the database. However, the ordering does change.?MDelete current article (the article as in the database), and go to next one.@vThe main action. We fetch the old database, we fetch the modified article from the buffer, then we call the function  updateSetLastZ which removes the first article and pushes our modified article to the end of the list.AkAssume the buffer is an entirely new article just imported this second, and save it. We don't want to use  updateSetLast# since that will erase an article.123456789:;<=>?@ABC123456789:;<=>?@A4123CB56789:;<=>?@A123456789:;<=>?@ABC5NoneQDThe class of "valid hooks". This class is exported abstractly, but the instances can be phrased quite simply: the functions (of arbitrarily many arguments, including zero) which run in either the  or  monads.)A typical example would be something likeInt -> String ->  String.EJLooks up the configured value for the hook, and runs it. The argument to E+ will typically be a record accessor. See D for the valid hook types.D E DEEDD E 6GPL-2yi-devel@googlegroups.com experimentalportableNone +24HMQR#Start an input session with HistoryT.Finish the current input session with history.Z0Helper that sets the given history at ident and s the result.FGHIJKLMNOPQRSTUVWXYZ identifierHistory to setMap of existing histories[\]^_FGHIJKLMNOPQRSTUVWXYZKL_^FGHIJ]\[MNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVWXYZ[\]^_GPL-2yi-devel@googlegroups.com experimentalportableNone+BQTdEGlobal searching. Search for regex and move point to that position. Nothing* means reuse the last regular expression. Just s means use sP as the new regular expression. Direction of search can be specified as either Backward or Forwardi (forwards in the buffer). Arguments to modify the compiled regular expression can be supplied as well.fSet up a search.gDo a search, placing cursor at first char of pattern, if found. Keymaps may implement their own regex language. How do we provide for this? Also, what's happening with ^ not matching sol?h2Search and Replace all within the current region. Note the region is the final argument since we might perform the same search and replace over multiple regions however we are unlikely to perform several search and replaces over the same region since the first such may change the bounds of the region.i,Peform a search and replace on the selectionj6Replace a string by another everywhere in the documentk'Search and replace in the given region.If the input boolean is True, then the replace is done globally, otherwise only the first match is replaced. Returns the number of replacements done.mOSearch and replace in the region defined by the given unit. The rest is as in l.q4Create a SearchExp that matches exactly its argumentw&Succesfully finish a search. Also see y.xCancel a search. Also see z.y Wrapper over  x that passes through the action and accepts the search as successful (i.e. when the user wants to stay at the result).z Wrapper over   that passes through the action and marks the search as unsuccessful (i.e. when the user wants to jump back to where the search started). DEditor action describing how to end finish incremental search. The act parameter allows us to specify an extra action to run before finishing up the search. For Vim, we don't want to do anything so we use  [ which just does nothing. For emacs, we want to cancel highlighting and stay where we are.  Specialised   to do nothing as the action.{DFind the next match and select it. Point is end, mark is beginning.|&Replace all the remaining occurrences.}Exit from query/replace.~IWe replace the currently selected match and then move to the next match. This may actually be a bit more general it replaces the current selection with the given replacement string in the given window and buffer.- `abcdeNothingh means used previous pattern, if any. Complain otherwise. Use getRegexE to check for previous patterns"Flags to modify the compiled regexBackward or ForwardfghThe string to search forThe string to replace it withThe region to perform this overitext to search fortext to replace it withjklm nopq rstu vwxyz {|}~ & `abcdefghijklmnopqrstuvwxyz{|}~&d`cba  efgqhijlkmnoptuvsrxwzy{|~})  `cbadefghijklm nopq rstu vwxyz {|}~ 7None+0BMQ BTrims per-command histories to contain at most N completions each.{Here is a persistent history saving part. We assume each command is a single line. To add new components, one has to:add new field in PersistentState structure,add write and read parts in loadPersistentState/savePersistentState,add a trimming code in savePersistentState) to prevent blowing up of save file. QReads and decodes a persistent state in both strict, and exception robust way.BLoads a persistent state, and sets Yi state variables accordingly.           8GPL-2yi-devel@googlegroups.com experimentalportableNoneCHMQT FMake an action suitable for an interactive run. UI will be refreshed.qStart up the editor, setting any state with the user preferences and file names passed in, and turning on the UIRuns a  action in a separate thread.Notes:%It seems to work but I don't know whyMaybe deadlocks?If you're outputting into the Yi window, you should really limit the rate at which you do so: for example, the Pango front-end will quite happily segfault/double-free if you output too fast.I am exporting this for those adventurous to play with but I have only discovered how to do this a night before the release so it's rather experimental. A simple function that prints a message once a second, 5 times, could be written like this: printer :: YiM ThreadId printer = do mv <- io $ newMVar (0 :: Int) forkAction (suicide mv) MustRefresh $ do c <- io $ do modifyMVar_ mv (return . succ) tryReadMVar mv case c of Nothing -> printMsg "messaging unknown time" Just x -> printMsg $ "message #" <> showT x where suicide mv = tryReadMVar mv >>= case Just i | i >= 5 -> return True _ -> threadDelay 1000000 >> return False 7Display the errors buffer if it is not already visible. ^Process events by advancing the current keymap automaton and executing the generated actions.Quit. lUpdate (visible) buffers if they have changed on disk. FIXME: since we do IO here we must catch exceptions! ;Hide selection, clear "syntax dirty" flag (as appropriate).RedrawSuspend the programpPipe a string through an external command, returning the stdout chomp any trailing newline (is this desirable?)Todo: varients with marks? Same as %, but do nothing instead of printing (),Show an error on the status line and log it.MClose the current window. If this is the last window open, quit the program.ACONSIDER: call quitEditor when there are no other window in the  Y function. (Not possible since the windowset type disallows it -- should it be relaxed?)This is a like  but with emacs behaviour of C-x 0: if we're trying to close the minibuffer or last buffer in the editor, then just print a message warning the user about it rather closing mini or quitting editor. Kill a given subprocess8Start a subprocess with the given command and arguments.  Appends a   to the given buffer.BTODO: Figure out and document the Bool here. Probably to do with  . runs after we insert the action: this may be a thread delay or a thread suicide or whatever else; when delay returns False, that's our signal to terminate the thread.#should we refresh after each actionThe action to actually run     Buffer to append toText to append        9GPL-2yi-devel@googlegroups.com experimentalportableNone +246BJKMQT -What to prompt the user when asked this type?Tag a type with a documentation:Prints out the rope of the current buffer as-is to stdout.UThe only way to stop it is to close the buffer in question which should free up the  n.+Prompts for a buffer name, turns it into a  nO and passes it on to the handler function. Uses all known buffers for hinting.@Prompts the user for comment syntax to use for the current mode.Open a minibuffer window with the given prompt and keymap The third argument is an action to perform after the minibuffer is opened such as move to the first occurence of a searched for string. If you don't need this just supply  return ()#withMinibuffer prompt completer act: open a minibuffer with prompt. Once a string s is obtained, run act s.  completerK can be used to complete functions: it returns a list of possible matches.Makes a completion function..Hint function that does nothing, for use with withMinibufferFree prompt act: Simple version of @withMinibufferGen proposal getHint prompt completer onTyping act: open a minibuffer with prompt, and initial content proposal. Once a string s is obtained, run act s.  completer can be used to complete inputs by returning an incrementally better match, and getHint can give an immediate feedback to the user on the current input. on Typingu is an extra action which will fire with every user key-press and receives minibuffer contents. Use something like const $ return () if you don't need this.8Open a minibuffer, given a finite number of suggestions. *TODO: decide whether we should be keeping   here or moving to YiString.Returns all the buffer names;   PromptHandlerHint pre-processor. It takes the list of open buffers and a list of all buffers, and should spit out all the buffers to possibly hint, in the wanted order. Note the hinter uses name prefix for filtering regardless of what you do here.List completion, such as .Matcher such as .Function to fetch possibilites for completion.!Input to try and complete against  4       :GPL-2yi-devel@googlegroups.com experimentalportableNoneEJKQT Given a possible starting path (which if not given defaults to the current directory) and a fragment of a path we find all files within the given (or current) directory which can complete the given path fragment. We return a pair of both directory plus the filenames on their own that is without their directories. The reason for this is that if we return all of the filenames then we get a hint1 which is way too long to be particularly useful.bGiven a path, trim the file name bit if it exists. If no path given, return current directory.?Given a possible path and a prefix, return matching file names.\Place mark at current point. If there's an existing mark at point already, deactivate mark.'Select the contents of the whole bufferA simple wrapper to adjust the current indentation using the mode specific indentation function but according to the given indent behaviour.0Generic emacs style prompt file action. Takes a prompt and a continuation act& and prompts the user with file hints.As r but additionally allows the caller to transform the list of hints arbitrarily, such as only showing directories. For use as the hint when opening a file using the minibuffer. We essentially return all the files in the given directory which have the given prefix.Like M-x cd, it changes the current working directory. Mighty useful when we don't start Yi from the project directory or want to switch projects, as many tools only use the current working directory.*Shows current working directory. Also see .Prompt/Hint transformer: current path, generated hintsAction over choice  ;GPL-2yi-devel@googlegroups.com experimentalportableNone+0QT" .keep track of the num of successful operations "if True, DOChoice will be bypassed \The full path to the directory being viewed FIXME Choose better data structure for Marks... -Map values are just leafnames, not full paths 'keys are just leafnames, not full paths (position in the buffer where filename is <position on line where filename is (all pointA are this col) :keep the position of pointer (for refreshing dired buffer) Handy alias for   map. IAlias serving as documentation of some arguments. We keep most paths as  5 for the sole reason that we'll have to render them. ^Elementary operations for dired file operations Map a dired mark operation (e.g. delete, rename, copy) command into a list of DiredOps, and use procDiredOp to excute them. Logic and implementation of each operation are packaged in procDiredOp See askDelFiles for example. If new elem op is added, just add corresponding procDiredOp to handle it.  no operation 6to feedback, given the state. such as show the result. )prompt a string, provide keybindings for y, n, !, q and optional hb (help) this is useful when overwriting of existing files is required to complete the op choice !) will bypass following DOChoice prompts. prompt a string and collect user input. the embedded list of DiredOps is generated based on input, Remember that the input should be checked with DOCheck 6this is a shortcut, it invokes DCChoice if file exists Usimilar to DOConfirm, but no user interaction. Could be used to check file existence prompt a "yes/no" question. If yes, execute the first list of embedded DiredOps otherwise execute the second list of embedded DiredOps /remove the buffers that associate with the fileIf file exists, read contents of file into a new buffer, otherwise creating a new empty buffer. Replace the current window with a new window onto the new buffer.EIf the file is already open, just switch to the corresponding buffer.YNeed to clean up semantics for when buffers exist, and how to attach windows to buffers.Yi.FileC module re-exports this, you probably want to import that instead.KIn case of a decoding failure, failure message is returned instead of the  n. Execute the operationsQPass the list of remaining operations down, insert new ops at the head if needed ,Delete a list of file in the given directory GAsk for confirmation, if yes, perform deletions, otherwise showNothingbConfirmation is required for recursive deletion of non-empty directry, but only the top level oneBShow the number of successful deletions at the end of the excutionZTODO: ask confirmation for wether to remove the associated buffers when a file is removed UWrite the contents of the supplied directory into the current buffer in dired format NReturns a tuple containing the textual region (the end of) which is used for clickK detection and the FilePath of the file represented by that textual region XReturn a List of (prefix, fullDisplayNameIncludingSourceAndDestOfLink, style, filename) ?Return dired entries for the contents of the supplied directory Needed on Mac OS X 10.4 Needed on Mac OS X 10.4 Generic mark toggler. !Delete all the keys from the map. NRemoves mark from current file (if any) and moves in the specified direction. Tmove selected files in a given directory to the target location given by user inputif multiple source then if target is not a existing dir then error else move source files into target dir else if target is dir then if target exist then move source file into target dir else if source is dir and parent of target exists then move source to target else error else if parent of target exist then move source to target else error Tcopy selected files in a given directory to the target location given by user inputhaskCopyFiles follow the same logic as askRenameFiles, except dir and file are done by different DiredOP jExtract the filename at point. NB this may fail if the buffer has been edited. Maybe use Markers instead.t      !    " # $ % & ' ( ) * + , - . / 0 1 2 3      4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M  N O P       Q R S T euniversal argument, usually indicating whether to mark or unmark. Here Just &  is taken as unmark.Picks which entries to consider7Character used for marking. Pass garbage if unmarking. U V W  X Y $Direction to move in after unmarking Z [ \   ] ^ _ `  a b c d e f g hF       !    ) ( ' & % $ # " * + , - . / 0 1 2 3  8 7 6 5 4     9 @ ? > = < ; : A A A A A A A B C D E F G H I J K L M  N O P       Q R S T  U V W  X Y  Z [ \   ] ^ _ `  a b c d e f g h<GPL-2yi-devel@googlegroups.com experimentalportableNone+QT Tries to open a new buffer with @ and runs the given action on the buffer handle if it succeeds.If the , fails, just the failure message is printed.Same as openingNewFile with no action to run after.*Revert to the contents of the file on diskaTry to write a file in the manner of vi/vim Need to catch any exception to avoid losing bindings4Try to write to a named file in the manner of vi/vimGTry to write to a named file if it doesn't exist. Error out if it does.FWrite current buffer to disk, if this buffer is associated with a file=Write a given buffer to disk if it is associated with a file. Write current buffer to disk as f. The file is also set to f.Write all open buffersMake a backup copy of file=Associate buffer with file; canonicalize the given path name.Checks if the given buffer deserves a save: whether it's a file buffer and whether it's pointing at a file rather than a directory. ikIs there a proper file associated with the buffer? In other words, does it make sense to offer to save it? j k l m n o i j k l m n o i=GPL-2yi-devel@googlegroups.com experimentalportableNone+BQT p%Cached dictioary for describeNameImpl q*Cached variable for getAllNamesInScopeImpl2Config variable for customising the behaviour of  and .Set this variable using . See  ghciEvaluator and finiteListEvaluator for two implementation.implementation of implementation of Sdescribe named action (or at least its type.), simplest implementation is at least return.(Runs the action, as written by the user.CThe behaviour of this function can be customised by modifying the  variable.,Lists the action names in scope, for use by , and help index.CThe behaviour of this function can be customised by modifying the  variable.0Describes the named action in scope, for use by help.CThe behaviour of this function can be customised by modifying the  variable.The evaluator to use for  and .4Accessor for the published actions. Consider using .hPublish the given action, by the given name. This will overwrite any existing actions by the same name.REvaluator based on a fixed list of published actions. Has a few differences from  ghciEvaluator:expressions can't be evaluated)all suggested actions are actually valued@(related to the above) doesn't contain junk actions from Prelude1doesn't require GHCi backend, so uses less memory,Jumps to specified position in a given file. r'Regex parsing the error message format. s}Parses an error message. Fails if it can't parse out the needed information, namely filename, line number and column number. t7Tries to parse an error message at current line using  s.1Tries to jump to error at the current line. See  t. uTries to strip the  v from the front of the given  g?. If the prompt is not found, returns the input command as-is.$ w x y p z q { | } ~  Filename to make the jump in.Line to jump to.Column to jump to. r s t v u  w x y p z q { | } ~   r s t v u >GPL-2yi-devel@googlegroups.com experimentalportableNone+BQ 6Dynamic YiVariable to store the help buffer reference.BDisplays help for a given name, or help index, if no name is given 4Finds help text to display, given a command argument (Display help buffer with a given text...     ?GPL-2yi-devel@googlegroups.com experimentalportableNoneQ:Insert the list at current point, extending size of buffer:Insert the char at current point, extending size of buffer  deleteNAt n p deletes n# characters forwards from position p   & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 h i j k l m n o p q r s t u*+,-./0123456789:;<=>?@ABCDEFGHIJKVWXYZ456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyz{|}~  @GPL-2yi-devel@googlegroups.com experimentalportableNone+0Q!for repeat and potentially macros!see Yi.Keymap.Vim.vimEval comment8is set on $, allows j and k walk the right edge of lineslike vim's :help pasteafter C-o and one of v, V, C-v after C-o-char denotes how state got into insert mode (i, a, etc.)I        >      >               AGPL-2yi-devel@googlegroups.com experimentalportableNoneQ ! "#$%&!"#$%&!"#$&% ! "#$%&BGPL-2yi-devel@googlegroups.com experimentalportableNoneQ'()*+,-./0123456789:;<='()*+,-./0123456789:;<='(*+.),-0/12345768:9;<='()*+,-./0123456789:;<=CGPL-2yi-devel@googlegroups.com experimentalportableNoneQ>>>>DGPL-2yi-devel@googlegroups.com experimentalportableNoneQA%B'a,'b ?@ABCDEFGHIJK ?@ABCDEFGHIJ CDEFGHIK?BA@J?BA@CDEFGHIJKEGPL-2yi-devel@googlegroups.com experimentalportableNoneQLM LMLMLM FGPL-2yi-devel@googlegroups.com experimentalportableNoneQPfrom vim help: If the motion is exclusive and the end of the motion is in column 1, the end of the motion is moved to the end of the previous line and the motion becomes inclusive. Example: "}" moves to the first line after a paragraph, but "d}" will not include that line.If the motion is exclusive, the end of the motion is in column 1 and the start of the motion was at or before the first non-blank in the line, the motion becomes linewise. Example: If a paragraph begins with some blanks and you do "d}" while standing on the first non-blank, all the lines of the paragraph are deleted, including the blanks. If you do a put now, the deleted lines will be inserted below the cursor position. TODO: case 2NOPQRNOPQRNOPQRNOPQRGGPL-2yi-devel@googlegroups.com experimentalportableNoneQSTUVWXYZ [ \ STUVWXYZ[\ UVWXYSTZ\[STUVWXYZ [ \ HGPL-2yi-devel@googlegroups.com experimentalportableNoneQa$All impure bindings will be ignored.]^_` abc defgh i%]^_`abcdefghi_`]^%bacefhigd]^_` abc defgh iIGPL-2yi-devel@googlegroups.com experimentalportableNoneQj jjj JGPL-2yi-devel@googlegroups.com experimentalportableNoneQk kkk KGPL-2yi-devel@googlegroups.com experimentalportableNoneQlm lmlmlm LNoneQ nopqrs tu nopqrstupqnosrtu nopqrs tu MGPL-2yi-devel@googlegroups.com experimentalportableNoneQvwxyz{|}~   vwxyz{|}~ vwxyz~}{|vwxyz{|}~  NGPL-2yi-devel@googlegroups.com experimentalportableNoneQ like dd and d2vd (TODO: should this String be EventString?     OGPL-2yi-devel@googlegroups.com experimentalportableNoneLQ  Creates a  from a  ( and a function that turns tokens into  .Specialised version of  * for the common case, wrapping up into a   with  . HDetermines if the file's extension is one of the extensions in the list..When applied to an extensions list, creates a  function.NWhen applied to an extensions list and regular expression pattern, creates a  function.+Adds a hook to all matching hooks in a list0Apply a list of mode hooks to a list of AnyModessCheck whether a mode of the same name is already in modeTable and returns the original mode, if it isn't the case.  Starting state List of extensionsPath to compare against)File contents. Currently unused but see .   PGPL-2yi-devel@googlegroups.com experimentalportableNoneQQGPL-2yi-devel@googlegroups.com experimentalportableNoneQsyntax-based latex modesyntax-based latex mode    RGPL-2yi-devel@googlegroups.com experimentalportableNoneQSGPL-2yi-devel@googlegroups.com experimentalportableNoneQ1TODO: we're just converting back and forth here, W3 and friends need to migrate to YiString it seems.1Open a new buffer for interaction with a process.Uopen a new buffer for interaction with a process, using any interactive-derived mode$Send the type command to the processSend command, recieve reply    TGPL-2yi-devel@googlegroups.com experimentalportableNone+BJKQqChanging the buffer name quite useful if you have several the same. This also breaks the relation with the file."shell-command with argument prompt#shell-command with a known argumentcabal-configurenRun the given commands with args and pipe the ouput into the build buffer, which is shown in an other window. cabal-build'Search the source files in the project.Perform a find+grep operationUGPL-2yi-devel@googlegroups.com experimentalportableNone+BQStart Abella in a bufferKReturn Abella's buffer; create it if necessary. Show it in another window.Send a command to Abella           VGPL-2yi-devel@googlegroups.com experimentalportableNone+BQHooks for the JavaScript mode. The "compiler." 9Returns the JS verifier buffer, creating it if necessary. *Creates a new empty buffer and returns it. VGiven a filename, a BufferRef and a list of errors, prints the errors in that buffer.       WGPL-2yi-devel@googlegroups.com experimentalportableNoneQT  XGPL-2yi-devel@googlegroups.com experimentalportableNoneQ[Remove anything starting with uppercase letter. These denote either module names or types.Hoogle's output includes a sort of type keyword, telling whether a hit is a package name, syntax, a module name, etc. But we care primarily about the function names, so we filter out anything containing the keywords.tQuery Hoogle, with given search and options. This errors out on no results or if the hoogle command is not on path.Filter the output of  to leave just functions.Return module-function pairs. Call out to D, and overwrite the word at point with the first returned function. Call out to Z, and print inside the Minibuffer the results of searching Hoogle with the word at point.YGPL-2yi-devel@googlegroups.com experimentalportableNoneLQXAlign each line of the region on the given regex. Fails if it is not found in any line.Get the selected region as a rectangle. Returns the region extended to lines, plus the start and end columns of the rectangle."Split text at the boundaries given    ZGPL-2yi-devel@googlegroups.com experimentalportableNone 2346JKMQT[Quits the editor if there are no unmodified buffers if there are unmodified buffers then we ask individually for each modified buffer whether or not the user wishes to save it or not. If we get to the end of this list and there are still some modified buffers then we ask again if the user wishes to quit, but this is then a simple yes or no.}Quits the editor if there are no unmodified buffers if there are then simply confirms with the user that they with to quit.Insert next character, "raw"9Convert the universal argument to a number of repetitions <Finds file and runs specified action on the resulting buffercOpen a file using the minibuffer. We have to set up some stuff to allow hints and auto-completion.Like , but sets the resulting buffer to read-only..Open a file in a new tab using the minibuffer.EPrompts the user for a buffer name and switches to the chosen buffer.Prompts the user for a buffer name and kills the chosen buffer. Prompts about really closing if the buffer is marked as changed since last save.If on separators (space, tab, unicode seps), reduce multiple separators to just a single separator (or however many given through ).If we aren't looking at a separator, insert a single space. This is like emacs just-one-space  but doesn't deal with negative argument case but works with other separators than just space. What counts as a separator is decided by  modulo n character.Further, it will only reduce a single type of separator at once: if we have hard tabs followed by spaces, we are able to reduce one and not the other.3Join this line to previous (or next N if universal) dShortcut to use a default list when a blank list is given. Used for default values to emacs queries7Prompt the user to give a tag and then jump to that tag Opens the file that contains tagR. Uses the global tag table and prompts the user to open one if it does not exist Call continuation actS with the TagTable. Uses the global table and prompts the user if it doesn't exist_Counts the number of lines, words and characters inside selected region. Coresponds to emacs' count-words-region.!    Prompt%Action to run on the resulting buffer  !      [GPL-2yi-devel@googlegroups.com experimentalportableNoneQ~Introduce a keymap that is compatible with both windows and osx, by parameterising the event modifier required for commands    \GPL-2yi-devel@googlegroups.com experimentalportableNoneQC-w This is like kill-region-or-backward-word.C-kKill the rest of lineC-yM-wM-yC-M-w]GPL-2yi-devel@googlegroups.com experimentalportableNoneQ?Retrieve buffer list and open a them in buffer mode using the  . HSwitch to the buffer with name at current name. If it it starts with a /5 then assume it's a file and try to open it that way. Keymap for the buffer mode. p ! line up n or SPACE ! line down ENTER or f ! open buffer v) ! open buffer as read-only     ^GPL-2yi-devel@googlegroups.com experimentalportableNone+BQ Word completion[when doing keyword completion, we need to keep track of the word we're trying to complete.Switch out of completion mode.qTry to complete the current word with occurences found elsewhere in the editor. Further calls try other options.  Extract functionSource functionMessage functionPredicate matcher                                _GPL-2yi-devel@googlegroups.com experimentalportableNone3JKQT Wrapper around  D which also cancels incremental search. See issue #499 for details.           `GPL-2yi-devel@googlegroups.com experimentalportableNoneQ                        aGPL-2yi-devel@googlegroups.com experimentalportableNoneMQT Some of the parse rules for the second point actually depend on the first point. If parse rule succeeds this can result in the first BufferM Point having to be run twice but this probably isn't a big deal. *Parse a single mark, or a selection mark ( or)  Parse a normal mark (non-system) Parse selection marks. !0Parses end of line, $, only valid for 2nd point. "5Parses a numeric line or ".+k", k relative to current # Parses .+-k $Parses a line number %!Show an error on the status line.)GShow the common error message about an unsaved file on the status line.*?Useful parser for any Ex command that acts kind of like a shell &-Parse a single command, with a space in front 'xUnquoted arg, allows for escaping of , ", ', and space. Includes quoted arg as a subset, because of things like aa"bbb" (Quoted arg with char delim. Allows same escapes, but doesn't require escaping of the opposite kind or space. However, it does allow escaping opposite kind like normal, as well as allowing escaping of space (is this normal behavior?). )$Parser for a single escape character' The command name parser.-A parser for the remaining command arguments.The string to parse.!The command name parser.-A parser for the remaining command arguments.The string to parse. * +" , - .    ! " # $#$ /%&'( %)* & ' ( )+ !"#$%&'()*+! "#$%&'()*+" ! * +" , - .    ! " # $#$ /%&'( %)* & ' ( )+bGPL-2yi-devel@googlegroups.com experimentalportableNoneQ, 0 1 2 3,,, 0 1 2 3cGPL-2yi-devel@googlegroups.com experimentalportableNoneQ----dGPL-2yi-devel@googlegroups.com experimentalportableNoneQ. 4... 4eGPL-2yi-devel@googlegroups.com experimentalportableNoneQ////fGPL-2yi-devel@googlegroups.com experimentalportableNoneQ0000gGPL-2yi-devel@googlegroups.com experimentalportableNoneQ1 5 6111 5 6hGPL-2yi-devel@googlegroups.com experimentalportableNoneQ2222iGPL-2yi-devel@googlegroups.com experimentalportableNoneQ3333jGPL-2yi-devel@googlegroups.com experimentalportableNoneQ4444kGPL-2yi-devel@googlegroups.com experimentalportableNoneQ5 7555 7lGPL-2yi-devel@googlegroups.com experimentalportableNoneQ6 8 9666 8 9mGPL-2yi-devel@googlegroups.com experimentalportableNoneEQT7 : ; < = >777 : ; < = >nGPL-2yi-devel@googlegroups.com experimentalportableNoneQ8888oGPL-2yi-devel@googlegroups.com experimentalportableNoneQ9999pGPL-2yi-devel@googlegroups.com experimentalportableNoneQ: ? @::: ? @qGPL-2yi-devel@googlegroups.com experimentalportableNoneQT A Run substitution in confirm mode B(All matches to replace under given flags C&Get regions corresponding to all lines D?Offsets a region (to account for a region prior being modified) E5Runs a list of matches using itself as a continuation F#Actual choices during confirm mode.; G A B C D E F;;; G A B C D E FrGPL-2yi-devel@googlegroups.com experimentalportableNoneQ< H I<<< H IsGPL-2yi-devel@googlegroups.com experimentalportableNoneQ====tGPL-2yi-devel@googlegroups.com experimentalportableNoneQ> J K L>>> J K LuGPL-2yi-devel@googlegroups.com experimentalportableNoneQ????vGPL-2yi-devel@googlegroups.com experimentalportableNone+03QT MList of tags and the filelineSchar that they originate from. (the location that :tag or Ctrl-[ was called from). N:Returns tag, tag index, filepath, line number, char number OPush tag at index. PYGet tag and decrement index (so that when a new push is done, the current tag is popped)@Opens the file that contains tagA. Uses the global tag table or uses the first valid tag file in  TagsFileList.AGoes to the next tag. (:tnext)B-Return to location from before last tag jump.CLGo to next tag in the tag stack. Represents :tag without any specified tag. Q"Gets the first valid tags file in  TagsFileList, if such a valid file exists. RHandles paths of the form ./[path], which represents a tags file relative to the path of the current directory of a file rather than the directory of the process. SCall continuation actf with the TagTable. Uses the global table or, if it doesn't exist, uses the first valid tag file in  TagsFileList. M T U V N W X Y O P@ABCD Q R S Z [ \@ABCDD@ABC M T U V N W X Y O P@ABCD Q R S Z [ \wGPL-2yi-devel@googlegroups.com experimentalportableNoneQT! ] ^ _ `E a b c d e f g h i j k l m n o p q r s t u v w x y z { |EE ] _ ^ `E a b c d e f g h i j k l m n o p q r s t u v w x y z { |xGPL-2yi-devel@googlegroups.com experimentalportableNoneQF } ~  FFF } ~  yGPL-2yi-devel@googlegroups.com experimentalportableNoneQG GGG zGPL-2yi-devel@googlegroups.com experimentalportableNoneQH CDEFGHIJLMH LMJCDEFGHIHH{GPL-2yi-devel@googlegroups.com experimentalportableNoneQ TODO: verify whether   works fine here in place of split's  splitWhen+. If something breaks then you should use  splitWhen + 'T.pack'/'T.unpack'. I II I |GPL-2yi-devel@googlegroups.com experimentalportableNoneMQJKLMNOPQRST UV WvwxyJKLMNOPQRSTUVWSRTvwxyJKLMNOPQUVWJKLMNOPQRST UV W}GPL-2yi-devel@googlegroups.com experimentalportableNone+0BQX&The process name to use to spawn GHCi.Z"Command to run when spawning GHCi.[Args to pass to the process.]The process name defaults to ghci.`0Mode used for GHCi. Currently it just overrides ?6 key to go just before the prompt through the use of a.aThe GHCi prompt always begins with ">"; this goes to just before it, or if one is already at the start of the prompt, goes to the beginning of the line. (If at the beginning of the line, this pushes you forward to it.)bSpawns an interactive process (Yi.Mode.Interactive ) with GHCi ` over it.cHSetting this is a bit like '(setq haskell-program-name foo)' in emacs'  haskell-mode. XYZ[\]^_`abCommand to use. Process args. Reference to the spawned buffer.c XYZ[^_`ab XYZ[]\_^c`ab XYZ[\]^_`abc~GPL-2yi-devel@googlegroups.com experimentalportableNone+BQ OVariable storing the possibe buffer reference where GHCi is currently running.d,General template  for actual Haskell modes.It applies over (extensions = ["hs", "x", "hsc", "hsinc"]~ which may be a little questionable but for now Yi is mostly used by Haskell hackers so it should be fine, at least for now.eClever/ haskell mode, using the paren-matching syntax.hHExperimental Haskell mode, using a rather precise parser for the syntax. LReturns true if the token should be indented to look as "inside" the group. LHelper method for taking information needed for both Haskell auto-indenters: Start GHCi in a bufferiIReturn GHCi's buffer; create it if necessary. Show it in another window.jSend a command to GHCikLoad current buffer in GHCi' defgh ijkl mn defghijklmn dehgfijklmn%  defgh ijkl mn GPL-2yi-devel@googlegroups.com experimentalportableNoneQ$opqrstuvwxyz{|}~$opqrstuvwxyz{|}~$tuopqrsvwxyz{|}~ opqrstuvwxyz{|}~GPL-2yi-devel@googlegroups.com experimentalportableNone +023468BQT:Convert snippet description list into a SuperTab extensionD8I5 GPL-2yi-devel@googlegroups.com experimentalportableNoneQGPL-2yi-devel@googlegroups.com experimentalportableNone3QTurn a sequence of (from,style,to) strokes into a sequence of picture points (from,style), taking special care to ensure that the points are strictly increasing and introducing padding segments where neccessary. Precondition: Strokes are ordered and not overlapping.<Paint the given stroke-picture on top of an existing picture0Arrange a list of items in columns over maximum maxNumberOfLines lines(Arrange a list of items in columns over  numberOfLines lines.)TODO: proper Text/YiString implementation    None 3Q       GPL-2yi-devel@googlegroups.com experimentalportableNoneQZA TabDescr describes the properties of a UI tab independent of the particular GUI in use.GPL-2yi-devel@googlegroups.com experimentalportableNoneMQ Apply the attributes in sty and changes to cs$. If the attributes are not used, sty and changes are not evaluated.  Ground attribute..The height of the part of the window we are in-The width of the part of the window we are in7The number of spaces to represent a tab character with.The data to draw.     NoneQ List of published Actions QInput preprocessor: Transform Esc;Char into Meta-Char Useful for emacs lovers ;) 5Open an emacs-like scratch buffer if no file is open.        NoneQ "Argument parsing. Pretty standard.jConfiguration information which can be set in the command-line, but not in the user's configuration file. 2List of editors for which we provide an emulation.  usage string.  usage string.!Transform the config with options @Update the default configuration based on a command-line option.nStatic main. This is the front end to the statically linked application, and the real front end, in a sense.  dynamic_mainC calls this after setting preferences passed from the boot loader.                             GPL-2yi-devel@googlegroups.com experimentalportableNoneQ nOnce the custom yi is compiled this restores the editor state (if requested) then proceeds to run the editor. {If the custom yi compile produces errors or warnings then the messages are presented as a separate activity in the editor.gThe use of a separate activity prevents any other initial actions from immediately masking the output.Handy alias for .Used by both the yi executable and the custom yi that is built from the user's configuration. The yi executable uses a default config. CPP-guarded profiling params.  00  GPL-2yi-devel@googlegroups.com experimentalportableNoneHMQ"YStarts with the given initial config, makes the described modifications, then starts yi.JSets the frontend to the first frontend from the list which is installed.BAvailable frontends are a subset of: "vty", "pango", and "batch".&Sets the frontend, if it is available.yAdds the given key bindings to the `global keymap'. The bindings will override existing bindings in the case of a clash.modeBindKeys mode keys adds the keybindings in keys% to all modes with the same name as mode.As with , a mode by the given name must already be registered, or the function will have no effect, and issue a command-line warning.modeBindKeysByName name keys adds the keybindings in keys to all modes with name name( (if it is registered). Consider using  instead.NRegister the given mode. It will be preferred over any modes already defined.modifyMode mode f+ modifies all modes with the same name as mode, using the function f.Note that the mode argument is only used by its . In particular, a mode by the given name must already be registered, or this function will have no effect, and issue a command-line warning.  mode f =  ( mode) fmodifyModeByName name f modifies the mode with name name using the function f. Consider using  instead.  the font name, or  N for default.   the font size, or  N for default.!6Amount to move the buffer when using the scroll wheel."  the scroll style, or  N for default.#See k for documentation.$(Which side to display the scroll bar on.%Should the scroll bar autohide?&Should the tab bar autohide?'Should lines be wrapped?(oThe character with which to fill empty window space. Usually '~' for vi-like editors, ' ' for everything else.)UI colour theme.*_List of registered layout managers. When cycling through layouts, this list will be consulted.+2Produce a .yi.dbg file with debugging information?,bRun when the editor is started (this is run after all actions which have already been registered) List version of ,.-~Run after the startup actions have completed, or on reload (this is run after all actions which have already been registered) List version of -..;Actions to run when the editor is started. Consider using , or   instead./8Actions to run after startup or reload. Consider using - or   instead.0Default keymap to use.1?25List of modes by order of preference. Consider using , , or  instead.3Set to X6 for an emacs-like behaviour. Consider starting with , , or  to instead.4Set to  l for an emacs-like behaviour, where all deleted text is accumulated in a killring. Consider starting with , , or  instead.5?(  !"#$%&'()*+, - ./012345 & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 h i j k l m n o p q r s t u                 v          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G0123456789:;<=>?@ABCDEFGHIJKLMNnopqrstuvwxyz{|}~'()*+,-./0123456789:;<=>?@ABCDEFGHIJKVWXYZ[klmnoq !"#$%&'()456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0`abcdefghijklmnopqrstuvwxyz{|}~defghijklmn !"#$%&'()*+,-./0123451 !"')(#konml$%&'()*+,-./012345&  !"#$%&'()*+, - ./012345GPL-2yi-devel@googlegroups.com experimentalportableNoneQ H I J K L M & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 h i j k l m n o p q r s t u                 v          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G0123456789:;<=>?@ABCDEFGHIJKLMN*+,-./0123456789:;<=>?@ABCDEFGHIJKVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0`abcdefghijklmnopqrstuvwxyz{|}~ikmn N                                           !"#$%&'()*+,-./01234567899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-.-/0/123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!!!!!!!!!!""""""""""######################################################################################## # # # # # #################### #!#"###$#$#%#&#'#(#)#)#*#+#,#-#-#.#/#0#1#1#2#3#3#4#5#6#6#7#8#8#9#:#;###<#=#>#?#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_#`$a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z${%|%}%~%%%%%%     &&&& &!&"&#&$&%&&&''(')'*'+','-'.'/'0'1'2'3'4'5'6'7'8'9':';'<'='>'?'@'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'['\'](^(_(`(a(b(c)d)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))************+++,-----.................................. . . . . ................... .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3.4.5.6789:;<=>?@/A/A/B/C/D/E/F/F/G/H/I/J/K/L/M/N/O/P0Q0R0S1T1U1Q1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e1f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2{3|4}4~444444k44444444444556666666666666666666666666677778888888888888889999999999999999999999999999:::::::::::::::;;;;<< < < < < <<<<<<<<============ =!="=#>$?????S???@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@C@D@E@F@G@H@I@J@K@L@M@@N@O@P@P@Q@R@S@S@T@U@V@W@X@YAZA[A\A]A^A_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvCwDxDyDzD{D|D|D}D~DDDDDEEFFFFFGGGGGGGGGGHHHHHHHHHHHHHIJKKLLLLLLLLMMMMMMMMMMMMMNOOOOOOOOOOOOOOOOOOOOOOOOOOPPPQQQRSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTUUUUUUUVVWXXXXXXXYYYYY Y Y Y Y ZZZZZZZZZZZZZZZZZZZ Z!Z"Z#[$[%[&['[([)[*\+\,\-\.\/\0\1\2]3^4^5^6^7^8^9^:^;^<^=_>_>_?_@_A_B_%_C_D`EaFaGaHaIaJaKaLaaMaNaOaPaQaRaSaTaUaVaWaXbcdefghijklmnopqrstuvYvZv[v\v]w^x_yz`{a|b|b|c|d|e|f|g|h|i|j|k|l|m|n}o}o}p}q}r}s}t}u}}v}}w~x~y~~z~{~|~}~~~~~     || !"#$%&'()*+,-./01234566789: ; < = >?@ABCDEFGHIIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~         F_\}                                   ! " # $ % & ' ( )  * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a _ ` b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                  D                      ! ! ! ! ! !! ! ! _  % %                                                            ' !' "' # _  $' %' &' '' (' )' *' +' ,' -' .' /) 0) 1) 2) 3) 4) 5 6 7 6 8) 9) :) ;) <) =) >) ?) @) A) B) C) D) E* F* G* H* I* J* K L M* N* O* P Q R S T U   V  V W  X  Y  Z  Z [ \. ]. ^. _. `. a. b. c. d. e. f. g. h. i. j. k. l. m n o n p q r s/ t/ u/ u/ v/ w/ x/ y/ y/ z/ {/ |/ }/ ~/ / 1 1 1 1 1  5 5 5 5               7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; !; "; #; $; %; &; '; (; ); *; +; ,; -; .; /; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; :; ;; <; =; >; ?; @; A; B; C; D; E; F; G; H< I< J< J< K< L< M< N= O= P= Q= R= S= T= U= V= V= W= O= P= X= Y= Z= [= \= ]= ^= _= `> a> b> c> a> d> e?@ f@ g@ h@ i@ j@ k@ l@ m@ n@ o@ p@ q@ r@ s@ tA uA vA wA xE yG zG {G |G }G ~G G G G G G G H H H H I I I I I I I J J K L L L M M M M N N N N N N N N N N N N O  [ O O QQ U U U U U U U U U V V V V V V V V V V W W W Z Z ZYZ Z Z Z Z Z Z Z [ [ [ [ [ [ [ [ [ [ ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ ` ` ` ` ` ` ` ` ` ` ` a a a a a a a a aa a a a a a a a a a b b b b d g g k l l m m m m m p p q q q q q q q r r t t t v v v v v v v v v v !v "v #v $v %v &v 'w (w )w *w +w ,w -w .w /w 0w 1w 2w 3w 4w 5w 6w 7w 8w 9w :w ;w <w =w >w ?w @w Aw Bw Cw Dw Ew Fw Gx Hx x Ix Jx 0x :x Kx +x .x Lx 6x /x Mx Nx Ox Px Qx ,y Ry Sy Ty U{ V n{ { W{ { X{ Y{ Z{ [{ \{ { ]{ ^| _| `| a| b| c| d| e~ f~ g~ h~ i~ f~ j~ k~ l~ m~ n~ o~ p~ q~ r~ s~ t~ u~ v~ w~ x~ y~ z~ {~ |~ }~ ~~ ~                    6  [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [        yi-0.12.1Yi.MonadYi.IncrementalParseYi.Buffer.Misc Yi.Search Yi.CompletionYi.Char.UnicodeYi.Syntax.LayoutYi.Keymap.Vim.MatchResultYi.Keymap.Vim.DigraphYi.Keymap.CompletionYi.EventYi.UI.Vty.Conversions Yi.JumpList Yi.KillRingYi.Debug Yi.Layout Yi.Process Yi.Interact Yi.WindowYi.Tab Yi.StringYi.Syntax.TreeYi.Syntax.OnlineTreeYi.Syntax.DriverYi.Syntax.HaskellYi.Syntax.ParenYi.Syntax.Strokes.HaskellYi.Syntax.LatexYi.Syntax.JavaScriptYi.Verifier.JavaScriptYi.Config.Misc Yi.BufferYi.Buffer.Undo Yi.UI.CommonYi.TypesYi.Config.LensYi.PathsYi.Buffer.RegionYi.Buffer.TextUnitYi.Buffer.NormalYi.Buffer.HighLevelYi.Buffer.Indent Yi.Config Yi.UI.BatchYi.Config.Simple.Types Yi.EditorYi.TagYi.Search.Internal Yi.KeymapYi.Keymap.KeysYi.Boot.Internal Yi.IReaderYi.Hooks Yi.HistoryYi.PersistentStateYi.Core Yi.MiniBufferYi.MiscYi.DiredYi.FileYi.EvalYi.Command.HelpYi.Buffer.AdjustedYi.Keymap.Vim.CommonYi.Keymap.Vim.EventUtilsYi.Keymap.Vim.StateUtilsYi.Keymap.Vim.EvalYi.Keymap.Vim.Ex.TypesYi.Keymap.Vim.Ex.EvalYi.Keymap.Vim.StyledRegionYi.Keymap.Vim.MotionYi.Keymap.Vim.UtilsYi.Keymap.Vim.ReplaceMap"Yi.Keymap.Vim.ReplaceSingleCharMapYi.Keymap.Vim.SearchYi.Keymap.Vim.TextObjectYi.Keymap.Vim.Operator&Yi.Keymap.Vim.NormalOperatorPendingMapYi.ModesYi.Mode.IReader Yi.Mode.LatexYi.Mode.CompilationYi.Mode.Interactive Yi.CommandYi.Mode.AbellaYi.Mode.JavaScriptYi.Keymap.Vim.SearchMotionMap Yi.Hoogle Yi.RectangleYi.Keymap.Emacs.Utils Yi.Keymap.CuaYi.Keymap.Emacs.KillRingYi.Mode.BuffersYi.TextCompletionYi.Keymap.EmacsYi.Keymap.Vim.InsertMap Yi.Keymap.Vim.Ex.Commands.Common Yi.Keymap.Vim.Ex.Commands.Buffer&Yi.Keymap.Vim.Ex.Commands.BufferDelete!Yi.Keymap.Vim.Ex.Commands.BuffersYi.Keymap.Vim.Ex.Commands.Cabal Yi.Keymap.Vim.Ex.Commands.DeleteYi.Keymap.Vim.Ex.Commands.Edit"Yi.Keymap.Vim.Ex.Commands.GotoLineYi.Keymap.Vim.Ex.Commands.HelpYi.Keymap.Vim.Ex.Commands.MakeYi.Keymap.Vim.Ex.Commands.NohlYi.Keymap.Vim.Ex.Commands.PasteYi.Keymap.Vim.Ex.Commands.Quit Yi.Keymap.Vim.Ex.Commands.ReloadYi.Keymap.Vim.Ex.Commands.ShellYi.Keymap.Vim.Ex.Commands.Sort$Yi.Keymap.Vim.Ex.Commands.Substitute Yi.Keymap.Vim.Ex.Commands.GlobalYi.Keymap.Vim.Ex.Commands.UndoYi.Keymap.Vim.Ex.Commands.WriteYi.Keymap.Vim.Ex.Commands.YiYi.Keymap.Vim.TagYi.Keymap.Vim.NormalMapYi.Keymap.Vim.VisualMapYi.Keymap.Vim.Ex.Commands.TagYi.Keymap.Vim.ExYi.Keymap.Vim.ExMap Yi.Keymap.Vim Yi.Mode.GHCiYi.Mode.HaskellYi.Mode.Haskell.Dollarify Yi.SnippetsYi.Snippets.Haskell Yi.UI.UtilsYi.UI.SimpleLayout Yi.UI.TabBar Yi.UI.VtyYi.Config.DefaultYi.MainYi.BootYi.Config.SimpleParser.IncrementalData.DelayList Control.ExcSystem.CanonicalizePathTfilterSystem.FriendlyPathPaths_yiYi.Buffer.ImplementationIndentBehaviourMode modeAppliesYi mtl-2.2.1Control.Monad.State.Classgetsyi-language-0.2.0 Yi.Lexer.AlexstPosn lookedOffsetstLexer AlexStateYi.Regex SearchExp IgnoreCase NoNewLine QuoteRegex SearchOptionYi.Utils commonPrefixgreeksymbols checkAmbsdisamb subscripts superscriptsState layoutHandler MatchResult WholeMatch PartialMatchNoMatch$fShowMatchResult$fAlternativeMatchResult$fApplicativeMatchResultcharFromDigraph defDigraphsCompletionTreeCT listToTreestepTreeobvious mergeTreescompleteParserEnterYuckLooksymboleoftestNextlookNext recoverWithPscannerEventKeyKTabKEnterKRightKDownKLeftKMenuKUpKNP5 KPageDownKEndKDelKPageUpKHomeKInsKBSKASCIIKPauseKPrtScrKFunKEscModifierMHyperMSuperMMetaMCtrlMShift prettyEvent eventToChar fromVtyEvent fromVtyKey fromVtyMod colorToAttrJumpjumpMark jumpBufferRefJumpListaddJumpjumpBack jumpForwardKillring _krKilled _krContents krContentskrKilled krLastYankkrEmptykrEndCmdkrPutkrSetkrGet initDebugtraceerror logPutStrLnlogError logStreamtraceMtraceM_LayoutM Transposed Transposable transpose RectanglerectXrectY rectWidth rectHeightAnyLayoutManager LayoutManager pureLayoutdescribeLayout nextVariantpreviousVariant RelativeSizeDividerPosition DividerRef OrientationVertical HorizontalLayoutPairdivPosdivRefpairFstpairSndStack orientationwins SingleWindowdividerPositionAlayoutManagerSameTypetallwide slidyTall slidyWide hPairNStack vPairNStacklayoutToRectangles singleWindowpairstack evenStack runLayoutM getsAndModifywithwhenMmaybeM repeatUntilMSubprocessInfoprocCmdprocArgs procHandlehInhOuthErrbufRefseparateStdErr SubprocessIdrunProgCommand shellFileNamerunShellCommandcreateSubprocess readAvailable InteractStateRunningDeadWaiting AmbiguousChainEndI MonadInteractwrite eventBoundsadjustPriority deprioritize<||||> importantacceptedrunWriteprocessOneEvent computeStateoneOfanyEvent eventBetweeneventeventschoiceoption mkAutomaton idAutomatonWindowisMinibufkey bufAccessListheightwidth winRegionwkey actualLinesjumpList actualLinesAbufAccessListAbufkeyAheightAisMiniA jumpListAwidthA winRegionAwkeyAwinkey dummyWindow $fEqWindow $fShowWindow$fBinaryWindowTabtkey tabLayoutTabReftabFocustabMiniWindows tabWindowsAtabLayoutManagerAtabDividerPositionA mapWindowsforceTabtabFoldlmakeTabmakeTab1showTlistify commonTPrefixcommonTPrefix' capitalizecapitalizeFirstchomp dropSpaceisBlankfillTextoverInitoverTailunlines'lines'mapLinesonLinespadLeftpadRightIsTreesubtreesuniplate emptyNode toksAfterallToks tokAtOrBefore toksInRegiontokenBasedAnnotstokenBasedStrokesfromNodeToFinalfromLeafToLeafAfter getLastPathgetAllSubTreesgetFirstElementgetLastElementgetFirstOffset getLastOffset subtreeRegionsepBysepBy1TreeTipLeafBinmanyToksCachepath cachedStatesrootfocusedPath mkHighlighterunzipFM zipWithFMExpPInPLetDCTCPGuard'PGuardContextModidOptRHSPErrorerrorTokmarker commentListPWhereExprPAtomBlockParenPClasscKeywordcHeadcwherePData'dataConsPData dataKeyword dtypeConsdEqualdataRhsPType typeKeywordtypeConsequalbtypeTSPImport importKeywordqualname'as specification PModuleDecl moduleKeywordnameexports whereKeywordBodyimportscontent extraContentProgModmodDeclbodyPModulecommentsprogMod indentScannerparseErrorAtomisBrace ignoredTokenisNoisegetIndentingSubtreegetSubtreeSpanparse' getStrokes tokenToStroke modStroke tokenToAnnoterrTok $fIsTreeTreeTT tokenToStyle isSpecialisBeginisEnd isErrorTokKeyValue KeyValueErrArrayArrErrArrRestArrContExprErrPostExprExprArrExprCondOpExpr ExprFunCall ExprTypeOf ExprAnonFun ExprParen ExprSimpleExprNew ExprPrefixExprObj VarDecAssAssErrAssRstAssBegBlockErrBlockOne ForContentForErrForIn ForNormalParExpr ParExprErr ParametersParErr StatementCommWithElseIfForDoWhileWhileReturnVarDeclFunDecl SemicolonBListFailablestupid hasFailed Strokable toStrokesnormalonenError failStroker statementblockstmtExpropExpr expressionarray semicolon parametersparExprcommentpreOpinOppostOpopTok simpleTokstrToknumTokbooleanresspcoperplzTokplzSpcplzExprplzanythinghate fromBlockfirstTok errorTokenisErrortoTTfromTT$fStrokableArray$fStrokableTok$fStrokableKeyValue$fStrokableParExpr$fStrokableParameters$fStrokableExpr$fStrokableVarDecAss$fStrokableBlock$fStrokableForContent$fStrokableStatement$fFailableKeyValue$fFailableExpr$fFailableParExpr$fFailableParameters$fFailableVarDecAss$fFailableBlock$fFailableForContent$fIsTreeStatementReportWarnErrWarningUnreachableCodeMultipleFunctionDeclarationverifycheckMultipleFunscheckUnreachablettEqsayisReturn findFunctionsfunNamefunBodynameOf dropWhile'dupsBy $fShowReport $fShowWarning $fShowError ScrollStyle SingleLine SnapToCenter MarkValue markPoint markGravityUIUpdate StyleUpdate TextUpdateUpdateDelete_deleteUpdateStringInsert updatePointupdateDirection_insertUpdateStringOverlay overlayOwner overlayBegin overlayEnd overlayStyleoverlayAnnotation markGravityAA markPointAAupdateIsDelete mkOverlayURListChange AtomicChangeInteractivePointemptyU addChangeUsetSavedFilePointUundoUredoUisAtSavedFilePointUUImainendsuspendrefreshuserForceRefreshlayout reloadProjectdummyUI RegionStyle Exclusive InclusiveLineWiseConfig startFrontEndconfigUI startActionsinitialActions defaultKmconfigInputPreprocess modeTable debugModeconfigRegionStyleconfigKillringAccumulate%configCheckExternalChangesObsessivelybufferUpdateHandlerlayoutManagers configVars CursorStyleFatWhenFocusedAndInsertingFatWhenFocusedNeverFat AlwaysFatUIBootUIConfig configVtyconfigFontNameconfigFontSizeconfigScrollStyleconfigScrollWheelAmountconfigLeftSideScrollBarconfigAutoHideScrollBarconfigAutoHideTabBarconfigLineWrapconfigCursorStyleconfigWindowFill configTheme MonadEditoraskCfg withEditor withEditor_EditorM fromEditorMEditor bufferStackbuffers refSupplytabs_dynamic statusLinesmaxStatusHeightkillring currentRegexsearchDirection pendingEventsonCloseActionsStatusesStatus DecreaseOnly IncreaseOnly DecreaseCycle IncreaseCyclemodeNamemodeHL modePrettify modeKeymap modeIndentmodeAdjustBlock modeFollowmodeIndentSettingsmodeToggleCommentSelectionmodeGetStrokes modeOnLoad modeModeLinemodeGotoDeclarationAnyModeSelectionStylehighlightSelectionrectangleSelectionBufferId FileBuffer MemBuffer Attributesidentbkey__undos bufferDynamic preferCol preferVisColpendingUpdatesselectionStyle keymapProcesswinMarkslastActiveWindow lastSyncTimereadOnly insertingdirectoryContentpointFollowsWindowupdateTransactionInFlightupdateTransactionAccumfontsizeVariationencodingConverterNameMarkSetfromMarkinsMarkselMarkWinMarksFBufferbmoderawbuf attributesIndentSettings expandTabstabSize shiftWidthBufferM fromBufferM KeymapSet topKeymap insertKeymapYiMrunYiMYiVaryiEditoryiSubprocessIdSupplyyiSubprocessesyiUiyiInputyiOutputyiConfigyiVarIsRefreshNeededNoNeedToRefresh MustRefresh KeymapProcess KeymapEndoKeymapKeymapMInteractYiConfigVariable YiVariableActionBufferAEditorAYiA emptyActionunsafeWithEditorextractTopKeymap runEditor$fYiVariableRegionStyle$fDefaultRegionStyle$fBinaryRegionStyle$fMonadEditorEditorM$fBinarySelectionStyle$fBinaryBufferId$fBinaryAttributes$fBinaryMarkSet $fEqFBuffer$fApplicativeBufferM$fMonadEditorYiM$fMonadStateEditorYiM $fShowAction $fEqActionbufferUpdateHandlerA&configCheckExternalChangesObsessivelyAconfigInputPreprocessAconfigKillringAccumulateAconfigRegionStyleA configUIA configVarsA debugModeA defaultKmAinitialActionsAlayoutManagersA modeTableA startActionsAstartFrontEndAconfigAutoHideScrollBarAconfigAutoHideTabBarAconfigCursorStyleAconfigFontNameAconfigFontSizeAconfigLeftSideScrollBarAconfigLineWrapAconfigScrollStyleAconfigScrollWheelAmountA configThemeA configVtyAconfigWindowFillAconfigVariable getConfigDir getDataPath getConfigPathgetCustomConfigPathgetConfigFilenamegetConfigModulesgetArticleDbFilenamegetPersistentStateFilenamegetEvaluatorContextFilenamedirectoryContentAencodingConverterNameAfontsizeVariationAidentA insertingAkeymapProcessAlastActiveWindowA lastSyncTimeApendingUpdatesApointFollowsWindowA preferColA readOnlyAundosAshortIdentString identStringminiIdentString clearSyntaxfilehighlightSelectionArectangleSelectionAincreaseFontSizedecreaseFontSize getModeLine getPercent addOverlayBgetOverlaysOfOwnerB delOverlayBdelOverlaysOfOwnerBisPointInsideOverlay runBuffergetMarks runBufferFull getMarkValueBnewMarkB deleteMarkBrunBufferDummyWindow markSavedBbkeyisUnchangedBufferstartUpdateTransactionBcommitUpdateTransactionBundoBredoBretroactivelyAtSavePointBmodeAlwaysAppliesmodeNeverApplies emptyModenewBsizeBpointBnelemsBstreamBindexedStreamBstrokesRangesBmoveTo setInserting applyUpdaterevertPendingUpdatesBwriteBwriteNnewlineB insertNAtinsertNinsertB deleteNAtcurLn screenTopLn screenMidLn screenBotLn markLinesgotoLnsetMode0 setAnyModesetMode modifyModeonMode withMode0 withModeB withSyntaxB focusSyntax withSyntaxB' regexRegionBregexB modifyMarkB setMarkHereBsetNamedMarkHereBsetVisibleSelectiongetVisibleSelectionaskMarksgetMarkB mayGetMarkBmoveNleftBleftNrightBrightN lineMoveRelmovingToPrefColmovingToPrefVisCol moveToColBmoveToLineColBpointOfLineColBforgetPreferCol savingPrefCollineUplineDownelemsBbetweenBreadBreadAtB replaceCharBreplaceCharWithBelowBreplaceCharWithAboveBinsertCharWithBelowBinsertCharWithAboveBdeleteNindentSettingsBcurColcolOflineOf lineCountB solPointB eolPointB gotoLnFrom getBufferDyn putBufferDynsavingExcursionB markPointA savingPointBsavingPositionBpointAtpointAfterCursorBdestinationOfMoveB askWindowwithEveryLineB expandTabsA shiftWidthAtabSizeAmodeAdjustBlockA modeAppliesA modeFollowAmodeGetStrokesAmodeGotoDeclarationAmodeHLA modeIndentAmodeIndentSettingsA modeKeymapA modeModeLineA modeNameA modeOnLoadA modePrettifyAmodeToggleCommentSelectionA winRegionB deleteRegionB readRegionBreplaceRegionB mapRegionB swapRegionsB modifyRegionBinclusiveRegionBblockifyRegion joinLinesB concatLinesB BoundarySide OutsideBound InsideBoundTextUnitGenUnitgenEnclosingUnitgenUnitBoundaryDocumentVLineLine Character outsideUnitunitWord unitDelimited isWordChar checkPeekB unitViWord unitViWORDunitViWordAnyBndunitViWORDAnyBndunitViWordOnLineunitViWORDOnLineisAnySepunitSepunitSepThisLine atBoundaryBunitEmacsParagraph unitParagraph unitSentenceleftBoundaryUnitgenAtBoundaryB numberOfBwhileBuntilB doUntilB_untilB_ doIfCharBgenMoveB genMaybeMoveBmoveB maybeMoveB transposeB transformBdeleteBregionWithTwoMovesB regionOfBregionOfNonEmptyB regionOfPartBregionOfPartNonEmptyBregionOfPartNonEmptyAtB readPrevUnitB readUnitBhalfUnit deleteUnitBgetRegionStyleputRegionStyleconvertRegionToStyleBmkRegionOfStyleBunitWiseRegionextendRegionToBoundariesBufferFileInfobufInfoFileName bufInfoSize bufInfoLineNo bufInfoColNo bufInfoCharNobufInfoPercentbufInfoModified moveToMTB moveToSol moveToEoltopBbotB leftOnEol moveXorSol moveXorEol nextWordB prevWordBgotoCharacterBnextCIncnextCInLineIncnextCExcnextCInLineExcprevCIncprevCInLineIncprevCExcprevCInLineExcfirstNonSpaceB lastNonSpaceBmoveNonspaceOrSolisCurrentLineEmptyBisCurrentLineAllWhiteSpaceBnextNParagraphsprevNParagraphsatSolatEolatSofatEof atLastLine getLineAndColgetLineAndColOfPointreadLnBhasWhiteSpaceBeforereadCurrentWordB readPrevWordBbdeleteB killWordB bkillWordB bdeleteLineBdeleteHorizontalSpaceBuppercaseWordBlowercaseWordBcapitaliseWordBswitchCaseChar deleteToEolswapBdeleteTrailingSpaceBsetSelectionMarkPointBgetSelectionMarkPointBexchangePointAndMarkB getBookmarkBbufInfoB upScreensB downScreensB upScreenB downScreenBscrollScreensB vimScrollB vimScrollByBscrollToCursorBscrollCursorToTopBscrollCursorToBottomBscrollBscrollToLineAboveWindowBscrollToLineBelowWindowBsnapInsB snapScreenB downFromTosB upFromBosBmiddleBgetRawestSelectRegionBgetSelectRegionBsetSelectRegionBdeleteBlankLinesB lineStreamB getNextLineBgetNextNonBlankLineBmodifyExtendedSelectionBlinePrefixSelectionBunLineCommentSelectionBtoggleCommentBreplaceBufferContent fillParagraph sortLinessortLinesWithRegionrevertBshapeOfBlockRegionBleftEdgesOfRegionBrightEdgesOfRegionB'splitBlockRegionToContiguousSubRegionsBdeleteRegionWithStyleBreadRegionRopeWithStyleBinsertRopeWithStyleBflipRectangleBmovePercentageFileBfindMatchingPairBincrementNextNumberByB isNumberB test3CharBtestHexBlineMoveVisRelmarkWordtabB autoIndentB cycleIndentsB indentOfB indentToB modifyIndentBindentAsPreviousB indentAsNextB$indentAsTheMostIndentedNeighborLineBnewlineAndIndentBshiftIndentOfRegionBindentOfCurrentPosB configStyleconfigFundamentalModeconfigTopLevelKeymapstartFieldConfigM runConfigMcustomVariable emptyEditorbuffersA currentRegexA killringAmaxStatusHeightAonCloseActionsApendingEventsAsearchDirectionA statusLinesAwindowswindowsAtabsAaskConfigVariableAstringToNewBuffer deleteBuffer bufferSetcommonNamePrefixgetBufferStack findBufferfindBufferWithfindBufferWithNamegetBufferWithNamewithGivenBufferwithGivenBufferAndWindowwithCurrentBufferwithEveryBuffercurrentWindowA currentBufferprintMsg printMsgs printStatus setStatus clrStatus statusLinestatusLineInfosetRegEgetRegE getEditorDyn putEditorDyn newBufferEnewEmptyBufferEalternateBufferE newWindowEswitchToBufferEswitchToBufferWithNameE closeBufferEgetBufferWithNameOrCurrentcloseBufferAndWindowEnextWinEprevWinEswapWinWithFirstEpushWinToFirstE moveWinNextE moveWinPrevE withWindowEfindWindowWithwindowsOnBufferE focusWindowEsplitElayoutManagersNextElayoutManagersPreviousElayoutManagerNextVariantElayoutManagerPreviousVariantEsetDividerPosEnewTabEnextTabE previousTabEmoveTabE deleteTabE tryCloseE closeOtherEshiftOtherWindowwithOtherWindowacceptedInputsOtherWindow addJumpHereE addJumpAtE jumpBackE jumpForwardEnewTempBufferE mkIsPrefixOf prefixMatch infixMatchsubsequenceMatchcontainsMatch' containsMatchcontainsMatchCaseInsensitivecompleteInListcompleteInListCustomShowcompleteInList'TagTable tagFileName tagBaseDir tagFileMaptagTrieTag_unTag tagsFileListunTag' lookupTagimportTagTablehintTags completeTagsetTags resetTagsgetTags setRegexE resetRegexE getRegexEYiAction makeActionwithUI readEditor catchDynE catchJustE handleJustE insertKeymapA topKeymapAmodelessKeymapSet withModeY yiEditorAyiSubprocessIdSupplyAyiSubprocessesA yiConfigAyiInputA yiOutputAyiUiAyiVarA printableChartextCharpStringcharOfshiftctrlmetasuperhypercharctrlChmetaChhyperChoptModspec>>!>>=!?>>?>>!?*>>?*>>!reload ArticleDBADBunADBArticlesplitgetLatestArticle removeSetLast insertArticlewriteDBreadDBoldDbNewArticlesetDisplayedArticle nextArticledeleteAndNextArticlesaveAndNextArticlesaveAsNewArticle$fYiVariableArticleDB$fDefaultArticleDBHookTyperunHookHistory_historyCurrent_historyContents_historyPrefix HistoriesdynKeyA miniBuffer historyUp historyDown historyStarthistoryStartGen historyFinishhistoryFinishGen historyFind historyMovehistoryMoveGenhistoryPrefixSethistoryPrefixSet' setHistory$fYiVariableHistories$fBinaryHistory$fDefaultHistory$fDefaultHistories$fBinaryHistories SearchResult SearchWrappedPatternNotFound PatternFound SearchMatchdoSearch searchInitcontinueSearchsearchReplaceRegionBsearchReplaceSelectionB replaceStringsearchAndRepRegion0searchAndRepRegionsearchAndRepUnit isearchInitEisearchIsEmpty isearchAddEmakeSimpleSearch isearchDelEisearchHistory isearchPrevE isearchNextE isearchWordEisearchFinishEisearchCancelEisearchFinishWithEisearchCancelWithEqrNext qrReplaceAllqrFinish qrReplaceOnemaxHistoryEntriespersistentSearchsavePersistentStateloadPersistentState startEditor forkAction quitEditorfocusAllSyntax refreshEditor suspendEditorrunProcessWithInput runAction errorEditor closeWindowcloseWindowEmacsstartSubprocess sendToProcess withSyntaxCommandArgumentsFilePatternTagRegexTagToKill LineNumber:::DocfromDocdebugBufferContentpromptingForBuffer commentRegionspawnMinibufferEwithMinibuffer mkCompleteFnsimpleCompleteinfixComplete' infixCompletenoHintnoPossibilitieswithMinibufferFreewithMinibufferGenwithMinibufferFin anyModeNameanyModeByNameM anyModeByNamegetAllModeNamesmatchingBufferNamesgetAppropriateFiles getFoldermatchingFileNames placeMark selectAlladjBlock adjIndent promptFilepromptFileChangingHints matchFile completeFilecdpwd rot13CharprintFileInfoEeditFiledireddiredDirdiredDirBuffer preSaveHooksopeningNewFile openNewFilerevertEviWrite viWriteTo viSafeWriteTofwriteE fwriteBufferE fwriteToE fwriteAllYbackupE setFileName deservesSave EvaluatorexecEditorActionImplgetAllNamesInScopeImpldescribeNamedActionImplexecEditorActiongetAllNamesInScopedescribeNamedAction evaluatorpublishedActions publishActionpublishedActionsEvaluatorjumpToE jumpToErrorE consoleKeymapdisplayHelpFor OperatorNameOp_unOp EventStringEv_unEvunEv VimBinding VimBindingE VimBindingY RepeatTokenContinueDropFinishVimStatevsModevsCount vsAccumulatorvsTextObjectAccumulator vsRegisterMapvsActiveRegistervsRepeatableActionvsStringToEval vsStickyEolvsOngoingInsertEventsvsLastGotoCharCommandvsBindingAccumulatorvsSecondaryCursorsvsPastevsCurrentMacroRecordingGotoCharCommandVimModeSearch previousMode directionExVisual InsertVisual InsertNormalReplaceSingleCharReplaceNormalOperatorPendingNormalRegisterregRegionStyle regContentRepeatableActionraPreviousCountraActionString RegisterNameunOplookupBestMatch matchesString stringToEventeventToEventString parseEventsstringToRepeatableActionsplitCountedCommandnormalizeCount switchMode switchModeE modifyStateE resetCount resetCountEgetMaybeCountE getCountE setCountEaccumulateBindingEventEaccumulateEventEaccumulateTextObjectEventEflushAccumulatorEdropAccumulatorEdropBindingAccumulatorEdropTextObjectAccumulatorE getRegisterE setRegisterEnormalizeCountE maybeMult setStickyEolEupdateModeIndicatorEsaveInsertEventStringEresetActiveRegisterEscheduleActionStringForEval LineRangeCurrentLineRange FullRange MarkRange ExCommand cmdComplete cmdIsPure cmdActioncmdAcceptsRangecmdShowevStringToExCommand$fShowExCommandexEvalEexEvalY StyledRegionnormalizeRegiontransformCharactersInRegionBtransformCharactersInLineN CountedMoveMove moveStyle moveIsJump moveAction stringToMovechangeMoveStyle regionOfMoveBmkStringBindingEmkStringBindingY mkBindingE mkBindingYselectPureBinding selectBinding matchFromBooladdVimJumpHereEmkMotionBindingmkChooseRegisterBindingindentBlockRegionBpasteInclusiveBaddNewLineIfNecessary defReplaceMapdefReplaceSingleMap doVimSearchcontinueVimSearchCountedTextObject TextObjectchangeTextObjectCountregionOfTextObjectBchangeTextObjectStylestringToTextObject VimOperator operatorNameoperatorApplyToRegionE defOperatorsstringToOperatoroperatorApplyToTextObjectEopYankopDeleteopChangeopFormatmkCharTransformOperatorlastCharForOperatordefNormalOperatorPendingMapTokenBasedModefundamentalModelinearSyntaxMode styleModecModeobjectiveCModecppMode cabalMode clojureModesrmcMode gitCommitMode svnCommitMode ocamlModeperlModerubyMode pythonModejavaModejsonMode gnuMakeModeottModewhitespaceMode anyExtensionextensionOrContentsMatch hookModesapplyModeHooks lookupModeabstract ireaderMode ireadModefastMode latexMode2 latexMode3mode interactIdinteractHistoryMoveinteractHistoryFinishinteractHistoryStartgetInputRegiongetInputsetInput spawnProcessspawnProcessMode feedCommand queryReply CabalBuffer cabalBufferchangeBufferNameE shellCommandE shellCommandVcabalConfigureE configureExitreloadProjectEbuildRun makeBuildcabalRunmakeRun cabalBuildE makeBuildEshell searchSourcesgrepFind$fYiVariableCabalBufferabellaModeEmacs abellaEvalabellaEvalFromProofPoint abellaUndoabella abellaGet abellaSendjavaScriptModehooksdefSearchMotionMap caseSensitizegv hoogleRawhoogleFunctionshoogleFunModulehoogle hoogleSearch alignRegion alignRegionOn getRectangle multiSplit onRectangle openRectanglestringRectangle killRectangle yankRectangle UnivArgument askQuitEditor askSaveEditormodifiedQuitEditor isearchKeymap queryReplaceEexecuteExtendedCommandE evalRegionE insertNextCargToIntreadUniversalArgfindFilefindFileReadOnlyfindFileNewTab scrollDownE scrollUpE switchBufferE killBufferE justOneSep joinLinesE promptTagcountWordsRegioncustomizedCuaKeymapSetkeymapportableKeymapcutdelcopypaste killRegion killLineE killringPutkillRestOfLineyankE killRingSaveEyankPopEappendNextKillE listBuffersCompletionScopeFromAllBuffersFromCurrentBuffer resetCompletemkWordCompletewordCompleteString'wordCompleteString wordComplete' wordComplete completeWordBModeMap_eKeymap_completionCaseSensitivecompletionCaseSensitiveeKeymapmkKeymap defKeymap defInsertMapTextOptionAction TextOptionAsk TextOptionSetBoolOptionAction BoolOptionAskBoolOptionInvert BoolOptionSetparseWithBangAndCount parseWithBang parseRangeparseBoolOptionparseTextOptionfilenameComplete forAllBuffers pureExCommandimpureExCommand errorNoWrite commandArgs needsSavinggotoTagnextTagpopTagunpopTagcompleteVimTag defNormalMap defVisualMapdefExCommandParsersdefExMap VimConfig vimKeymap vimBindings vimOperatorsvimExCommandParsers vimDigraphs vimRelayout mkKeymapSet keymapSet defVimConfigpureEval impureEvalrelayoutFromToGhciProcessName_ghciProcessName_ghciProcessArgs$fBinaryGhciProcessName$fDefaultGhciProcessNameghciProcessArgsghciProcessNamehomeKey$fYiVariableGhciProcessNamehaskellAbstract cleverMode literateMode preciseModeghciGetghciSendghciLoadBuffer ghciInferTypeghciSetProcessNameghciSetProcessArgs QueuedUpdate qUpdatePointqInsertqDelete dollarifydollarifyWithinrunQ openParen closeParen isNormalParenisTuple queueDeletequeueReplaceWith stripComments dollarifyTop dollarifyExprisSimple isCollapsible selectedTreefindLargestWithinwithinsafeLast dollarifyPdollarifyWithinPisNormalParenPisTuplePstripCommentsP dollarifyTopPdollarifyExprP isSimplePisCollapsibleP selectedTreePfindLargestWithinPwithinP safeLastP SupertabExtSupertab MkSnippetCmd mkSnippetCmdDependentMarksmarks BufferMarks bufferMarksMarkInfoDependentMarkInfoValuedMarkInfoendMarkSimpleMarkInfo userIndex startMark SnippetMark DependentMark ValuedMark SimpleMark SnippetCmdcursor cursorWithdepisDependentMark bufferMarkersmkMarktext&&> runSnippetupdateUpdatedMarksfindEditedMarksdependentSiblingsupdateDependentsupdateDependents'markText setMarkTextwithSimpleRegion markRegionsafeMarkRegion adjMarkRegionfindOverlappingMarksWithfindOverlappingMarksregionsOverlappingMarksoverlappingMarksallOverlappingMarksdependentOverlappingMarksnextBufferMarkisDependentMarkersafeDeleteMarkBmoveToNextBufferMarksuperTab fromSnippetssnippet$fMonoidSupertabExt$fMkSnippetCmdSnippetMark()$fMkSnippetCmdRWSTa$fMkSnippetCmdText()$fMkSnippetCmdYiString()$fMkSnippetCmd[]() $fOrdMarkInfo$fYiVariableDependentMarks$fYiVariableBufferMarks$fDefaultDependentMarks$fDefaultBufferMarks$fBinaryMarkInfo hsFunctionhsClass applyHeights spliceAnnots strokePicture paintStrokes paintPictureattributesPictureBattributesPictureAndSelB arrangeItems arrangeItems'Size2D sizeWidth sizeHeightPoint2DpointColpointRowRectoffsetXoffsetYsizeXsizeY tabbarRect windowRects promptRectcoordsOfCharacterBverticalOffsetsForWindows TabBarDescrTabDescrtabText tabInFocus tabBarDescrtabAbbrevTitleavailableFrontends defaultConfigdefaultEmacsConfigdefaultVimConfigdefaultCuaConfigtoEmacsStyleConfigtoVimStyleConfigtoCuaStyleConfig ConsoleConfig ghcOptions selfCheck userConfigDirdo_argsyiyiDriverSide RightSideLeftSide configMainsetFrontendPreferences setFrontendglobalBindKeys modeBindKeysmodeBindKeysByNameaddModemodifyModeByNamefontNamefontSizescrollWheelAmount scrollStyle cursorStyle scrollBarSideautoHideScrollBarautoHideTabBarlineWrap windowFillthemedebug runOnStartuprunAfterStartupinputPreprocessmodes regionStylekillringAccumulate greekData zipscriptsIState BlockOpenIndentisParenmaxPosnshow' compareBy mergeTrees'$fShowCompletionTreeStepsbetterevalR'iBestfeedpushSymspushEof mkProcessrunProcessZipRPolishRStopRAppRPushLogEntryLSLSuspLFailLDoneLShiftLDislikeLEmptyLLogProfile:>PResPFailPSuspFailLogDislikeBestSusSh'ShiftDoneAppValDisjEmptShifBindApplPure:<top_restmapSuccdislikeThreshold+>rightLogprofile countWidthapplytoQtoPfeedZevalLevalL'evalRPsimplifyevalRfullLogonRight $fShowZip $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fShowRPolish $fShowSteps remapChar ctrlLowcasesetMetametaBit $fShowEvent $fOrdEventmodifyJumpList $fShowJump $fBinaryJumppush _krAccumulate _krLastYank$fBinaryKillring krAccumulatemaxDepth dbgHandlelogStreamThread-? DelayListinsertdecreaseignoringExceptionprintingException orException normalisePathcanonicalizePath expandSym makeAbsolute combinePath splitPathbaseGHC.ListelemreplaceShorthandsuserToCanonPath expandTilda isAbsolute' HPairNStack SlidyWide SlidyTallWideTallGHC.Baseid$fDefaultAnyLayoutManager$fDefaultLayout VPairNStack splitList handleStack$fLayoutManagerTransposed$fTransposableLayout$fTransposableOrientation$fLayoutManagerVPairNStack$fLayoutManagerHPairNStack$fLayoutManagerSlidyWide$fLayoutManagerSlidyTall$fLayoutManagerWide$fLayoutManagerTall$fLayoutManagerAnyLayoutManager$fEqAnyLayoutManager $fShowLayoutcatchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameshellCommandSwitch readChunk pushEvent findWritesPriorWriteGetPlusPriorityWritesFailsGetsBindsReturns pullWrites$fShowP$fMonoidInteractState$fMonadInteractIwevent $fMonadPlusI$fMonadI$fAlternativeI$fApplicativeI $fFunctorI$fMonadInteractStateTwe tabWindowstabLayoutManager buildLayout$fEqTab relayoutIfrelayout $fShowTab $fBinaryTabGHC.Showshow text-1.2.1.3Data.Text.InternalText Text.Readreadyi-rope-0.7.0.1Yi.Ropeinitlasttailhead Data.ListunlineslinespruneNodesBefore firstThatlastThatfromLeafAfterToFinalallLeavesRelative'nodesAndChildIndexallLeavesRelativeChild allLeavesIn getAllPathsNTTTNTestEmptyNodeallLeavesRelative nodesOnPath beforeChild afterChildgoDownindexwalkDownwkDown nullSubtree getFirstTok getLastTok nodeRegiontAtarbitraryFromList arbitraryPath regionInside pointInsideprop_fromLeafAfterToFinalprop_allLeavesAfterprop_allLeavesBeforeprop_fromNodeToLeafAfterprop_fromNodeToFinal$fArbitraryNTTT$fArbitraryTest $fIsTreeTest manyToks'subTreepModulepModBodypEmptyBLpBodypVarIdpQvaridpQvarsym isOperatorpQtyconpVarsnextLine startBlockendBlocksymexactpleasepErrppConspKWpOP pCommentspOptpAtomppAtompCAtompSepBy pParenSeppComma pModuleDeclpTestTokpImportspImportpTypepDatapDataRHS pDerivingpForAllstrictFpEModulepLetpDopLambdapOfpClasspGuardpFunRHSpEqpManypBlocks.pBlocks'pBlockOf pBlockOf'ghc-prim GHC.Classes<>pTopDeclpExpr'pExprpExprOrPatternpElem isNoiseErr isNotNoiserecognizedSymbolspCParenpCBracepCBrack noImportspEmptypToList recoverAtom pBareAtompExportpGadtpAtypepAtype' pTypeConspContextpConstrspConstr pAlternativepWherepDeclpFunDecl pTypeDeclpBlockrecognizedSometimespPattern pExprElem pTypeExpr pTypeExpr' pTypeElemrecoverableSymbolspParenpBrackpEBrace $fIsTreeExp getStrokeMod getStrokeImpgetStrtspStyle paintAtomisErrisErrNerrStylecomtk'tkTConsttkDConsttkImporttokFromTtokT dropWhilememhlCacheoverlays dirtyOffsetnewBI insertChars deleteCharsshiftMarkValuesizeBInelemsBIgetIndexedStream overlayUpdate addOverlayBI delOverlayBIstrokesRangesBI isValidUpdate applyUpdateIreverseUpdateIlineAtsolPoint eolPoint' solPoint' regexRegionBI modifyMarkBIgetMarkDefaultPosBI BufferImpl FBufferData markNamesHLStateMarks dummyHlState updateString updateSize mapOvlMarks getStreamdelOverlaysOfOwnerBIgetOverlaysOfOwnerBIcharsFromSolBI newMarkBIgetMarkValueBIdeleteMarkValueBI getMarkBI setSyntaxBI touchSyntax updateSyntaxgetAstfocusAst$fBinaryUIUpdate$fBinaryUpdate$fBinaryBufferImpl $fOrdOverlay $fEqOverlay$fBinaryMarkValueYi.Buffer.BasicBackwardForward DirectionMarkPointSizeundoInteractiveremIPaddIPundoUntilInteractiveasRedoSavedFilePoint$fBinaryURList$fBinaryChange GHC.TypesTrueappUserDataCondconst2YiString singleton screenLines curVisColcolMove $fBinaryMode HasAttributes attributesAbkey__AbufferDynamicA preferVisColAselectionStyleAupdateTransactionAccumAupdateTransactionInFlightA winMarksA queryRawbuf modifyRawbufqueryAndModifyRawbufdefaultModeLine queryBuffer modifyBufferqueryAndModify getMarksRawgetMarkValueRawundoRedoepochcheckRO modifyMode0 withSyntax0 modifyMarkRaw getInsMark moveToVisColBreplaceCharWithVerticalOffsetmaybeCharBelowBmaybeCharAboveBmaybeCharWithVerticalOffset$fBinaryFBuffer $fShowFBuffer$fHasAttributesFBuffer$fHasAttributesAttributes Yi.RegionregionsOverlap regionIsEmptyincludedRegion nearRegioninRegion emptyRegion mkSizeRegion mkRegion'mkRegion unionRegionintersectRegion regionSize fmapRegion regionLast regionFirst regionEnd regionStartregionDirectionRegion genBoundaryisEndOfSentencechecksFalsefirstTwo atBoundarydoUntilBisNlatViWordBoundaryatAnyViWordBoundaryatViWordBoundaryOnLineviWordCharTypeviWORDCharType atSepBoundary enclosingUnitreadPreviousOfLnB prevPointBindexOfSolAbovepointScreenRelPositiongetRawSelectRegionBgetMaybeNextLineB Data.MaybeNothingMaybegetNextLineWhichBtoggleCommentSelectionB fillRegionmodifyExtendedLRegion increment RelPositionWithinBelowAbove goUnmatchedBpointInWindowBlineMoveVisRelUplineMoveVisRelDownautoIndentHelperBfetchPreviousIndentsBlastOpenBracketHint spacingOfB rePadString countIndent GHC.UnicodeisSpace indentStringmakeIndentStringindentAsNeighborLineBString directionElim mayReverse reverseDirmarkId BufferRef fromPointfromSize unWindowRef WindowRefYi.Style defaultStylenewZeroSizeWindowfixCurrentBufferA_ withLMStackE$fBinaryEditor bufferStackAdynamicA refSupplyAtabs_A currentTabAnewRef newBufRef insertBuffer forceFold1 forceFoldTabs setTmpStatusacceptedInputsmodifyJumpListE Data.Text isPrefixOf toCaseFold bestMatch filterMatches isSingleton readCTags TagsFileList_unTagsFileList$fYiConfigVariableTagsFileList$fDefaultTagsFileListTagsunTagsFileList$fBinaryTagsFileList$fBinaryTagTable $fBinaryTags $fBinaryTag$fYiVariableTags $fDefaultTags$fYiActionAction()$fYiActionBufferMx$fYiActionEditorMx$fYiActionYiMx $fYiActionIOxbytestring-0.10.4.0Data.ByteString.Internal ByteString runHookImpl$fHookType(->) $fHookTypeYiM$fHookTypeEditorMisearchEndWith isearchEndqrReplaceCurrentIsearchmap3 makeISearch isearchFunE isearchNext0 isearchNextiSearch$fYiVariableIsearch$fDefaultIsearch$fBinaryIsearch trimHistoriesreadPersistentStateMaxHistoryEntries_unMaxHistoryEntriesPersistentState histories aKillring aCurrentRegex#$fYiConfigVariableMaxHistoryEntries$fDefaultMaxHistoryEntries$fBinaryPersistentStatePersistentSearch_unPersistentSearchunMaxHistoryEntries"$fYiConfigVariablePersistentSearch$fDefaultPersistentSearchunPersistentSearch interactive showErrorsdispatchcheckFileChangesclearAllSyntaxAndHideSelection msgEditorterminateSubprocessesappendToBufferstartSubprocessWatchers recoverMode postActionsshowEvsonYiVarremoveSubprocess pipeToBuffer waitForExit typeGetPromptcompletionFunctionDocType PromptablegetPromptedValue getPrompt getMinibufferdebugBufferContentUsingdoPromptgetPromptedValueListgetMinibufferListenumAll textUnits$fPromptableCommandArguments$fDocTypeFilePatternTag$fDocTypeRegexTag$fDocTypeToKill$fDocTypeLineNumber$fPromptable::: $fShow:::$fYiAction(->)x$fPromptableBufferRef$fPromptableAnyMode$fPromptablePoint$fPromptableTextUnit$fPromptableDirection$fPromptableYiString$fPromptableText$fPromptableInt$fPromptableChar$fPromptable[] findFileHintonCharLetterCode_diredOpSucCnt_diredOpForAll diredPath diredMarks diredEntriesdiredFilePoints diredNameCol diredCurrFile DiredEntries DiredEntry DiredFilePathDiredOpDONoOp DOFeedbackDOChoiceDOInput DOCkOverwriteDOCheck DOConfirmDORemoveBuffer procDiredOp askDelFiles diredRefreshinsertDiredLinelinesToDisplay diredScanDir scanForUid scanForGid diredMarkKind deleteKeys diredUnmarkaskRenameFiles askCopyFiles fileFromPoint DiredOpState$fYiVariableDiredOpState$fBinaryDiredOpState$fDefaultDiredOpState DiredState DiredNoInfoDiredNamedPipeDiredCharacterDeviceDiredBlockDevice DiredSocket DiredSymLinkDiredDir DiredFile DiredFileInfo permStringnumLinksownergrp sizeInBytesmodificationTimeString diredOpForAll diredOpSucCntDORename DOCopyDir DOCopyFile DORemoveDir DORemoveFile DRStringsDRFilesDRDatesDRSizesDRGroupsDROwnersDRLinksDRPermsundrsdiredCurrFileA diredEntriesAdiredFilePointsA diredMarksA diredNameColA diredPathAbypassReadOnly filenameColOfresetDiredOpStateincDiredOpSucCntgetDiredOpStatemodDiredOpState diredDoDeldiredDoMarkedDel diredKeymap modeStringshortCalendarTimeToString diredMark diredMarkDeldiredMarkSymlinksdiredMarkDirectoriesdiredToggleAllMarksdiredMarkWithChardiredRefreshMarkdiredUnmarkPathdiredUnmarkAll currentDir diredRename diredCopy diredLoadnoFileAtThisLine markedFiles diredUpDirdiredCreateDir$fBinaryDiredFileInfo$fBinaryDiredEntry$fYiVariableDiredState$fDefaultDiredState$fBinaryDiredState isFileBuffer PreSaveHooks_unPreSaveHooks$fYiConfigVariablePreSaveHooks$fDefaultPreSaveHooksunPreSaveHooks HelpCache NamesCache errorRegexparseErrorMessageparseErrorMessageB takeCommandpromptPublishedActions_publishedActions$fDefaultPublishedActions$fYiVariableHelpCache$fDefaultHelpCache$fYiVariableNamesCache$fDefaultNamesCache_publishedActionsA$fYiConfigVariableEvaluator$fDefaultEvaluator"$fYiConfigVariablePublishedActions HelpBufferhelpFordisplayHelpBuffer helpBuffer$fYiVariableHelpBuffer$fBinaryOperatorName$fBinaryEventString$fMonoidOperatorName$fMonoidEventString$fIsStringOperatorName$fIsStringEventString MacroName$fYiVariableVimState$fBinaryVimState$fDefaultVimState$fBinaryVimMode$fDefaultVimMode$fBinaryGotoCharCommand$fBinaryRegister$fBinaryRepeatableActionspecMap invSpecMapspecListstringToEvent' evalHelper lookupMovelinewiseMotionsexclusiveMotionsinclusiveMotionsrepeatregionOfMoveB' moveForwardB moveBackwardB gotoXOrEOFwithDefaultCountmatchGotoMarkMovematchGotoCharMove combineActionsetUnjumpMarks addVimJumpAtEtrailingNewlinespecialsexitReplaceMode printableprintableActioninsertOrReplaceBinsertOrReplaceCharWithBelowBinsertOrReplaceCharWithAboveB escBindingactualReplaceBinding regionFirst'textObjectRegionB'parseTextObjecttoOuter formatRegionBformatStringWithIndent getNextLinemkShiftOperator JustOperator parseCommandOperandParseResult NoOperandPartialOperandJustMoveJustTextObject textObjectregionForOperatorLineB parseOperandsplitCountModifierCommandlinearSyntaxMode'Lexer StyleName commonLexerextensionMatchesStyleBasedMode latexLexer AbellaBuffer _abellaBuffer abellaModeGengetProofPointMarkgetTheoremPointMark abellaNext abellaAbort$fYiVariableAbellaBuffer jsCompile getJSBuffer mkJSBufferjsErrorsJSBufferjavaScriptAbstractjsSimpleIndentjsLexer$fYiVariableJSBuffer enterBinding editBinding exitBinding findFileAndDo maybeList visitTagTablegetModifiedBuffersaskIndividualSaveselfSearchKeymap searchKeymapdigitttmaybeTagselfInsertKeymapsetMark unsetMark replaceSel deleteSelmoveKeysmoveselectrectother bufferKeymapswitch CompletionveryQuickCompleteWordwordsAndCurrentWordwordsForCompletionInBufferwordsForCompletionwords' charClass$fYiVariableCompletion$fDefaultCompletion$fBinaryCompletionmoveE completionKmdeleteB' emacsKeys rawPrintablereplayoneshotNormalBindingpasteRegisterBindingdigraphBindingcompletionBinding cursorBindingparseSinglePoint2parseSingleMark parseNormMark parseSelMarkparseEndOfLineparseLinePointparseCurrentLinePointparseNormalLinePoint commandArgnormArgquoteArg escapeChar parseBang parseCountparseFullRangeparsePointRangeparseSinglePoint removePwd nameParserswitchToBuffer switchByName switchByRef printBufferseditshowEditnohlactionmodPastequit quitWindowEquitAllEsaveAndQuitAllEsortsortAsubstituteConfirm findMatches lineRegions offsetRegionsubstituteMatch askKeymap substituteglobal allowedCmdswriteCmd writeAsCmdtryWriteBuffer VimTagStack getTagList pushTagStack popTagStacktagsFiletagsFileLocation tagStackList tagStackIndex getTagIndex setTagList setTagIndex$fBinaryVimTagStack$fYiVariableVimTagStack$fDefaultVimTagStack EOLStickiness NonStickyStickymkDigitBindingtagJumpBinding tagPopBinding motionBindingchooseRegisterBinding zeroBinding repeatBinding jumpBindingsfinishingBingings pasteBefore pasteAfteroperatorBindingscontinuingBindingsnonrepeatableBindingsfileEditBindingssetMarkBinding searchWordE searchBindingcontinueSearchingrepeatGotoCharE enableVisualEcutCharEtabTraversalBindingopenFileUnderCursorrecordMacroBindingfinishRecordingMacroBindingplayMacroBinding withCountwithCountOnBuffer escAction exBinding digitBindingschangeVisualStyleBindingregionOfSelectionB shiftDBindingmkOperatorBindingreplaceBindingswitchEdgeBinding insertBindingparseTag parseNexttagnextdropToLastWordOfexitExfinishBindingYfinishBindingE finishPrereq finishAction failBindingEhistoryBinding editAction defVimKeymappureHandleEventimpureHandleEventgenericHandleEventperformEvalIfNecessaryallPureBindings convertEvent GhciBuffer insideGroup indentInfoBghci _ghciBufferCharToTTScannerstrokesOfParenTree mkParenModeHL mkHaskModeHLmkOnlineModeHL haskellLexerliterateHaskellLexer adjustBlockcleverAutoIndentHaskellBcleverAutoIndentHaskellCcolOf'tokCol nominalIndenttokText tokRegion isLineComment contiguouscoalescecleverPrettifytokTypghciInferTypeOf$fYiVariableGhciBuffer layoutWindowlastVisiblePointAndWrapCountBscanrT paintChars FrontendStatefsVtyfsConfig fsEndMainfsEndInputLoopfsEndRenderLoopfsDirty fsEditorRefRenderedpicturerequestRefresh renderWindowwithAttributesattributesToAttrstysdrawText renderTabBardefaultPublishedActions escToMetaopenScratchBuffer nilKeymapOptseditorsusageversinfo getConfig OpenInTabsDebug GhcOption SelfCheck ConfigFileFrontendFileEditorNmLineNoVersionHelp frontendNamesdefaultConsoleConfigoptionsopenInTabsShortopenInTabsLong $fErrorErrrealMainshowErrorsInConfprofilingParamsJustrunManyOnStartuprunManyAfterStartupwarnisModeRegisteredensureModeRegisteredYi.Style.Library darkBlueTheme defaultThemeTheme brightwhitewhitecyandarkcyanmagentapurplebluedarkblueyellowbrowngreen darkgreenreddarkred lightGreygreyblack colorToText withReverse withUnderlinewithItlcwithBdwithBgwithFgemptyAttributes underlineitalicbold reverseAttr background foregroundStylemakeFileRuleHeadmakeFileAction quoteStyle operatorStyle variableStyle regexStyle builtinStyle importStyledataConstructorStyle typeStylelongStringStyle stringStylepreprocessorStyle numberStyle keywordStyleblockCommentStyle commentStylestrongHintStyle hintStyle errorStyleeofStyle selectedStylebaseAttributestabNotFocusedStyletabInFocusStyletabBarAttributesmodelineFocusStylemodelineAttributesUIStyleRGBDefaultColoroo-prototypes-0.1.0.0Data.Prototype.->override extractValue fromProtoProto